nand flash oob区与坏快标记

本文详细解析了NAND Flash中坏块标记的位置及其对文件系统的影响,特别是在YAFFS2和JFFS2中的应用。介绍了ATMEL NAND驱动中如何通过偏移OBB数据避免覆盖坏块标记,确保数据完整性和文件系统的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于3.10.90内核代码

对于nand flash, 坏块标记一般位于每个block的第一个page页spare区的第一个字节。如一个page为2k+64Byte, 则 64为spare区,用来存放oob和ecc,以及block的坏块标记(只有某些页如第一页)。对于一些文件系统如 yaffs2和jffs2会使用到 oob区来存放一些数据 。由于坏块标记位于 spare区的第一个字节,则 oob数据需要跳过该位置。

 

在  atmel_nand.c (drivers\mtd\nand) 里:

static struct nand_ecclayout atmel_oobinfo_large = {

.eccbytes = 4,

.eccpos = {60, 61, 62, 63},

.oobfree = {

{2, 58}  // 2表示oob偏移两个字节,从而与坏块标记位错开。

},

};

 

通过 atmel_hw_nand_init_params 里:

nand_chip->ecc.layout = &atmel_oobinfo_large;

 

在 mtd 设备操作时:

mtd->_write_oob = nand_write_oob

nand_write_oob  // nand_base.c (drivers\mtd\nand)

nand_do_write_oob   

nand_fill_oob 

case MTD_OPS_AUTO_OOB  时会使用下面的  中的 offset, 对oob区中的数据进行偏移

 struct nand_oobfree *free = chip->ecc.layout->oobfree;

 boffs = free->offset + woffs;  // 对应的上面的 offset 进行偏移 2个字节,不是从spare区顶头写

 memcpy(chip->oob_poi + boffs, oob, bytes);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值