ecc错误的处理方式-ECC_CorrectData问题

来源:互联网 发布:淘宝主营占比怎么提高 编辑:程序博客网 时间:2024/06/06 05:13
 

ce6.0的驱动中,检测到ecc错误后,没有任何的处理 ,直接返回一个false给上层函数

ce4.2的驱动中,检测到ecc错误后, 调用ECC_CorrectData函数进行数据的纠正,

因此对驱动层中该函数进行如下实验:

 

实验结果:

1:512字节中ecc错误位只有1个的时候,ECC_CorrectData函数可以纠正
   实验1:使数据区第一个字节为0xfe,其他不变,都为0xff.
   实验2:使数据区第一个字节为0x7f,其他不变,都为0xff. 
 
2:当cpu不能检验ecc出错误的时候,ECC_CorrectData得不到调用,不可以纠正:
   比如当数据区域改变,ecc不变的时候,去读取的时候,cpu的nandflash模块不报错.
   比如:所有数据位0xff,有个字节位0的时候,cpu的ecc不报错.

3:当一个sector中错误位有8个位的时候,ECC_CorrectData函数可以检测到这种情况,并且返回错误..
    实验:使数据区第一个字节为3,其他不变,都为0xff.


4:当一个sector中错误位有2个位的时候,ECC_CorrectData函数可以检测到这种情况,并且返回错误..
    实验1:使数据区第一个字节为0xf3,其他不变,都为0xff.
    实验2:使数据区第一个字节为0xfc,其他不变,都为0xff.

5:当一个sector中错误位有4个位的时候,ECC_CorrectData函数不可以检测到这种情况,纠正后的数据也是错误的
    实验1:使数据区第一个字节为0xf1,其他不变,都为0xff.ECC_CorrectData函数纠正后的数据0xf0
    实验2:带ecc写数据去第一个字节为0xf1,其他为0xff,然后读该sector,这个sector的ecc为 rddata 0xa0aaaaaa

结论,512字节和2个字节的ecc效验和之间的关系 不是11对应的.

可能多个数据对应同一个效验和,在检测到nanflash和计算的ecc值不一致的情况下,ECC_CorrectData,可以正常的工作,可以纠正错误的位,对于ECC_CorrectData函数超出范围错误
可以识别出来.并且返回错误,
  个别超出范围的错误,并不能识别出来,该函数会返回一个false的答案给上层函数.

但是从实验5可以看出,ECC_CorrectData函数并不是一个完美的函数,他在检测到ecc错误的时候可能纠正后的数据是错误的,,所以这个就是为什么ce6.0中去掉这个函数的原因.

但是,readnandflash函数在发现ecc错误后,数据,会直接崩溃,不能读写数据段,也就是说操作系统在发现readflash函数返回一个false后,没有进行任何后续的修复工作,

 

所以总体来说,ECC_CorrectData函数是应该添加上去的.

如果操作系统在发现readflash函数返回一个false后,进行后续的修复工作,那么ECC_CorrectData就不应该添加上去.