It seems as though when I have a read problem, its normally minor, and is a single bit error.
I notice that the errors have a tendency for 0s to be incorrectly interpreted as 1s.
So I get AB instead of 2B, AB instead of 8B, 5F instead of 5E, D7 instead of D3. These are all single-bit errors, and they are all got-1-needed-0 errors. Its not the particular bit position, across those, we see a 1st bit, a 3rd bit, a last bit, and 6th bit (counting from the left MSB) position errors.
The previous and next bytes are correct, so it’s not a “shifting” problem. My SX is seeing an edge where it should be seeing a high.
I’m going to give something a shot. I’m going to double-check my 1’s situation by checking the value of the pin right before I write a “1”, if its a zero, I’m going to jump and write a 0 instead. Can’t hurt….
i also wonder if the double one’s situation I “Fixed” earlier is actually me detecting the same 1 twice, instead of detecting a 1 and a zero. hrrmmmm..
also note if you see “446F53” that this is a “DOS” signature in the file and that the checksum won’t add up properly
Ok. Pretty exciting.
I just changed the double 1’s fix so that any double 1 detected must be a “0” that was detected as a “1”, and routed the code to write a zero instead of a double 1.
This fixed the problem across the board!@#
No double one’s, no bad bits, all sectors header and data checksums work!!