Hanming,RS,BCH —— NAND Flash中常用的纠错方式

  因为闪存中会有出错的可能,如果没有使用ECC模块,读出的数据和写入的数据会有不匹配的可能,也许一个文件中只有一两个bit不匹配,这也是不能容忍的。相对来说SLC中出错概率比较低,所以使用一个纠错能力不强的Hanming码就可以了,在MLC中Hanming码就显得力不从心了,需要纠错能力更强的RS或者BCH纠错方式了。

  Hanming码原理算法都不算复杂,网上应该都能找到hdl代码。

  RS(Reed-Solomon)应用也非常广泛,按多位的组合编码,而BCH按位编码,比如在NAND Flash中某个字节应该是0x00,但是从NAND Flash读出却是0xf0; RS只认为出现了一个错误,而BCH却认为出现了4个错误。RS方式有着不错的突发随机错误和随机错误的能力,算是两者的折中。BCH擅长处理随机错误,由于NAND Flash自身的特点,出现随机错误的概率更大一些,所以在MLC中目前应用最多的还是BCH方式

  大家知道即使是校验错误,如奇偶校验或者CRC校验都需要在原始信息数据的基础上增加一些额外的数据。能够纠正错误的ECC需要额外的数据空间保存纠错码生成的校验数据。所以在NAND Flash中Page的1K数据并不是1024Byte,大多数是1024+32Byte, 有的是更多的额外空间;额外空间越多意味着可以使用纠错能力越强的ECC,因为对于同一ECC算法纠错能力越强需要的额外空间越大。

  对于BCH算法,目前通常以512Byte或者1024Byte为单位处理,因为BCH按位处理数据,所以是4096bit或者8192bit,这里的4096/8192bit是原始数据,BCH需要生成一定的校验数据。下面简要介绍下原理

设最大纠错能力为t

如果选用4096bit的原始数据长度,则模式为BCH(8191,8191-13×t,t,13)

如果选用8192bit的原始数据长度,则模式为BCH(16383,16383-14×t,t,14)

校验数据长度就是13×t,或者14×tbit

所以平均1024+32Byte的MLC 大多建议使用8bit/512Byte ECC,平均1024+45Byte的MLC大多建议使用24Bit/1024Byte ECC, 此时需要14×24bit=42Byte的检验数据空间

  以8bit/512Byte BCH方式的ECC为例,控制器写数据到NAND Flash时,每512Byte数据经过BCH模块就会生成13Byte的校验数据(当然剩下的16-13=3Byte也可以作为某种用途的数据,可以任意使用0-3Byte而不会改变ECC的使用),这些数据一起写入到NAND Flash中。控制器从NAND Flash中读取数据的时候需要将原始数据和校验数据一起读出经过BCH模块,BCH模块计算伴随矩阵首先可以判断出是否出现了错误,如果出现了错误需要计算错误位置多项式,然后解多项式,得到错误位置(目前主要使用Chien-search方法),因为是位错误,找到错误的位置以后取反以后就是正确的数据。只要是错误个数小于等于8,BCH都能够找到错误的位置,但是如果错误个数超过了8,对于BCH来说已经没有办法纠正错误了,只能报告出现了不可以纠正的情况。

NAND Flash中常用的纠错方式(ECC算法)的更多相关文章

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

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

  2. WCF中常用的binding方式

    WCF中常用的binding方式: BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务.用于兼容旧的Web ASMX 服务.WSHttpBinding: 比 Basi ...

  3. 基础篇:1.JavaScript运行在html中,引用有几种方式?—— 6.js中常用的输出方式?

    书接上文,上文提到若干条JavaScript的基础性知识,大部分都是一些概念性的东西,本着认真严谨的态度,我们要认真对待,有些条目的问题是某个知识点的周边延伸,为节约篇幅,就一起整理了,如有描述不对的 ...

  4. WCF中常用的binding方式 z

    WCF中常用的binding方式: BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务.用于兼容旧的Web ASMX 服务. WSHttpBinding: 比 Bas ...

  5. nand flash坏块管理OOB,BBT,ECC

    转:http://www.cnblogs.com/elect-fans/archive/2012/05/14/2500643.html 0.NAND的操作管理方式 NAND FLASH的管理方式:以三 ...

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

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

  7. java中常用的加密方式

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...

  8. Java中常用的加密方式(附多个工具类)

    一.Java常用加密方式 Base64加密算法(编码方式) MD5加密(消息摘要算法,验证信息完整性) 对称加密算法 非对称加密算法 数字签名算法 数字证书 二.分类按加密算法是否需要key被分为两类 ...

  9. cocos2dx 游戏开发中常用场景切换方式以及特性

    runWithScene(CCScene* scene):启动游戏,并运行scene 场景.这个方法在主程序启动时第一次启动主场景时调用.   replaceScene(CCScene* scene) ...

随机推荐

  1. js——DOM操作(一)

    DOM:Document Object Model  文档对象模型 文档:html页面 文档对象:页面中元素 文档对象模型:定义  为了能够让程序(js)去操作页面中的元素 DOM会把文档看作是一棵树 ...

  2. AJAX JQuery 调用后台方法返回值(不刷新页面)

    AJAX JQuery 调用后台方法返回值(不刷新页面) (1)无参数返回值(本人亲试返回结果不是预期结果) javascript方法: $(function () {             //无 ...

  3. 高精度 java的一些题

    poj 1001 Exponentiation import java.util.*; import java.math.*; public class Main { public static vo ...

  4. [LeetCode]题解(python):153-Find Minimum in Rotated Sorted Array

    题目来源: https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/ 题意分析: 在一个不重复的翻转的数组里面找到最小那个 ...

  5. erlang学习笔记(1)

    提示符erl 注释% comment 表达式123456789 * 123456789. 变量(单一赋值)X = 123456789.X.Y = X * X * X.Y.f(). 整数浮点数X = 5 ...

  6. 关于C语言中结构体中的结构体成员导致的字节对齐问题

    关于结构体的字节对齐是什么,就不赘述,再此附上一篇文章,介绍字节对齐:http://www.linuxsong.org/2010/09/c-byte-alignment/ 这里的结构体字节对齐的数据类 ...

  7. win7_32位安装MySQL_5.6以及密码修改方法

    1.下载mysql: http://www.xiazaiba.com/html/361.html 2.安装 方便起见,全部默认下一步吧,原理一个样,最后安装到: 3.配置环境变量 我这里添加的是  C ...

  8. C++设计模式之装饰者模式

    #include "HandCake.h" //手抓饼 HandCake::HandCake() { ; this->name="手抓饼"; } Hand ...

  9. HDU 5738 Eureka(极角排序)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5738 [题目大意] 给出平面中一些点,在同一直线的点可以划分为一个集合,问可以组成多少包含元素不少 ...

  10. Oracle_用户管理

    创建用户: CREATE USER user   --创建用户user IDENTIFIED {BY password | EXTERNALLY}  --设备用户密码,EXTERNALLY说用该用户由 ...