Chinaunix首页 | 论坛 | 博客
  • 博客访问: 449930
  • 博文数量: 73
  • 博客积分: 3593
  • 博客等级: 中校
  • 技术积分: 912
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 11:32
文章分类

全部博文(73)

文章存档

2013年(2)

2012年(20)

2011年(25)

2010年(12)

2009年(14)

分类: 嵌入式

2011-10-31 23:10:45

 Nand ECC校验和纠错原理及2.6.27内核ECC代码分析.pdf    samsung_ecc_algorithm_for_256b.pdf    samsung_ecc_algorithm_for_512b.pdf  

内核代码已经实现了256Byte/3Byte和512Byte/3Byte ECC算法,现在芯片定义要搞204Byte/nByte,还不知道算法怎样实现。

Google下找过Samsung的两个官方文档:
samsung_ecc_algorithm_for_256b.pdf samsung_ecc_algorithm_for_512b.pdf
看完有后感觉有些细节实现地方还没描述出来。

再看一下内核源码:
基本搞明白流程了,但行极性生成还是有点困惑。

最后在找wwxbei在uc上发表的[原创]Nand ECC校验和纠错原理及2.6.27内核ECC代码分析
读完后有种豁然开朗感觉,thanks wwxbei!

归纳起来:
nand flash读写可能会出现个别bit错误,通过ECC算法纠正1bit错误、检测错2bit错误。
3bit以上的错误ECC算法就管不了了。纠正1bit错误方法自然是找到哪一行、哪一列。
以256Byte/22bit为例。将256Byte数据看成一个256行8列的bit矩阵,256行用8bit、8列用3bit,一共要11bit来定位某一个bit在矩阵中的位置。ECC算法总每一个行列位置实际用到是一对可以表示极性的数据来,因此ECC数据量是11bit * 2 = 22bit。
同理512Byte/24bit,12bit * 2 = 24bit。

阅读(4504) | 评论(0) | 转发(0) |
0

上一篇:soft lockup

下一篇:Mips cache lock

给主人留下些什么吧!~~