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 个字节的极性
RP1-----1、3、5、7……253、255 
RP2----0、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字节。

转载:ECC内存校验算法相关推荐

  1. 服务器芯片尺寸,服务器CPU/ECC内存校验的Intel C246芯片组电路板尺寸

    4.9mm×3.9mm的SSOP16小封装,使其更适用于高集成度方案,帮助工程师大幅节省PCB尺寸和布板空间.NIRS31/NIRS485现已通过CQC及UL认证,隔离耐压达3kVrms,可满足各种系 ...

  2. (转)一种高速内存校验算法(Delphi MMX优化算法应用之一)

    最近碰到一个项目需要对内存数据进行检测,确定是否和原始值一样,看了现成的算法MD5 CRC 等,感觉速度不太理想,因此动手自己写了用于检测内存数据的高速算法. 该算法利用了CPU的MMX微指令的单指令 ...

  3. 【转载】CRC32校验算法C语言版(查表法)

    先放原文链接:CRC32校验算法C语言版(查表法) 这几天搞串口通信,用到CRC32,把以前用到的东西整理一下,方便以后使用. STM32F103 芯片自带的CRC32硬件算法,匹配上位机CRC32算 ...

  4. STM32 H743 ECC内存相关使用说明笔记

    目的 刚好有需要用到H743的这方面内容,截取核心内容,翻译看看. 参考文档 [ST官方]H743 参考手册-英文版V7.0[中文版的尚未更新ECC内存相关内容,建议直接看英文的] [ST官方]H74 ...

  5. linux 服务器 报内存 ecc 错误,解决方法:ECC内存检查错误纠正技术

    ECC的全英文名称是Error Checking and Correcting.从这个名字可以看出,它的主要功能是"发现并纠正错误". 像奇偶校验技术一样,ECC纠错技术也需要额外 ...

  6. 服务器用REG ECC内存的好处

    知道服务器用ECC内存,按编码方式可以纠正几个比特位的错误,还一直以为REG ECC也是类似功能 最近发生一件事让我认真觉得REG ECC 不光是有纠正比特位错误的功能,它还能事实热切换. 最近买的二 ...

  7. 嵌入式操作系统内核原理和开发(改进的链表内存分配算法)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 之前我自己也写过基于链表的内存分配算法,但是看了rawos的内存分配算法,还是感觉rawos写 ...

  8. 嵌入式操作系统内核原理和开发(最快、最优、最差内存分配算法)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们说到了基于链表的内存分配算法.但是之前我们也说过,其实内存分配一般有三个原则,最快.最 ...

  9. 常用校验算法CRC、MD5、SHA_转

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...

最新文章

  1. ESPNet系列:自动驾驶领域轻量级分割模型
  2. Eclipse launch failed.Binary not found解决方案
  3. 新手理解的JS原型链
  4. SAP附件清单的调用
  5. c语言编程运动会分数统计系统报告,独家稿件:定稿运动会分数统计系统设计报告_完整版...
  6. Servlet和JSP之间的区别
  7. 【HDU - 3790】最短路径问题(DIjkstra算法 双权值)
  8. Spring的两种任务调度Scheduled和Async
  9. android一个工程的xml怎么引用另外一个工程的xml,如何在Android中使用XML引用库中另一个包的字符串?...
  10. Redis缓存持久化
  11. VS2015打开cshtml视图页文件报错 未将对象引用设置为实例 解决办法
  12. 支持向量机原理与实现
  13. 把视频文件放在服务器上,生成链接供外部访问
  14. 全球及中国钢铁贸易行业销售模式与供给规模预测报告2021版
  15. SQL中对一张表同时升序和降序的排序要求
  16. c++实现剧情小游戏:哈利波特
  17. safenet 超级狗 java调用 小计
  18. 漫谈程序员系列:群星闪耀的黄金时代
  19. php收付同分账,php微信分账功能 —— app支付
  20. linux看物流内核命令,Linux基础命令

热门文章

  1. webdriver启动chrome浏览器后打不开URL
  2. 扫描仪 连续pdf_为什么扫描仪将PDF用作默认文件格式?
  3. 函数的奇偶性【初级和中阶辅导】
  4. 实验二 三层组网AP上线
  5. 广州.NET微软技术俱乐部休闲活动 - 每周三五晚周日下午爬白云山活动
  6. 周芷若要练“九阴白骨爪”,程序员大呼:万万不可!
  7. MySQL8.0.28安装教程全程参考MySQL官方文档
  8. 计算机sci期刊拒稿两次,重新投稿接受的概率大吗? - 易智编译EaseEditing
  9. 自学maya总是找不到对的方向怎么办?是你没有掌握以下几点
  10. Windows 的关机的快捷键有没有?怎么实现快捷关机?