NOR与NAND非易失闪存技术的原理与区别.docx
《NOR与NAND非易失闪存技术的原理与区别.docx》由会员分享,可在线阅读,更多相关《NOR与NAND非易失闪存技术的原理与区别.docx(18页珍藏版)》请在冰豆网上搜索。
NOR与NAND非易失闪存技术的原理与区别
NOR与NAND非易失闪存技术的原理与区别
NOR和NAND是现在市场上两种主要的非易失闪存技术。
Intel于1988年首先开发出NORflash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。
紧接着,1989年,东芝公司发表了NANDflash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。
但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。
简单的来说,NAND规格快闪记忆体像硬碟,以储存数据为主,又称为DataFlash,晶片容量大,目前主流容量已达二Gb;NOR规格记忆体则类似DRAM,以储存程序代码为主,又称为CodeFlash,所以可让微处理器直接读取,但晶片容量较低,主流容量为512Mb。
相“flash存储器”经常可以与相“NOR存储器”互换使用。
许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。
而NAND则是高数据存储密度的理想解决方案。
NOR的特点是芯片内执行(XIP,eXecuteInPlace),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。
NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。
应用NAND的困难在于flash的管理和需要特殊的系统接口。
1.性能比较
flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。
任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。
NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。
由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。
执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。
这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。
●NOR的读速度比NAND稍快一些。
●NAND的写入速度比NOR快很多。
●NAND的4ms擦除速度远比NOR的5S快。
●大多数写入操作需要先进行擦除操作。
●NAND的擦除单元更小,相应的擦除电路更少。
2.接口差别
NORflash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。
NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。
8个引脚用来传送控制、地址和数据信息。
NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。
3.容量和成本
NANDflash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。
NORflash占据了容量为1~16MB闪存市场的大部分,而NANDflash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、SecureDigital、PCCards和MMC存储卡市场上所占份额最大。
4.可靠性和耐用性
采用flahs介质时一个需要重点考虑的问题是可靠性。
对于需要扩展MTBF的系统来说,Flash是非常合适的存储方案。
可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。
5.寿命(耐用性)
在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。
NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些。
位交换所有flash器件都受位交换现象的困扰。
在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。
一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。
如果只是报告有问题,多读几次就可能解决了。
当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。
位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用EDC/ECC算法。
这个问题对于用NAND存储多媒体信息时倒不是致命的。
当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。
6.坏块处理
NAND器件中的坏块是随机分布的。
以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。
NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。
在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。
7.易于使用
可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。
由于需要I/O接口,NAND要复杂得多。
各种NAND器件的存取方法因厂家而异。
在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。
向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。
8.软件支持
当讨论软件支持的时候,应该区别基本的读/写/擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化。
在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR器件在进行写入和擦除操作时都需要MTD。
使用NOR器件时所需要的MTD要相对少一些,许多厂商都提供用于NOR器件的更高级软件,这其中包括M-System的TrueFFS驱动,该驱动被WindRiverSystem、Microsoft、QNXSoftwareSystem、Symbian和Intel等厂商所采用。
驱动还用于对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和损耗平衡。
NOR与NAND技术的比较及使用性差异
1)闪存芯片读写的基本单位不同
应用程序对NOR芯片操作以“字”为基本单位。
为了方便对大容量NOR闪存的管理,通常将NOR闪存分成大小为128KB或者64KB的逻辑块,有时候块内还分成扇区。
读写时需要同时指定逻辑块号和块内偏移。
应用程序对NAND芯片操作是以“块”为基本单位。
NAND闪存的块比较小,一般是8KB,然后每块又分成页,页的大小一般是512字节。
要修改NAND芯片中一个字节,必须重写整个数据块。
2)NOR闪存是随机存储介质,用于数据量较小的场合;NAND闪存是连续存储介质,适合存放大的数据。
3)由于NOR地址线和数据线分开,所以NOR芯片可以像SRAM一样连在数据线上。
NOR芯片的使用也类似于通常的内存芯片,它的传输效率很高,可执行程序可以在芯片内执行(XIP,eXecuteInPlace),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。
由于NOR的这个特点,嵌入式系统中经常将NOR芯片做启动芯片使用。
而NAND共用地址和数据总线,需要额外联结一些控制的输入输出,所以直接将NAND芯片做启动芯片比较难。
4)NAND闪存芯片因为共用地址和数据总线的原因,不允许对一个字节甚至一个块进行的数据清空,只能对一个固定大小的区域进行清零操作;而NOR芯片可以对字进行操作。
所以在处理小数据量的I/O操作的时候的速度要快与NAND的速度。
比如一块NOR芯片通常写一个字需要10微秒,那么在32位总线上写512字节需要1280毫秒;而NAND闪存写512字节需要的时间包括:
512×每字节50纳秒+10微秒的寻页时间+200微秒的片擦写时间=234微秒。
5)NAND闪存的容量比较大,目前最大容量己经达到8G字节。
为了方便管理,NAND的存储空间使用了块和页两级存储体系,也就是说闪存的存储空间是二维的,比如K9F5608UOA闪存块的大小为16K,每页的大小是512字节,每页还预留16字节空闲区用来存放错误校验码空间(有时也称为out-of-band,OOB空间);在进行写操作的时候NAND闪存每次将一个字节的数据放入内部的缓存区,然后再发出“写指令”进行写操作。
由于对NAND闪存的操作都是以块和页为单位的,所以在向NAND闪存进行大量数据的读写时,NAND的速度要快于NOR闪存。
6)NOR闪存的可靠性要高于NAND闪存,这主要是因为NOR型闪存的接口简单,数据操作少,位交换操作少,因此可靠性高,极少出现坏区块,因而一般用在对可靠性要求高的地方。
相反的,NAND型闪存接口和操作均相对复杂,位交换操作也很多,关键性数据更是需安错误探测/错误更正〔EDC/ECC)算法来确保数据的完整性,因此出现问题的几率要大得多,坏区块也是不可避免的,而且由于坏区块是随机分布的,连纠错也无法做到。
7)NANDFlash一般地址线和数据线共用,对读写速度有一定影响;而NORFlash闪存数据线和地址线分开,所以相对而言读写速度快一些。
NAND和NOR芯片的共性首先表现在向芯片中写数据必须先将芯片中对应的内容清空,然后再写入,也就是通常说的“先擦后写”。
只不过NOR芯片只用擦写一个字,而NAND需要擦写整个块。
其次,闪存擦写的次数都是有限的.当闪存的使用接近使用寿命的时候,经常会出现写操作失败;到达使用寿命时,闪存内部存放的数据虽然可以读,但是不能再进行写操作了所以为了防止上面问题的发生,不能对某个特定的区域反复进行写操作。
通常NAND的可擦写次数高于NOR芯片,但是由于NAND通常是整块擦写,块内的页面中如果有一位失效整个块就会失效,而且由于擦写过程复杂,失败的概率相对较高,所以从整体上来说NOR的寿命较长。
另一个共性是闪存的读写操作不仅仅是一个物理操作,实际上在闪存上存放数据必须使用算法实现,这个模块一般在驱动程序的MTD'(MemoryTechnologyDrivers)模块中或者在FTLZ(FlashTranslationLayer)层内实现,具体算法和芯片的生产厂商以及芯片型号有关系。
从使用角度来看,NOR闪存与NAND闪存是各有特点的:
(1)NOR的存储密度低,所以存储一个字节的成本也较高,而NAND闪存的存储密度和存储容量均比较高;
(2)NAND型闪存在擦、写文件(特别是连续的大文件)时速度非常快,非常适用于顺序读取的场合,而NOR的读取速度很快,在随机存取的应用中有良好的表现。
NOR与NAND各有所长,但两种优势无法在一个芯片上得到体现。
所以,设计人员在选用芯片时,只能趋其利而避其害,依照使用目的和主要功能在两者之间进行适当的选择。
NAND与NOR技术的比较
一般的原则是:
在大容量的多媒体应用中选用NAND型闪存,而在数据/程序存贮应用中选用NOR型闪存。
根据这一原则,设计人员也可以把两种闪存芯片结合起来使用,用NOR芯片存储程序,用NAND芯片存储数据,使两种闪存的优势互补。
事实上,这种聪明的设计早已普遍应用于手机、PocketPC、PDA及电子词典等设备中了。
在选择存储解决方案时,设计师必须在多种因素之间进行权衡,以获得较高的性价比。
以手机为例,采用支持XIP技术的NOR闪存能够直接运行OS,速度很快,既简化了设计,又降低了成本,所以许多手机都采用NOR+RAM的设计。
NOR闪存的不足之处是存储密度较低,所以也有采用NAND+RAM的设计。
对于这两种方案,很难说哪一种更好,因为我们不能离开具体的产品而从某一个方面单纯地去评价。
追求小巧优雅的手机将需要NOR闪存支持;追求大存储容量的手机则将更多地选择NAND闪存;而同时追求功能和速度的手机则会采用NOR+NAND+RAM的设计,这种取长补短的设计能够发挥NOR和NAND各自的优势。
除了速度、存储密度的因素,设计师在选择闪存芯片时,还需要考虑接口设计、即插即用设计和驱动程序等诸多问题,因为两种类型的闪存在上述几个方面也有很多的不同。
譬如在驱动程序方面,NOR器件运行代码不需要任何的软件支持,而在NAND器件上进行同样操作时就需要存储技术驱动程序(MTD)的支持。
虽然NAND和NOR器件在进行写入和擦除操作时都需要MTD,但对于NAND来说驱动程序的开发难度更大,因为NAND闪存的纠错和坏块处理功能都需要通过驱动程序来实现。
图解NOR与NAND技术
对于许多消费类音视频产品而言,NAND闪存是一种比硬盘驱动器更好的存储方案,这在不超过4GB的低容量应用中表现得犹为明显。
随着人们持续追求功耗更低、重量更轻和性能更佳的产品,NAND正被证明极具吸引力。
NAND闪存阵列分为一系列128kB的区块(block),这些区块是NAND器件中最小的可擦除实体。
擦除一个区块就是把所有的位(bit)设置为“1”(而所有字节(byte)设置为FFh)。
有必要通过编程,将已擦除的位从“1”变为“0”。
最小的编程实体是字节(byte)。
一些NOR闪存能同时执行读写操作(见下图1)。
虽然NAND不能同时执行读写操作,它可以采用称为“映射(shadowing)”的方法,在系统级实现这一点。
这种方法在个人电脑上已经沿用多年,即将BIOS从速率较低的ROM加载到速率较高的RAM上。
NAND的效率较高,是因为NAND串中没有金属触点。
NAND闪存单元的大小比NOR要小(4F2:
10F2)的原因,是NOR的每一个单元都需要独立的金属触点。
NAND与硬盘驱动器类似,基于扇区(页),适合于存储连续的数据,如图片、音频或个人电脑数据。
虽然通过把数据映射到RAM上,能在系统级实现随机存取,但是,这样做需要额外的RAM存储空间。
此外,跟硬盘一样,NAND器件存在坏的扇区,需要纠错码(ECC)来维持数据的完整性。
存储单元面积越小,裸片的面积也就越小。
在这种情况下,NAND就能够为当今的低成本消费市场提供存储容量更大的闪存产品。
NAND闪存用于几乎所有可擦除的存储卡。
NAND的复用接口为所有最新的器件和密度都提供了一种相似的引脚输出。
这种引脚输出使得设计工程师无须改变电路板的硬件设计,就能从更小的密度移植到更大密度的设计上。
NAND与NOR闪存比较
NAND闪存的优点在于写(编程)和擦除操作的速率快,而NOR的优点是具有随机存取和对字节执行写(编程)操作的能力(见下图图2)。
NOR的随机存取能力支持直接代码执行(XiP),而这是嵌入式应用经常需要的一个功能。
NAND的缺点是随机存取的速率慢,NOR的缺点是受到读和擦除速度慢的性能制约。
NAND较适合于存储文件。
如今,越来越多的处理器具备直接NAND接口,并能直接从NAND(没有NOR)导入数据。
NAND的真正好处是编程速度快、擦除时间短。
NAND支持速率超过5Mbps的持续写操作,其区块擦除时间短至2ms,而NOR是750ms。
显然,NAND在某些方面具有绝对优势。
然而,它不太适合于直接随机存取。
对于16位的器件,NOR闪存大约需要41个I/O引脚;相对而言,NAND器件仅需24个引脚。
NAND器件能够复用指令、地址和数据总线,从而节省了引脚数量。
复用接口的一项好处,就在于能够利用同样的硬件设计和电路板,支持较大的NAND器件。
由于普通的TSOP-1封装已经沿用多年,该功能让客户能够把较高密度的NAND器件移植到相同的电路板上。
NAND器件的另外一个好处显然是其封装选项:
NAND提供一种厚膜的2Gb裸片或能够支持最多四颗堆叠裸片,容许在相同的TSOP-1封装中堆叠一个8Gb的器件。
这就使得一种封装和接口能够在将来支持较高的密度。
图1不同闪存单元的对比
NOR闪存的随机存取时间为0.12ms,而NAND闪存的第一字节随机存取速度要慢得多
NAND基本操作
以2GbNAND器件为例,它由2048个区块组成,每个区块有64个页(见图3)。
图32GBNAND闪存包含2,048个区块
每一个页均包含一个2048字节的数据区和64字节的空闲区,总共包含2,112字节。
空闲区通常被用于ECC、耗损均衡(wearleveling)和其它软件开销功能,尽管它在物理上与其它页并没有区别。
NAND器件具有8或16位接口。
通过8或16位宽的双向数据总线,主数据被连接到NAND存储器。
在16位模式,指令和地址仅仅利用低8位,而高8位仅仅在数据传输周期使用。
擦除区块所需时间约为2ms。
一旦数据被载入寄存器,对一个页的编程大约要300μs。
读一个页面需要大约25μs,其中涉及到存储阵列访问页,并将页载入16,896位寄存器中。
除了I/O总线,NAND接口由6个主要控制信号构成:
1.芯片启动(ChipEnable,CE#):
如果没有检测到CE信号,那么,NAND器件就保持待机模式,不对任何控制信号作出响应。
2.写使能(WriteEnable,WE#):
WE#负责将数据、地址或指令写入NAND之中。
3.读使能(ReadEnable,RE#):
RE#允许输出数据缓冲器。
4.指令锁存使能(CommandLatchEnable,CLE):
当CLE为高时,在WE#信号的上升沿,指令被锁存到NAND指令寄存器中。
5.地址锁存使能(AddressLatchEnable,ALE):
当ALE为高时,在WE#信号的上升沿,地址被锁存到NAND地址寄存器中。
6.就绪/忙(Ready/Busy,R/B#):
如果NAND器件忙,R/B#信号将变低。
该信号是漏极开路,需要采用上拉电阻。
数据每次进/出NAND寄存器都是通过16位或8位接口。
当进行编程操作的时候,待编程的数据进入数据寄存器,处于在WE#信号的上升沿。
在寄存器内随机存取或移动数据,要采用专用指令以便于随机存取。
数据寄存器输出数据的方式与利用RE#信号的方式类似,负责输出现有的数据,并增加到下一个地址。
WE#和RE#时钟运行速度极快,达到30ns的水准。
当RE#或CE#不为低的时候,输出缓冲器将为三态。
这种CE#和RE#的组合使能输出缓冲器,容许NAND闪存与NOR、SRAM或DRAM等其它类型存储器共享数据总线。
该功能有时被称为“无需介意芯片启动(chipenabledon'tcare)”。
这种方案的初衷是适应较老的NAND器件,它们要求CE#在整个周期为低(译注:
根据上下文改写)。
输入寄存器接收到页编程(80h)指令时,内部就会全部重置为1s,使得用户可以只输入他想以0位编程的数据字节
带有随机数据输入的编程指令。
图中加亮的扇区显示,该指令只需要后面跟随着数据的2个字节的地址
所有NAND操作开始时,都提供一个指令周期(表1)。
当输出一串WE#时钟时,通过在I/O位7:
0上设置指令、驱动CE#变低且CLE变高,就可以实现一个指令周期。
注意:
在WE#信号的上升沿上,指令、地址或数据被锁存到NAND器件之中。
如表1所示,大多数指令在第二个指令周期之后要占用若干地址周期。
注意:
复位或读状态指令例外,如果器件忙,就不应该发送新的指令。
以2GbNAND器件的寻址方案为例,第一和第二地址周期指定列地址,该列地址指定页内的起始字节(表2)。
注意:
因为最后一列的位置是2112,该最后位置的地址就是08h(在第二字节中)和3Fh(在第一字节中)。
PA5:
0指定区块内的页地址,BA16:
6指定区块的地址。
虽然大多编程和读操作需要完整的5字节地址,在页内随机存取数据的操作仅仅用到第一和第二字节。
块擦除操作仅仅需要三个最高字节(第三、第四和第五字节)来选择区块。
图6:
典型的存储方法
图7页读缓存模式
总体而言,NAND的基本操作包括:
复位(Reset,FFh)操作、读ID(ReadID,00h)操作、读状态(ReadStatus,70h)操作、编程(Program)操作、随机数据输入(Randomdatainput,85h)操作和读(Read)操作等。
将NAND连接到处理器
选择内置NAND接口的处理器或控制器的好处很多。
如果没有这个选择,有可能在NAND和几乎任何处理器之间设计一个“无粘接逻辑(glueless)”接口。
NAND和NOR闪存的主要区别是复用地址和数据总线。
该总线被用于指定指令、地址或数据。
CLE信号指定指令周期,而ALE信号指定地址周期。
利用这两个控制信号,有可能选择指令、地址或数据周期。
把ALE连接到处理器的第五地址位,而把CLE连接到处理器的第四地址位,就能简单地通过改变处理器输出的地址,任意选择指令、地址或数据。
这容许CLE和ALE在合适的时间自动设置为低。
为了提供指令,处理器在数据总线上输出想要的指令,并输出地址0010h;为了输出任意数量的地址周期,处理器仅仅要依次在处理器地址0020h之后输出想要的NAND地址。
注意,许多处理器能在处理器的写信号周围指定若干时序参数,这对于建立合适的时序是至关重要的。
利用该技术,你不必采用任何粘接逻辑,就可以直接从处理器存取指令、地址和数据。
多层单元
多层单元(MLC)的每一个单元存储两位,而传统的SLC仅仅能存储一位。
MLC技术有显著的密度优越性,然而,与SLC相比(表3),其速度或可靠性稍逊。
因此,SLC被用于大多数媒体卡和无线应用,而MLC器件通常被用于消费电子和其它低成本产品。
如上所述,NAND需要ECC以确保数据完整性。
NAND闪存的每一个页面上都包括额外的存储空间,它就是64个字节的空闲区(每512字节的扇区有16字节)。
该区能存储ECC代码及其它像磨损评级或逻辑到物理块映射之类的信息。
ECC能在硬件或软件中执行,但是,硬件执行有明显的性能优势。
在编程操作期间,ECC单元根据扇区中存储的数据来计算误码校正代码。
数据区的ECC代码然后被分别写入到各自的空闲区。
当数据被读出时,ECC代码也被读出;运用反操作可以核查读出的数据是否正确。
有可能采用ECC算法来校正数据错误。
能校正的错误的数量取决于所用算法的校正强度。
在硬件或软件中包含ECC,就提供了强大的系统级解决方案。
最简单的硬件实现方案是采用简单的汉明(SimpleHamming)码,但是,只能校正单一位错误。
瑞德索罗门(Reed-Solomon)码提供更为强大的纠错,并被目前的控制器广为采用。
此外,BCH码由于比瑞德索罗门方法的效率高,应用也日益普及。
要用软件执行NAND闪存的区块管理。
该软件负责磨损评级或逻辑到物理映射。
该软件还提供ECC码,如果处理器不包含ECC硬件的话。
编程或擦除操作之后,重要的是读状态寄存器,因为它确认是否成功地完成了编程或擦除操作。
如果操作失败,要把该区块标记为损坏且不能再使用。
以前已编写进去的数据要从损坏的区块中搬出,转移到新的(好的)存储块之中。
2GbNAND的规范规定,它可以最多有40个坏的区块,这个数字在器件的生命周期(额定寿命为10万次编程/擦除周期)内都适用。
一些有坏块的NAND器件能够出厂,主要就归根于其裸片面积大。
管理器件的软件负责映射坏块并由好的存储块取而代之。