关于S3C2440 u-boot支持nand hw ecc

转载地址:https://blog.csdn.net/taot2009/article/details/79660469

https://blog.csdn.net/hurry_liu/article/details/8741565 ---这篇文章(文章1)讲的很详细。

http://www.xuebuyuan.com/zh-hant/916448.html ----这篇文章(文章2)也讲的差不多。

文章1和文章2的描述是一样的,只是代码内容不一样。

一开始我是看到了文章1,按照那个代码来修改自己的代码,结果还是不成功,总是在读取的时候出现如下错误。

S3C NAND: ECC uncorrectable errordetected. Not correctable.

NAND read from offset 0 failed -74

后来看了s3c2440芯片资料,https://download.csdn.net/download/zengsongbin/2354802, 其中第6章,按照文章1的描述,对应了解了NFMECCD0, NFESTAT0, NFMECC0 这几个寄存器的功能。

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数据了。

猜你喜欢

转载自blog.csdn.net/kunkliu/article/details/82149953
今日推荐