Flash全名叫做Flash EEPROM Memory,即平时所说的“闪存”,是掉电非易失性存储设备(Non-volatile Memory Device)。它结合了ROM和RAM的长处,不仅具备电可擦除可编程(EEPROM)的性能,还可以快速读取数据(NVRAM的优势),使数据不会因为断电而丢失。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EEPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码,或者直接当大容量存储设备使用(U盘、MP3等)。
二、Flash的分类
目前Flash主要有两种NOR Flash和NAND Flash。NOR Flash的读写和我们常见的SDRAM的读写是一样,用户可以直接往特定地址写特定数据。NAND Flash没有采取内存的随机读取技术,它的读写是以一次读写一块的形式来进行的。NOR Flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节,是并行读写。NAND Flash器件使用复杂的I/O口来串行地存取数据,8个I/O引脚用来传送控制、地址和数据信息,是串行读写。
NOR Flash随机读写速度快、功耗低、稳定性高,常用于数据/程序存储。NAND Flash容量大、读写速度快、存储密度高,适合大容量的多媒体应用中。由于物理制程/制造方面的原因,导致NOR 和NAND在一些具体操作方面的特性不同:
用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flash以外,还加上了一块小的NOR Flash来运行启动代码。
目前市面上的Flash主要来自Samsung、Toshiba、MICRON、Intel、Hynix等。
三、NAND Flash的物理存储单元的阵列组织结构
以三星K9K8G08U0A为例来介绍NAND Flash的内部组织结构。
图1是K9K8G08U0A的物理存储单元的阵列组织结构。从图中可知:
1.NAND Flash芯片由很多个块(Block)组成,块的大小一般是128KB、256KB、512KB等,K9K8G08U0A是128KB。
2.每个块里面又包含了很多页(Page)。每页的大小,老的NAND Flash,页大小是256B/512B,这类的NAND Flash被称作small block,地址周期只有4个。现在常见的NAND Flash多数是2KB,被称作big block,对应的读写命令地址一共5个周期(cycle)。更新的NAND Flash是4KB。
块是NAND Flash擦除操作的基本/最小单元。
3.每一页,对应还有一块区域,叫做空闲区域(spare area)/冗余区域(redundant area),而Linux系统中,一般叫做OOB(Out Of Band)。NAND Flash在数据读写时相对容易出现错误,为了保证数据的正确性,必须要有对应的检测和纠错机制,此机制被叫做EDC(Error Detection Code)/ECC(Error Code Correction,或者Error Checking and Correcting)。因此设计了多余的区域,用于放置数据的校验值。
页是NAND Flash写入操作的基本/最小单元。
常见的NAND Flash,内部只有一个chip,每个chip只有一个plane。而有些复杂的容量更大的NANDFlash,内部有多个chip,每个chip有多个plane。这类的NAND Flash,往往也有更加高级的功能,比如下面要介绍的Multi Plane Program和Interleave Page Program等。
比如,K9K8G08U0A芯片(chip)包含有4个plane,K9WAG08U1A芯片包含有2个chip(K9K8G08U0A)。
四、Flash相对于普通存储设备的特殊性
Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block,常见的块的大小是128KB/256KB/512KB,全部擦除为1,也就是里面的内容全部都是0xFF了。由于是一下子就擦除了,相对来说,擦除用的时间很短,可以用一闪而过来形容,所以叫做Flash Memory。中文有的翻译为(快速)闪存。
一般存储设备,比如硬盘/内存,读取和写入都是以bit位为单位,读取一个bit的值,将某个值写入对应的地址的位,都是可以按位操作的。但是Flash由于物理特性,使得内部存储的数据,只能从1变成0,这点,可以从其内部实现机制了解到,只是方便统一充电,不方便单独的存储单元去放电,所以才说,只能从1变成0,也就是释放电荷。所以,总结一下Flash的特殊性如下: