分享

NOR & NAND

 Taylor 2008-09-10

NAND与NOR FLASH的原理与异同

2 04月 2008

一、存储数据的原理
两种闪存都是用三端器件作为存储单元,分别为源极、漏极和栅极,与场效应管的工作原理相同,主要是利用电场的效应来控制源极与漏极之间的通断,栅极的 电流消耗极小,不同的是场效应管为单栅极结构,而FLASH为双栅极结构,在栅极与硅衬底之间增加了一个浮置栅极。

11.jpg
浮置栅极是由氮化物夹在两层二氧化硅材料之间构成的,中间的氮化物就是可以存储电荷的电荷势阱。上下两层氧化物的厚度大于50埃,以避免发生击穿。
二、浮栅的重放电
向数据单元内写入数据的过程就是向电荷势阱注入电荷的过程,写入数据有两种技术,热电子注入(hot electron injection)和F-N隧道效应(Fowler Nordheim tunneling),前一种是通过源极给浮栅充电,后一种是通过硅基层给浮栅充电。NOR型FLASH通过热电子注入方式给浮栅充电,而NAND则通过 F-N隧道效应给浮栅充电。
在写入新数据之前,必须先将原来的数据擦除,这点跟硬盘不同,也就是将浮栅的电荷放掉,两种FLASH都是通过F-N隧道效应放电。

21.jpg

3.jpg
三、0和1
这方面两种FLASH一样,向浮栅中注入电荷表示写入了‘0‘,没有注入电荷表示‘1‘,所以对FLASH清除数据是写1的,这与硬盘正好相反;
对于浮栅中有电荷的单元来说,由于浮栅的感应作用,在源极和漏极之间将形成带正电的空间电荷区,这时无论控制极上有没有施加偏置电压,晶体管都将处于 导通状态。而对于浮栅中没有电荷的晶体管来说只有当控制极上施加有适当的偏置电压,在硅基层上感应出电荷,源极和漏极才能导通,也就是说在没有给控制极施 加偏置电压时,晶体管是截止的。
如果晶体管的源极接地而漏极接位线,在无偏置电压的情况下,检测晶体管的导通状态就可以获得存储单元中的数据,如果位线上的电平为低,说明晶体管处于 导通状态,读取的数据为0,如果位线上为高电平,则说明晶体管处于截止状态,读取的数据为1。由于控制栅极在读取数据的过程中施加的电压较小或根本不施加 电压,不足以改变浮置栅极中原有的电荷量,所以读取操作不会改变FLASH中原有的数据。
四、连接和编址方式
两种FLASH具有相同的存储单元,工作原理也一样,为了缩短存取时间并不是对每个单元进行单独的存取操作,而是对一定数量的存取单元进行集体操作, NAND型FLASH各存储单元之间是串联的,而NOR型FLASH各单元之间是并联的;为了对全部的存储单元有效管理,必须对存储单元进行统一编址。
NAND的全部存储单元分为若干个块,每个块又分为若干个页,每个页是512byte,就是512个8位数,就是说每个页有512条位线,每条位线下 有8个存储单元;那么每页存储的数据正好跟硬盘的一个扇区存储的数据相同,这是设计时为了方便与磁盘进行数据交换而特意安排的,那么块就类似硬盘的簇;容 量不同,块的数量不同,组成块的页的数量也不同。在读取数据时,当字线和位线锁定某个晶体管时,该晶体管的控制极不加偏置电压,其它的7个都加上偏置电压 而导通,如果这个晶体管的浮栅中有电荷就会导通使位线为低电平,读出的数就是0,反之就是1。
NOR的每个存储单元以并联的方式连接到位线,方便对每一位进行随机存取;具有专用的地址线,可以实现一次性的直接寻址;缩短了FLASH对处理器指令的执行时间。

4.gif
五、性能
1、速度

在写数据和擦除数据时,NAND由于支持整块擦写操作,所以速度比NOR要快得多,两者相差近千倍;读取时,由于NAND要先向芯片发送地址信息进行 寻址才能开始读写数据,而它的地址信息包括块号、块内页号和页内字节号等部分,要顺序选择才能定位到要操作的字节;这样每进行一次数据访问需要经过三次寻 址,至少要三个时钟周期;而NOR型FLASH的操作则是以字或字节为单位进行的,直接读取,所以读取数据时,NOR有明显优势。
2、容量和成本
NOR型FLASH的每个存储单元与位线相连,增加了芯片内位线的数量,不利于存储密度的提高。所以在面积和工艺相同的情况下,NAND型FLASH的容量比NOR要大得多,生产成本更低,也更容易生产大容量的芯片。
3、易用性
NAND FLASH的I/O端口采用复用的数据线和地址线,必须先通过寄存器串行地进行数据存取,各个产品或厂商对信号的定义不同,增加了应用的难 度;NOR FLASH有专用的地址引脚来寻址,较容易与其它芯片进行连接,另外还支持本地执行,应用程序可以直接在FLASH内部运行,可以简化产品设计。
4、可靠性
NAND FLASH相邻单元之间较易发生位翻转而导致坏块出现,而且是随机分布的,如果想在生产过程中消除坏块会导致成品率太低、性价比很差,所以在出厂前要在高 温、高压条件下检测生产过程中产生的坏块,写入坏块标记,防止使用时向坏块写入数据;但在使用过程中还难免产生新的坏块,所以在使用的时候要配合 EDC/ECC(错误探测/错误更正)和BBM(坏块管理)等软件措施来保障数据的可靠性。坏块管理软件能够发现并更换一个读写失败的区块,将数据复制到 一个有效的区块。
5、耐久性
FLASH由于写入和擦除数据时会导致介质的氧化降解,导致芯片老化,在这个方面NOR尤甚,所以并不适合频繁地擦写,NAND的擦写次数是100万次,而NOR只有10万次。
 
 
 

关于Nand Flash和Nor Flash的XIP

2 04月 2008

XIP - eXecute In Place,中文常译为,就地执行。指代码可以在当前(存储器中)执行
关于Nor Flash的XIP :
NAND and NOR and XIP
"NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。 "
关于Nand Flash的XIP:
NAND FLASH 是不是无法做XIP?
问:NAND FLASH 是不是无法做XIP,只有 NOR FLASH才能?
答:所谓XIP,就是CODE是在FLASH上直接运行. NANDFLASH只是不适合做XIP,但并不是不能做XIP。
要一段CODE能够正确的运行,要保证它的CODE是连续的,正确的.
由于一些电气特性的原因,NOR FLASH能够做到这一点,不存在坏道或坏块,所以能够做XIP。
而对于NAND FLASH, 它只保证它的BLOCK 0是好的,其他的块并不保证,虽然出错的几率比较低,但还是有出错的可能,所以CODE可能无法连续正确地执行。
但只要你有额外的保障措施,比如说在执行CODE之前去做一次ECC校验,来确保CODE是连续正确的.那你也可以做XIP.事实上我就正在这么做,而且也证明是成功的
XiP定义(eXecute In Place)立即执行
XIP定义:
XIP即就地执行的意思,操作系统内核直接在Flash中运行,不需要拷贝到RAM。但是,Flash的存储器访问周期要比RAM大得多,在使用XIP技术后可能会降低程序的运行速度,不过由于CPU的指令预取机制以及Cache机制,实际使用起来并不会明显降低应用程序的运行速度。XIP的原理很简单,即指操作系统或应用程序直接从非易失性存储器中执行。就当前的技术来说,这里的非易失性存储器特指NOR型Flash,因为只有N0R型的Flash才可以随机存取。文献[4]中提供了一种通过增加Cache使NAND Flash也可以进行XIP的方案,但需要增加硬件电路,不是一个通用的解决方案。
除了硬件提供支持以外,XIP还需要软件的支持。操作系统内核和应用程序在运行时,它在内存中的映像可以分为三个部分:代码段、数据段和堆栈段。代码段对应于执行程序中的Text Section,其中包括运行代码和只读数据,这个段在内存中一般被标记为只读。数据段对应于运行文件中的Data Section和BSS Section(???),其中存放的是各种数据(经过初始化的和未经初始化的)和静态变量,而堆栈段存放的则用于保存函数调用和局部变量。从以上分析可知,程序运行时在内存的映像分为两类:一类是只读的,如代码段;另一类是可写的,如数据段。而Flash虽然是可写的,但并不能像写普通RAM一样进行。因此,当程序在Flash中运行时,我们仍然需要把部分可写的数据段放在RAM 中。XIP是一种能够直接在闪速存储器中执行代码而无须装载到RAM中执行的机制。这样减少了内核从闪速存储器拷贝到RAM的时间,并采用非压缩映像减少了内核自解压的时间。由于闪速存储器访问速度低于RAM,采用XIP技术的同时,根据硬件环境对闪速存储器和RAM使用量进行平衡。
eXecute In Place - XIP
XIP (eXecute In Place ) is a useful option available with uClinux systems. Its main value lies in [...]
 
 
 
Nand-Flash/Nor-Flash存储模块设计
     随着嵌入式系统越来越广泛的应用,嵌入式系统中的数据存储和数据管理已经成为一个重要的研究课题。Flash存储器具有速度快、成本低等很多优点,因此在嵌入式系统中的应用也越来越多。为了合理地管理存储数据,进行数据共享,Flash的设计在ARM嵌入式系统中对数据存储和数据管理尤为重要。
1实例说明
在嵌入式设备中,有两种程序运行方式:一种是将程序加载到SDRAM中运行,另一种是程序直接在其所在的ROM/Flash存储器中运行。一种比较常用的运行程序的方法是将该Flash存储器作为一个硬盘使用,当程序需要运行时,首先将其加载到SDRAM存储器中,在SDRAM中运行。通常相对于:ROM而言,SDRAM访问速度较快,数据总线较宽,程序存SDRAM中的运行速度比在Flash中的运行速度要快。

 
ARM 中的存储模块示意图如图7-1所示。
其中,各功能模块的含义如下。
(1)系统初始化——进行系统的最小初始化,包括初始化系统时钟、系统的中断向量表、SDRAM及一些其他的重要I/O端口。
(2)映像文件下载——通过一定的方式,得到新的目标程序的映像文件,将该文件保存到系统的SDRAM中。要完成这部分工作,ARM嵌入式设备需要与外部的主机建立某种通道,大部分系统都是使用串行口,也可以使用以太网口或者并行口进行通信。
 (2)Flash写入——根据不同的Flash存储器,选择合适的操作命令,将新的目标程序的映像文件写入到目标系统的Flash存储器中,实现Flash存储器操作的功能模块。
在本实例里,Flash用于存放程序代码、常量表和一些存系统掉电后需要保存的用户数据等。
2 Flash原理
2.1 Nand-Flash与Nor-Flash区别
Flash主要分为Nor-Flash和Nand-Flash两类,下面对二者进行较为详细的比较。
1. 性能比较
Flash闪存是非易失存储器,可以对存储器单元块进行擦写和再编程。任何Flash器件进行写入操作前都必须先执行擦除操作。Nand-Flash器件执行擦除操作十分简单;而Nor-Flash则要求在进行擦除前,先将目标块内所有的位都写为0。擦除:Nor-Flash器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为1~5s;擦除Nand-Flash器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。
执行擦除操作时,块尺寸的不同进一步拉大了Nor-Flash和Nand-Flash之间的性能差距。统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于Nor-Flash的单元中进行。因此,当选择存储解决方案时,必须权衡以下的各项因素。
Nor-Flash的读取速度比Nand-Flash稍快一些。
Nand-Flash的写入速度比Nor-Flash快很多。
Nand-Flash的擦除速度远比Nor-Flash快。
大多数写入操作需要先进行擦除操作。
Nand-Flash的擦除单元更小,相应的擦除电路更少。
2. 接口差别
Not-Flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内容的每一字节。
Nand-Flash器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。Nand-Flash的读和写操作采用512字节的块,这一点有点像硬盘管理此类操作。很自然地,基于Nand-Flash的存储器就可以取代硬盘或其他块设备。
3. 容量和成本
Nand-Flash的单元尺寸几乎是Nor-Flash器件的一半。由于生产过程更为简单,NaIld-Flash结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。
Nor-Flash占据了大部分容量为1~16MB的内存市场,而Nand-Flash只是用在8~128MB的产品当中。
4. 可靠性和耐用性
采用Flash介质时,一个需要重点考虑的问题是可靠性。对于需要扩展MTBF(平均无故障时间)的系统来说,Flash是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较Nor-Flash和Nand-Flash的可靠性。
(1) 寿命(耐用性)
在Nand-Flash闪存中,每个块的最大擦写次数是100万次,而Nor-Flash的擦写次数是10万次。Nand-Flash存储器除了具有10:1的块擦除周期优势外,典型的Nand-Flash块尺寸要比Nor-Flash器件小8位,每个Nand-Flash存储器块在给定时间内的删除次数要少一些。
(2) 位交换
  
所有的Flash器件都受位交换现象的困扰。在某些情况下(Nand-Flash发生的次数要比Nor-Flash多),一个比特位会发生反转或被报告反转了。一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障就可能导致系统停机。如果只是报告有问题,则多读几次就可能解决。
位反转的问题更多见于Nand-Flash闪存,Nand-Flash的供应商建议使用Nand-Flash闪存时,同时使用EDC/ECC算法。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,则必须使用EDC/ECC(纠错码)系统以确保可靠性。
(3) 坏块处理
Nand-Flash器件中的坏块是随机分布的。以前做过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。Nand-Flash器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,则将导致高故障率。
5. 易用性
可以非常直接地使用基于Nor-Flash的闪存,像其他存储器那样连接,并可以在上面直接运行代码。由于需要I/O接口,Nand-Flash要复杂得多,各种Nand-Flash器件的存取方法因厂家而异。在使用Nand-Flash器件时,必须先写入驱动程序,才能继续执行其他操作。向Nand-Flash器件写入信息需要相当的技巧,因为设计人员绝不能向坏块写入,这就意味着在Nand-Flash器件上自始至终都必须进行虚拟映射。
6. 软件支持
在Nor-Flash器件上运行代码不需要任何的软件支持。在Nand-Flash器件上进行同样操作时,通常需要驱动程序,也就是闪存技术驱动程序(Memory Technology Devices,MTD)。Nand-Flash和Nor-Flash器件在进行写入和擦除操作时都需要MTD,但使用Nor-Flash器件时,所需要的MTD要相对少一些。许多厂商都提供用于Nor-Flash器件的更高级的软件,在Linux系统中采用JFFS驱动,这在后文中将具体讲述。
2.2 Flash驱动
对于Flash芯片的驱动,Linux提供了完善的驱动程序,只需要在内核配置里面选择好相应的类型即可。
在Linux中通过MTD子系统提供的抽象设备机制,来实现对Flash设备的管理控制和数据读写。MTD设备是一类特殊的存储设备,如常用的Flash芯片、CFI卡等。MTD同时提供通过字符设备方式和块设备方式来管理控制MTD设备的机制。
MTD核心层分为:用户模块接口层、MTD抽象层和MTD设备驱动模块层。MTD核心层通过设备驱动模块实现对存储设备的物理访问功能,通过用户模块提供用户空间直接访问的接口。
MTD的设备驱动模块层负责驱动Flash硬件,只需实现实际设备上的访问控制,与内核交互的复杂工作则由MTD抽象层完成。其中也对Nand-Flash的驱动进行了抽象,还实现了错误检测与纠错(ECC)和坏块处理等用户模块层提供从用户空间直接访问的接口,上层应用只需通过MTD抽象层提供的字符设备方式或块设备方式来访问MTD抽象设备,然后通过MTD的内部机制把这些请求交给实际的驱动模块去执行。MTD抽象层定义了抽象的MTD设备结构,对于具体设备的驱动模块,需要设计好公共函数的实际内容,并在检测到实际设备后注册一个MTD设备,然后就可通过MTD提供的字符设备访问方式或块设备访问方式直接使用具体的硬件设备。
MTD程序编写在以后的章节里会详细介绍。
3硬件电路设计
在系统中使用了两种Flash芯片,其中Nor-Flash主要用于存放系统代码,而Nand-Flash主要用于存放用户信息。
3.1 Nor-FIash的设计
系统所用的Nor-Flash芯片是Intel公司的E28F128J3 Flash,如图7-2所示。128Mbit的存储空间由128个128KB(131072字节)的擦除块组成。擦除块是相互独立的,每一块的擦除操作都可以在1s内完成。每一块可以独立地被擦除100000次。这些块可以分别设定为是可锁的或是非可锁的,由一个锁定位来控制。还有一个128bit的保护寄存器可以复用。


该Flash采用25根地址线和16位数据线,可以通过nBYTE这个信号来选择是8位还是16位方式访问。该系统是采用16位方式访问的,因此该信号线接高电平,同时A0地址线不起作用,一同接高。nOE/nWE是读写信号,由EP7312的读写控制线直接控制。Flash的片选信号有3个,它们组合后的结果如表7-1所示。

 

系统中将CEl、CE2信号接高,CE0由ARM的CS0片选线来控制。
3.2 Nand-Flash的设计
     系统中所采用的Nand-Flash芯片是Samsung公司的K9F2808U。该器件存储容量为16M×8位,除此之外还有512KX 8位的空闲存储区。该器件采用TSSOP48封装,工作电压为2.7~3.6V。8位I/O端口采用地址、数据和命令复用的方法,这样既可减少引脚数,又可使接口电路简捷。
由于ARM系统没有Nand-Flash控制所需要的CLE、ALE信号,因此需要利用ARM的通用GPIO口。具体的连接电路如图7-3所示。

命令锁存使能(CLE),使输入的命令发送到命令寄存器。当变为高电平时,在WE上升沿命令通过I/O口锁存到命令寄存器。
地址锁存使能(ALE),控制地址输入到片内的地址寄存器中,地址是在WE的上升沿被锁存的。
片选使能(CE),用于器件的选择控制。在读操作、CE变为高电平时,器件返回到  备用状态;然而,当器件在写操作或擦除操作过程中保持忙状态时,CE的变高将被忽略,不会返回到备用状态。
写使能(WE),用于控制把命令、地址和数据在它的上升沿写入到I/O端口;而在  读操作时必须保持高电平。
读使能(RE),控制把数据放到I/O总线上,在它的下降沿tREA时间后数据有效;同时使内部的列地址自动加1。
I/O端口,用于命令、地址和数据的输入及读操作时的数据输出。当芯片未选中时,                I/O口为高阻态。
工写保护(WP),禁止写操作和擦除操作。当它有效时,内部的高压生成器将会复位。
准备/忙(R/B),反映当前器件的状态。低电平时,表示写操作或擦除操作以及随机读正进行中;当它变为高电平时,表示这些操作已经完成。它采用了开漏输出结构,在芯片未选中时不会保持高阻态。
3.3 Nor-F1ash/Nand-FIash跳线选择
由于ARM提供了Nand-Flash Boot-loader技术和可选择的多种启动方式,因此硬件设计中同时设计了Nor-Flash和Nand-Flash,通过跳线选择启动方式,如图7-4所示。


4软件设计
     Flash 存储器的支撑软件包括基本的读/写/擦除操作和上层的闪存管理软件,采用的嵌入式Linux操作系统中通过MTD子系统提供的抽象设备机制,来实现对Flash设备的管理控制和数据读写。
4.1 FIash数据存储操作流程
     向Flash存储器的特定寄存器写入地址和数据命令,就可对Flash存储器进行烧写、擦除等操作,但操作必须按照一定的顺序,否则就会导致Flash存储器复位而使操作命令无法完成。编程指令只能使“1”变为“0”,而擦除命令可使“0”变为“1”,因此正确的操作顺序是先擦除,后编程,当Flash存储器被擦除以后,读出的内容应全为0xFF。
对Flash操作的程序流程如图7-5所示。

系统启动后,对系统关键设备(包括ARM、sI)RAM、N0r-Flash和Nand-Flash等)进行初始化操作,然后启动Boot-loader,将Nand-Flash上的Linux内核读入SDRAM执行。
初始化时,除了对Flash内部寄存器进行初始化设置外,还需要设置ARM的寄存器。
4.2程序代码说明
对Flash存储器的烧写、整片擦除、按扇区擦除及其他操作,都可以通过编程实现(见如下代码)。对于编写连续烧写Flash存储器多个存储单元的程序,只需循环执行即可,但应在对每个单元烧写命令发出后进行检测,保证前一个单元烧写结束后再进行下一个存储单元的烧写,当然也可采用延时等待的方法进行连续的烧写。





在读取Flash的时候不一定读取一个block,可以按照实际需要的地址读取;但是在写的时候一次需要擦除一个扇区,然后再写入。读取子程序设定了一次读取一个扇区,目的是为了按需要更改后再写入。
5实例总结
     ARM与Flash存储器的接口电路设计与调试,以及对Flash存储器的编程与擦除是ARM系统设计中的一项重要部分,Flash存储器通常装载着嵌入式系统的Boot-loader程序和操作系统的核心代码,因此Flash的稳定与否直接决定整个系统能否运作。
本章讲述了两种Flash芯片——Nor-Flash和Nand-Flash的特点、软硬件设计,在对Flash的编程中,需要注意以下三个方面。
   在Flash编程之前应先擦除Flash,对Flash进行擦除过程将持续一段时间(视不同的Flash芯片而定,具体的可以查找Flash芯片典型擦除时间,一般为20s左右),擦除后Flash的数据为全FF。
   对Flash编程的过程,将持续很长时间,通常编程50KB的文件需要15分钟左右(视不同的Flash芯片、上位机和操作系统而定)。
   擦除Flash操作不可恢复,对Flash编程需使用“初始化配置”,如关闭看门狗、关闭系统对Flash空间的缓冲、设置对Flash空间的操作时序等。
 
 


 

 
 

NAND和NOR flash详解

作者:未知   时间:2007-11-10 18:20:04  来自:网上转载  浏览次数:520  文字大小:【】【】【

NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。
  相“flash存储器”经常可以与相“NOR存储器”互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。  
  NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash 闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
  NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。

性能比较
  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的擦除单元更小,相应的擦除电路更少。

接口差别

  NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。
  NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。
  NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。



容量和成本
  NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。
  NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash只是用在8~128M
B的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和MMC存储卡市场上所占份额最大。



可靠性和耐用性
  采用flahs介质时一个需要重点考虑的问题是可靠性。对于需要扩展MTBF的系统来说,Flash是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。

  寿命(耐用性)
  在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些。


  位交换
  所有flash器件都受位交换现象的困扰。在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。
  一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。
  当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用EDC/ECC算法。
  这个问题对于用NAND存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。


  坏块处理
  NAND器件中的坏块是随机分布的。以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。
  NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。

  

易于使用
  可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。
  由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。
  在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。

软件支持
  当讨论软件支持的时候,应该区别基本的读/写/擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化。
  在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR器件在进行写入和擦除操作时都需要MTD。
  使用NOR器件时所需要的MTD要相对少一些,许多厂商都提供用于NOR器件的更高级软件,这其中包括M-System的TrueFFS驱动,该驱动被Wind River System、Microsoft、QNX Software System、Symbian和Intel等厂商所采用。
  驱动还用于对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和损耗平衡。
 
 
 

NAND闪存深入解析



From : globalsources

  对于许多消费类音视频产品而言,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 不同闪存单元的对比


图2 NOR闪存的随机存取时间为0.12ms,而NAND闪存的第一字节随机存取速度要慢得多

NAND基本操作

以2Gb NAND器件为例,它由2048个区块组成,每个区块有64个页(见图3)。

图3 2GB NAND闪存包含2,048个区块
  每一个页均包含一个2048字节的数据区和64字节的空闲区,总共包含2,112字节。空闲区通常被用于ECC、耗损均衡(wear leveling)和其它软件开销功能,尽管它在物理上与其它页并没有区别。NAND器件具有8或16位接口。通过8或16位宽的双向数据总线,主数据被连接到NAND存储器。在16位模式,指令和地址仅仅利用低8位,而高8位仅仅在数据传输周期使用。

  擦除区块所需时间约为2ms。一旦数据被载入寄存器,对一个页的编程大约要300μs。读一个页面需要大约25μs,其中涉及到存储阵列访问页,并将页载入16,896位寄存器中。

除了I/O总线,NAND接口由6个主要控制信号构成:

 

1.芯片启动(Chip Enable, CE#):如果没有检测到CE信号,那么,NAND器件就保持待机模式,不对任何控制信号作出响应。

2.写使能(Write Enable, WE#): WE#负责将数据、地址或指令写入NAND之中。

3.读使能(Read Enable, RE#): RE#允许输出数据缓冲器。

4.指令锁存使能(Command Latch Enable, CLE): 当CLE为高时,在WE#信号的上升沿,指令被锁存到NAND指令寄存器中。

5.地址锁存使能(Address Latch Enable, 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等其它类型存储器共享数据总线。该功能有时被称为“无需介意芯片启动(chip enable don‘t care)”。这种方案的初衷是适应较老的NAND器件,它们要求CE#在整个周期为低(译注:根据上下文改写)。

图4 输入寄存器接收到页编程(80h)指令时,内部就会全部重置为1s,使得用户可以只输入他想以0位编程的数据字节

图5 带有随机数据输入的编程指令。图中加亮的扇区显示,该指令只需要后面跟随着数据的2个字节的地址
所有NAND操作开始时,都提供一个指令周期(表1)。


  当输出一串WE#时钟时,通过在I/O位7:0上设置指令、驱动CE#变低且CLE变高,就可以实现一个指令周期。注意:在WE#信号的上升沿上,指令、地址或数据被锁存到NAND器件之中。如表1所示,大多数指令在第二个指令周期之后要占用若干地址周期。注意:复位或读状态指令例外,如果器件忙,就不应该发送新的指令。

以2Gb NAND器件的寻址方案为例,第一和第二地址周期指定列地址,该列地址指定页内的起始字节(表2)。

  注意:因为最后一列的位置是2112,该最后位置的地址就是08h(在第二字节中)和3Fh(在第一字节中)。PA5:0指定区块内的页地址,BA16:6指定区块的地址。虽然大多编程和读操作需要完整的5字节地址,在页内随机存取数据的操作仅仅用到第一和第二字节。块擦除操作仅仅需要三个最高字节(第三、第四和第五字节)来选择区块。

图6 典型的存储方法

图7 页读缓存模式
  

  总体而言,NAND的基本操作包括:复位(Reset, FFh)操作、读ID(Read ID, 00h)操作、读状态(Read Status, 70h)操作、编程(Program)操作、随机数据输入(Random data input, 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,就提供了强大的系统级解决方案。最简单的硬件实现方案是采用简单的汉明(Simple Hamming)码,但是,只能校正单一位错误。瑞德索罗门(Reed-Solomon)码提供更为强大的纠错,并被目前的控制器广为采用。此外,BCH码由于比瑞德索罗门方法的效率高,应用也日益普及。
  要用软件执行NAND闪存的区块管理。该软件负责磨损评级或逻辑到物理映射。该软件还提供ECC码,如果处理器不包含ECC硬件的话。

  编程或擦除操作之后,重要的是读状态寄存器,因为它确认是否成功地完成了编程或擦除操作。如果操作失败,要把该区块标记为损坏且不能再使用。以前已编写进去的数据要从损坏的区块中搬出,转移到新的(好的)存储块之中。2Gb NAND的规范规定,它可以最多有40个坏的区块,这个数字在器件的生命周期(额定寿命为10万次编程/擦除周期)内都适用。一些有坏块的NAND器件能够出厂,主要就归根于其裸片面积大。管理器件的软件负责映射坏块并由好的存储块取而代之。  

  利用工厂对这些区块的标记,软件通过扫描块可以确定区块的好坏。坏块标记被固定在空闲区的第一个位置(列地址2048)。如果在0或1页的列地址2048上的数据是“non-FF”,那么,该块要标记为坏,并映射出系统。初始化软件仅仅需要扫描所有区块确定以确定哪个为坏,然后建一个坏块表供将来参考。

小心不要擦除坏块标记,这一点很重要。工厂在宽温和宽电压范围内测试了NAND;一些由工厂标记为坏的区块可能在一定的温度或电压条件下仍然能工作,但是,将来可能会失效。如果坏块信息被擦除,就无法再恢复数据

作者:Jim Cooke
 
 
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多