NAND Flash的坏块管理设计
③只发现一张最高版本并且有效地坏块表Vn+1,并且有1张有效坏块表Vn——发生在写第二张Vn+1突然掉电,并且之前写第二张Vn也发生掉电;
④仅发现一张坏块表V0——发生在系统写第二张V0时掉电,此时系统需重新扫描建立映射表V1;
⑤没有发现任何坏块表——系统最初状态;
⑥两个完整的坏块表Vn+1,但num_bad_blk不一样——这种情况发生在更新第二个坏块表Vn+1时,写的时候出错,产生一个新的坏块,从而第二次更新的坏块表Vn+1的坏块数增加了。
对于情况①,只需在系统最初建立前建立好映射关系即可。
对于情况②,它经常出现在系统在写或者擦除Flash数据块时突然断电,导致数据或者ECC变化,从而Flash读导致ECC不正确。实际上Fl-ash块并没有坏。根据此种情况,将首先为此块分配一个映射块,并把数据拷入映射块。接着对此块进行torture操作,如果发现它为好块,则将之前映射操作撤销,将数据重新拷入此好块。如果此块确实已坏,则将此块标记为坏块,并更新映射表。
对于情况③,分配一个新的映射块,把有效数据写入新块,并建立映射信息。
对于情况④,分配一个新的映射块,并将此块查出,然后建立映射信息。
对于情况⑤,扫描整个Flash,建立映射表Vn、V0。
对于情况⑥,则采用坏块多的映射表Vn+1,并用它更新Vn+2、Vn+2。
2.2.2 坏块管理及上层接口实现
该模块实现基于上节所述坏块管理算法对Flash的所有有效块的使用。它主要是处理运行中产生坏块的情况,并让上层程序屏蔽此信息。
NANDFlash的坏块包含如下三种类型:
◆Flash上存在的出厂坏块;
◆读过程发生比特反转而被视为的坏块;
◆操作过程(读,写,擦除)中产生的新的坏块。
对于此模块主要完成后两种动态坏块类型的处理过程。对于出厂坏块,只需在初始化时检测出来并将其映射到一个好块,以后的读写过程中对映射块操作即可。
对于运行中产生的坏块,从操作类型(读、写、擦除)来进行分别处理。
①读过程中的比特反转导致ECC错误,由于比特反转是NAND工艺决定的,且是不可避免的随机行为,所以不能简单地根据ECC错误就将其当作坏块处理。具体处理流程如图4所示,通过torture操作判断此“坏块”已真正成为坏块。
如果NANDFlash在执行擦除或写操作过程时发生断电,则所操作的块内的数据具有不确定性。下次读该块的内容时,可能发生无法纠正的ECC错误。为了能处理这种情况,图4中的torture处理,其实现原理就是选择一些数据写入该块,再读出,如果不一致则该块已变成坏块。
评论