I know this forum is for high level NAND access, but maybe some can advice about NAND memory protocols.
I have been using
https://github.com/bkerler/NANDReader_FTDI project to read NAND memory. Project works pretty well, but from time there are errors in read data.
Everyone says those are natural for poor quality NAND, but mine errors has common factor.
If they happend, they are always malform last byte of this so called Spare Area (or OOB data). Mistakes happen more frequently to specific pages.
From data perspective it is ussually non-zero byte malformed into zero in many bits, sometimes even 0xFF into 0x00.
General reproduction ratio is 10% at high speed (FTDI clocking 60MHz, which gives about 600kB/s) and almost 0% at low speed (FTDI 12MHz which gives about 400kB/s).
My test chip is Hynix H27U2G8F2C, 256MB chip desoldered from industrial equipment.
Any advice what could generate such problem? Is this normal when working with such old and small NAND memories?How fast can read commercial tool like PC3000 or VNR read NAND memories?So far I had considere following issues:
Idea: Control application waits to short, NAND is slow, maybe not enought time to copy last byte from memory to buferr, or app does not wait for RB line?
Answer: I added extra 100ms delay between addresing memory and read, did not change anything.
Idea: There is a problem with control lines like ringing, crosstalk?
Answer 1 But problem never happend on main memory where 2048bytes are transfered in one burst.
Answer 2 I made modification to read 63 bytes in one burst, and last byte in another 1byte burst, same result.
Idea: This last byte is lost/malformed in application.
Answer: I made modificiation to print on the screen just after it is received from FTDI, it is not altered
Idea: Adressing problem or malformed commands?
Answer: Pages are visually unique, first 63 bytes are ~100% correct, problem never happend with main memory
My last idea is to use logic analyzer to capture what is on data bus at the moment of malformed reads.
It kind problematic, how to capture one bytes among 256MB, so I am leaving this as last resort.