2.2.2.2 Nand Flash 的详细分类
Nand Flash,按照硬件类型,可以分为
(1)Bare NAND chips:裸片,单独的 Nand Flash 芯片
(2)SmartMediaCards: =裸片+一层薄塑料,常用于数码相机和 MP3 播放器中。之所以
称 smart,是由于其软件 smart,而不是硬件本身有啥 smart 之处。
(3)DiskOnChip:裸片+glue logic,glue logic=硬件 ECC 产生器+用于静态的 nand 芯片控
制的寄存器+直接访问一小片地址窗口,那块地址中包含了引导代码的 stub 桩,其可以从
Nand Flash 中拷贝真正的引导代码。
2.2.3 SLC 和 MLC 的实现机制
Nand Flash 按照内部存储数据单元的电压的不同层次,也就是单个内存单元中,是存储 1 位
数据,还是多位数据,可以分为 SLC 和 MLC。
2.2.3.1 SLC(Single Level Cell)
单个存储单元,只存储一位数据,表示 1 或 0。
就是上面介绍的,对于数据的表示,单个存储单元中内部所存储电荷的电压,和某个特定的
阈值电压 Vth,相比,如果大于此 Vth 值,就是表示 1,反之,小于 Vth,就表示 0.
对于 Nand Flash 的数据的写入 1,就是控制 External Gate 去充电,使得存储的电荷够多,超
过阈值 Vth,就表示 1 了。而对于写入 0,就是将其放电,电荷减少到小于 Vth,就表示 0
了。
关于为何 Nand Flash 不能从 0 变成 1,我的理解是,物理上来说,是可以实现每一位的,从
0 变成 1 的,但是实际上,对于实际的物理实现,出于效率的考虑,如果对于,每一个存储
单元都能单独控制,即,0 变成 1 就是,对每一个存储单元单独去充电,所需要的硬件实现
就很复杂和昂贵,同时,所进行对块擦除的操作,也就无法实现之前所说的的,Flash 的速
度,即一闪而过的速度了,也就失去了 Flash 的众多特性了。
2.2.3.2 MLC(Multi Level Cell)
与 SLC 相对应的,就是单个存储单元,可以存储多个位,比如 2 位,4 位等。其实现机制,
说起来比较简单,就是通过控制内部电荷的多少,分成多个阈值,通过控制里面的电荷多少,
而达到我们所需要的存储成不同的数据。比如,假设输入电压是 Vin=4V(实际没有这样的
电压,此处只是为了举例方便),那么,可以设计出 2 的 2 次方=4 个阈值, 1/4 的 Vin=
1V,2/4 的 Vin=2V,3/4 的 Vin=3V,Vin=4V,分别表示 2 位数据 00,01,10,11,对于
写入数据,就是充电,通过控制内部的电荷的多少,对应表示不同的数据。
对于读取,则是通过对应的内部的电流(与 Vth 成反比),然后通过一系列解码电路完成读
取,解析出所存储的数据。这些具体的物理实现,都是有足够精确的设备和技术,才能实现
精确的数据写入和读出的。
单个存储单元可以存储 2 位数据的,称作 2 的 2 次方=4 Level Cell,而不是 2 Level Cell,
关于这点,之前看 Nand flash 的数据手册(datasheet)的时候,差点搞晕了。
同理,对于新出的单个存储单元可以存储 4 位数据的,称作 2 的 4 次方=16 Level Cell。
2.2.3.3 关于如何识别 SLC 还是 MLC
Nand Flash 设计中,有个命令叫做 Read ID,读取 ID,意思是读取芯片的 ID,就像大家的
身份证一样,这里读取的 ID 中,是读取好几个字节,一般最少是 4 个,新的芯片,支持 5
个甚至更多,从这些字节中,可以解析出很多相关的信息,比如此 Nand Flash 内部是几个