NAND FLASH存储器的坏块管理

NAND FLASH存储器的坏块管理
(HAL)硬件适配层管理坏块,通常工厂在出厂时建立一个坏块表标记坏块。
坏块是那些包含一位或者多位无效位,可靠性不能保证的块。坏块可能在出厂时已经存在,也可能在使用过程中产生。
有坏块的设备和无坏块的设备有相同的质量等级和相同的AC,DC特性,一个坏块不会影响有效块的性能,因为它通过选择晶体管来分离线性位和通用代码行。
在NAND FLASH坏块管理中,块替换和ECC是必要的,ST在HAL中提供了这些模块。
图1

NAND FLASH存储器的坏块管理_第1张图片
有效的块被擦除后,将全为FFH,坏块信息在出厂时预先被写入。那些第一页或第二页的spare区的第6个字节是blockStatus如果不为FF则是坏块。
坏块信息必须在试图擦除前读,坏块信息也可能被擦除。强烈要求执行坏块管理算法去允许系统认识到原始信息的坏块。
在读NAND FLASH的所有SPARE区时将创建坏块表。此表必须保存在一个好块中,当重启NAND FLASH时,坏块表将被加载到内存中。坏块表中包含的块将不被寻址。所以,当FLASH传输层(FTL)寻址到一个坏块时,坏块管理程序将重定向到一个好块。
图2


NAND FLASH存储器的坏块管理_第2张图片使用过程中,NAND设备也会产生坏块。NAND设备有一个Status Register用来定义操作成功或者失败。如果状态寄存器在编程或者擦除时出错,当前块被标志为坏块。
当ECC校验探测到两个或者更多错误,并且只能纠正一个时,也为标志为坏块。ECC标志当前块为坏块,坏块管理软件重新分配一个新块去映射块地址。同一块中页编程操作未生效,块将重新编程当前数据被重新定位,并且复制剩余替换块为有效块。
标志坏块和新块的分配可以有两种常规方法:“
跳过块方法:
跳过块的方法是通过算法创建一个坏块表并且当目标地址和坏块地址一致时,数据将被存储在下一个好块中,跳过坏块。
当NAND设备使用过程中生成坏块时,其数据也存储在下一个好块中,这个信息表明好块和坏块都存储在NAND FLASH设备中。
FTL用链表方法写逻辑扇区,它将不标志整个块为坏块,只是跳过坏页。通过这种方法,FTL想新的物理块写逻辑扇区,标志老页无效。
预留块方法:
在预留块方法,坏块表还是像上面描述的方式创建,在这种方法,坏块不被跳过,但是通过重定向替换一个FTL认识的好块。为这个目的,坏块管理软件在NAND FLASH中创建两个区域:用户地址块区域和保留块区域。FTL使用用户地址块区域存储数据,用保留块区域作为坏块替换和保存坏块表,与”develop bad blocks“重映射。定义这两个区域,定义起始地址和保留区域长度是必要的,长度可以是用户给的,也可以是坏块管理软件强加的。例如,NAND设备有512MB,用户地址块区域是4016块,并且保留块区域从4017到4096块。
FTL每次写逻辑扇区,他将计算写块的物理地址,在FTL开始写时,坏块管理软件检测块是否是坏块。如果是,它将返回扇区重新映射的好块地址。如果NAND FLASH使用过程变为坏块,坏块管理软件重新映射坏块,并且复制他含有的数据替换它。
坏块管理对FTL是完全透明的。对FTL来说,数据被写入相同的地址。

你可能感兴趣的:(编程,算法,Flash,存储)