看了很多坏块管理的文章,加上自己的理解,把整个坏块管理做了个总结。
坏块分类
1、出厂坏块
又叫初始坏块,厂商会给点最小有效块值(NVB,mininum number of valid blocks)。
2、新增坏块
使用过程中因为磨损造成的新增坏块,或者使用坏块。
3、假性坏块
异常掉电等原因被主控误判的假性坏块。
坏块判断
1、对于出厂坏块的判断
扫描厂商指定地址所对应的byte是否有0xFF标志,若没有0xFF则为坏块。
2、对于新增坏块的判断
(1)当执行擦除指令时出错;
(2)当执行写命令时出错;
(3)当执行读取命令时出错,而且bit的错误超过ECC的纠错能力;
那么,该Block将被判断为坏块。
坏块管理
1、建立和更新坏块表(Bad Block Table)
对出厂坏块和新增坏块集中(或分别)管理。
出厂坏块被标识在SA区中;在读取闪存内所有的SA区域后,坏块表就被建立;当坏块表创建后,主控会把坏块表保存在某个好的块里,每次重启后,主控会从那个块里把表调用进缓存(SDRAM)里。
2、坏块表内容
(1)用1bit标识:0表示好块,1表示坏块;
(2)用2bit标识:00表示好块,01表示Program失败的坏块,10表示Read失败的坏块,11表示Erase失败的坏块。
3、坏块不建议擦除
由于在使用中会产生坏块,所以SSD的主控在每次写入、擦除、读取等操作后都要检查块的状态;其中删除操作前也需要检查块的状态,因为坏块信息被擦除之后无法恢复,所以不建议擦除坏块,擦除前需确保不是坏块。
4、坏块管理策略
(1)坏块跳过策略:遇到坏块跳过,存放进好块里。
(2)坏块替换策略:替换之后,FTL会将坏块地址重新映射到好块地址。
基于NAND Flash来讲,用SA区中的好块替换坏块。Spare Area(SA区)一般用来标记坏块,和保存对main区数据的ECC校验码。是基于NAND Flash的概念。
基于SSD来讲,用OP中的free block替换坏块。Over Provisioning(OP,预留空间)不仅仅只是用来保证垃圾回收的正常完成,还存储着SSD内部的系统数据(包括:出厂坏块信息、SSD固件、Mapping Table等)。是基于SSD的概念。
OP大小为所有64bytes的总和。