一开始我是看到了文章1,按照那个代码来修改自己的代码,结果还是不成功,总是在读取的时候出现如下错误。
S3C NAND: ECC uncorrectable errordetected. Not correctable.
NAND read from offset 0 failed -74
1,在写入和读出数据完成时,如果没有锁定NFMECC0寄存器将会更新,为写入或读出的数据的ecc code。
2,写入数据时,只需要读出,NFMECC0,然后存放到spare区。
3,读出数据时,需要将第2步存放到spare区的ecc code读取出来,然后写入NFMECCD0。
在做第3步时,
3.1 NFMECC0中的值是读取之后,计算的读出数据的ecc code。
3.2 nand controller会将写入NFMECCD0的值,与NFMECC0中的值进行比较来计算校验结果,并将结果存入NFESTAT0。
发现关键的操作就在于读取NFMECC0的值,如果读取正确了,校验流程应该是没有问题了。
对比文章1和文章2,在函数中s3c2440_nand_calculate_ecc中,读取NFMECC0方式不一样。
改用文章2的方式,就可以正确读取nand数据了。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』