搞了半天都没明白ECC的原理是什么?但根据网友提供的代码,基本上知道怎么去调用它,但我有点纳闷:还不如自己写完一个Sector后,写个函数再读出这个扇区一个一个字节与原数据做比较,不一一对应,擦除再写,直到写对为止,难道ECC算法查到某位写错后,不用经历"先块擦除,再扇区写"这个过程序吗?我看还是自己做个比较函数来得直接,且比不这个ECC算法占用资源多呀?
nand flash 的特点,或缺点是所谓"bit_fliping"现象,即随机地某位会0变成1,1变成0,虽然出现这种现象的几率很低,但相比一般内存而言几率大的多,所以即使你正确写入了也没用,有可能某次读出就不正确了,所以每次读出都要进行ecc效验.
lz 还是不明白bit fliping的意义,并不是说你写进去再读出来数据正确了,以后再读出来就不会bit反转了,bit反转的因素有很多,电气干扰也会bit反转。以我2年的nand flash驱动开发的经验,没有ECC的nand flash数据可很能会出错!所以必须加入ECC校验。
我明白上两的意思了,那么我写的时候也就没必要经历"写--->再读---->校验"这个过程了?只要写成功了,顺便把产生的ECC码写在扇区的BAK字节里,然后再要读取时,读出数据并产生ECC与BAK里的ECC做比较!对吗?
对的,写的时候只需要去check 写是否成功,并且将计算的ecc数值写到相对应的c区即可。只要的写进去了就可以了,但是在读的时候一定要进行ecc校验,但是出现了256byte中有2bit翻转也是无法校验回来的。
MLC nandflash SPEC要求512字节纠4bit的强度,但用软件来做根本不可行,只能做到128字节纠2bit,不知道这个强度够不够。
还有位翻转多发生在读写操作过程中,还是发生在存放的过程中,错误位的分布有没有什么规律
请哪位大侠指点
是否我的理解错误?128字节纠2bit,512字节不是相当于纠8bit了?楼上的是否有128字节纠2bit的源代码?