1、为何需要分析?
最近一直接触这类驱动,如果对它的原理不懂的话,驱动调试会很麻烦!!!!!!
2、ecc?
nand的纠错能力,目前有1位、4位和8位,也就是说在512字节中如果是4位的ecc那就可以纠正最多4个bit的错误,一般就是翻转的错误!
3、oob?
冗余区域,一般存放的是ecc纠错码,一般4位的ecc的纠错后需要的字节数为:4 bit ecc, per 512 bytes can creat 13 * 4 = 52 bit , 52 / 8 = 7 bytes ,就是需要7个字节的空间
而我们目前的nandflash的页大小一般为2kb,也就是2kb/512bytes==4,也就是说至少需要4×7=28个ecc纠错的字节存放的地方
oob分区一般已经由硬件厂商固定了,每512字节的oob大小为16字节,那么2kb的页就是64字节
oob分区:
struct nand_ecclayout _nand_oob_64 = {
.eccbytes = 24, //ecc纠错需要的空间
.eccpos = { //具体存放的位置
40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63},
.oobfree = {
{.offset = 2, //偏移2位,这2位主要用来存放坏块标志,0xff
.length = 38}} //多余的部分,可以用来存放系统文件的标志,如yaffs!
};
3、现在nand和sdram一般都集成了!