ECC算法详解及硬件实现.docVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ECC算法详解及硬件实现

ECC算法详解及硬件实现 ECC 的全称是 Error Checking and Correction,是一种用于 Nand 的差错检测和修正算法。如果操作时序和电路稳定性不存在问题的话, NAND Flash 出错的时候一般不会造成整个 Block 或是 Page 不能读取 或是全部出错,而是整个 Page(例如 512Bytes)中只有一个或几个 bit 出错。ECC 能纠正 1 个比特错误和检测 2 个比特错误,而且计算速 度很快,但对 1 比特以上的错误无法纠正,对 2 比特以上的错误不保 证能检测。 校验码生成算法:ECC 校验每次对 256 字节的数据进行操作,包含列 校验和行校验。对每个待校验的 Bit 位求异或,若结果为 0,则表明含 有偶数个 1;若结果为 1,则表明含有奇数个 1。列校验规则如表 1 所 示。256 字节数据形成 256 行、8 列的矩阵,矩阵每个元素表示一个 Bit 位。 其中 CP0 ~ CP5 为六个 Bit 位,表示 Column Parity(列极性), CP0 为第 0、2、4、6 列的极性,CP1 为第 1、3、5、7 列的极性, CP2 为第 0、1、4、5 列的极性,CP3 为第 2、3、6、7 列的极性, CP4 为第 0、1、2、3 列的极性,CP5 为第 4、5、6、7 列的极性。 用公式表示就是: CP0=Bit0^Bit2^Bit4^Bit6,表示第 0 列内部 256 个 Bit 位异或之后再跟第 2 列 256 个 Bit 位异或,再跟第 4 列、第 6 列的每个 Bit 位异或,这样,CP0 其实是 256*4=1024 个 Bit 位异或 的结果。CP1 ~ CP5 依此类推。 行校验如下图所示 其中 RP0 ~ RP15 为十六个 Bit 位,表示 Row Parity(行极性), RP0 为第 0、2、4、6、….252、254 个字节的极性 RP11、3、5、7……253、255 RP20、1、4、5、8、9…..252、253 (处理 2 个 Byte,跳过 2 个 Byte) RP3 2、3、6、7、10、11…..254、255 (跳过 2 个 Byte,处 理 2 个 Byte) RP4 处理 4 个 Byte,跳过 4 个 Byte; RP5 跳过 4 个 Byte,处理 4 个 Byte; RP6 处理 8 个 Byte,跳过 8 个 Byte RP7 跳过 8 个 Byte,处理 8 个 Byte; RP8 处理 16 个 Byte,跳过 16 个 Byte RP9 跳过 16 个 Byte,处理 16 个 Byte; RP10处理 32 个 Byte,跳过 32 个 Byte RP11跳过 32 个 Byte,处理 32 个 Byte; RP12处理 64 个 Byte,跳过 64 个 Byte RP13跳过 64 个 Byte,处理 64 个 Byte; RP14处理 128 个 Byte,跳过 128 个 Byte RP15跳过 128 个 Byte,处理 128 个 Byte; 可见,RP0 ~ RP15 每个 Bit 位都是 128 个字节(也就是 128 行)即 128*8=1024 个 Bit 位求异或的结果。 综上所述,对 256 字节的数据共生成了 6 个 Bit 的列校验结果,16 个 Bit 的行校验结果, 22 个 Bit。 Nand 中使用 3 个字节存放校验结 共 在 果,多余的两个 Bit 位置 1。存放次序如下表所示: 以 K9F1208 为例, 每个 Page 页包含 512 字节的数据区和 16 字节的 OOB 区。前 256 字节数据生成 3 字节 ECC 校验码,后 256 字节数据 生成 3 字节 ECC 校验码,共 6 字节 ECC 校验码存放在 OOB 区中,存 放的位置为 OOB 区的第 0、1、2 和 3、6、7 字节。 校验码生成算法的 C 语言实现 在 Linux 内核中 ECC 校验算法所在的文件为 drivers/mtd/nand/nand_ecc.c,其实现有新、旧两种,在 ,其实现有新、旧两种, 2.6.27 及更早的内核中使用的程序,从 2.6.28 开始已经不再使用, 及更早的内核中使用的程序, 开始已经不再使用, 而换成了效率更高的程序。 而换成了效率更高的程序。可以在 Documentation/mtd/nand_ecc.txt 文件中找到对新程序的 详细介绍。 详细介绍。 首先分析一下 2.6.27 内核中的 ECC 实现,源代码见: http://lxr.linux.n

您可能关注的文档

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档