struct nand_ecclayout

flash芯片
MT29F8G08ABACA
? Open NAND Flash Interface (ONFI) 1.0-compliant1
? Single-level cell (SLC) technology
? Organization
– Page size x8: 4320 bytes (4096 + 224 bytes)   //目标flash
– Page size x16: 2160 words (2048 + 112 words)
– Block size: 64 pages (256K + 14K bytes)
– Plane size: 2 planes x 2048 blocks per plane
– Device size: 8Gb: 4096 blocks   //目标flash
– Device size: 16Gb: 8192 blocks

使用8bit BCH ECC效验算法,
下面看ecc保存在oob中的位置,主要解析ecc在obb中存放的位置
static struct nand_ecclayout msm_nand_oob_224_x8 = {
    .eccbytes    = 104,
    .eccpos        = {
          0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,
         13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
         26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,
         39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,
         52,  53,  54,  55,  56,  57,  58,  59,     60,  61,  62,  63,  64,
         65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,
         78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
        123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
        },
    .oobavail    = 32,
    .oobfree    = {
        {91, 32},
    }
};

eccbytes 是最终通过bch ecc算法算出的校验字节,从芯片可看出,一个page为4096bytes,oob为224bytes
eccpos  为ecc效验字节存放在oob中的位置
oobavial    还有几个是空闲的
oobfree   空闲的oob的位置是哪些,oob线性地址31~91是空闲的

为什么是ecc是104bytes, 目前使用的是512byte为计算单位,而一个计算单元会产生13bit*t(t为可以纠正的错位个数),故(4096/512)*13*8/8 = 104byte

BCH算法没有看懂,所以没有列出来.

猜你喜欢

转载自blog.csdn.net/u012385733/article/details/81318673