1、Nand flash工作原理Nand flash芯片工作原理- Nand flash芯片型号为Samsung K9F1208U0B,数据存储容量为64MB,采用块页式存储管理。8个I/O引脚充当数据、地址、命令的复用端口。 芯片内部存储布局及存储操作特点: 一片Nand flash为一个设备(device), 其数据存储分层为: 1 (Device) = 4096 (Blocks) 1 (Block) -= 32 (Pages/Rows) 页与行是相同的意思,叫法不一样 1 (Page) = 528 (Bytes) = 数据块大小(512Bytes) + OOB 块大小(16Bytes) 在每
2、一页中,最后16个字节(又称OOB)用于Nand Flash命令执行完后设置状态用,剩余512个字节又分为前半部分和后半部分。可以通过Nand Flash命令00h/01h/50h分别对前半部、后半部、OOB进行定位通过Nand Flash内置的指针指向各自的首地址。 存储操作特点: 1. 擦除操作的最小单位是块。 2. Nand Flash芯片每一位(bit)只能从1变为0,而不能从0变为1,所以在对其进行写入操作之前要一定将相应块擦除(擦除即是将相应块得位全部变为1). 3. OOB部分的第六字节(即517字节)标志是否是坏块,如果不是坏块该值为FF,否则为坏块。(转载注:应该是每块的第一
3、页的第六个字节。) 4. 除OOB第六字节外,通常至少把OOB的前3个字节存放Nand Flash硬件ECC码NAND FLASH的工作原理 - to beginner2007-04-23 23:43NAND FLASH 是一种大容量、高速的存储技术。其接口较为简单,如果没有专门的nand flash控制器,甚至可以用io口与之对接。其编程也相对简单,只要了解如下关键概念就可以:1.nand flash内部有管理单元,管理单元负责对nand flash的实际单元的操作。2.我们使用nand flash其实只需要和管理单元通信即可,主要是发送相关的命令给管理单元。3.类似磁盘的管理制度,nand
4、 flash也是由若干bit构成一个page,若干page构成一个block,若干block构成一个plane,我们在操作的时候往往以page为基本的操作对象。4.nand flash的page单元有可能是有错误的,因此需要对存入的数据加上错误识别,以辨别某个page单元是坏的。请注意,一个page单元往往最多仅有两个bit错误,所以对于错误识别算法要求不是很高,只要能识别1,2个bit的算法即可。使用阵列奇偶校验很容易实现此算法。nand flash控制器其实只是集成了相关的控制时序,在使用时通过操作nand flash控制器的相关寄存器就可以实现相应的时序,但很多芯片本身不带nand fl
5、ash控制器,此时可以用io口与之对接,用软件来模拟硬件时序也可以操作nand flash。 此处的关键是从nand flash的数据手册上得到时序图。进而确定软件的设计。在此, 以Samsung公司的K9F1208 为例来探讨。K9F1208 是以page(页)为基本的操作单位的,一个page包含512 byte. 加16byte的校验码。32个page构成一个block。1k个block构成一个plane.整个K9F1208 包含4个plane,每个plane可以支持1个读写操作,因此最多可以有4个并发的读写操作.K9F1208是64M byte的,64M = 4 plane * 1k b
6、lock * 32 page * 512 byteK9F1208 的编程流程如下:基于ARM9内核Processor外部NAND FLASH的控制实现类别:电子综合 阅读:9721 NAND FLASH NAND写回速度快、芯片面积小,特别是大容量使其优势明显。页是NAND中的基本存贮单元,一页一般为512 B(也有2 kB每页的large page NAND FLASH),多个页面组成块。不同存储器内的块内页面数不尽相同,通常以16页或32页比较常见。块容量计算公式比较简单,就是页面容量与块内页面数的乘积。根据FLASH Memory容量大小,不同存储器中的块、页大小可能不同,块内页面数也不
7、同。例如:8 MB存储器,页大小常为512 B、块大小为8 kB,块内页面数为16。而2 MB的存储器的页大小为256 B、块大小为4 kB,块内页面数也是16。NAND存储器由多个块串行排列组成。实际上,NAND型的FLASHMemory可认为是顺序读取的设备,他仅用8 b的I/O端口就可以存取按页为单位的数据。NAND在读和擦写文件、特别是连续的大文件时,速度相当快。2 NAND FLASH与NOR FLASH比较NOR的特点是可在芯片内执行,这样程序应该可以直接在FLASH内存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,但 写入和读出速度较低。而NAND结构能提供极高的单
8、元密度,并且写入和擦除的速度也很快,是高数据存储密度的最佳选择。这两种结构性能上的异同主要为:NOR的读速度比NAND快;NAND的写入速度比NOR快很多;NAND的擦除速度远比NOR快;NAND的擦除单元更小,相应的擦除电路也更加简单;NAND的实际应用方式要比NOR复杂得多;NOR可以直接使用,并在上面直接运行代码,而NAND需要I/O接口,因此使用时需要驱动程序。3 NAND FLASH在系统中的控制在没有NAND FLASH硬件接口的环境中,通过软体控制CPU时序和硬件特殊接线方式实现仿真NANDFLASH接口,进而实现在嵌入式系统中脱离NANDFLASH专用硬件接口进行对NAND F
9、LASH读、写、擦除等操作的实现方法。本方法主要工作在以下两个方面:软件方面:针对特殊硬件线路的软体设计和严格的CPU时序控制;硬件方面:硬件的线路设计,利用NOR FLASH专用硬件接口控制NAND FLASH。首先建立的开发平台如图1所示。本平台使用Intel的PXA270 Processor,无内建NAND FLASH Controller,使用NOR FLASH Controller控制NAND FLASH,具体的线路连接方式如图2所示。NAND FLASH的I/O0I/07引脚用于对FLASH发送操作命令和收发数据,ALE用于指示FLASH当前数据为地址信息,CLE用于指示当前数据为
10、操作命令信息,当两者都无效时,为数据信息。CE引脚用于FLASH片选。RE和WE分别为FLASH读、写控制,R/B指示FLASH命令是否已经完成。逭里选用的是CE dont care的NAND FLASH。NAND FLASH的读写操作以page方式进行,一次读写均为一个page,erase方式以block方式进行。这种方式,使其读写速度大大提高。在时序方面,以读操作为例,其时序如图3所示。操作过程主要分为以下几个步骤:(1)发送读操作命令CE有效,CLE有效,WE有效,I/O0I/O8上面数据为command代码数据。(2)发送地址数据(需要读取的FLASH地址)CE有效,ALE有效,WE有
11、效,I/O0I/O8上面为所需地址数据。由于地址数据较多,所以需要分几次依次发送。每次发送都需要产生WE信号以将其写入NANDFLASH芯片。(3)等待R/B信号,最后读出数据在最后一个地址数据写入FLASH之后,R/B信号即变低。等待芯片完成整个page数据读取之后,R/B信号变高。此时,CE有效,ALE,CLE均拉低,依次产生RE信号,从I/O0I/O8读取出所需数据。对于写操作和擦除操作,其基本原理相同,只是信号顺序略有改变,就不再赘述。由于使用了CPU地址线A1,A2连接CLE,ALE引脚,对CPU低2、3位地址的读写操作就意味着对NANDFLASH进行读写命令/数据操作。如果此程序工
12、作在OS上的application层的话,MMU已经屏蔽程序对底层硬件的直接访问,所以需要对MMU进行设定,为NANDFLASH开辟一块。Memory映像区域,这样就可以通过OS对底层的NAND FLASH进行操作。以该系统为例,使用CPU的CS1引脚控制NAND FLASH的CE信号,先将其映像为0x24000000地址,此时,对0x24000000地址读写即对NAND FLASH芯片进行数据读写,而对Ox24000002地址写数据,使CPU的A1地址引脚为高,即对NAND FLASH发送command命令,同样,对0x24000004地址写数据,即对NAND FLASH发送address数
13、据。在对NAND FLASH发送命令/数据之后,由于程序运行速度比FLASH芯片快很多,需要在每一次操作之后插入若干等待周期,并利用CPU的GPIO检测芯片R/B信号。直至芯片完成本次操作再进行下一步操作。需要注意的是,在对FLASH发送命令数据过程中的等待,没有反馈信号可以检测,只能通过反复调试确定其所需等待时间。在设计中采用CPU的CS1信号对NAND FLASH进行CE(片选)控制。此处不能采用CPU的GPIO进行控制,因为在嵌入式设备的ARM CPU中,CPU本身采用了指令、数据自动预读的高速缓存技术和流水线技术。因此,当程序在NOR FLASH里面直接运行的时候(目前绝大多数嵌入式系
14、统采用的方式),在运行任何两段相连的代码中间,CPU都有可能对NOR FLASH进行指令或数据的预读操作,从而产生大量的RE,OE信号和地址信号。 如果使用GPIO控制NAND FLASH的CE信号则无法避免这种影响。CPU的CS1信号是由CPU内部自动产生,因此在CPU预读期间,CS1信号可以有效屏蔽NANDFLASH芯片。并且,由于NAND FLASH芯片支持CEdont care模式,在CE无效的情况下,芯片本身的工作状态并不会被干扰,由此保证了NOR FLASH和NANDFLASH在同一CPU界面中互不干扰的稳定运行。对于CS1信号的宽度等参数,也需要在实验中进行调节,才能保证整个系统
15、快速稳定的运行。4 NAND FLASH在系统中的读写速度经过测试在该系统平台中,OS为Palm OS 5.4;CPU使用PXA270 312 MHz;SDRAM使用Samsung的16data width HYB25L256160AF-7.5104 MHz;NANDFLASH选用Samsung 128 MB 8 b I/O NAND LASHK9F1G08U0A达到在文件系统下面的读/写的速度为3 MB/s,擦除的速度为65 MB/s,在手持式设备中运用性能已经够了。深入剖析NAND flash工作原理!来源:互联网 作者:佚名 时间:06-17 12:12:51 浏览: 7798 Tag:
16、工作原理 flash NAND 【大 中 小】 NAND闪存阵列分为一系列128kB的区块(block),这些区块是NAND器件中最小的可擦除实体。擦除一个区块就是把所有的位(bit)设置为1(而所有字节(byte)设置为FFh)。有必要通过编程,将已擦除的位从1变为0。最小的编程实体是字节(byte)。一些NOR闪存能同时执行读写操作(见下图1)。虽然NAND不能同时执行读写操作,它可以采用称为映射(shadowing)的方法,在系统级实现这一点。这种方法在个人电脑上已经沿用多年,即将BIOS从速率较低的ROM加载到速率较高的RAM上。 NAND的效率较高,是因为NAND串中没有金属触点。N
17、AND闪存单元的大小比NOR要小(4F2:10F2)的原因,是NOR的每一个单元都需要独立的金属触点。NAND与硬盘驱动器类似,基于扇区(页),适合于存储连续的数据,如图片、音频或个人电脑数据。虽然通过把数据映射到RAM上,能在系统级实现随机存取,但是,这样做需要额外的RAM存储空间。此外,跟硬盘一样,NAND器件存在坏的扇区,需要纠错码(ECC)来维持数据的完整性。 存储单元面积越小,裸片的面积也就越小。在这种情况下,NAND就能够为当今的低成本消费市场提供存储容量更大的闪存产品。NAND闪存用于几乎所有可擦除的存储卡。NAND的复用接口为所有最新的器件和密度都提供了一种相似的引脚输出。这种
18、引脚输出使得设计工程师无须改变电路板的硬件设计,就能从更小的密度移植到更大密度的设计上。NAND与NOR闪存比较 NAND闪存的优点在于写(编程)和擦除操作的速率快,而NOR的优点是具有随机存取和对字节执行写(编程)操作的能力(见下图图2)。NOR的随机存取能力支持直接代码执行(XiP),而这是嵌入式应用经常需要的一个功能。NAND的缺点是随机存取的速率慢,NOR的缺点是受到读和擦除速度慢的性能制约。NAND较适合于存储文件。如今,越来越多的处理器具备直接NAND接口,并能直接从NAND(没有NOR)导入数据。 NAND的真正好处是编程速度快、擦除时间短。NAND支持速率超过5Mbps的持续写
19、操作,其区块擦除时间短至2ms,而NOR是750ms。显然,NAND在某些方面具有绝对优势。然而,它不太适合于直接随机存取。 对于16位的器件,NOR闪存大约需要41个I/O引脚;相对而言,NAND器件仅需24个引脚。NAND器件能够复用指令、地址和数据总线,从而节省了引脚数量。复用接口的一项好处,就在于能够利用同样的硬件设计和电路板,支持较大的NAND器件。由于普通的TSOP-1封装已经沿用多年,该功能让客户能够把较高密度的NAND器件移植到相同的电路板上。NAND器件的另外一个好处显然是其封装选项:NAND提供一种厚膜的2Gb裸片或能够支持最多四颗堆叠裸片,容许在相同的TSOP-1封装中堆
20、叠一个8Gb的器件。这就使得一种封装和接口能够在将来支持较高的密度。图1 不同闪存单元的对比NOR闪存的随机存取时间为0.12ms,而NAND闪存的第一字节随机存取速度要慢得多NAND基本操作 以2Gb NAND器件为例,它由2048个区块组成,每个区块有64个页(见下图): 每一个页均包含一个2048字节的数据区和64字节的空闲区,总共包含2,112字节。空闲区通常被用于ECC、耗损均衡(wear leveling)和其它软件开销功能,尽管它在物理上与其它页并没有区别。NAND器件具有8或16位接口。通过8或16位宽的双向数据总线,主数据被连接到NAND存储器。在16位模式,指令和地址仅仅利
21、用低8位,而高8位仅仅在数据传输周期使用。 擦除区块所需时间约为2ms。一旦数据被载入寄存器,对一个页的编程大约要300s。读一个页面需要大约25s,其中涉及到存储阵列访问页,并将页载入16,896位寄存器中。 除了I/O总线,NAND接口由6个主要控制信号构成: 1.芯片启动(Chip Enable, CE#):如果没有检测到CE信号,那么,NAND器件就保持待机模式,不对任何控制信号作出响应。 2.写使能(Write Enable, WE#): WE#负责将数据、地址或指令写入NAND之中。 3.读使能(Read Enable, RE#): RE#允许输出数据缓冲器。 4.指令锁存使能(C
22、ommand 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#信号的上升沿。在寄存器内随机存取或移动数据,要采用专用指令以便于随机存取。 数据寄
23、存器输出数据的方式与利用RE#信号的方式类似,负责输出现有的数据,并增加到下一个地址。WE#和RE#时钟运行速度极快,达到30ns的水准。当RE#或CE#不为低的时候,输出缓冲器将为三态。这种CE#和RE#的组合使能输出缓冲器,容许NAND闪存与NOR、SRAM或DRAM等其它类型存储器共享数据总线。该功能有时被称为无需介意芯片启动(chip enable dont care)。这种方案的初衷是适应较老的NAND器件,它们要求CE#在整个周期为低(译注:根据上下文改写)。 所有NAND操作开始时,都提供一个指令周期表:当输出一串WE#时钟时,通过在I/O位7:0上设置指令、驱动CE#变低且CL
24、E变高,就可以实现一个指令周期。注意:在WE#信号的上升沿上,指令、地址或数据被锁存到NAND器件之中。如表1所示,大多数指令在第二个指令周期之后要占用若干地址周期。注意:复位或读状态指令例外,如果器件忙,就不应该发送新的指令。以2Gb NAND器件的寻址方案为例,第一和第二地址周期指定列地址,该列地址指定页内的起始字节表:注意:因为最后一列的位置是2112,该最后位置的地址就是08h(在第二字节中)和3Fh(在第一字节中)。PA5:0指定区块内的页地址,BA16:6指定区块的地址。虽然大多编程和读操作需要完整的5字节地址,在页内随机存取数据的操作仅仅用到第一和第二字节。块擦除操作仅仅需要三个
25、最高字节(第三、第四和第五字节)来选择区块。总体而言,NAND的基本操作包括:复位(Reset, FFh)操作、读ID(Read ID, 00h)操作、读状态(Read Status, 70h)操作、编程(Program)操作、随机数据输入(Random data input, 85h)操作和读(Read)操作等。NAND基本操作 选择内置NAND接口的处理器或控制器的好处很多。如果没有这个选择,有可能在NAND和几乎任何处理器之间设计一个无粘接逻辑(glueless)接口。NAND和NOR闪存的主要区别是复用地址和数据总线。该总线被用于指定指令、地址或数据。CLE信号指定指令周期,而ALE信
26、号指定地址周期。利用这两个控制信号,有可能选择指令、地址或数据周期。把ALE连接到处理器的第五地址位,而把CLE连接到处理器的第四地址位,就能简单地通过改变处理器输出的地址,任意选择指令、地址或数据。这容许CLE和ALE在合适的时间自动设置为低。 为了提供指令,处理器在数据总线上输出想要的指令,并输出地址0010h;为了输出任意数量的地址周期,处理器仅仅要依次在处理器地址0020h之后输出想要的NAND地址。注意,许多处理器能在处理器的写信号周围指定若干时序参数,这对于建立合适的时序是至关重要的。利用该技术,你不必采用任何粘接逻辑,就可以直接从处理器存取指令、地址和数据。 多级单元 多级单元(
27、MLC)的每一个单元存储两位,而传统的SLC仅仅能存储一位。MLC技术有显著的密度优越性,然而,与SLC相比(下表),其速度或可靠性稍逊。因此,SLC被用于大多数媒体卡和无线应用,而MLC器件通常被用于消费电子和其它低成本产品。 如上所述,NAND需要ECC以确保数据完整性。NAND闪存的每一个页面上都包括额外的存储空间,它就是64个字节的空闲区(每512字节的扇区有16字节)。该区能存储ECC代码及其它像磨损评级或逻辑到物理块映射之类的信息。ECC能在硬件或软件中执行,但是,硬件执行有明显的性能优势。在编程操作期间,ECC单元根据扇区中存储的数据来计算误码校正代码。数据区的ECC代码然后被分
28、别写入到各自的空闲区。当数据被读出时,ECC代码也被读出;运用反操作可以核查读出的数据是否正确。 有可能采用ECC算法来校正数据错误。能校正的错误的数量取决于所用算法的校正强度。在硬件或软件中包含ECC,就提供了强大的系统级解决方案。最简单的硬件实现方案是采用简单的汉明(Simple Hamming)码,但是,只能校正单一位错误。瑞德索罗门(Reed-Solomon)码提供更为强大的纠错,并被目前的控制器广为采用。此外,BCH码由于比瑞德索罗门方法的效率高,应用也日益普及。 要用软件执行NAND闪存的区块管理。该软件负责磨损评级或逻辑到物理映射。该软件还提供ECC码,如果处理器不包含ECC硬件
29、的话。 编程或擦除操作之后,重要的是读状态寄存器,因为它确认是否成功地完成了编程或擦除操作。如果操作失败,要把该区块标记为损坏且不能再使用。以前已编写进去的数据要从损坏的区块中搬出,转移到新的(好的)存储块之中。2Gb NAND的规范规定,它可以最多有40个坏的区块,这个数字在器件的生命周期(额定寿命为10万次编程/擦除周期)内都适用。一些有坏块的NAND器件能够出厂,主要就归根于其裸片面积大。管理器件的软件负责映射坏块并由好的存储块取而代之。 利用工厂对这些区块的标记,软件通过扫描块可以确定区块的好坏。坏块标记被固定在空闲区的第一个位置(列地址2048)。如果在0或1页的列地址2048上的数据是non-FF,那么,该块要标记为坏,并映射出系统。初始化软件仅仅需要扫描所有区块确定以确定哪个为坏,然后建一个坏块表供将来参考。 小心不要擦除坏块标记,这一点很重要。工厂在宽温和宽电压范围内测试了NAND;一些由工厂标记为坏的区块可能在一定的温度或电压条件下仍然能工作,但是,将来可能会失效。如果坏块信息被擦除,就无法再恢复。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1