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. java实现redis缓存_java实现redis缓存功能
  2. 乐观锁与悲观锁——解决并发问题
  3. 创新工场南京人工智能研究院执行院长冯霁:联邦学习中的安全问题
  4. android 渐变卡片,手机SIM卡的进化史,从有到无,渐变虚拟eSIM卡
  5. oracle数据库sysaux表空间,如何管理oracle数据库的SYSAUX表空间
  6. WebRTC视频编解码器性能评估
  7. java parse_Java命令行界面(第9部分):parse-cmd
  8. margin与padding的bug
  9. hdu 1754 线段树(点修改)
  10. SQL Server与Oracle中的隔离级别
  11. 为啥用计算机分析模拟,模拟电路的计算机分析与设计——Pspice程序应用
  12. ansys17.0安装教程
  13. w10计算机运行特别卡,win10电脑卡顿的五种原因及解决方法
  14. 金融领域的知识图谱搭建简单实操(基于Neo4J)
  15. python -- 拉勾网爬虫模拟登录
  16. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java手游账号交易系统u2741
  17. 压力测试后,DeFi会如何自我进化?|「生机」云峰会
  18. 【数字图像处理】实验五 形态学图像处理
  19. 好玩的编程网站整理 (未完成未整理) (暂时比较乱)
  20. 对LeetCode491 dsf的解析。

热门文章

  1. 通过PS把普通照片变成高大上的电影海报大片
  2. phonegap 拍照上传照片
  3. ANSYS使用APDL数组存储每一个荷载子步下的后处理参数值
  4. 小白学习cartopy画地图的第一天(中国行政区域图,含南海)
  5. D29:Post Office(邮局,翻译)
  6. ([\s\S]*?)正则表达式写法
  7. 聚类算法评价指标——adjusted Rand index, ARI指数(调整兰德指数)
  8. csdn积分获取攻略规则免费
  9. java实验项目代码_java web 期末项目实验源码20套,自用学习非常不错!
  10. java 创建临时临时文件