nand flash bad block 导致的问题

以前NOR FLASH用得比较多,因为此类FLASH一般是不考虑坏块的,若有坏块就不能使用。而NAND FLASH坏块现象非常普遍,

大部分人都在操作系统的基础上使用,不会发现有什么问题。因为操作系统对NAND的读写操作做了封装,并且是基于文件系统之上,

对用户是透明的。其实之前刚用NAND FLASH时,也没有发现什么需要特殊注意的地方。但今天的调试后发现的问题,让我感觉使用

两者FLASH时需要考虑的程序设计细节!

 

下面就举一个嵌入式开发过程中FLASH分区的例子,警惕自己以后特别注意:

FLASH划分为boot, para, kernel, rootfs(yaffs), dbase(yaffs)。假设:

boot +loader 512K

para                512k

kernel             6M

rootfs              12M

dbase             6M

系统启动后,boot部分引导代码处于NAND FLASH的无坏块区,即第一个BANK。之后的运行过程中如果涉及到读写FLASH,都需要进行坏块的

计算。所以,如果BOOT+LOADER编译出来就由512K,那么千万不要把BOOT分区只定义到512K这么大。万一后续升级后发现有坏块,都没地方

写了,只有溢出BOOT分区,写到PARA参数分区。

 

同样,当通过boot写其他分区时,避免整块的读写操作。比如更新PARA时,一般NORFLASH经常都从PARA读512K数据,修改后直接存储512K进去。

即便参数有可能只有几十K的数据大小。(并且千万不要按以前通过分区尾最后一个字节来判断分区的有效性,这里是行不通的)

如果有坏块,实际的phylength肯定要大于512K,就会产生错误。最好定义一个PARA的结构体,通过结构体的大小来判断读写

界限。

 

对于YAFFS文件系统类的分区,其实原则也是一样的,对于常用的DBASE数据库分区,可以定义的大一些,因为操作久了,坏块可能会增加!

只是具体的保护由文件系统来执行,但最终的结果肯定是存储不下的!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值