从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的入硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了,比如大家常用的内存,不论是以前的SDRAM,DDR SDRAM,还是现在的DDR2,DDR3等,都是断电后,数据就没了。
NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结结,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。
NOR的读速度比NAND稍快一些。
NAND的写入速度比NOR快很多。
NAND的4ms擦除速度远比NOR的5s快。
大多数写入操作需要先进行擦除操作。
NAND的擦除单元更小,相应的擦除电路更少
SLC/MLC基本原理
什么是SLC和MLC?
SLC全称为Single-Level Cell,MLC全称为Multi-Level Cel数码播放器中一般采用两种不同类型的NAND闪存。其中一种叫做SLC(Single Level Cell),单层单元闪存;第二种叫做MLC(Multi Level Cell),多层单元闪存。两者的主要区别是SLC每一个单元储存一位数据,而MLC通过使用大量的电压等级,每一个单元储存两位数据,数据密度比较大。
SLC芯片和MLC技术特点及区别
一般而言,SLC虽然生产成本较高,但在效能上大幅胜于MLC。SLC晶片可重复写入次数约10万次,而MLC晶片的写入次数至少要达到1万次才算标准,而目前三星MLC芯片采用的MLC芯片写入寿命则在5000次左右。
A.读写速度较慢。相对主流SLC芯片,MLC芯片目前技术条件下,理论速度只能达到2MB左右,因此对于速度要求较高的应用会有一些问题。
B.MLC能耗比SLC高,在相同使用条件下比SLC要多15%左右的电流消耗。
C.MLC理论写入次数上限相对较少,因此在相同使用情况下,使用寿命比较SLC短。
D.MLC的价格比SLC低30%~40%,有些甚至更低。
目前MLC和SLC 在2GB闪存芯片上的价格相差了将近100多元,他们的差异还是比较明显的。所以对于选择数码播放器的朋友,选择更便宜廉价的MLC芯片产品还是选择稳定性和性能更好的SLC产品,就看你的需要了。
FLASH的发展
1.在1984年,东芝公司的发明人Fujio Masuoka首先提出了快速闪存存储器(此处简称闪存)的概念。
2.Intel是世界上第一个生产闪存并将其投放市场的公司。1988年,公司推出了一款256K bit闪存芯片。
3.第二种闪存称为NAND闪存。它由东芝公司于1989年研制,并被认为是NOR闪存的理想替代者。
4.MLC是英特尔(Intel)在1997年9月最先开发成功的。
5.2004年,除三星和东芝增加产能外,包括Hynix、英飞凌及瑞萨等大厂,也自2004年起陆续进入NAND闪存市场。
NAND Flash存储器结构描述
NAND Flash存储器由block (块) 构成, block的基本单元是page (页)。通常来说, 每一个block由16, 32或64个page组成。大多数的NAND Flash器件每一个page (页)内包含512个字节(或称为256个字)的Data area(数据存储区域)。每一个page内包含有一个扩展的16字节的 Spare area(备用区域)。所以每一个page的大小为512+16=528字节。我们称这样的page为small page。
那些大容量的(1Gbig或更多)的NAND Flash, 它每page的容量就更大, 每page内Data area(数据存储区域)的大小为2048字节, Spare area(备用区域)大小为64字节。
NAND Flash的读取和烧录以页为基础, 而NOR却是以字节或字为基础 — 数据I/O寄存器匹配页的大小。 NAND Flash的擦除操作是基于block (块)的。在NAND Flash上有三种基本的操作:读取一个页, 烧录一个页和擦除一个块。
在一个页的读取操作中, 该页内528字节的数据首先被传输到数据寄存器中, 然后再输出。在一个页的烧录中, 该页内528字节的数据首先被写进数据寄存器, 然后再存储到存储阵列中。在一个块的擦除操作中, 一组连续的页在单独操作下被擦除。
备用单元结构描述
NAND Flash厂商在生产制程中使用Spare area(备用区域)来标识bad block, 所以这些器件被运送到客户手中时已经被标识。从功能上来说, Spare area(备用区域)内所有的字节都可以像Data area(数据存储区域)内的字节一样被用户用来存储数据。关于备用字节的使用, 我们推荐使用三星的标准。
Bad block (Invalid block)的管理
自从NAND结构被设计用来作为低成本的多媒体存储器, 它的标准规范中是允许存在bad block 的。只要bad block 的容量小于总容量的2% 那就是允许的。一个block中如果有坏的存储区域, 那它就会被标识成bad block 。 bad block 列表可以存储在一个芯片中的一个好的block上, 也可以存储在同一系统的另外一颗芯片上。bad block 列表是被要求的, 这是由于NAND Flash只能执行有限的读和擦除次数。由于所有的Flash存储器最终都会被磨损而且不能再使用, 这个列表需要被用来跟踪记录那些在使用中发现的bad block 。允许bad block 的存在有利于提高芯片的产量,同时也降低了成本。因为每个block是独立的, 而且是被bit lines隔离的, 所以bad block 的存在并不会影响那些其他block的正常工作。
Bad block 的一般分为两种: 生产过程中产生的; 使用过程中产生的。当block被发现是bad block , 一般是在该块的前两个page (页)的第517字节处用非FF来标识。一个通用的bad block map building 算法流程如下所示:
使用过程中产生的bad block 是没有被工厂标识的, 这些块是在客户处产生的。因为NAND Flash有一个使用寿命而且它最终会磨损。每一个块是独立的单元, 每一个块都能被擦除和烧录并且不受其它块寿命的影响。一个好的块一般能被烧录100000到1000000次。如果一个块在擦除一个块或烧录一个页时操作失败, 那么此块将被标识成bad block 并且以后不再访问。
如果你对bad block 进行擦除, 那么非“FFh”字节也会被擦除。如果发生了这样的事情, 在没有对块进行测试的特定条件下, 对那些bad block 进行重新标识是非常困难。所以如果存储bad block 列表的bad block table丢失, 重新发现并标识那些bad block 是相当困难的。因此, 在擦除bad block 之前推荐先收集正确的bad block 信息, 在器件擦除后, 那些信息又会被重新标识上去。
在嵌入式系统中对bad block 进行管理必须要求有特殊的软件层。因此对NAND Flash进行烧录, 必须采用正确的方式进行bad block 的管理, 该方法取决于嵌入式系统中程序的管理方式。对bad block 的管理有很多种方式, 没有那一种方式被定义成标准方式。
例如: 一种通用的方式是跳过bad block , 把数据写入那些已知的好块中 — 这种方法被称为“Skip Block”。另外一种通用的方式叫做“Reserved Block Area”, 这种方法用已知好的block (块)来替代bad block, 这些已知好的block (块)是预先保留设置的。
除此之外, 其他应用需求对每个页内的数据进行ECC计算。当bad block 产生时, ECC校验被用来侦测bad block 的出现并且做数据的修补。ECC数据也会被写入备用区域。这种目的的算法通常被称作 Error Correction/Error Detection(EC/ED) algorithms
Skip Block method(跳过坏块方式)
这种方法通俗易懂。 这个算法开始之前先读取存储器内的所有备用区域。那些被标识成bad block 的地址都被收集起来。接下来, 数据被连续的写入目标FLASH器件。当目标地址与先前收集的bad block 地址一致时, 跳过坏块, 数据被写到下一个好的块中。然后继续保留bad block 中备用区域的标识信息。所以在程序导入执行之前, 使用者的系统通过读取Spare area(备用区域)的信息能建立一个bad block 的地址列表。
Reserved Block Area method(保留块区域方式)
三星的“Reserved Block Area method” 基于这样的法则, bad block 在使用者的系统中能够被好block (块)所替代。这种烧录算法工作时首先决定将那些block (块)用来做UBA(User Block Area), 这些block (块)将会被RBA map table记录, 并且对这些block (块)进行保留操作。接下来, 算法读取Spare area(备用区域)的信息然后建立一个map列表到RBA。在RBA中唯一只有第一和第二个块被用来存储列表和对它进行备份。这RBA中的map包含一些有了信息, 如用来那些RBA中的保留块来代替bad block。数据域在map表中表示如下:
Transition Field总是FDFEh。 Cout Field 是每一个page (页)内map表的累加。
Error Checking and Correction(错误检测和纠正)
使用ECC纠错机制是为了让存储的数据完整无误。软件上出错的几率大概是10的-10次方。推荐使用的是采用SECDED (单一的错误纠正/双倍的错误探测) ECC算法来充分的利用潜在的NAND Flash存储器。