Nand Flash 的ECC算法

为了能检测到单个位错误,把每256字节的数据划分为一张8x256共2048位的表,使用22位校验码进行校验,16位为行校验码,进行横向校验,6位为列校验码,按进行纵向校验。下图描述了这22位校验码产生的原理:

 

22位校验码产生原理

 

列校验:

CP0:对所有字节的Bit 6,4,2,0进行异或操作的结果

CP1:对所有字节的Bit 7,5,3,1进行异或操作的结果

.

.

CP5:对所有字节的Bit 7,6,5,4进行异或操作的结果

 

行校验:

LP0:对0,2,4,6...254字节的所有位进行异或操作的结果

LP1:对1,3,5,7...255字节的所有位进行异或操作的结果

.

.

LP15:对128~255字节的所有位进行异或操作的结果

 

 

22位校验码需要三个字节保存,前两字节保存16位行校验码LP0~LP15,第三字节保存6位列校验码CP0~CP5,剩余2位置1:

22位校验码在3字节(24位)ECC中的分布

 

把数据写入Nand Flash时,我们产生校验码并将它保存到Flash的Spare Data Area。从Flash读出数据时,产生一个新的ECC校验码,将它和Spare Data Area读出的旧校验码进行异或操作:

 

结果为0:数据正确

结果有11位为1:数据有1位错误(可纠正)

其他结果:数据超过1位发生错误,无法纠正

 

 

下面是ECC产生算法的c++实现代码(仅满足示意用途,为了便于理解没有经过优化,在实际使用中,大量的异或运算可转为查表操作)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值