NAND FLASH 坏块相关知识

相关概念

1 NAND FLASH

1.1 NAND FLASH Memory介绍

NAND FLASH Memory,中文名闪存。因为其擦除速度很快,所以得名。
NAND FLASH 由日本东芝集团的Fujio Masuoka桀冈富士雄先生发明。不同于其他存储设备,NAND FLASH 数据线和地址线复用,不能利用地址线随机寻址,所以NAND FLASH是以页page为读取单位(一般单个page为2K Bytes),以块为擦除单位(一般单个block为128KB或256KB)。在发送一个擦除命令后,NAND FLASH一次性地将一个block,全部擦除为1,里面的内容全部都变为0xFF。由于擦除用的时间很短,如闪电一样快。所以我们将这种记忆体称为FLASH Memory。

1.2 NAND FLASH的硬件实现机制

NAND FLASH的基本单元是一个有floating gate的MOSFET。
数据在Flash内存单元中是以电荷(electrical charge) 形式存储的。存储电荷的多少,取决于外部门(external gate)所被施加的电压。数据的表示,以所存储的电荷的电压是否超过一个特定的阈值Vth来表示,存储的电荷够多,超过阈值Vth,就表示1了。而对于写入0,就是将其放电,电荷减少到小于Vth,就表示0了。

2 Bad Block 坏块

2.1Bad block的定义

由于NAND Flash的工艺不能保证NAND的Memory Array在其生命周期中保持性能的可靠,因此,在NAND的生产中及使用过程中会产生坏块。坏块的特性是:当编程/擦除这个块时,不能将某些位拉高,这会造成Page Program和Block Erase操作时的错误。

2.2 坏块的分类:出厂坏块FBB & 使用坏块 GBB

(1) FBB:Factory Bad Block,出厂坏块,刚出厂时就有的坏块,又被成为Masked bad block 或 initial bad/invalid block。 NAND Flash 出厂时,因为制造工艺的关系,会存在一定量的坏块。同时,出厂前原厂会对NAND FLASH进行测试,测试所用的块也有可能被原厂标记为坏块。
在出厂之前,原厂就会做对坏块进行标记,具体标记的地方是,对于现在常见的页大小为2K的NAND Flash,对于NAND flash, 坏块标记一般位于每个block的第一个page页spare区的第一个字节。具体可以查询不同product的datasheet。如果不是0xFF,就说明是坏块。相对应的是,所有正常的块,好的块,里面所有数据都是0xFF的。
(2) GBB:Grown Bad Block,使用坏块。在NAND Flash使用过程中,因为 NAND Flash 的擦写寿命有限(一般不超过 10 万次),当使用到一定时限后也会产生坏块。如果发现Block Erase或者Page Program错误,可以将把这个块标记为坏块。为了和固有坏块信息保持一致,spare area的第1个byte(字节)也会被标记为非0xFF的其他值。

2.3 坏块表:

一块flash的第一个block出厂时必须是好的, 否则表示整块flash不能用。因为一般第一个block会被用于保存坏块表(BBT,Bad Block Table)。由于有坏块管理的工作机制(Bad Block Management)在Linux内核MTD架构下的NAND Flash驱动,和UBOOT的NAND Flash驱动中,在加载完驱动之后,如果你没有加入参数主动要求跳过坏块扫描的话,那么都会去主动扫描坏块,建立必要的BBT的,以备后面坏块管理所使用。

2.4坏块的数量和位置

NAND FLASH原厂都会对坏块出现的数量和位置有标准,原厂一般会承诺坏块数量不超过2%,但坏块出现的位置不做保证(但第一个block出厂时必须是好的,因为第一个会用于存放BTT)。举例来说,NAND芯片有2048个block, 2048*0.02=40.96,故坏块数量不会超过40个。但坏块出现在哪里,是否连续,还是随机,不做保证。

2.5 坏块对好块的影响

由于好块与坏块会被选定的晶体管从位线和指令线隔离,所以坏块不会对好块造成影响(A bad block does not affect the performance of good blocks because it is isolated from the bit lines by select gates)

2.6 坏块的检测

对这些被标记为“坏块”的块,进行“擦除”操作。如果Block Erase发生错误,那就证明这个块是个真的坏块。

2.7 擦除操作注意事项

实际上我们也可以对标记坏块进行擦除。这样强行擦除后,坏块信息就不复存在了。对于出厂坏块,一般是不建议将标记好的信息擦除掉的。
UBOOT中有个命令是“nand scrub”,就以将块中所有的内容都擦除了,包括坏块标记,不论是出厂时的,还是后来使用过程中出现而新标记的。一般不建议用这个。NAND FLASH工厂生产时,在一个比较宽的温度和电压范围内测试并标记了nand坏块,这些坏块在一定的温度或电压下仍然可以工作,但可能在另一时刻条件发生改变后便会失效,成为一个潜在的定时炸弹。如果把原厂标记的坏块进行擦除,在写入和保存数据时很容易遇到数据丢失的问题。
最好用“nand erase”只擦除好的块,对于已经标记坏块的块,不擦除。

3 坏块管理

Device或者FLASH的controller会对坏块进行管理,也就是BBM(Bad Block Management)。这个我们后续再补充。

备注

1 为什么好块用0xff来标记:因为Nand Flash的擦除即是将相应块的位全部变为1,写操作时只能把芯片每一位(bit)只能从1变为0,而不能从0变为1。0XFF即表示全部都可以被擦除为11111111。说明可以被擦除成功,是好块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值