ECC(Error Checking and Correction)校验和纠错
来源:互联网 发布:极客营销软件 编辑:程序博客网 时间:2024/06/14 10:58
ECC的全称是 Error Checking and Correction or Error correction Coding,是一种用于差错检测和修正的算法。上一节的BBM中我们提到过,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更多潜力,只是效果比较有限。
当前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更多潜力,只是效果比较有限。
0 0
- ECC(Error Checking and Correction)校验和纠错
- ECC(Error Checking and Correction)校验和纠错
- Nand ECC校验和纠错原理
- Nand ECC校验和纠错详解
- Nand ECC校验和纠错 详解(转)
- Nand ECC校验和纠错 详解(转)
- SSD 之ECC校验和纠错
- Nand ECC校验和纠错原理及ECC代码分析
- Nand ECC校验和纠错原理及ECC代码分析
- Nand ECC校验和纠错原理及2.6.27内核ECC代码分析(转)
- Nand ECC校验和纠错原理及2.6.27内核ECC代码分析
- Nand ECC校验和纠错原理及2.6.27内核ECC代码分析<转帖>
- Nand ECC校验和纠错原理及2.6.27内核ECC代码分析
- Nand ECC校验和纠错原理及2.6.27内核ECC代码分析
- Error Detection And Correction
- 【程序】STM32F1单片机I2C中Packet Error Checking(PEC)校验功能和DMA的使用方法
- Forword Error Correction, FEC前向纠错是什么
- Hamming ECC(Error Correction Code) in Nand Flash
- 基础百度地图
- 混淆中泛型问题
- js将long日期格式转换为标准日期格式实现思路
- C# 操作mysql
- echarts3实例教程
- ECC(Error Checking and Correction)校验和纠错
- Ajax工作原理以及优缺点
- 百度地图定位
- go语言学习(2)-数据类型
- Linux Mint 安装JDK
- Android之shape与selector实现圆角
- MIL图像函数库学习之ROI
- Unix/Linux中的/dev/fd机制
- Java类继承中的静态块与构造