引脚名称 | 引脚功能 |
CLE | 命令锁存功能 |
ALE | 地址锁存功能 |
/CE | 芯片使能 |
/RE | 读使能 |
/WE | 写使能 |
/WP | 写保护 |
R/B | 就绪/忙输出信号 |
Vcc | 电源 |
Vss | 地 |
N.C | 不接 |
IO0~IO7 | 数据传输、命令、地址 |
二、存储组织形式
一个plane就是一个存储矩阵。包括若干个Block
OOB/Spare Area
每个页,相应另一块区域。叫做空暇区域(SpareArea)。在Linux系统中。一般叫做OOB(Out of Band)。
数据在读写的时候相对容易出错,所以为了保证数据的正确性。必需要有相应的检測和纠正机制,此机制叫做ECC/EDC,所以设计了多余的区域,用于存放数据的校验值。
OOB的读写是随着随着页的操作一起完毕的。
OOB的详细用途包含下面几个方面:
► 标记所处的block是否为坏块
► 存储ECC数据
► 存储一些和文件系统相关的数据。如jaffs2就会用到这些空间存储一些特定信息。而yaffs2文件系统。会在oob中存放非常多和自己文件系统相关的信息
一个16G的NAND的存储结构大致例如以下:
一个16G的NANDFlash须要34位地址,而传输地址的IO口是8位的。因此须要5个循环来传输地址信息。
NAND Flash中的坏块
Nand Flash 中。一个块中含有1 个或多个位是坏的,就称为其为坏块Bad Block。坏块的稳定性是无法保证
的。也就是说,不能保证你写入的数据是对的。或者写入对了。读出来也不一定对的。与此相应的正常的块。肯定
是写入读出都是正常的。
坏块有两种:
(1)出厂时就有存在的坏块:
一种是出厂的时候。也就是,你买到的新的,还没用过的Nand Flash,就能够包括了坏块。此类出厂时就有的坏块,被称作factory (masked) bad block 或initial bad/invalid block,在出厂之前,就会做相应的标记, 标为坏块。
(2) 使用过程中产生的坏块:
第二类叫做在使用过程中产生的,因为使用过程时间长了,在擦块除的时候,出错了,说明此块坏了,也
要在程序执行过程中,发现。而且标记成坏块的。详细标记的位置。和上面一样。这类块叫做worn-out bad block。即用坏了的块。
SLC、MLC以及TLC区别
这几种闪存的物理结构是相同的,SLC(single-level-cell)是最简单的一种,加电就是1,断电就是0。
MLC (multi-level-cell)就是每个cell单元中有多个信号,通过控制不同的电压来实现的,常见的是2个电信号的,它的信号组合有11,01,00,10四种,也就是可储存的容量提升了。
TLC(Triple-level-cell)实际上也是MLC中的一种,不过常说的MLC几乎就是特指2个信号位的。TLC每个Cell单元中可荣内的信号更多,有000,001,010,011,111,110,100,101这8种,容量会更大。
提升容量、降低成本是MLC及TLC最大的优点,但是负面影响也很严重。
1.MLC性能下降
MLC需要更精确的电压控制,program过程所需时间更多,因此写入性能也会大幅下降,理论上只有SLC的1/4;读取,特别是随机读取性能也会受影响,因为需要花更多的时间从四种电信号状态中区分所需数据,读取性能只有SLC的1/3。
SLC与MLC性能对比
2.MLC可靠性下降
SLC闪存一次P/E循环只需要击穿一次氧化层,而MLC需要不同的电压多次击穿氧化层,物理损害比SLC要严重得多,MLC的写入次数指数级下降,比如SLC的理论寿命是1万-10万次,而MLC的写入寿命上限就只有1万次,而且随着工艺的进步,这个数值还在下降,25nm MLC普遍只有3000-5000次。
3.MLC需要更高的纠错
由于电压分的更细,MLC在读取数据的过程中需要提高敏感度,不然就容易出现读错数据的可能,也就是说MLC出错的几率增大了,纠错要求也必须随之提高,反应在SSD上就是需要更强的ECC机制。
除了上面提到的几点缺陷之外,MLC的漏电流、电压边界位移(voltage margin shifting)现象也增加了,MLC的功耗和发热也更高,这些都是MLC带来的问题,虽然相比前面几个并不算严重。
说了这么多MLC的“坏话”,其实也没必要,因为SLC的成本和售价不是谁都能接受的,而MLC带来的好处是极具诱惑力的,它带来的问题可以通过技术手段缓解,至少SSD的主流还是MLC,而且针对企业级应用的MLC在可靠性和寿命上一样有保障。而且跟TLC一比较就觉得MLC好了,同样再跟QLC一比较,TLC也不是那么难接受。