Flash
Flash是嵌入式设备上的非易失存储器件,一般和SDRAM,SOC一起构成了最小系统。很多SOC中可能已经集成了小容量的Flash和RAM,这不在我们下面讨论的范围之内,下面所说的Flash是独立的Flash芯片,通过接口和MCU相连接。
Flash存储原理
FLASH也常被译做“快闪”、“闪存”等,这是源于它能快速擦写存储阵列块的特点。其基本工作原理就是通过浮栅(Float Gate)的俘获和释放电子来改变晶体管的阈值电压,以使晶体管在某一控制栅电压下分别处于导通和截止两种不同的状态,来分别表示逻辑上的“1”和“0”。
Flash的分类
Flash的种类有NAND Flash与NOR Flash两种,对应于Flash里面存储单元的实现机制,NAND Flash内部结构是由与非门组成,而NOR Flash则由或非门组成。NAND Flash容量大,速度快,单位成本低,大量用于CF卡、SD卡等消费电子产品;NOR Flash容量小,但单片价格便宜,而且代码可以直接在上面运行,用于存储电子产品的执行代码、配置等。
NOR Flash容量少,主要用来存放执行代码。例如,在SMB的交换,路由器上,一般使用的是NOR Flash,大小为32MByte以下。NAND Flash容量大,一般用来存放数据,例如,在MP3,MP4上一般使用大容量的NAND Flash来存放歌曲,电影等。
下面涉及到的Flash,主要有NOR Flash和NAND Flash两种。
NOR Flash的分类
从接口上分,NOR Flash可以分为并行NOR Flash与串行NOR Flash两类。下面就简称并行Flash和串行Flash,如果涉及到NAND Flash则会特别说明。
并行Flash有48pin、56pin等,输出数据总线有8bit和16bit,地址线根据Flash容量不同,可以有20根或更多。并行Flash不需要MCU上有特殊的控制器,直接给各地址线、控制信号发相应的信号,就可以在数据线上输出相应的内容。
串行Flash,简称SPI Flash,一般只有8pin或者16pin,器件尺寸可以做得很小,通过串行的bit操作实现数据的访问,需要MCU上有SPI Flash控制器的支持,以进行SPI Flash的读写操作(至少要能实现bit与Byte的转换);由于是串行操作,因此SPI Flash的擦除、写入操作比并行Flash要慢(这还跟CPU的SPI Flash控制器的实现有关,如一次缓冲的大小等),因此经常会感觉firmware升级时间比较长。
NAND Flash的分类
SLC和MLC均是NAND Flash的存储原理级技术,也可以理解为目前NAND Flash在存储数据原理方面分道扬镳的一个表现.
U盘的一个大特点便是它的写入速度远不如读取速度快,但这并不不是所有U盘的共同问题,只是较大范围内存在这样的问题,其根源在于受于成本和体积的限制,大多数大容量USB闪存盘均采用MLC的闪存颗粒,只有极少数采用SLC的闪存颗粒,那么究竟MLC和SLC有什么本质的区别呢?
SLC全称单层式储存 (Single Level Cell),是指一个Block(块,Flash的基本存储单元,也可称为Cell)只有两种电荷值,高低不同的电荷值表明0或者1,因为只需要一组高低电压就可以区分出0或者1信号,所以SLC最大的驱动电压可以做到很低,传统的双电压卡或者低电压版本卡片肯定采用SLC类型的NAND Flash芯片.
SLC因为结构简单,在写入数据时电压变化的区间小,所以寿命较长,传统的SLC Flash可以经受10万次的读写,因此出现坏Block的几率较小,因为存储结构非常简单,一组电压即可驱动,所以其速度表现更好,目前所有的超高速卡都采用SLC类型的Flash芯片.不过这种一个Block只存储一组数据的模式无法在相同的晶圆面积上实现较高的存储密度,所以只能在工艺制程方面努力进步,才能满足用户在容量方面的要求.
MLC(多层式储存―Multi Leveled Cell)是那种充分利用Block的技术,它采用较高的电压驱动,通过不同级别的电压在一个Block中记录两组位信息(00、01、11、10),这样就可以将原本SLC的记录密度理论提升一倍,这对于曾经工艺制程遇到瓶颈的NAND Flash而言,是非常好的消息.不过MLC除了同制程、同晶圆面积时理论大一倍的记录空间外,存在一些先天的弊端,比如说电压区间更小,Flash就需要更多的CRC校验空间,这会大概占据Block中10%的空间,因此实际使用中同制程同晶圆面积的MLC的容量不到SLC的一倍. 因为电压变化更频繁,所以MLC技术的Flash在寿命方面远劣于SLC,官方给出的可擦写次数仅为1万次,也就是说一张512MB的USB闪存盘,你写入512MB的数据1万次(理想状态),它就完蛋了,这可能是MLC最要命的一个缺点.
MLC技术的Flash还有一个缺点,它的读写速度先天不如SLC,一个Block存储两组位数据,自然需要更长的时间,这里面还有电压控制、CRC写入方式等因素需要考虑.综合而言,SLC在寿命和性能方面拥有独特的优势,不过需要更好的工艺制程才能拥有较大的容量.而MLC虽然在容量方面有先天的优势,但在速度和寿命方面存在先天的不足.
具体到一款经常在不同的电脑中交换数据的USB闪存盘,我们就不得不关注它的寿命,如果是一款采用MLC技术的USB闪存盘,在重复写入1万次数据之后,他的寿命就结束了,并且你无法预测它什么时候结束生命,这对于你的重要数据来说,实在是让人胆战心惊的尝试,所以我们不太推荐用户购买采用MLC技术的USB闪存盘.
关于如何分辨MLC和SLC技术的USB闪存盘,这真是个非常难的问题,因为目前没有测试软件能够测试,也没有几个厂商愿意声明自己的闪存盘究竟使用什么技术,但是有一点可以肯定,那便是写入速度超过25MB/s的,基本上都是SLC技术的产品,高速的闪存盘可以兼顾寿命和读写效率,唯一的不足是它的售价同比略高
Flash芯片封装技术
目前NAND Flash封装方式多采取TSOP、FBGA与LGA等方式,由于受到终端电子产品转向轻薄短小的趋势影响,因而缩小体积与低成本的封装方式成为NAND Flash封装发展的主流趋势。
TSOP(Thin smaller outline package)封装技术,为目前最广泛使用于NAND Flash的封装技术,首先先在芯片的周围做出引脚,采用SMT技术(表面安装技术)直接附着在PCB板的表面.TSOP封装时,寄生参数减小,因而适合高频的相关应用,操作方便,可靠性与成品率高,同时具有价格便宜等优点,因此于目前得到了极为广泛的应用.
image/flash image/tsop_flash.gif
FBGA(Ball Grid Array,也称为锡球数组封装或锡脚封装体)封装方式,主要应用于计算机的内存、主机板芯片组等大规模集成电路的封装领域,FBGA封装技术的特点在于虽然导线数增多,但导线间距并不小,因而提升了组装良率,虽然功率增加,但FBGA能够大幅改善电热性能,使重量减少,信号传输顺利,提升了可靠性.
采用FBGA新技术封装的内存,可以使所有计算机中的内存在体积不变的情况下容量提升数倍,与TSOP相比,具有更小的体积与更好的散热性能,FBGA封装技术使每平方英寸的储存量有很大的提升,体积却只有TSOP封装的三分之一,与传统TSOP封装模式相比,FBGA封装方式有加快传输速度并提供有效的散热途径,FBGA封装除了具备极佳的电气性能与散热效果外,也提供内存极佳的稳定性与更多未来应用的扩充性.
image/flash image/fbga_flash.gif
LGA(land grid array) 触点陈列封装,亦即在底面制作有数组状态坦电极触点的封装,装配时插入插座即可,现有227触点(1.27mm 中心距)和44触点(2.54mm 中心距)的陶瓷LGA,应用于高速逻辑LSI电路,由于引线的阻电抗小,对高速LSI相当适用的,但由于插座制作复杂,成本较高,普及率较低,但未来需求可望逐渐增加.
image/flash image/lga_flash.gif
目前NAND Flash一般封装大多采用TSOP、FBGA与LGA的方式,而记忆卡则多采用COB方式进行封装。手机应用领域则多用MCP的封装形式,随着终端产品的变化,未来WLP与3D TSV的封装方式也将逐渐为业界广为应用。
NOR Flash和NAND Flash的区别
nand flash和nor flash有许多不同之处,比如具体的存储管理方式,读写速度,价格等,我觉得最重要的一点区别是是NOR FLASH地址线和数据线分开,可以象SRAM一样连接在数据线上,而且NOR FLASH以“字”为基本单位来操作(说的是读操作),因此程序可以直接在nor flash里运行,不必把代码COPY到RAM里才运行。所以一般把系统启动代码存放到NOR FLASH里,可以直接从FLASH启动系统。nand flash共用数据和地址线,而且是以块为单位操作数据(说的是读操作),很难用来做启动芯片。因此boot代码一般放到nor flash里。
不过2410比较特殊,S3C2410在启动的时候,可以把nand flash前面的启动程序装载到2410里面自己一个4k大小的SRAM(Steppingstone)里面,这4K SRAM被映射到0X0,从而实现nand flash模式的启动,从nand flash启动比nor flash模式速度要快。
在掌上电脑里要使用NAND FLASH 存储数据和程序,但是必须有NOR FLASH来启动。除了SAMSUNG处理器,其他用在掌上电脑的主流处理器还不支持直接由NAND FLASH 启动程序。因此,必须先用一片小的NOR FLASH 启动机器,在把OS等软件从NAND FLASH 载入SDRAM中运行才行
当讨论软件支持的时候,应该区别基本的读/写/擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化。
可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。 由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。 在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。
在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR器件在进行写入和擦除操作时都需要MTD。
使用NOR器件时所需要的MTD要相对少一些,许多厂商都提供用于NOR器件的更高级软件,这其中包括M-System的TrueFFS驱动,该驱动被 WindRiverSystem、Microsoft、QNXSoftwareSystem、Symbian和Intel等厂商所采用。驱动还用于对 DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和损耗平衡。
Flash驱动实例
针对具体的Flash类型,型号,用代码实例来分析整个Flash驱动程序的相关实现细节。为了说明某些概念和问题,可能和上面的Flash Wiki有一些重复的地方。
- NOR Flash的驱动 -- NOR FLAHS的驱动程序
- NAND Flash的驱动 -- NAND FLASH的驱动程序
- MTD模块分析 -- MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。
Others
- MCU Flash --MCU和Flash之间是如何连接,各自有什么样的接口
- Flash烧录拷贝机