updates with FRAM access

My initial attempts to write to the FRAM used SX/B commands like SHIFTIN and SHIFTOUT. These operated at a slow rate of about 83kbits/s. It did work and functioned as a good test of the hardware setup.

Now that I’m convinced everything is physically hooked up ok, soldered ok, etc, I’ve moved to assembly.

I wrote read/write routines which basically mimic the functionality of SHIFTIN/SHIFTOUT at a much higher datarate. I’m running in excess of 7mbps. That’s one bit every 142ns, or a byte in 1.1us.

I’ve tested my code segments today with the FRAM, and they are working like a charm. The code worked off the written page minus me forgetting the difference between JNZ and JZ. I actually had to step through the code to figure this out. Ahh well, easy enough. It took me 30 minutes to get the code running.

The next step is to plug this into one of my working models, probably the one that measures the time between the edges because I’ll have 4us minimum to work with. This model requires a little extra time, upwards of 1us or so, but I’ll still have 3us left over to store the data. Plenty.

Also, I have to integrate the USB code into the model as well.

Lots to do, and I want to put up a progress meter which shows the progress/task list.

About the author


Amateur Electronics Design Engineer and Hacker


  • Results from FRAM addition is OK, 3 sectors out of 11 completely read OK. I expected better.

    This is merged with the time-between-edge model, and I want to try it with another version.

    I wrote a seperate program to read the FRAM and xfer it to the PC at 9600baud via USB.

    Stay tuned.

  • I’ve been out for two weeks for Red Sea, so haven’t seen your success. Sounds like you’re reading your sectors into FRAM and further recognize almost all of them correctly?

  • Red Sea? Wow. That’s pretty far from me, and I’m on the East Coast of the US. The closest to the Red Sea I’ve ever gone is probably Southern Italy. About 1200 miles away. 14 degrees east of Greenwich, and Red Sea is at about 35 degrees east. I live approximately 79 degrees WEST of
    Greenwich, so the Red Sea is about 6000 miles(9600km) from me. I’d like to see Egypt and Israel, etc sometime in the future, but things are way too volatile for me to go now.

    Regarding the floppy project:

    Yeah, I’ve got the ram setup and working. I read the sectors from the floppy directly into the ram. Then I use USB to xfer them to the PC. I am getting BETTER results, but things are far from perfect. Some tracks of some disks read at 75%, where other tracks read 10% or so. At least I’m eliminating the PC speed issue. I transfer to the PC at 9600 baud after I capture into ram. I’ll eventually make this much faster, but Im trying to keep everything simple. Right now, I read just one track into RAM, which is 32k bytes.

    My plan over the next few days where I’m recovering from pneumonia is to further debug stuff by preclearing the FRAM (since its nonvolatile) with 0’s.

    Also, I’m getting exactly 1088 bytes now for every sector. It’s perfect in that regard. I just dont know exactly how the sectors are getting corrupted. Perfect headers, perfect length, just not perfect data. I’m going to start making various files of maybe 1 track each that contain different values. I already have an alternating (0xff and 0x00) disk, and that seems to work — probably because all the data in one track is all the same character. I can read those tracks perfectly.