|
图解NAND Flash
Nand-flash存储器是flash存储器的-种,其内部采用非线性宏单元模式,为固态大容量存储器的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速度快,适用于大量资料的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。
内存和NOR型闪存的基本存储单元是bit,用户可以随机访问任何一个bit的信息。而NAND型闪存的基本存储单元是页(Page)(可以看到, NAND型闪存的页就类似硬盘的扇区,硬盘的一个扇区也为512字节)。每一页的有效容量是512字节的倍数。所谓的有效容量是指用于数据存储的部分,实际上还要加上16字节的校验信息,因此我们可以在闪存厂商的技术资料当中看到“(512+16)Byte”的表示方式。目前2Gb以下容量的NAND型闪存绝大多数是(512+16)字节的页面容量,2Gb以上容量的NAND型闪存则将页容量扩大到(2048+64)字节。
NAND型闪存以块为单位进行擦除操作。闪存的写入操作必须在空白区域进行,如果目标区域已经有数据,必须先擦除后写入,因此擦除操作是闪存的基本操作。一般每个块包含32个512字节的页,容量16KB;而大容量闪存采用2KB页时,则每个块包含64个页,容量128KB。每颗NAND型闪存 的I/O接口一般是8条,每条数据线每次传输(512+16)bit信息,8条就是(512+16)×8bit,也就是前面说的512字节。但较大容量的 NAND型闪存也越来越多地采用16条I/O线的设计,如三星编号K9K1G16U0A的芯片就是64M×16bit的NAND型闪存,容量1Gb,基本数据单位是(256+8)×16bit,还是512字节。
寻址时,NAND型闪存通过8条I/O接口数据线传输地址信息包,每包传送 8位地址信息。由于闪存芯片容量比较大,一组8位地址只够寻址256个页,显然是不够的,因此通常一次地址传送需要分若干组,占用若干个时钟周期。 NAND的地址信息包括列地址(页面中的起始操作地址)、块地址和相应的页面地址,传送时分别分组,至少需要三次,占用三个周期。随着容量的增大,地址信息会更多,需要占用更多的时钟周期传输,因此NAND型闪存的一个重要特点就是容量越大,寻址时间越长。而且,由于传送地址周期比其他存储介质长,因此 NAND型闪存比其他存储介质更不适合大量的小容量读写请求。
和磁盘类似,NAND Flash读写数据的基本粒度为页(page),然而读、写数据所需的时间却不一样,一般写入时间是读出的3到10倍。此外,Flash不允许数据的直接覆盖写,必须首先擦除旧有数据才能写入新的,而擦除的粒度为块(block),通常一个块包含有64个页。擦除的速度是很慢的,而且每一块的擦除次数也有限,平均为100万次。下面将给出一个例子来具体说明NAND Flash的特点。下面是三星K9K8G08U0M芯片的Flash组织结构图。

NAND Flash 组织结构图
从图中可以看出,整个Flash的容量为8448Mbit,其中含有8192个物理块,每块包含64个页,每页除了2K的数据区之外,还有64字节的额外空间用于存放错误校验码等信息。除了Flash的主体,我们还可以看到一个一页大小的数据寄存器。事实上,每一次Flash的读写操作都需要使用这个寄存器来完成。例如,读操作实际上分成两个阶段,首先是把指定地址中的整页数据载入到寄存器中(时间为20微秒),然后再从寄存器输出数据,可以连续输出,也可以根据指定偏移量随机输出,且随机输出的次数不限(每个字节的输出周期为20纳秒);而写操作也分为两个阶段,第一阶段是把数据从外界输入到寄存器,可以整页输入,也可以随机输入,且随机输入的次数不限,每字节的输入周期也是20纳秒,第二阶段便是把寄存器中的数据固化到Flash上,时间为200微秒,每一页原则上只能有一次固化操作,然而大部分NAND Flash(如本例)允许在同一页中的几个片断按照先后顺序分几次写入,本例中为4次,这种情况叫做partial page programming。
除了partial page programming,NAND Flash还有另外一种有意思的操作,也和数据寄存器相关,叫做copy-back。就是说,当某个数据页需要被复制到新的位置时,只需将其载入到数据寄存器中,然后根据接收到的目标地址将该页数据固化到Flash上新的位置,这样就省去了整页数据在寄存器和RAM之间的输入输出过程。另外,在数据被载入到寄存器之后,Flash允许程序使用随机输入数据的方式改写该页的部分内容,然后再固化到目标位置。
|