So here’s where I’m at:
I know my memory read and write routines are good. I calculate a checksum as I’m writing the data, and on the output of that data to the PC, I also calculate the checksum. They match, no problems there.
I know my USB to PC routines are good. I calculate a different byte-based checksum (8-bit checksum) from the data I get from the FRAM, and then I have the PC software calculate it. They always match and I’m using Parallax’s UART for the time being. Mainly for reliability.
I’m using a new basic ISR routine, which I posted a post or two back. It’s simple, it doesn’t force any particular type of encoding. What comes off the drive goes into the memory. There are some drawbacks, for instance, I don’t support any type of idling. For the initial data, I wait to see a transition, and then I turn on interrupts and start recording. I don’t check double 1’s now, and I don’t check more than (3) 0’s. The data SHOULD be coming out of the drive correct, and force fitting it into correct form just doesn’t work, and while it does fix SOME situations, I *REALLY* have to get to the bottom of why this happens.
My MFMSanityCheck software is telling me .3% of the data is bad, which I think 99.7% still isn’t anything to complain about, but I really have to find the source of the problems.
All .3% of at least one sample file is a double 1’s situation. And I’ve seen this before. And its NEVER triple one’s, and it’s NEVER too many zeros. Just double 1’s. Two 1’s back to back.
So now that I’ve tested my memory, the problem is either the drive is REALLY spitting out two 1’s (and I have no clue how to fix that problem), or my ISR is triggering twice on the same edge.
I’m leaning towards the second choice but I really have to figure out how that is happening.