MFM DIP Board Testing (last update 5/17/2015, termination)

This is the status of testing the DIP version of the MFM hard disk reader and emulator PCB. The peer review did not find all the errors.

Bare board (click pictures for larger version)

Assembled board and cable for testing drive activity LEDs. A couple parts such as J7 are parts I had around and not what is called for in the parts list. A couple chips are also socketed for my testing.


One cut and jumper is required if holdup capacitors are used, see PCB Errors and PCB Rework sections. If J7 is installed use a shrouded keyed connector. If using in a full height drive bay use 10F for C1-C5, otherwise see Holdup capacitor selection to choose capacitors. Use Murata OKR-T/1.5 DC/DC converter. An additional chip may need to be added. See Board won't restart if capacitors haven't discharged before power returns to determine which solution you desire. The rest of the information is excessive detail on testing.

Information on building and testing board

PCB Errors

All the PCB errors will be corrected for the surface mount version.

Trace wrong connecting R16 to AGND

The voltage monitor resistor R16 is connected to P9-32. It should be connected to P9-34. If R16 is not installed this error doesn't need to be corrected. Otherwise cut the trace between R16 and P9-32 and add a jumper wire between R16 and P9-34. When you install the BeagleBone black (BBB) ohm out between the side of R16 that is furthest from the edge connectors and verify it is connected to ground P5. If this resistor is not properly grounded the BBB may be damaged.

Silkscreen wrong on J7

The pin 1 and pin 20 marking are on the wrong sides of the connector. Pin 1 is marked on pin 19 side and pin 20 on pin 2 side of the connector. It is recommended the incorrect silk screen marking be obscured or corrected.

Board won't restart if capacitors haven't discharged before power returns

I have software that monitors the input power and shuts down the processor when power is lost. Power is provided by a capacitor bank. If the processor powers down or halts, but the capacitors haven't discharged enough to power down the BBB, when power returns the BBB will stay powered off/halted.

There are three options to deal with this problem:

1) Don't power down for short times. If you power up your computer and only power it off when you are done then this will not affect you. If you power off for short times to reset the computer after crashes or need it to come back after AC line dropouts then you need one of the later options. The time to start shutting down the BBB is configurable so if you are using the 10F capacitors you can delay shutdown for several seconds to allow short power cycles to reset the computer without shutting down the BBB.

With the 10F capacitors and halting the processor instead of powering it down, it takes about 40 seconds until the power drops low enough that the board will restart when power is reapplied.

2) Add a chip to generate the power button signal to power the board back on. This pulls the power button signal low if the input 12V is present when 3.3V is not.

3) Use a battery on the BBB instead of the capacitors. I haven't tried this solution and it requires modification of the BBB so may not be a good choice. Also the terminating resistors RN1, RN2 would need to be changed to 130 or 150 ohms powered by 3.3V to prevent the possibility of unintended writes when power is lost. The battery will not provide power to the terminating resistors so all the control signals will look like they go active.

Here is the change I will use for reworking the existing boards, implementing the second option. Most of the reworked boards also have pins 3 and 6 grounded since it was quicker to solder all the pins on that side of the chip to the ground wire.

This is the change I will use for the surface mount board. I had bought the HC03's before I switched to the ACT05's and noted they could be used to avoid needing another part type.

PCB Rework

This is the rework I did to the bare PCB. The rework is marked by numbered arrows. The two incorrect silk screen legends on the front are obscured by over-coating with a solder mask pen and a white blob added to mark pin one end. The trace on the back has been cut and covered with the solder mask pen. I can do reworks 1-4 before I send out the boards. You will have to solder wire that is present for 4B and add the jumper wire for 5 when you build the board.

Things that could have been improved

Installing J7 cable backward may damage the board.

With power and ground on the two outer pins of J7 if the cable is plugged into J7 backward and both power and ground pins are used the two ground pins in the cable will short +5 to +3.3 volts. This will likely destroy the BBB. It will also likely damage whatever is connected to J7. The recommended solution is to use a center polarized shrouded header for J7 and polarized cable connector that will prevent mismating.

The pin-out will be changed for the surface mount version.

MAX3079E is a little slow

The MAX3079E is a little slower than desirable. The MFM data is equivalent to a 20 Mbps rating of the transceiver. This part is rated at 16 Mbps. It reduces the 40ns pulses from the controller I was testing with to 30ns. The design is only sensitive to rising edge timing so the pulse shortening isn't a significant issue, as it does not seem to introduce significant data pattern edge jitter.

For the surface mount boards I will switch this part to surface mount. That will give the option of using a faster part such as Linear LTC2852 or TI SN65HVD33, both rated at least 20 Mbps. It also gives other sources if the Maxim part has a long lead time. These parts are also slightly cheaper than the DIP part.

MAX3079E output switching disturbs its 3.3V

The .8 inches of power/ground trace is enough that the switching transients are significant at U4 and U13. This does not seem to cause any issues or add any jitter to the received signal. First scope photo shows about 600 mV of power noise. This is with standard passive probe with 6" ground lead so may be somewhat different than actual noise. The second shows the positive RS-422 input to the output. This shows that jitter isn't introduced by varying delay between pulses or the output signal.

I also tested with a DIP capacitor which greatly reduced the noise. It did not significantly change the output signal.

The transmit signal was left on when receiving so the output signals wouldn't be floating. One of the controllers I was working with turns off its write data lines when write is not active so floating lines may not be an issue. The outputs can be turned off by cutting the trace to pin 4 and then jumpering pin 3 to the output enable pin 4.

The shorter trace length for the surface mount part will reduce the power noise. I will investigate the enable change more before deciding if I change this for the surface mount board.

LDO03C undesired behaviors

During testing I noticed a couple times that the LDO03C output had significant ripple and overshot to 5.5V before settling down during the turn-on transient. This happens if the input voltage has a slow rise time. This is without C6-C9.

Also when input power goes away the slow discharge of the capacitors can cause it to keep turning on and off then turn back on with decaying output voltage. The BBB will shut off during the oscillating power but will power back up during the decaying power until it goes too low. I think this data was with a resistor from enable to ground which made the behavior worse. Other configurations the oscillation was only for a couple seconds.

The enable pin can be used to disable start up until the input voltage is at a particular value. If a pull-up to 5V is used in addition for positive feedback the oscillation is prevented. A 5.11k to ground and 51.1k to 5V gives clean power up and down transitions.

The Murata OKR-T/1.5 does not oscillate during the power down, it just goes out of regulation when the input voltage drops too low. The BBB seems happy with this part so for this board only the Murata part should be used. The Murata datasheet does not document using the enable pin to change the shutdown voltage. A little testing seems like it may work but will require different resistors. This will be investigated further later.

The two resistors will be added to the surface mount board.

Holdup capacitor selection

The BBB takes longer to shut down than my initial testing showed so more capacitance is needed than my original estimate. I originally tested with poweroff -f on the rev B Angstrom BBB. Under the rev B Angstrom the poweroff -f flag does not write out the cached data to the flash. Under other operating systems that I am used to -f bypasses the shutdown scripts but still flushes the data to flash. I detected this at the last minute in ordering the board so I was able to add pads to allow larger capacitors to be used.

Using Rev C Debian BBB I tested with a 80MB emulation file for emulating a 32MB disk drive. The time to sync after copying the file to flash is 8 seconds. Using my disk access routines to sync the file after updating the entire file is 16 seconds. It is 24 seconds to sync after writing non consecutive 1/5 or 2/5 of the cylinders.

The BBB has internal flash and also can use microSD and USB sticks. The larger flash on the rev C should allow it to work fine for image storage. If you are trying to run 24/7 with lots of writing you might want to use external flash to prevent the possibility of wearing out the internal flash. Many microSD cards are very slow especially for random writes so try to find one people have found gives good performance and test. With a Samsung class 6 micro SD card I got similar results to the internal flash. With a Sandisk extreme USB 3.0 16GB stick the sync time was 4 seconds. The Sandisk USB required an extension cable to mate. Longer pins for the BBB connector would allow it to mate directly.

The internal flash writing time for my rev B BBB is significantly longer. The file system is over 90% full which I think is making it slower.

5F capacitors can be installed and still fit in a half height drive bay. 10F capacitors can be installed but will not fit in a half height drive bay unless they are mounted laying down on the bottom side of the board. This will involve running wires to one of them.

The following results are measured with the LDO03C DC/DC converter, 11.9V input power and emulator code running but otherwise idle. The Murata OKR-T/1.5 run times are similar.
3F capacitors run time is 7.6 seconds. This is enough to power down the BBB but not enough if any significant data needs to be written to the on board flash.

5F capacitors run time is 14.2 seconds. This is likely sufficient with a rev C board for normal operation though a lot of writing of random sectors may be able to have enough data to write that it can't be completed before power is lost. Various parameters can be changed to reduce the amount of data buffered to prevent data loss.

10F capacitors run time is 32.4 seconds. This should cover any realistic amount of memory needing to be written unless a really slow microSD card is used.

The DIP version could get longer run time by switching off the power to terminating resistors or switching to 130 or 150 ohm pull-ups to 3.3V. This could be done to the existing board but probably isn't worth the effort.

The surface mount board will allow 10F capacitors to be cleanly mounted on the bottom of the board. I will likely switch to 3.3V for the terminating resistors RN1-RN3.

J6 pin 1 is on opposite side from J1

There isn't really anything wrong here, but it may be a little confusing for connecting the drive cables since those connectors are next to each other. J6 orientation is similar orientation to J4 and J5 and made for clean routing of the signals.

I may look at changing J6 orientation for the surface mount board.

74xx07 logic input current feeds BBB 3.3V

The yellow trace is the BBB 3.3V A rail with 74F07 for U14-U16. The white trace is the expansion_12 signal. The 74LS07 with lower input current is better but still raises the rail some. The recommended chip to use for U14-U16 was changed from 74F07 to 74ACT05 to prevent powering signals to the BBB before its power supplies are on. The manual says signals should not be powered before its power supplies are on. I had some intermittent failures where the BBB powered up but didn't boot. It was infrequent enough that it wouldn't reproduce enough to troubleshoot the cause. I haven't seen it after switching to the 74ACT05. The CMOS part has insignificant input leakage and provides 24 mA output drive.

The CD74ACT05E DIP part is currently readily available though it looks like Digikey and Newark will stop carrying it after stock is exhausted. Mouser and Avent have lots and don't seem to be planning to stop carrying it.

The white trace is with 74LS07 and the yellow trace with 74ACT05.

The surface mount version of the 74ACT05 has better availability. I need to think more about what is surface mount on that board version.

The board does not have a part number or revision

Those will be added for the surface mount board to make it easier to refer to in documentation.

10 mil trace between J9-1 and J9-2

This trace segment should have been the same width as the rest of the trace. This will have no impact on the board. It will be corrected for the surface mount board.

Termination for drive select lines wrong

The way I did termination for the drive select lines doesn't match how real drives do the termination. Real drives terminate only the drive line jumpered for the drive. I terminate all of them. This is only an issue if you use emulator with a real drive. If you do cut the pin on RN2 that is being used by the real hard drive so the emulator won't terminate it. I will change to jumpers and fixed termination like real drives for the next revision of the board.

Other testing

Second drive emulation connector

I have modified the software to support the J6 connector for second drive emulation and verified the hardware is working. Simple dir and copy files worked. Further software testing is needed to verify proper operation and that different size disks work properly. It also doesn't allow overlap of seek on one drive with operation of the other drive. This can be fixed with further software work.

J7 Expansion connector

The emulator software will drive pin 16 low when the first drive emulated is selected and pin 15 low when the second drive is selected. The LED anode (+) should be connected through a resistor to pin 1 (3.3V). Since only one LED is on at a time both LED's can share the same resistor. The BBB outputs are rated for 6 mA current. The resistors values should be (3.3V - LED Vf) / .006. For Vf (LED forward voltage) of 2V that gives 220 ohms rounded to nearest 5% value or 215 for 1%. Other usage of this connector is expected to be developed by the user community.

Power monitor software

The power monitoring seems to work as designed and noise is low. I have written a simple program to monitor the power and shut down the BBB.

Shield EEPROM U11

I have verified I can read and write the EEPROM. I have not generated the contents necessary to see if it can properly configure the shield pins.

Software Testing

The software has been tested for basic functionality with the PCB for drive emulation and drive reading. Bugs likely exist. For emulation it's recommended to backup the emulation file periodically in case it gets corrupted. It is likely that until more real world testing occurs that problems will occur. Due to the wide variations in drive formats the decoding of drive contents will likely need to be modified to support more drives. I will provide assistance but may not be able to diagnose the problem remotely and may not have free time to immediately investigate.

The disk reading seems to have similar ability to read marginal tracks as the normal controller though I don't have the correct combination of drives with errors and software to report the errors to fully verify.

Spinrite testing

Spinrite now runs successfully. I'm not positive what changed. I may have been running in on a NFS mounted file with my BBB rev B.

In further testing I found that if continuous random writes are done it causes the emulation process to block and the host gets timeouts. I have added buffering and intentional write rate limiting to help. There is a conflict between the buffering and having sufficient run time on poweroff to write all data to the flash and shutdown the board.

You can tune this with the buffer command line option and the logfile.txt mfm_emu writes when it exits. I think for normal classic computer usage the buffering will be fine. With continuous random writes I did see it take 12 seconds between writes to internal flash so you can still have problems with the default settings. If you increase the buffering significantly you may need to wait at least 45 seconds after large amount of writing before powering off the computer. You may also use a fast USB stick. I found Sandisk extreme USB 3.0 16G works well.

In theory there are settings that can be changed on how the operating system buffers the data. I wasn't able to improve performance by changing them. Reducing vm.dirty_expire_centisecs will write the data out sooner. If you are needing to wait before powering off lower values will require less wait.

In testing this a saw a few times where things paused with the drive light on for a little while. I have not been able to reproduce it to investigate. It seems to work well but there is probably still low frequency of occurance bugs left.

User Suggestions

Add jumper to allow charging of backup capacitors to be disabled. Backup capacitors are only really needed when using as an emulator installed in a computer. If input power sense for auto power back on is connected to capacitors this would allow poweroff command to power down board without it turning right back on when input power is present.

Feel free to contact me, David Gesswein with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search