在对NAND Flash进行Erase和Write操作时,如果失败,那么就将此块标记为坏块,通常是将spare区的第一字节设为非0xFF。那么在将坏块标记出来后,怎么使用它的?在向某块写入东西的时候都要先判断它是不是坏块么?在NAND Flash的手册中,提到如果出现Erase Failure 或者Program Failure时,除了将本块标记为坏块之外,还要进行block replace。 如果我要把NK写到Block7 ~ Block n, 而Block 9 是坏块,我用一个reseved block(假设为Block i)来保存本应该写到block 9 中的内容,那么系统运行时,怎么实现自动忽略坏块block 9 而去执行block i中的内容呢?
对着现有的BSP包研究了一段时间了,可关于这个部分的实现还是不太懂,希望有知道的高手能稍微介绍一下,谢谢!
WINCE6.0 NANDFLASH 坏块处理
------解决方案--------------------
错误跳过,查找以下个正常的block,写入。。。。然后写到你的nk内容全部写完位置。
n并没有规定一个具体值的。
------解决方案--------------------
系统对坏块的管理是在文件系统的FTL层来实现的,WinCE保持有一个逻辑块与物理块的对应表,系统初始化时建立这个表,上层文件操作通过这个表将逻辑扇区转换为对应的物理扇区然后进行访问,使用中出现坏块时就将表中逻辑扇区对应的物理扇区更新为新的地址(Reserve块中的扇区)。
Boot里面写NK应该是平坦映射,一种方式是如果Block9为坏块,直接跳过去,在Block10里面接着Block8的内容往里写,另一种方式是在开始区域建立一个逻辑-物理块映射表。