nandflash oob解析

   1: 目前比较常见NAND Flash每一页大小为(2048+64)字节(还有其他格式的NANDFlash,比如每页大小为(256+8)、(512+16)、(2048+128)等),其中的2048字节就是一般存储数据的区域,64字节称为OOB(Out OfBand)区。通常在OOB区存放坏块标记、ECC较验码、文件系统信息(yaffs)等。 而cramfs、jffs2文件系统映像文件中并没有OOB区的内容,如果将它们烧入NORFlash中,则是简单的“平铺”关系;如果将它们烧入NAND Flash中,则NANDFlash的驱动程序首先根据OOB的标记略过坏块,然后将一页数据(2048字节)写入后,还会计算这2048字节的ECC较验码,最后将它写入OOB区,如此循环。cramfs、jffs2文件系统映像文件的大小通常是512的整数倍。 而yaffs文件系统映像文件的格式则跟它们不同,文件本身就包含了OOB区的数据(里面有坏块标记、ECC较验码、其他yaffs相关的信息)。所以烧写时,不需要再计算ECC值,首先检查是否坏块(是则跳过),然后写入2048字节的数据,最后写入64字节的OOB数据,如此循环。yaffs文件系统映像文件的大小是(2048+64)的整数倍

  2:  1)烧写yaffs文件系统映像时,分区上第一个可用的(不是坏块)块也要跳过。2)如果写入的数据是oxff,代表不写入数据

  3:  yaffs文件系统格式详细见https://yaffs.net/yaffs-2-specification

Comment

Size for 1kb chunks

Size for 2kB chunks

blockState

Block state. non-0xFF for bad block

1 byte

1 byte

chunkId

32-bit chunk Id

4 bytes

4 bytes

objectId

32-bit object Id

4 bytes

4 bytes

 

nBytes

Number of data bytes in this chunk

2 bytes

2 bytes

blockSequence

sequence number for this block

4 bytes

4 bytes

tagsEcc

ECC on tags area

3 bytes

3 bytes

ecc

ECC, 3 bytes/256 bytes of data

12 bytes

24 bytes

Total

 

30 bytes

42 bytes

 

 

4: 如果使用8位HWECC时,会生成52字节的ECC校验数据并写入oob,而yaffs2自身也有28字节的数据写日oob,也就是说,至少需要28+52=80字节的oob空间,而对于我们的nand flash,页大小为2048字节,oob空间为64字节,明显空间不足,进而导致了我们前面看到的问题,所以,采用8位HWECC时应该选用不使用oob空间的文件系统,如jffs2,但是jffs2文件系统在挂载时比较慢,感觉上不如yaffs2轻巧。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值