当前位置:文档之家› NOR与NAND非易失闪存技术的原理与区别

NOR与NAND非易失闪存技术的原理与区别

NOR与NAND非易失闪存技术的原理与区别
NOR与NAND非易失闪存技术的原理与区别

NOR与NAND非易失闪存技术的原理与区别NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。简单的来说,NAND规格快闪记忆体像硬碟,以储存数据为主,又称为Data Flash,晶片容量大,目前主流容量已达二Gb;NOR规格记忆体则类似DRAM,以储存程序代码为主,又称为Co deFlash,所以可让微处理器直接读取,但晶片容量较低,主流容量为512Mb。

相“flash存储器”经常可以与相“NOR存储器”互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。

NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在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.接口差别

NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。

NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。

NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。

3.容量和成本

NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和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驱动,该驱动被Wind River System、Microsoft、QNX Software System、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芯片的使用也类似于通常的内存芯片,它的传输效率很高,可执行程序可以在芯片内执行( XI P, eXecute In Place),这样应用程序可以直接在flash 闪存内运行,不必再把代码读到系统RAM中。由于NOR的这个特点,嵌入式系统中经常将NOR芯片做启动芯片使用。而NAND共用地址和数据总线,需要额外联结一些控制的输入输出,所以直接将NAND芯片做启动芯片比较难。

4) N AN D闪存芯片因为共用地址和数据总线的原因,不允许对一个字节甚至一个块进行的数据清空,只能对一个固定大小的区域进行清零操作;而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)NAND Flash一般地址线和数据线共用,对读写速度有一定影响;而NOR Flash 闪存数据线和地址线分开,所以相对而言读写速度快一些。

NAND和NOR芯片的共性首先表现在向芯片中写数据必须先将芯片中对应的内容清空,然后再写入,也就是通常说的“先擦后写”。只不过NOR芯片只用擦写一个字,而NAND需要擦写整个块。其次,闪存擦写的次数都是有限的.当闪存的使用接近使用寿命的时候,经常会出现写操作失败;到达使用寿命时,闪存内部存放的数据虽然可以读,但是不能再进行写操作了所以为了防止上面问题的发生,不能对某个特定的区域反复进行写操作。通常NAND的可擦写次数高于NOR 芯片,但是由于NAND通常是整块擦写,块内的页面中如果有一位失效整个块就会失效,而且由于擦写过程复杂,失败的概率相对较高,所以从整体上来说NOR的寿命较长。

另一个共性是闪存的读写操作不仅仅是一个物理操作,实际上在闪存上存放数据必须使用算法实现,这个模块一般在驱动程序的MTD' (Memory Technology Drivers)模块中或者在FTLZ (Flash Translation Layer)层内实现,具体算法和芯片的生产厂商以及芯片型号有关系。

从使用角度来看,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基本操作

以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#在整个周期为低(译注:根据上下文改写)。

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

带有随机数据输入的编程指令。图中加亮的扇区显示,该指令只需要后面跟随着数据的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;一些由工厂标记为坏的区块可能在一定的温度或电压条件下仍然能工作,但是,将来可能会失效。如果坏块信息被擦除,就无法再恢复。

NAND Flash结构与驱动分析

摘自Tony嵌入式论坛,https://www.doczj.com/doc/b48937502.html,/bbs/thread-8915-1-1.html

一、NAND flash的物理组成

NAND Flash 的数据是以bit的方式保存在memory cell,一般来说,一个cell 中只能存储一个bit。这些cell 以8个或者16个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device的位宽。这些Line会再组成Page,(NAND Flash 有多种结构,我使用的NAND Flash 是K9F1208,下面内容针对三星的K9F1208U0M),每页528Bytes(512byte(Main Area)+16byte(Spare Area)),每32个page形成一个Block(32*528B)。具体一片flash上有多少个Block视需要所定。我所使用的三星k9f1208U0M具有4096个block,故总容量为4096*(32*528B)=66MB,但是其中的2MB是用来保存ECC校验码等额外数据的,故实际中可使用的为64MB。

NAND flash以页为单位读写数据,而以块为单位擦除数据。按照这样的组织方式可以形成所谓的三类地址:

Column Address:Starting Address of the Register. 翻成中文为列地址,地址的低8位

Page Address :页地址

Block Address :块地址

对于NAND Flash来讲,地址和命令只能在I/O[7:0]上传递,数据宽度是8位。

二、NAND Flash地址的表示

512byte需要9bit来表示,对于528byte系列的NAND,这512byte被分成1st half Page Register和2nd half Page Register,各自的访问由地址指针命令来选择,A[7:0]就是所谓的column address(列地址),在进行擦除操作时不需要它,

why?因为以块为单位擦除。32个page需要5bit来表示,占用A[13:9],即该page 在块内的相对地址。A8这一位地址被用来设置512byte的1st half page还是2nd half page,0表示1st,1表示2nd。Block的地址是由A14以上的bit来表示。

例如64MB(512Mb)的NAND flash(实际中由于存在spare area,故都大于这个值),共4096block,因此,需要12个bit来表示,即A[25:14],如果是128MB(1Gbit) 的528byte/page的NAND Flash,则block address用A[26:14]表示。而page address就是blcok address|page address in block NAND Flash 的地址表示为:Block Address|Page Address in block|halfpage pointer|Column Address 地址传送顺序是Column Address,Page Address,Block Address。

由于地址只能在I/O[7:0]上传递,因此,必须采用移位的方式进行。例如,对于512Mbit x8的NAND flash,地址范围是0~0x3FF_FFFF,只要是这个范围内的数值表示的地址都是有效的。以NAND_ADDR 为例:

第1 步是传递column address,就是NAND_ADDR[7:0],不需移位即可传递到I/O[7:0]上,而halfpage pointer即A8 是由操作指令决定的,即指令决定在哪个halfpage 上进行读

写,而真正的A8 的值是不需程序员关心的。

第2 步就是将NAND_ADDR 右移9位,将NAND_ADDR[16:9]传到I/O[7:0]上;

第3 步将NAND_ADDR[24:17]放到I/O上;

第4步需要将NAND_ADDR[25]放到I/O上;

因此,整个地址传递过程需要4 步才能完成,即4-step addressing。如果NAND Flash 的容量是32MB(256Mbit)以下,那么,block adress最高位只到bit24,因此寻址只需要3步。

下面,就x16 的NAND flash 器件稍微进行一下说明。由于一个page 的main area 的容量为256word,仍相当于512byte。但是,这个时候没有所谓的1st halfpage 和2nd halfpage 之分了,所以,bit8就变得没有意义了,也就是这个时候A8 完全不用管,地址传递仍然和x8 器件相同。除了,这一点之外,x16 的NAND使用方法和x8 的使用方法完全相同。

三、NAND flash驱动解读

以前由于做移植多一些,那些工作很简单(现在看来),从来都不用去关心驱动里面到底怎么实现的,这几次面试才发现真的是学的太浅了,似乎我还在学习仰泳而那些牛人基本都属于潜水级的了,潜的不知有多深。我对照着开发板所带的NAND flash驱动和k9f1208的芯片资料把这些代码通读了一遍,终于明白

了NAND flash的读写过程是如何实现的了。我所参考的驱动是mizi公司为三星芯片所写的,我看看了,大概和官方2.4.18内核的nand.c差不多。

在s3c2410处理器中有专门的NAND flash控制器,他们位于SFR区,具体可以参看s3c2410用户手册。以下的这些代码均可以在vivi或者kernel里面找到,文中会标明程序出自何处。在vivi中,有关NAND flash的驱动都在driver/mtd/nand/下,该目录中包含的源文件:smc_core.c是NAND flash的主要驱动。

NAND flash 芯片定义了一个很长的结构,这个结构中包含了操作NAND flash的函数和一些必要的变量(include/mtd/nand.h)。

struct nand_chip {

#ifdef CONFIG_MTD_NANDY /* =y */

void (*hwcontrol)(int cmd);

void (*write_cmd)(u_char val);

void (*write_addr)(u_char val);

u_char (*read_data)(void);

void (*write_data)(u_char val);

void (*wait_for_ready)(void);

int page_shift;

u_char *data_buf;

u_char *data_cache;

int cache_page;

struct nand_smc_dev *dev;

u_char spare[SMC_OOB_SIZE];

#else /* CONFIG_MTD_NANDY */

……

#ifdef CONFIG_MTD_NAND_ECC

u_char ecc_code_buf[6];

u_char reserved[2];

#endif

#endif /* CONFIG_MTD_NANDY */

};

纵观对NAND flash的各种操作(read、write、erase),无外乎如下几种操作:1.选择flash nand_select()

2.发送命令nand_command()

3.进行相应操作read,write……

4.反选NAND flash nand_deselect()

下面是以上四步的实现代码:

1、选择NAND flash

#define nand_select() this->hwcontrol(NAND_CTL_SETNCE); \

nand_command(mtd, NAND_CMD_RESET, -1, -1); \

udelay (10);

hwcontrol(NAND_CTL_SETNCE)的作用是设置2410的NAND FLASH CONFIGURATION (NFCONF) REGISTER的NAND Flash Memory chip enable位为0,这位寄存器在自动重启后就被系统自动清零。如果要访问NAND flash的内存,这位必须置1。

nand_command(mtd, NAND_CMD_RESET, -1, -1);向flash发送命令,此命令为reset,即为重置NAND flash。

然后是10us的延迟,给flash个反应时间。

2、发送命令

Nand_command()同样在smc_core.c中实现。NAND flash的命令有如下几种:

命令命令值描述NAND_CMD_READ0 0 读操作

NAND_CMD_READ1 1 读操作

NAND_CMD_PAGEPROG 0x10 页编程操作NAND_CMD_READOOB 0x50 读写OOB NAND_CMD_ERASE1 0x60 读写操作

NAND_CMD_STATUS 0x70 读取状态NAND_CMD_STATUS_MULTI 0x71 读取状态

NAND_CMD_SEQIN 0x80 写操作

NAND_CMD_READID 0x90 读Flash ID 号

NAND_CMD_ERASE2 0xd0 擦写操作

NAND_CMD_RESET oxff 复位操作

按照程序的注释,可以将该函数的实现分为如下几步:

1、Begin command latch cycle

实现代码:

this->hwcontrol(NAND_CTL_SETCLE);

this->hwcontrol(NAND_CTL_DAT_OUT);

找到第二条语句的定义,发现什么都么做,不解!!希望达人解答。我猜想可能是一个数据读出的使能操作,允许数据读出。

Command Latch Enable(CLE) and Address Latch Enable(ALE) are used to multiplex command and address respectively, via the I/O pins. The CLE input controls the path activation for commands sent to the command register. When active high, commands are latched into the command register through the I/O ports on the rising edge of the nWE signal. 看了这段英文相信对第一条语句的作用已经十分清楚了,他就是用来控制向命令寄存(COMMAND SET (NFCMD) REGISTER)发送命令的。

2、Write out the command to the device

这部分对于不同的命令来说,操作的步骤也不太相同,如果为写操作,那么还有根据flash不同的容量决定操作步骤,具体可以参看代码。如果为其他命令,那么就是简单的一行:

this->write_cmd (command);

将命令直接想到命令寄存器(NFCMD[7:0])中。

3、Set ALE and clear CLE to start address cycle & Serially input address

1中已经提到了ALE和CLE的作用,现在开始发送地址。

实现代码:

this->hwcontrol(NAND_CTL_CLRCLE); // clear the command latch enable

this->hwcontrol(NAND_CTL_SETALE); // set the address latch enable

然后按位操作,是用函数write_addr()将地址写到NAND FLASH ADDRESS SET (NFADDR) REGISTER中。

4、Latch in address

实现代码:

this->hwcontrol(NAND_CTL_CLRALE);

this->hwcontrol(NAND_CTL_DAT_IN);

地址发送完毕,清楚ALE。

5、Pause for 15us

我使用的VIVI中,使用udelay (15)延时15us,但这个时间会因NAND Flash 的不同而不同。

三、Operation

根据函数的不同,操作部分会不一样,但是主要的是对NAND FLASH DATA (NFDATA) REGISTER的操作,或写(编程)或者读。通过读或写函数的参数来返回或传递读出的值或写入的值。写得操作通常比较麻烦,他要将写到flash的内容重新读出后进行ECC校验,如果数据正确则在重新真正的写(编程),如果错误,则将数据写入flash的另一个块。读和写都是以页为单位进行操作。而擦除则以块为单位,三个周期发送完地址。擦除完毕后同样需要进行检察以确定是否擦除成功。

四、De-select the NAND device

实现代码:

#define nand_deselect() this->hwcontrol(NAND_CTL_CLRNCE);

反选flash吧,不知这样叫正确与否,跟select the NAND device相反,亦即使用完后将使能flash位置为1,代码是NFCONF位于0x4e00_0000的位置(NFCONF |= NFCONF_nFCE_HIGH;)。

NAND Flash中文版资料

NAND Flash 存储器 和 使用ELNEC编程器烧录NAND Flash 技术应用文档 Summer 翻译整理 深圳市浦洛电子科技有限公司 August 2006

目录 一. 简介 ----------------------------------------------------------------------------------- 1 二. NAND Flash与NOR Flash的区别 -------------------------------------------- 1 三. NAND Flash存储器结构描叙 --------------------------------------------------- 4 四. 备用单元结构描叙 ---------------------------------------------------------------- 6 五. Skip Block method(跳过坏块方式) ------------------------------------------ 8 六. Reserved Block Area method(保留块区域方式)----------------------------- 9 七. Error Checking and Correction(错误检测和纠正)-------------------------- 10 八. 文件系统 ------------------------------------------------------------------------------10 九. 使用ELNEC系列编程器烧录NAND Flash -------------------------------- 10 十. Invalid Block Management drop-down menu -------------------------------- 12 十一. User Area Settings3 -------------------------------------------------------- 13 十二. Solid Area Settings --------------------------------------------------------- 15 十三. Quick Program Check-box ---------------------------------------------- 16 十四. Reserved Block Area Options --------------------------------------------17 十五. Spare Area Usage drop-down menu ------------------------------------18

NOR-FLASH驱动文档(SST39VF1601)

NOR-FLASH驱动文档(SST39VF1601)2012-03-30 00:57:33 NOR-FLASH是最早出现的Flash Memory,目前仍是多数供应商支持的技术架 构.NOR-FLASH在擦除和编程操作较少而直接执行代码的场合,尤其是纯代码存储的应用中广泛使用,但是由于NOR-FLASH只支持块擦除,其擦除和编程速度较慢,而块尺寸又较大,导致擦除和编程操作所花费的时间很长,所以在纯数据存储和文件存储的应用中显得力不从心. NOR-FLASH的特点是: 1. 程序和数据可存放在同一芯片上,FLASH芯片拥有独立的数据总线和地址总线,能快速随 机读取,并且允许系统直接从Flash中读取代码执行,而无需先将代码下载至RAM中再执行; 2. 可以单字节或单字读取,但不能单字节擦除,必须以部分或块为单位或对整片执行擦除操 作,在执行写操作之前,必需先根据需要对部分,块或整片进行擦除,然后才能写入数据。 以SST系列NOR-FLASH芯片为例介绍FLASH的使用方法及驱动. 首先,在驱动的头文件中,要根据芯片的具体情况和项目的要求作如下定义: 1. 定义操作的单位,如 typedef unsigned char BYTE; // BYTE is 8-bit in length typedef unsigned short int WORD; // WORD is 16-bit in length typedef unsigned long int Uint32; // Uint32 is 32-bit in length 在这里地址多是32位的,芯片写操作的最小数据单位为WORD,定义为16位,芯片读操作的最小数据单位是BYTE,定义为8位. 2. 因为芯片分为16位和32位的,所以对芯片的命令操作也分为16位操作和32位操作(命令 操作在介绍具体的读写过程中将详细介绍). #ifdef GE01 /*宏NorFlash_32Bit,若定义了为32位NorFlash,否则为16位NorFlash*/ #define NorFlash_32Bit #endif 3. 根据芯片的情况,定义部分(段)和块的大小. #define SECTOR_SIZE 2048 // Must be 2048 words for 39VF160X #define BLOCK_SIZE 32768 // Must be 32K words for 39VF160X

浅谈NorFlash的原理及其应用

浅谈NorFlash的原理及其应用 NOR Flash NOR Flash是现在市场上两种主要的非易失闪存技术之一。Intel 于1988年首先开发出NOR Flash 技术,彻底改变了原先由EPROM(Erasable Programmable Read-Only-Memory电可编程序只读存储器)和EEPROM(电可擦只读存储器Electrically Erasable Programmable Read - Only Memory)一统天下的局面。紧接着,1989年,东芝公司发表了NAND Flash 结构,强调降低每比特的成本,有更高的性能,并且像磁盘一样可以通过接口轻松升级。NOR Flash 的特点是芯片内执行(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和NAND之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。 l 、NOR的读速度比NAND稍快一些。 2、NAND的写入速度比NOR快很多。 3 、NAND的4ms擦除速度远比NOR的5s快。 4 、大多数写入操作需要先进行擦除操作。 5 、NAND的擦除单元更小,相应的擦除电路更少。此外,NAND 的实际应用方式要比NOR复杂的多。NOR可以直接使用,并可在上面直接运行代码;而NAND需要I/O接口,因此使用时需要驱动程序。不过当今流行的操作系统对NAND结构的Flash都有支持。此外,Linux内核也提供了对NAND结构的Flash的支持。详解 NOR

总结NAND FLASH控制器的操作

NAND FLASH相对于NOR FLASH而言,其容量大,价格低廉,读写速度都比较快,因而得到广泛应用。NOR FLASH的特点是XIP,可直接执行应用程序, 1~4MB时应用具有很高的成本效益。但是其写入和擦除的速度很低直接影响了其性能。 NAND FLASH不能直接执行程序,用于存储数据。在嵌入式ARM应用中,存储在其中的数据通常是读取到SDROM中执行。因为NAND FLASH主要接口包括 几个I/O口,对其中的数据都是串行访问,无法实现随机访问,故而没有执行程序。 NAND FLASH接口电路是通过NAND FLAH控制器与ARM处理器相接的,许多ARM处理器都提供NAND FLASH控制器,为使用NAND FLASH带来巨大方便。 K9F2G08U0B是三星公司的一款NAND FLASH产品。 K9F2G08U0B包含8个I/O,Vss、Vcc、以及控制端口(CLE、ALE、CE、RE、WE、WP、R/B)。其存储结构分块。 共2K 块 每块大小16 页 每页大小2K + 64BYTE 即容量=块数×页数×每页大小=2K×16×(2K + 64BYTE)=256M BYTE + 8M BYTE NAND FLASH控制器提供了OM[1:0]、NCON、GPG13、GPG14、GPG15共5个信号来选择NAND FLASH启动。 OM[1:0]=0b00时,选择从NAND FLASH启动。 NCON:NAND FLASH类型选择信号。 GPG13:NAND FLASH页容量选择信号。 GPG14:NAND FLASH地址周期选择信号。 GPG15:NAND FLASH接口线宽选择。0:8bit总线宽度;1:16bit总线宽度。 访问NAND FLASH 1)发生命令:读、写、还是擦除 2)发生地址:选择哪一页进行上述操作 3)发生数据:需要检测NAND FLASH内部忙状态 NAND FLASH支持的命令: #define CMD_READ1 0x00 //页读命令周期1 #define CMD_READ2 0x30 //页读命令周期2 #define CMD_READID 0x90 //读ID 命令 #define CMD_WRITE1 0x80 //页写命令周期1 #define CMD_WRITE2 0x10 //页写命令周期2 #define CMD_ERASE1 0x60 //块擦除命令周期1 #define CMD_ERASE2 0xd0 //块擦除命令周期2 #define CMD_STATUS 0x70 //读状态命令 #define CMD_RESET 0xff //复位 #define CMD_RANDOMREAD1 0x05 //随意读命令周期1

STM32使用FSMC控制NAND flash 例程概要

本文原创于观海听涛,原作者版权所有,转载请注明出处。 近几天开发项目需要用到STM32驱动NAND FLASH,但由于开发板例程以及固件库是用于小页(512B,我要用到的FLASH为1G bit的大页(2K,多走了两天弯路。以下笔记将说明如何将默认固件库修改为大页模式以驱动大容量NAND,并作驱动。 本文硬件:控制器:STM32F103ZET6,存储器:HY27UF081G2A 首先说一下NOR与NAND存储器的区别,此类区别网上有很多,在此仅大致说明: 1、Nor读取速度比NAND稍快 2、Nand写入速度比Nor快很多 3、NAND擦除速度(4ms远快于Nor(5s 4、Nor 带有SRAM接口,有足够的地址引脚来寻址,可以很轻松的挂接到CPU 地址和数据总线上,对CPU要求低 5、NAND用八个(或十六个引脚串行读取数据,数据总线地址总线复用,通常需要CPU支持驱动,且较为复杂 6、Nor主要占据1-16M容量市场,并且可以片内执行,适合代码存储 7、NAND占据8-128M及以上市场,通常用来作数据存储 8、NAND便宜一些 9、NAND寿命比Nor长 10、NAND会产生坏块,需要做坏块处理和ECC 更详细区别请继续百度,以上内容部分摘自神舟三号开发板手册

下面是NAND的存储结构: 由此图可看出NAND存储结构为立体式 正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块nand flash也分为若干block,每个block分为如干page。一般而言,block、page之间的关系随着芯片的不同而不同。 需要注意的是,对于flash的读写都是以一个page开始的,但是在读写之前必须进行flash 的擦写,而擦写则是以一个block为单位的。 我们这次使用的HY27UF081G2A其PDF介绍: Memory Cell Array = (2K+64 Bytes x 64 Pages x 1,024 Blocks 由此可见,该NAND每页2K,共64页,1024块。其中:每页中的2K为主容量Data Field, 64bit为额外容量Spare Field。Spare Field用于存贮检验码和其他信息用的,并不能存放实际的数据。由此可算出系统总容量为2K*64*1024=134217728个byte,即1Gbit。NAND闪存颗粒硬件接口: 由此图可见,此颗粒为八位总线,地址数据复用,芯片为SOP48封装。 软件驱动:(此部分写的是伪码,仅用于解释含义,可用代码参见附件 主程序: 1. #define BUFFER_SIZE 0x2000 //此部分定义缓冲区大小,即一次写入的数据 2. #define NAND_HY_MakerID 0xAD //NAND厂商号 3. #define NAND_HY_DeviceID 0xF1 //NAND器件号 4. /*配置与SRAM连接的FSMC BANK2 NAND*/

NAND FLASH在储存测试中的应用

NAND FLASH在储存测试系统中的应用(3) 2009-11-09 22:35:43 来源:王文杰马游春李锦明 关键字:NAND FLASH 储存测试K9K8G08UOM 2 NAND FLASkI Memory的硬件部分 本设计当中,FLASH的数据输入输出口、控制端口通过调理电路与FPGA的端口相连,图4所示是其硬件连接电路。 从图4中可知,FLASH的数据输入输出端口I/00~7、控制端口/CE、是通过芯片SN54LV245与FPGA相连;FLASH的控制端口cLE、ALE、/WE、/RE通过芯片SN54LV245和芯片74HCl4与ITGA相连。其中F-CLE、F-ALE、F—WE、F-RE、F—CE、F- R/Bur是FPGA的I/O口,是FPGA逻辑的输入输出口。CLE、ALE信号是FLASH存储器命令、地址锁存使能信号,/WE是保证命令、地址、数据能否及时正确的写入FLASH 的信号,/RE信号控制着数据的读取,这些信号的精确度关系着FLASH存储、读数功能的实现。所以,这些信号的好坏直接关系着FLASH的正常工作。经实践的电路调试,这些信号在传输过程中受到了其它因素的干扰,信号明显失真,在电路中加入74HCl4(非门)以后,信号会变得光滑,准确。 芯片SN54LV245是八进制三态总线收发器,DIR=1时,总线传输方向从A→B;DIR=0时,总线传输方向从B→A。/OE是片选信号。/0E,DIR信号是由FPGA内部编程逻辑控制的。 FL,ASH接口中,为了保证/wE、/RE、/CE、R/B控制信号初始状态无效,由硬件电路实现端口值拉高。本设计中不使用写保护功能,所以/WP端口也接上了上拉电阻。 3 结束语 基于闪存技术的固态存储器存储密度大,功耗小,可靠性高,体积小重量轻且成本也在不断降f氐,在航空应用中有良好的应用前景。在设计储存测试系统时选用大容量的NAIXD FLASH存储器大大提高了储存、读取速度,并且设计电路结构简单,易于修改。 (本文转自电子工程世界:http://www.eewo

nandflash用法

6 NAND FLASH CONTORLLER OVERVIEW In recent times, NOR flash memory gets high in price while an SDRAM and a NAND flash memory is comparatively economical , motivating some users to execute the boot code on a NAND flash and execute the main code on an SDRAM. S3C2440A boot code can be executed on an external NAND flash memory. In order to support NAND flash boot loader, the S3C2440A is equipped with an internal SRAM buffer called ‘Steppingstone’. When booting, the first 4K Bytes of the NAND flash memory will be loaded into Steppingstone and the boot code loaded into Steppingstone will be executed. Generally, the boot code will copy NAND flash content to SDRAM. Using hardware ECC, the NAND flash data validity will be checked. Upon the completion of the copy, the main program will be executed on the SDRAM. comparatively 比较地、相当地 motivating v. 激励;刺激;调动…的积极性(motivate的ing形式) execute vt. 实行;执行;处死 internal n. 内脏;本质adj. 内部的;里面的;体内的;(机构)内部的 Steppingstone n. 踏脚石;进身之阶;达到目的的手段 validity n. [计] 有效性;正确;正确性 content n. 内容,目录;满足;容量adj. 满意的;vt. 使满足 FEATURES 1. Auto boot: The boot code is transferred into 4-kbytes Steppingstone during reset. After the transfer, the boot code will be executed on the Steppingstone. 2. NAND Flash memory I/F: Support 256Words, 512Bytes, 1KWords and 2KBytes Page. 3. Software mode: User can directly access NAND flash memory, for example this feature can be used in read/erase/program NAND flash memory. 4. Interface: 8 / 16-bit NAND flash memory interface bus. 5. Hardware ECC generation, detection and indication (Software correction). 6. SFR I/F: Support Little Endian Mode, Byte/half word/word access to Data and ECC Data register, and Word access to other registers 7. SteppingStone I/F: Support Little/Big Endian, Byte/half word/word access. 8. The Steppingstone 4-KB internal SRAM buffer can be used for another purpose after NAND flash booting. 特性 1。自动引导:在复位时,引导代码写入4-k字节的中转区,在转移后启动 代码将在中转区上执行。 2。NAND闪存接口:支持256字,512字节,1k字和2KB字节页。 3。软件模式:用户可以直接访问NAND闪存,例如这个特性可以用于 读/写/擦除NAND闪存。

NAND Flash原理和使用

目录 1.概述 (2) 2.功能框图 (3) 3.管脚 (3) 4.寻址 (4) 5.总线操作 (5) 6.命令表 (6) 7.PAGE READ,0x00-0x30 (7) 8.RANDOM DATA READ,0x05-0xE0 (7) 9.PAGE READ CACHE MODE START,0x31;PAGE READ CACHE MODE START LAST,0x3F (8) 10.READ ID,0x90 (8) 11.READ STATUS,0x70 (9) 12.编程操作 (9) 13.内部数据搬移 (11) 14.块擦除操作,0x60-0xD0 (12) 15.复位操作,0xFF (13) 16.写保护操作 (13) 17.错误管理 (14)

以Micron公司的MT29F2G08为例介绍NAND Flash原理和使用。 1.概述 MT29F2G08使用一个高度复用的8-bit总线(I/O[7:0])来传输数据、地址、指令。5个命令脚(CLE、ALE、CE#、WE#)实现NAND命令总线接口规程。3个附加的脚用作: 控制硬件写保护(WP#)、监视芯片状态(R/B#),和发起上电自动读特征(PRE-仅3V芯片支持)。注意, PRE功能不支持宽温芯片。 MT29F2G08内部有2048个可擦除的块,每个块分为64个可编程的页,每个页包含2112字节(2048个字节作为数据存储区,64个备用字节一般作为错误管理使用)。 每个2112个字节的页可以在300us内编程,每个块(64x2112=132K)可以在2ms内被擦除。片上控制逻辑自动进行PROGRAM和ERASE操作。 NAND的内部存储阵列是以页为基本单位进行存取的。读的时候,一页数据从内部存储阵列copy到数据寄存器,之后从数据寄存器按字节依次输出。写(编程)的时候,也是以页为基本单位的:起始地址装载到内部地址寄存器之后,数据被依次写入到内部数据寄存器,在页数据写入之后,阵列编程过程启动。 为了增加编程的速度,芯片有一个CACHE寄存器。在CACHE编程模式,数据先写入到CACHE寄存器,然后再写入到数据寄存器,一旦数据copy进数据寄存器后,编程就开始。在数据寄存器被装载及编程开始之后,CACHE寄存器变为空,可以继续装载下一个数据,这样内部的编程和数据的装载并行进行,提高了编程速度。 内部数据搬移命令(INTERNAL DATA MOVE)也使用内部CAHCE寄存器,通常搬移数据需要很长时间,通过使用内部CACHE寄存器和数据寄存器,数据的搬移速度大大增加,且不需要使用外部内存。

STM32使用FSMC控制NAND flash 例程

本文原创于观海听涛,原作者版权所有,转载请注明出处。 近几天开发项目需要用到STM32驱动NAND FLASH,但由于开发板例程以及固件库是用于小页(512B),我要用到的FLASH为1G bit的大页(2K),多走了两天弯路。以下笔记将说明如何将默认固件库修改为大页模式以驱动大容量NAND,并作驱动。 本文硬件:控制器:STM32F103ZET6,存储器:HY27UF081G2A 首先说一下NOR与NAND存储器的区别,此类区别网上有很多,在此仅大致说明: 1、Nor读取速度比NAND稍快 2、Nand写入速度比Nor快很多 3、NAND擦除速度(4ms)远快于Nor(5s) 4、Nor 带有SRAM接口,有足够的地址引脚来寻址,可以很轻松的挂接到CPU地址和数据总线上,对CPU要求低 5、NAND用八个(或十六个)引脚串行读取数据,数据总线地址总线复用,通常需要CPU支持驱动,且较为复杂 6、Nor主要占据1-16M容量市场,并且可以片内执行,适合代码存储 7、NAND占据8-128M及以上市场,通常用来作数据存储 8、NAND便宜一些 9、NAND寿命比Nor长 10、NAND会产生坏块,需要做坏块处理和ECC 更详细区别请继续百度,以上内容部分摘自神舟三号开发板手册 下面是NAND的存储结构: 由此图可看出NAND存储结构为立体式 正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块nand flash也分为若干block,每个block分为如干page。一般而言,block、page之间的关系随着芯片的不同而不同。 需要注意的是,对于flash的读写都是以一个page开始的,但是在读写之前必须进行flash 的擦写,而擦写则是以一个block为单位的。 我们这次使用的HY27UF081G2A其PDF介绍: Memory Cell Array = (2K+64) Bytes x 64 Pages x 1,024 Blocks 由此可见,该NAND每页2K,共64页,1024块。其中:每页中的2K为主容量Data Field,64bit为额外容量Spare Field。Spare Field用于存贮检验码和其他信息用的,并不能存放实际的数据。由此可算出系统总容量为2K*64*1024=134217728个byte,即1Gbit。NAND闪存颗粒硬件接口: 由此图可见,此颗粒为八位总线,地址数据复用,芯片为SOP48封装。 软件驱动:(此部分写的是伪码,仅用于解释含义,可用代码参见附件) 主程序: 1. #define BUFFER_SIZE 0x2000 //此部分定义缓冲区大小,即一次写入的数据 2. #define NAND_HY_MakerID 0xAD //NAND厂商号 3. #define NAND_HY_DeviceID 0xF1 //NAND器件号

大容量NAND Flash在多媒体手机中的应用

大容量NAND Flash 在多媒体手机中的应用 1 引言随着手机市场竞争的日趋激烈,多媒体手机逐渐成为市场的宠儿。 因为有大量的多媒体数据,因此大容量存储是多媒体手机所要解决的首要问题。NOR 和NAND 是现在市场上两种主要的非易失闪存技术。NOR 的特点是芯片 内执行(XIP,eXecuteInPlace),这样应用程序可以直接在flash 闪存内运行, 不必再把代码读到系统RAM 中。NOR 的传输效率很高,在1~4MB 的小容量 时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。NAND 结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的 速度也很快,是大数据量存储的最佳选择。在选择存储方案的时候,设计师必 须综合考虑以下因素:(1)NOR 的读速度比NAND 稍快一些。(2)NAND 的 写入速度比NOR 快很多(3)NAND 的4ms 擦除速度远比NOR 的5s 快。(4)大多数写入操作需要先进行擦除操作。(5)NAND 的擦除单元更小,相应的擦 除电路更少。(6)NAND 闪存中每个块的最大擦写次数是一百万次,而NOR 的擦写次数是十万次。此外,NAND 的使用比NOR 的使用复杂的多。在NOR 器件上运行代码不需要任何的软件支持,在NAND 器件上进行同样操作时,通 常需要驱动程序,也就是内存技术驱动程序(MTD),NAND 和NOR 器件在 进行写入和擦除操作时都需要MTD.使用NOR 器件时所需要的MTD 要相对少 一些,许多厂商都提供用于NOR 器件的更高级软件,这其中包括M-System 的TrueFFS 驱动,该驱动被 WindRiverSystem、Microsoft、QNXSoftwareSystem、Symbian 和Intel 等厂商所采用。2 TC58DDM82A1XBJ5 在多媒体手机中的应用在多媒体手机中,TC58DDM82A1XBJ5 主要用来存储图片、声音文件等数据量较大的文件。 TC58DDM82A1XBJ5 是Toshiba 公司生产的256MbitsNANDEEPROM.工作电压

如何用SmartPRO 6000纠正NAND Flash烧录过程位反转

如何用SmartPRO 6000纠正NAND Flash烧录过程位反转 近日某电子科技有限公司的客户邮件反馈:使用我们的SmartPRO 6000F-Plus烧录MICRON厂家的TSOP48封装的Nand Flash MT29F2G08ABAEA,不良率比较高,甚至达到了10%的烧录不良率,而烧录SAMSUNG厂家的TSOP48封装的K9F1G08U0E这颗芯片就不会有这种状况,由此可以确定烧录器与烧录座本身固件是没有问题的,所以客户怀疑应该是芯片算法有问题,需要我们重新优化下。 烧录器的功能很简单、很专一,那就是把数据完完整整、重复地复制到每一颗芯片上,复制成功了就提示Pass,复制失败了就提示Fail;SmartPRO 6000F-Plus是一台全心专注于高品质、高效率的Flash专用烧录编程器;目前为止,有广泛的、优秀的烧录客户群,软件、硬件和算法都是客户批量生产验证过的,非常成熟。 那问题究竟出在哪里呢,让我们继续看吧! 先友情提醒一下,我们的烧录软件做有一个监控“电子眼”(操作日记),时刻记录着客户对每颗芯片的烧录情况;客户有任何违规操作或者烧录异常现象,我们都可以迅速重返到“案发现场”,找到问题的根源;

我们第一时间让客户把操作日记发过来,从操作日记上看,客户反馈的现象确实存在,日志也帮助我们很快找到了这种异常: 但是这种现象并不是因为烧录器造成,而是芯片本身存在的工艺差异原因导致的;可能有人就会马上反驳,明显地出现如此高的烧录不良率,编程器原厂就没有任何责任,而是一句话就把问题推到芯片原厂?不要着急,继续往下看。 首先,我们普及一下Nand Flash的一个特性:位反转;Nand Flash由于本身硬件的内在特性,会导致(极其)偶尔的出现位反转的现象。所谓的位反转(bit flip),指的是原先Nand Flash中的某个位变化了,即要么从1变成0了,要么从0变成1了。而出现这种怪异的现

如何用jlink烧写uboot到nand flash

1.通过Nor Flash下载 a. speed 12000 //设置TCK为12M,下载程序时会很快 b. loadbin d:\u-boot.bin 0x30000000 注意:0x30000000是你想要下载u-boot.bin到开发板的内存地址, 内存地址根据不同的开发板设定不同,因为本文中使用的是FL2440, 片上系统是S3C2440,内存挂载的地址区域是 0x30000000~0x33ffffff, 我们只需要把u-boot.bin下载到这片区域即可 然后我们在U-boot命令行模式输入NAND Flash擦除和写入命令即可: c.nand erase 0 40000 // 擦除从0地址开始的大小为0x40000的Nnad Flash扇区,0x40000是待写入的U-boot.bin的大致长度, 长度必须为NAND Flash页大小的整数倍,通常会需要比u-boot.bin实际长度长。 d.nand write 30000000 0 40000 // 把前面下载到0x30000000的 u-boot.bin烧写到Nand去 二、方法二,直接通过JLink 假如你的开发板没有NOR Flash或者是你使用的NOR Flash还未被J-FLASH ARM所支持, 这时上面的方法你就无法使用了,这时候你需要一个初始化内存SDRAM的程序, 这个程序完成的功能也就是配置好SDRAM的寄存器,使它能正常工作, fl2440的内存初始化程序下载地址:“2440init.bin”。你还需要准备一个特殊的u-boot_SDRAM.bin, 它与你要烧写到NAND Flash的u-boot.bin有区别,u-boot_SDRAM.bin编译时需要在include/configs/开发板配置文件.h文件中添加: #define CONFIG_SKIP_LOWLEVEL_INIT 1 //用来支持uboot在内存中直接运行 添加这个宏定义之后,U-boot就跳过了内存初始化的部分,因为此时我们的内存已经先由“2440init.bin“初始化好了,再次初始化会出现内存数据的丢失。 做好上面的准备工作之后,首先将开发板设为从NAND Flash启动,启动 J-Link commander,先假设“u-boot.bin”和“2440init.bin”在电脑的D盘根目录下。 1.loadbin d:\2440init.bin 0 2.setpc 0 3.g 为什么需要把"2440init.bin"复制到0x0地址是因为S3C2440有4K的SRAM,它不需要初始化就可以直接执行程序,从NAND Flash启动时, 这个SRAM的地址会挂载到0x0~0x1000的地址空间, 我们先把"2440init.bin"复制到SRAM中运行, 第 1 页

Nandflash应用

NAND Flash芯片K9F1208在uPSD3234A上的应用 1 NAND FlaSh和NOR Flash 闪存(Flash Memory)由于其具有非易失性、电可擦除性、可重复编程以及高密度、低功耗等特点,被广泛地应用于手机、MP3、数码相机、笔记本电脑等数据存储设备中。NAND Flash和NOR Flash是目前市场上两种主要的非易失闪存芯片。与NOR Flash相比,NAND Flash在容量、功耗、使用寿命等方面的优势使其成为高数据存储密度的理想解决方案。NOR Flash的传输效率很高,但写入和擦除速度较低;而NAND Flash以容量大、写速度快、芯片面积小、单元密度高、擦除速度快、成本低等特点,在非易失性类存储设备中显现出强劲的市场竞争力。 结构:NOR Flash为并行,NAND Flash为串行。 总线:NOR Flash为分离的地址线和数据线,而NANDFlash为复用的。 尺寸:典型的NAND Flash尺寸为NOR Flash尺寸的1/8。 坏块:NAND器件中的坏块是随机分布的,需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。 位交换:NAND Flash中发生的次数要比NOR Flash多,建议使用NAND闪存时,同时使用EDC/ECC算法。 使用方法:NOR Flash是可在芯片内执行(XIP,eXecute In Place),应用程序可以直接在FIash闪存内运行,不必再把代码读到系统RAM中;而NAND Flash则需I/O接口,因此使用时需要写入驱动程序。 通过以上的分析和比较,NAND Flash更适合于大容量数据存储的嵌入式系统。本设计选用Samsung公司生产的NAND Flash存储器芯片K9F1208作为存储介质,并应用在基于uPSD3234A增强型8051单片机的嵌入式系统中。

iMX283移植过程说明

1、USB启动 USB 启动时,i.MX283 第一级启动环境将其自身初始化为一个USB Device 设备,经过USB 通讯连接线缆连接到开发PC机,在开发PC上使用 sb_loader.exe软件将当前目录下的sb文件通过USB传输到 EasyARM-iMX283 的RAM上并且运行。具体步骤如下: 1. 连接串口线及USB通讯线到开发PC机相应接口,设置启动模式为 USB 启动模式,上电。(注意:USB启动模式时,需要禁止掉看门狗,跳冒设定如下图 3-1 USB启动模式)。 2.将eboot_ivt.sb 拷贝到sb_loader.exe 相同目录下,打开使用命令: sb_loader /f eboot_ivt.sb或者使用批处理程序flash_eboot.bat。开发PC出现如下所示命令行信息。

并且在串口终端中出现以下信息: 2、加载U-Boot到Flash 实现NandFlash 的 Eboot烧写,需要用到Eboot对NandFlash的烧写功 能。向NandFlash进行Eboot烧写,可以由如下步骤完成。

1.使用USB启动模式启动Eboot,按住空格键进入 Eboot菜单选项。如下所 示。 2.打开出厂WinCE 工程,配置项目参数,选择其中下载对象 eboot_ivt.msb,然后配置VS2005下载参数。 依次打开VS2005菜单中的“项目”->“EasyARM-iMX283-SRC属性”,如下所示。 在“EasyARM-iMX283-SRC 属性页”中选择“配置属性”下的“General”,在此下面设置“Build Type”为“Release”,在“Target file name for debugger:”中手工填入“eboot_ivt.msb”。 如下所示。

使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法

使用JLink间接烧写S3C2410、S3C2440开发板Nor、 Nand Flash的方法 1. 简要说明 JLink的调试功能、烧写Flash的功能都很强大,但是对于S3C2410、S3C2440的Flash 操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢;烧写Nand Flash只是从理论上能够达到,但是还没有人直接实现这点。 本文使用一个间接的方法来实现对S3C2410、S3C2440开发板的Nor、Nand Flash的烧写。原理为:JLink可以很方便地读写内存、启动程序,那么可以把一个特制的程序下载到开发板上的SDRAM去,并运行它,然后使用这个程序来烧写。 2. 操作步骤 2.1 连接硬件 对于大多数的S3C2410、S3C2440开发板而言,它们所用的JTAG接口一般有3种(如图1所示),其中前两种用得比较多。 图1. 三种常用的JTAG接口 但是市面上的JLink,大多只支持第3种JTAG接口,所以需要用到转接板。或者直接使用JLink的变种,如图2所示的两种改进版JLink:

图2. 两种改进版JLink 以mini2440为例,如图3接好JTAG线。 图3. 改进版JLink与mini2440的连接 2.2 运行J-Link commander J-Link commander启动界面如图4所示,(如果没有发现检测到CPU,就在里面执行usb 命令连接JLink,再执行r命令识别处理器)。

图4. J-Link commander启动界面 2.3 下载运行特制的程序 对于S3C2410、S3C2440处理器,它们内部有4K的SRAM,当使用Nor Flash启动时,地址为0x40000000;当使用Nand Flash启动时,地址为0。 对于S3C2410、S3C2440开发板,一般都外接64M的SDRAM。SDRAM能被使用之前,需要经过初始化。 所以,先把一个init.bin下载到内部SRAM去运行,它执行SDRAM的初始化;然后再下载一个比较大的程序,比如u-boot到SDRAM去动行,它将实现对Nor、Nand Flash的操作。 以下是在J-Link commander里的命令,假设init.bin、u-boot.bin在e:盘下。 1. speed 12000 //设置TCK为12M,下载程序时会很快 2. 下载并运行init.bin,这是用来初始化SDRAM的 2.1 如果是NAND启动: loadbin e:\init.bin 0 setpc 0 g 2.2 如果是Nor启动: loadbin e:\init.bin 0x40000000 setpc 0x40000000 g 3. 下载特制的uboot: h loadbin e:\u-boot.bin 0x33f80000

如何用hjtag在nand flash中烧写boot

烧写nand flash的前提,给开发板连接好电源线、串口线和jtag(使用wiggler口)。插好核心板跳线J5。 1.开发板上电,用H-JTAG检测CPU。 2.点击H-JTAG的菜单Flasher—>Start H-Flasher如图1 图1 3.然后进行配置。第一项Flash Selection,选择nand里面的s3c2440+k9f1g08,如图2 注意:有的可能没有nand芯片可选,不用着急,这是你的H-JTAG版本太低了,下载一个H-JTAG_0.9.2版本的装上即可。在H-JTAG菜单栏的Help的下拉菜单中有H-JTAG Home,即H-JTAG主页,根据提示就可以在上边下载一个H-JTAG_0.9.2版本的软件了。

图2 4.第二项Configuration,配置如图3: 图3

5.第三、四项不用设置 6.第五项Programming。首先要检测Flash芯片,点击右上角的Check。如果检测到则如图 3篮圈部分所示:芯片的型号应和图2右侧的内容相符。如果有需要,可以先擦除(erase)一下flash,注意,这个擦除默认是全flash擦除。 注意:在CPU还在初始化阶段可以检测多次,但当开发板启动到图4DNW所示的时候,则只能检测一次,当再次检测的时候会提示你检查FLASH型号如图5。 7.Type、Dst Addr、Src选择如图3所示。烧写文件为2440boot.bin. 图4

图5 8.上边的一切都准备好之后则开始烧写了,点击Check下面的Program,则出现图6所示的进度条,烧好之后Close。 图6 9.到现在位置,Boot以基本烧写完毕,关闭电源。 10.开发板上电即可启动BOOT了如图8 图7

使用JLink烧写ARM9开发板NAND+FLASH的方法

使用JLink间接烧写ARM9开发板Nor或Nand Flash的方法 1.简要说明 JLink的调试功能、烧写Flash的功能都很强大,但是对于ARM9的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢;烧写Nand Flash只是从理论上能够达到,但是还没有人直接实现这点。 本文使用一个间接的方法来实现对S3C2410、S3C2440开发板的Nor、Nand Flash的烧写。原理为:JLink可以很方便地读写内存、启动程序,那么可以把一个特制的程序下载到开发板上的SDRAM去,并运行它,然后使用这个程序来烧写。 2.操作步骤 2.1连接硬件 对于大多数的S3C2410、S3C2440开发板而言,它们所用的JTAG接口一般是2.0mm 间距的。JLink采用的是标准的2.54mm间距20pin的JTAG接口,所以可能需要用到转接板。 2.2运行J-Link commander J-Link commander启动后会自动化检测CPU,如果没有发现检测到CPU,就在里面执行usb命令连接JLink,再执行r命令识别处理器。 2.3下载运行特制的程序 对于S3C2410、S3C2440处理器,它们内部有4K的SRAM,当使用Nor Flash启动时,地址为0x40000000;当使用Nand Flash启动时,地址为0。 对于S3C2410、S3C2440开发板,一般都外接64M的SDRAM。SDRAM能被使用之前,需要经过初始化。 所以,先把一个init.bin下载到内部SRAM去运行,它执行SDRAM的初始化;然后再下载一个比较大的程序,比如u-boot到SDRAM去运行,它将实现对Nor、Nand Flash的操作。 以下是在J-Link commander里的命令,假设init.bin、u-boot.bin在e:盘下。 1.speed12000//设置TCK为12M,下载程序时会很快 2.下载并运行init.bin,这是用来初始化SDRAM的 2.1如果是NAND启动: loadbin e:\init.bin0 setpc0 g 2.2如果是Nor启动: loadbin e:\init.bin0x40000000 setpc0x40000000 g 3.下载特制的uboot: h loadbin e:\u-boot.bin0x33f80000

相关主题
文本预览
相关文档 最新文档