Nand ECC校验和纠错原理及2.6.27内核ECC代码分析.pdf samsung_ecc_algorithm_for_256b.pdf samsung_ecc_algorithm_for_512b.pdf
内核代码已经实现了256Byte/3Byte和512Byte/3Byte ECC算法,现在芯片定义要搞204Byte/nByte,还不知道算法怎样实现。
Google下找过Samsung的两个官方文档:
samsung_ecc_algorithm_for_256b.pdf samsung_ecc_algorithm_for_512b.pdf
看完有后感觉有些细节实现地方还没描述出来。
再看一下内核源码:
基本搞明白流程了,但行极性生成还是有点困惑。
最后在找
wwxbei在uc上发表的[原创]Nand ECC校验和纠错原理及2.6.27内核ECC代码分析
读完后有种豁然开朗感觉,thanks wwxbei!
归纳起来:
nand flash读写可能会出现个别bit错误,通过ECC算法纠正1bit错误、检测错2bit错误。
3bit以上的错误ECC算法就管不了了。纠正1bit错误方法自然是找到哪一行、哪一列。
以256Byte/22bit为例。将256Byte数据看成一个256行8列的bit矩阵,256行用8bit、8列用3bit,一共要11bit来定位某一个bit在矩阵中的位置。ECC算法总每一个行列位置实际用到是一对可以表示极性的数据来,因此ECC数据量是11bit * 2 = 22bit。
同理512Byte/24bit,12bit * 2 = 24bit。
阅读(4577) | 评论(0) | 转发(0) |