|
NAND FLASH 可靠性相对较差,存储器芯片中有坏块的存在,会导致存储数据出错。 ECC 校验模块针对 NAND FLASH 的可靠性问题,提供了一种查错、纠错的机制。 ECC 校验码在数据读人时,由硬件计算完成后写入到 FLASH 的校验位中,当此页数据读出时,校验码再次生成与存储器校验位中的数据进行比较,若相同则没有损坏位,若不同,则给出出错中断,软件通过检查比较结果,判断出错位的位置进行纠错处理。纠错功能仅针对单 bit 位的出错,当一个以上位同时在一页中出现时, ECC 校验不能给出出错位正确的位置。
当往NAND Flash的page中写入数据的时候,每256字节我们生成一个ECC校验和,称之为原ECC校验和,保存到PAGE的OOB(out-of-band)数据区中。
??当从NAND Flash中读取数据的时候,每256字节我们生成一个ECC校验和,称之为新ECC校验和。
?? 校验的时候,根据上述ECC生成原理不难推断:将从OOB区中读出的原ECC校验和新ECC校验和按位异或,若结果为0,则表示不存在错(或是出现了 ECC无法检测的错误);若3个字节异或结果中存在11个比特位为1,表示存在一个比特错误,且可纠正;若3个字节异或结果中只存在1个比特位为1,表示 OOB区出错;其他情况均表示出现了无法纠正的错误。
算法:
http://efly.seaskyer.net/article.asp?id=5 |
|