ECC检验与纠错

引入ECC

  ECC:Error Checking and Correction,是一种差错检测和修正的算法。

  NAND闪存在生产和使用中都会有坏块产生,BBM就是坏块的管理机制。而生产坏块已经无法避免,我们只能尽全力减少使用中产生的坏块。一种是利用磨损平衡(WL)提前预防坏块产生,另一种是已经产生“坏块”,我们是否还能继续用?

  因此引入了ECC,如果块产生错误,且能够被ECC纠正,那么这个块都不算坏块;但连ECC都纠正不过来,这个块就无法再继续使用,只能标记为坏块。

  所以,有效管理坏块的首要前提就是有可靠的坏块检测手段。如果操作时序和电路稳定性不存在问题,NAND闪存出错的时候一般不会造成整个Block或Page不能读取甚至全部出错,而是整个Page中只有一个或几个bit出错,这时候 ECC就能发挥作用了。不同颗粒有不同的基本ECC要求,不同主控制器支持的ECC能力也不同,理论上来说ECC能力够用就行。

ECC工作原理

1、当前SSD内最普遍使用的ECC码是BCH码。

(1)数据写入时:控制器内部的ECC模块计算数据并生成ECC签名,一般来说这个步骤非常快,因此并不会影响整个SSD太多的性能表现。

(2)ECC的保存:ECC的签名一般来说都保存在NAND页后部的SA区域。

(3)数据从NAND读取时:ECC模块回去读取ECC签名,并对照相同与否来发现出现的错误。

2、 相比发现错误,修复接收到的数据错误更复杂。

(1)检测收到的数据是否出错,这个和上面生成ECC签名的操作一样非常快。

(2)如果检测到接收到的数据包含错误比特,就需要去生成独特的ECC算法(比如BCH),这部分会造成性能损失,但是只有在检测到错误时候才做。

(3)用生成的ECC算法来修复之前检测到的错误。

ECC的能力

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

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

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

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

实例剖析ECC

  NAND Flash因为可能存在坏块,所以一定会有spare区了。page分为main和spare区。main是用来保存数据的。spare区一般用来标记坏块,和保存对main区数据的ECC校验码。

  至于spare 区的格式,这个由自己设定,没有标准格式的。如“LSN0 LSN1 LSN2 RESERVED RESERVED BI ECC0 ECC1 ECC2 S-ECC0 S-ECC1 RESERVED RESERVED RESERVED RESERVED RESERVED”也是其中一种。

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

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

ECC评价

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

如果用R语言读《笑傲江湖》……

上周末,闲着没事就试了一个新的R中文文本分词包——jiebaR,支持Windows,支持简体及繁体中文,速度也很快,大家可以根据该包文档去学习,很容易上手!下面...

2316
来自专栏何俊林

吐血干货,直播首屏耗时400ms以下的优化实践

导读:直播行业的竞争越来越激烈,进过18年这波洗牌后,已经度过了蛮荒暴力期,剩下的都是在不断追求体验。最近在帮做直播优化首开,通过多种方案并行,把首开降到500...

1633
来自专栏机器人网

为什么采用4~20mA的电流来传输模拟量?

大家可能会非常熟悉RS232,RS485,CAN等工业上常用的总线,他们都是传输数字信号的方式。那么,我们用什么方式来传输模拟信号呢?工业上普遍需要测量各类非电...

2628
来自专栏ChaMd5安全团队

世界智能驾驶挑战赛信息安全组——新人扫盲

0x00前言 感谢天津市人民政府与国家发展和改革委员会、科学技术部、工业和信息化部、国家互联网信息办公室、中国科学院、中国工程院、中国汽车技术研究中心、XCT...

2989
来自专栏TensorFlow从0到N

点亮深度学习工作站

终于赶在2017年结束前,点亮了我的深度学习工作站。 ? 小核武.jpg ? ? 配置表 配件 型号 价格 数量 合计 GPU 微星 GTX 10...

3699
来自专栏IT派

关于微信和Python的点点滴滴

微信自上线以来,一直没有自动回复的功能,想必是有他们的理念。但是有些人群,确实对此功能有一定需求,我举两个栗子:

670
来自专栏应兆康的专栏

计算机网络笔记 —— 物理层 2

让多个用户共享同一根信道,复用技术是干线上的技术,主要问题在于干线起点如何共用,干线终点如何分离的。

681
来自专栏FreeBuf

走近科学:揭开伪基站的神秘面纱

本文原创作者:敏争 ? “伪基站”目前已经成为广告、诈骗等垃圾短信的重要实施手段。在经过一轮打击销声匿迹一段时间之后,现在又有抬头之势,有的犯罪集团通过生产、销...

2218
来自专栏龙行天下CSIEM

科学瞎想系列之六十四 双馈电机绕组故障诊断

双馈是大型风力发电的主流技术之一,目前已装机运行的并网型风力发电机组大多采用这一技术路线。通常双馈发电机绕组出现故障后很难在塔上维修,必须下塔。下塔!宝宝...

2835
来自专栏静晴轩

Sublime Text 最新注册码分享

SublimeText,她作为强大而小巧,性感且快捷的编辑器,长时间以来,受众人青睐;对于个人来说,也是最常用代码编辑器,且没有之一(目前同时也会用 VsCod...

3583

扫码关注云+社区