ECC的全称是 Error Checking and Correction or Error correction Coding,是一种用于差错检测和修正的算法。NAND闪存在生产和使用中都会产生坏块,BBM就是坏块的管理机制,而要有效管理坏块的首要前提就是有可靠的坏块检测手段。如果操作时序和电路稳定性不存在问题,NAND闪存出错的时候一般不会造成整个Block或Page不能读取甚至全部出错,而是整个Page中只有一个或几个bit出错,这时候 ECC就能发挥作用了。不同颗粒有不同的基本ECC要求,不同主控制器支持的ECC能力也不同,理论上来说ECC能力也是够用就行。

当前SSD内最普遍使用的ECC码是BCH码。当数据写入的时候,内部的ECC模块计算数据并生成ECC签名,一般来说这个步骤非常快,因此并不会影响整个SSD太多的性能表现。ECC的签名一般来说都保存在NAND页后部的SA区域,当数据从NAND读取的时候ECC模块回去读取 ECC签名,并对照相同与否来发现出现的错误。

相比发现错误,修复接收到的数据错误更复杂。第一步是检测收到的数据是否出错,这个和上面生成ECC签名的操作一样非常快。如果检测到接收到的数据包含错误比特,就需要去生成独特的ECC算法(比如BCH),这部分会造成性能损失,但是只有在检测到错误时候才做。用生成的ECC算法来修复之前检测到的错误。

必须强调的是,ECC解码过程是可能出现失败的,所以ECC系统架构必须合理的设计才能保证ECC不出错,而ECC能够修复的错误比特数取决于ECC算法设计。

如果ECC纠不过来, 一般会报ECC Fail, 用户表现为Read Fail,有时候ECC甚至诊测不到出错, 就会导致数据错误。

NAND的稳定性需要有多方面保障,ECC只能用来保证部分比特出错时的修复,如果整个页甚至块出现大面积错误,那么只有RAID这类的保护才能修复了。

在企业级产品中对ECC甚至还有更苛刻的要求,那就是数据完整性检查,SSD内部所有的总线, 先进先出数据器部分都要查,可以数据在进入NAND之前的错误。

       上图是个4KB页的NAND闪存。(SA区128字节)
       1、每当一个page写入NAND闪存,数据会通过ECC引擎,创造独特的ECC签名。
       2、数据和对应的ECC签名存都存放在NAND闪存里,数据放在数据区,ECC签名放在SA区。
       3、当需要读取数据时,数据和ECC签名一起被送往主控制器,此时新的ECC签名被生成。
       4、此时主控把2个签名对照,如果签名相同,说明数据没有错误,数据就会被送往。如果签名不同,数据就会先放在主控里,而不是直接送往主机。

某些主控会把改正后的数据再次写回闪存,另一些则不会,因为谁也不知道下次读取会不会再出错。

ECC的能力也影响到NAND的寿命和数据保存期。当NAND闪存的标称P/E数到了之后,错误数会越来越多,ECC弱的直接就报坏块并标记退休,如果ECC能力足够强,能挖掘出Flash更多潜力,只是效果比较有限。

ECC校验的更多相关文章

  1. ECC校验原理以及在Nand Flash中的应用

         本篇文章主要介绍ECC基本原理以及在Nand Flash中的应用,本文记录自己对ECC校验原理的理解和学习. ECC介绍      ECC,全称为Error Correcting Code, ...

  2. NAND FLASH ECC校验原理与实现

    ECC简介 由于NAND Flash的工艺不能保证NAND的Memory Array在其生命周期中保持性能的可靠,因此,在NAND的生产中及使用过程中会产生坏块.为了检测数据的可靠性,在应用NAND  ...

  3. NandFlash ECC 校验

    ECC的全称是Error Checking and Correction,是一种用于Nand的差错检测和修正算法.如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个 ...

  4. 说说NAND FLASH以及相关ECC校验方法

    Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将 ...

  5. 512字节纠错1位的ECC校验码生成演示

    Flash型号: NandFlash型号:TC58NVG2S3ETA00 pagesize: 2KB oobsize  : 64B blocksize : 128K 关于ECC可以参考:http:// ...

  6. ECC校验优化之路

    引子: 今天上嵌入式课程时,老师讲到Linux的文件系统,讲的重点是Linux中对于nand flash的ECC校验和纠错.上课很认真地听完,确实叹服代码作者的水平. 晚上特地下载了Linux最新的内 ...

  7. STM32下FatFs的移植,实现了坏块管理,硬件ECC,ECC纠错,并进行擦写均衡分析

    最近因项目需要,做一个数据采集的单片机平台.需要移植 FatFs .现在把最后成果贴上来. 1.摘要 在 STM32 单片机上,成功移植 FatFs 0.12b,使用的 Nand Flash 芯片为 ...

  8. ECC内存

    ECC内存,即应用了能够实现错误检查和纠正技术(ECC)的内存条.一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定.ECC是“Error Checking and Corre ...

  9. 【转】nand flash坏块管理OOB,BBT,ECC

    0.NAND的操作管理方式      NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) = xxxx (Blocks),1 ...

随机推荐

  1. Javassist学习总结

    今天在弄dubbo时出现了一个依赖缺少问题,就好奇研究一下,这个依赖是啥. javassist是一个字节码类库,可以用他来动态生成类,动态修改类等等 1.介绍Javassist 要想将编译时不存在的类 ...

  2. SpringBoot属性配置

    一:url的配置 1.配置 默认配置文件是application.properties 2.配置 配置端口 配置context path 3.启动效果 4.第二种配置方式 要先删除applicatio ...

  3. java 常用面试题

    基础问题和思想:1.抽象类和接口的区别(单纯的语法区别只能给一半分,要说出来适用场景):2.hashcode()和equals()的关系:3.HashMap(Set)底层机制(用到的数据结构以及代码原 ...

  4. 阿里云Linux服务器,配置JDK,MySQL

    云服务器配置:低配 Linux CentOS 7.4 64位 选择空白镜像: 安装图形界面 yum groups install "MATE Desktop" yum groups ...

  5. Codeforces 666E Forensic Examination SAM+权值线段树

    第一次做这种$SAM$带权值线段树合并的题 然而$zjq$神犇看完题一顿狂码就做出来了 $Orz$ 首先把所有串当成一个串建$SAM$ 我们对$SAM$上每个点 建一棵权值线段树 每个叶子节点表示一个 ...

  6. 华为S5300系列交换机限制特定IP可以登录Web

    针对Web管理可能有如下需求: 1.限制某个特定IP允许访问Web 2.默认修改80端口访问 那么针对上面的设置可以有效杜绝而已Web密码暴力破解,增强交换机安全等. 实现: 1.限制特定IP登录We ...

  7. 在Eclipse添加Android兼容包( v4、v7 appcompat )(转)

    昨天添加Android兼容包,碰到了很多问题,在这里记录一下,让后面的路好走. 如何选择兼容包, 请参考Android Support Library Features(二) 一.下载Support ...

  8. Java 线程第三版 第四章 Thread Notification 读书笔记

    一.等待与通知 public final void wait() throws InterruptedException      等待条件的发生. public final void wait(lo ...

  9. FTP主动模式与FTP被动模式所需的端口

    转载自:http://www.mofang.net/article/272/sort0963/2008/Article_11581.shtml FTP是仅基于TCP的服务,不支持UDP. 与众不同的是 ...

  10. 基于设备树的controller学习(2)

    作者 彭东林 pengdonglin137@163.com 平台 TQ2440 Linux-4.10.17 概述 上一篇大概介绍了一下demo-controller的结构,下面结合驱动分析.   正文 ...