zoukankan      html  css  js  c++  java
  • NandFlash ECC 校验

    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位。

    ECC算法的详细说明 - 还东国 - 还东国的博客

    其中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 依此类推。

    行校验如下图所示

    ECC算法的详细说明 - 还东国 - 还东国的博客

    其中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。存放次序如下表所示:

    ECC算法的详细说明 - 还东国 - 还东国的博客

    NandFlash 的每一页有两个区:main区和spare区,main区用来存储正常的数据,spare区用于存储其他附加信息,其中就包括ECC校验码。当我们在写入数据的时候,我们就计算这一页数据的ECC校验码,然后把校验码存储到spare区的特定位置中,在下次读取这一页数据的时候,同样我们也计算ECC校验码,然后和spare区中的ECC校验码比较,如果一致说明读取数据正确,如果不一致则错误。ECC算法较为复杂,好在S3C2440能够硬件产生ECC校验码,因为K9F2G08U0B是8位IO口,因此S3C2440共产生4个字节的main区ECC码和2个字节的spare区ECC码。在这里我们规定,在每一页的第0-3地址存放main区ECC,4-5地址存储spare区ECC。

    参考:http://blog.chinaunix.net/uid-21880738-id-1813090.html

  • 相关阅读:
    hdu5728 PowMod
    CF1156E Special Segments of Permutation
    CF1182E Product Oriented Recurrence
    CF1082E Increasing Frequency
    CF623B Array GCD
    CF1168B Good Triple
    CF1175E Minimal Segment Cover
    php 正则
    windows 下安装composer
    windows apache "The requested operation has failed" 启动失败
  • 原文地址:https://www.cnblogs.com/losing-1216/p/4895604.html
Copyright © 2011-2022 走看看