看了不少坏块管理的文章,加上本身的理解,把整个坏块管理作了个总结。缓存
又叫初始坏块,厂商会给点最小有效块值(NVB,mininum number of valid blocks)。app
使用过程当中由于磨损形成的新增坏块,或者使用坏块。blog
异常掉电等缘由被主控误判的假性坏块。it
扫描厂商指定地址所对应的byte是否有0xFF标志,若没有0xFF则为坏块。io
(1)当执行擦除指令时出错;垃圾回收
(2)当执行写命令时出错;im
(3)当执行读取命令时出错,并且bit的错误超过ECC的纠错能力;总结
那么,该Block将被判断为坏块。数据
对出厂坏块和新增坏块集中(或分别)管理。异常
出厂坏块被标识在SA区中;在读取闪存内全部的SA区域后,坏块表就被创建;当坏块表建立后,主控会把坏块表保存在某个好的块里,每次重启后,主控会从那个块里把表调用进缓存(SDRAM)里。
(1)用1bit标识:0表示好块,1表示坏块;
(2)用2bit标识:00表示好块,01表示Program失败的坏块,10表示Read失败的坏块,11表示Erase失败的坏块。
因为在使用中会产生坏块,因此SSD的主控在每次写入、擦除、读取等操做后都要检查块的状态;其中删除操做前也须要检查块的状态,由于坏块信息被擦除以后没法恢复,因此不建议擦除坏块,擦除前需确保不是坏块。
(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的总和。