nand flash ecc level

之前做过micron的驱动,对oob读写一直有问题。

比如ecc level为4-bit ECC/512 (main) +4 (spare) + 8 (parity) bytes

4bit是nand flash intenal ecc纠错的能力。

一般nand flash内部ecc使用的是bch硬件校验。

需要的校验码长度是 13*4=52bit=8bytes,校验的区域为512(main) + 4(spare)。

因为oob总共的长度是64/4=16,所以仍然有16-12=4bytes保护不了。


另外还有一些nand flash没有内部ecc,但是写有ECC Requirement: 4bit/512Byte

此时需要外部接有4bit校验的硬件电路,或软件校验算法。


参考文档:http://blog.csdn.net/ohhmygod/article/details/7246674

对于BCH算法
 
        目前通常以512Byte或者1024Byte为单位处理,因为BCH按位处理数据,所以是4096bit或者8192bit,这里的4096/8192bit是原始数据,BCH需要生成一定的校验数据。下面简要介绍下原理。
 
设最大纠错能力为t
 
        如果选用4096bit的原始数据长度,则模式为BCH(8191,8191-13×t,t,13)
 
        如果选用8192bit的原始数据长度,则模式为BCH(16383,16383-14×t,t,14)
 
        校验数据长度就是13×t,或者14×tbit
 
        所以平均1024+32Byte的MLC 大多建议使用8bit/512Byte ECC
 
        平均1024+45Byte的MLC大多建议使用24Bit/1024Byte ECC, 此时需要14×24bit=42Byte的检验数据空间
 
        以8bit/512Byte BCH方式的ECC为例,控制器写数据到NAND Flash时,每512Byte数据经过BCH模块就会生成13Byte的校验数据(当然剩下的16-13=3Byte也可以作为某种用途的数据,可以任意使用0-3Byte而不会改变ECC的使用),这些数据一起写入到NAND Flash中。控制器从NAND Flash中读取数据的时候需要将原始数据和校验数据一起读出经过BCH模块,BCH模块计算伴随矩阵首先可以判断出是否出现了错误,如果出现了错误需要计算错误位置多项式,然后解多项式,得到错误位置(目前主要使用Chien-search方法),因为是位错误,找到错误的位置以后取反以后就是正确的数据。只要是错误个数小于等于8,BCH都能够找到错误的位置,但是如果错误个数超过了8,对于BCH来说已经没有办法纠正错误了,只能报告出现了不可以纠正的情况。


版权声明:本文为qingfengtsing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。