nand flash关于ECC校验码的问题

关于ECC的校验,网上找了很多都不太满意各种论文基本上对于细节描述都是略过,最后终于找到个说的比较细致的。
看了个大佬的博客描述得挺细节的
https://blog.csdn.net/wangjasonlinux/article/details/9350451
ECC的作用和使用限定
ECC的全称是Error Checking and Correction,是一种用于Nand的差错检测和修正算法。如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个Block或是Page不能读取或是全部出错,而是整个Page(例如512Bytes)中只有一个或几个bit出错。ECC能纠正1个比特错误和检测2个比特错误,而且计算速度很快,但对1比特以上的错误无法纠正,对2比特以上的错误不保证能检测。
解释以下ECC是什么,格式是怎样的
校验码生成算法:ECC校验每次对256字节的数据进行操作,包含列校验和行校验。对每个待校验的Bit位求异或,若结果为0,则表明含有偶数个1;若结果为1,则表明含有奇数个1。列校验规则如表1所示。256字节数据形成256行、8列的矩阵,矩阵每个元素表示一个Bit 位。
在这里插入图片描述

用数学表达式表示为:
    P4=D7(+)D6(+)D5(+)D4  P4`=D3(+)D2(+)D1(+)D0
    P2=D7(+)D6(+)D3(+)D2  P2`=D5(+)D4(+)D1(+)D0
    P1=D7(+)D5(+)D3(+)D1  P1`=D6(+)D4(+)D2(+)D0
    这里生成了6个bit
  这里(+)表示“位异或”操作
D0表示第0列的256个bit相异或。 D1表示第1列的256个bit相异或。用理D3......D7表示第7列的256个bit相异或
图中的P8和P8`是什么?
      P8=C0+C2+C4............+C254
      P8`=C1+C3+C5+.....+C255
      P16=C0+C1+C4+C5+C8+C9...............+C252+C253(处理2个C,跳过2个C)
      P16`=C2+C3+C6+C7.................+C254+255(跳过2个C,处理2个C)
      P32(处理4个C,跳过4个C)
      P32`(跳过4个C,处理4个C)
      .....................
      .....................
      Pn(处理128个C,跳过128个C)
      Pn(跳过128个C,处理128个C)
      总共会生成16个bit。
      C0对应第1行的8个bit相异或。C1对应第2行的8个bit相异或..........c255对应第第256行。
      这个图是网上找,说实话不是很好,但是懒得画了,所以参数看起来有点怪。

对行和列分别处理行处理生成16bit,列处理生成了6bit。每256个字节我们用3字节来装ECC。所以多出来了2bit,这2bit是保留位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值