1、第一章 绪论 7-151.1 课题来源 7-81.2 研究背景与意义 8-141.2.1 Flash 介绍 81.2.2 NAND Flash 介绍 8-101.2.3 NAND Flash 与 NOR Flash 比较 10-131.2.4 研究目的 13-141.3 论文章节安排 14-15第二章 NAND Flash 结构与原理 15-312.1 NAND Flash 种类 15-172.1.1 SLC 152.1.2 MLC 15-172.2 NAND Flash 结构 17-292.2.1 NAND Flash 结构 17-222.2.2 NAND Flash 的主要流程 22-29
2、2.2.2.1 读操作 22-232.2.2.2 页编程操作 23-252.2.2.3 块擦除操作 25-262.2.2.4 COPY-BACK 编程 26-272.2.2.5 Two Plane 相关操作 27-292.3 小结 29-31第三章 NAND Flash 动态坏块管理算法 31-613.1 NAND Flash 坏块管理 31-333.1.1 坏块管理概念的提出 31-323.1.2 坏块管理的一般方法 32-333.2 NAND Flash 动态坏块管理算法研究与实现 33-563.2.1 NAND Flash 动态坏块管理设计思想 33-353.2.2 动态坏块管理算法步骤
3、流程及具体函数实现 35-553.2.3 动态坏块管理算法与一般坏块管理算法比较总结 55-563.3 损耗平衡 56-583.3.1 损耗平衡原理和使用意义 56-573.3.2 损耗平衡算法 57-583.4 垃圾回收机制 58-61NAND FLASH 内存详解与读写寻址方式一、内存详解 NAND 闪存阵列分为一系列 128kB 的区块(block),这些区块是 NAND 器件中最小的可擦除实体。擦除一个区块就是把所有的位(bit)设置为“1“(而所有字节(byte)设置为 FFh)。有必要通过编程,将已擦除 的位从“1“变为“0“。最小的编程实体是字节(byte)。一些 NOR 闪存能
4、同时执行读写操作(见下图 1)。虽然NAND 不能同时执行读写操作,它可以 采用称为“映射(shadowing)“的方法,在系统级实现这一点。这种方法在个人电脑上已经沿用多年,即将 BIOS 从速率较低的 ROM 加载到速率较高 的 RAM 上。NAND 的效率较高,是因为 NAND 串中没有金属触点。NAND 闪存单元的大小比NOR 要小(4F2:10F2)的原因,是 NOR 的每一个单元都需 要独立的金属触点。NAND 与硬盘驱动器类似,基于扇区(页),适合于存储连续的数据,如图片、音频或个人电脑数据。虽然通过把数据映射到 RAM 上,能在 系统级实现随机存取,但是,这样做需要额外的 RA
5、M 存储空间。此外,跟硬盘一样,NAND 器件存在坏的扇区,需要纠错码(ECC)来维持数据的完整性。存储单元面积越小,裸片的面积也就越小。在这种情况下,NAND 就能够为当今的低成本消费市场提供存储容量更大的闪存产品。NAND 闪存用于几乎所 有可擦除的存储卡。NAND 的复用接口为所有最新的器件和密度都提供了一种相似的引脚输出。这种引脚输出使得设计工程师无须改变电路板的硬件设计,就能从 更小的密度移植到更大密度的设计上。NAND 与 NOR 闪存比较 NAND 闪存的优点在于写(编程)和擦除操作的速率快,而 NOR 的优点是具有随机存取和对字节执行写(编程)操作的能力(见下图图 2)。NOR
6、 的随 机存取能力支持直接代码执行(XiP),而这是嵌入式应用经常需要的一个功能。NAND 的缺点是随机存取的速率慢,NOR 的缺点是受到读和擦除速度慢的性 能制约。NAND 较适合于存储文件。如今,越来越多的处理器具备直接 NAND 接口,并能直接从NAND(没有 NOR)导入数据。NAND 的真正好处是编程速度快、擦除时间短。NAND 支持速率超过 5Mbps 的持续写操作,其区块擦除时间短至 2ms,而 NOR 是 750ms。显然,NAND 在某些方面具有绝对优势。然而,它不太适合于直接随机存取。对于 16 位的器件,NOR 闪存大约需要 41 个 I/O 引脚;相对而言,NAND 器
7、件仅需 24 个引脚。NAND 器件能够复用指令、地址和数据总线,从而 节省了引脚数量。复用接口的一项好处,就在于能够利用同样的硬件设计和电路板,支持较大的 NAND 器件。由于普通的 TSOP-1 封装已经沿用多年,该功能 让客户能够把较高密度的 NAND 器件移植到相同的电路板上。NAND 器件的另外一个好处显然是其封装选项:NAND 提供一种厚膜的 2Gb 裸片或能够支持最 多四颗堆叠裸片,容许在相同的 TSOP-1 封装中堆叠一个 8Gb 的器件。这就使得一种封装和接口能够在将来支持较高的密度。图 2 NOR 闪存的随机存取时间为 0.12ms,而 NAND 闪存的第一字节随机存取速度
8、要慢得多 NOR 闪存的随机存取时间为 0.12ms,而 NAND 闪存的第一字节随机存取速度要慢得多NAND 基本操作 以 2Gb NAND 器件为例,它由 2048 个区块组成,每个区块有 64 个页(见下图):每一个页均包含一个 2048 字节的数据区和 64 字节的空闲区,总共包含 2,112字节。空闲区通常被用于 ECC、耗损均衡(wear leveling)和其它软件开销功能,尽管它在物理上与其它页并没有区别。NAND 器件具有 8 或 16 位接口。通过 8或 16 位宽的双向数据总线,主数据被 连接到 NAND 存储器。在 16 位模式,指令和地址仅仅利用低 8 位,而高 8
9、位仅仅在数据传输周期使用。擦除区块所需时间约为 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
10、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#信号的上升沿。在寄存器内随机存取或移动数据,要采用
11、专用指令以便于随机存取。数据寄存器输出数据的方式与利用 RE#信号的方式类似,负责输出现有的数据,并增加到下一个地址。WE#和 RE#时钟运行速度极快,达到 30ns 的水准。 当RE#或 CE#不为低的时候,输出缓冲器将为三态。这种 CE#和 RE#的组合使能输出缓冲器,容许 NAND 闪存与 NOR、SRAM 或 DRAM 等其它类型 存储器共享数据总线。该功能有时被称为“无需介意芯片启动(chip enable dont care)“。这种方案的初衷是适应较老的 NAND 器件,它们要求 CE#在整个周期为低(译注:根据上下文改写)。 图 4 输入寄存器接收到页编程 (80h)指令时,内
12、部就会全部重置为 1s,使得用户可以只输入他想以 0 位编程的数据字节 图 5 带有随机数据输入的编程指令。图中加亮的扇区显示,该指令只需要后面跟随着数据的 2 个字节的地址 所有 NAND 操作 开始时,都提供一个指令周期(表 1)。 当输出一串 WE#时钟时,通过在 I/O 位 7:0 上设置指令、驱动 CE#变低且 CLE变高,就可以实现一个指令周期。注意:在 WE#信号的上升沿上, 指令、地址或数据被锁存到 NAND 器件之中。如表 1 所示,大多数指令在第二个指令周期之后要占用若干地址周期。注意:复位或读状态指令例外,如果器件忙, 就不应该发送新的指令。以 2Gb NAND 器件的寻
13、址方案为例,第一和第二地址周期指定列地址,该列地址指定页内的起始字节表: 注意:因为最后一列的位置是 2112,该最后位置的地址就是 08h(在第二字节中)和3Fh(在第一字节中)。PA5:0 指定区块内的页地 址,BA16:6 指定区块的地址。虽然大多编程和读操作需要完整的 5 字节地址,在页内随机存取数据的操作仅仅用到第一和第二字节。块擦除操作仅仅需要三个 最高字节(第三、第四和第五字节)来选择区块。总体而言,NAND 的基本操作包括:复位(Reset, FFh)操作、读 ID(Read ID, 00h)操作、读状态(Read Status, 70h)操作、编程(Program)操作、随机
14、数据输入(Random data input, 85h)操作和读(Read)操作等。选择内置 NAND 接口的处理器或控制器的好处很多。如果没有这个选择,有可能在 NAND 和几乎任何处理器之间设计一个“无粘接逻辑(glueless)“ 接口。NAND和 NOR 闪存的主要区别是复用地址和数据总线。该总线被用于指定指令、地址或数据。CLE 信号指定指令周期,而 ALE 信号指定地址周期。利 用这两个控制信号,有可能选择指令、地址或数据周期。把 ALE 连接到处理器的第五地址位,而把 CLE 连接到处理器的第四地址位,就能简单地通过改变处理器 输出的地址,任意选择指令、地址或数据。这容许 CLE
15、 和 ALE 在合适的时间自动设置为低。为了提供指令,处理器在数据总线上输出想要的指令,并输出地址 0010h;为了输出任意数量的地址周期,处理器仅仅要依次在处理器地址 0020h 之 后输出想要的 NAND 地址。注意,许多处理器能在处理器的写信号周围指定若干时序参数,这对于建立合适的时序是至关重要的。利用该技术,你不必采用任何粘 接逻辑,就可以直接从处理器存取指令、地址和数据。多级单元多级单元(MLC)的每一个单元存储两位,而传统的 SLC 仅仅能存储一位。MLC 技术有显著的密度优越性,然而,与 SLC 相比(下表),其速度或可靠性稍逊。因此,SLC 被用于大多数媒体卡和无线应用,而 M
16、LC 器件通常被用于消费电子和其它低成本产品。 如上所述,NAND 需要 ECC 以确保数据完整性。NAND 闪存的每一个页面上都包括额外的存储空间,它就是 64 个字节的空闲区(每 512 字节的扇区 有 16 字节)。该区能存储 ECC 代码及其它像磨损评级或逻辑到物理块映射之类的信息。ECC能在硬件或软件中执行,但是,硬件执行有明显的性能优势。在编 程操作期间,ECC 单元根据扇区中存储的数据来计算误码校正代码。数据区的 ECC 代码然后被分别写入到各自的空闲区。当数据被读出时,ECC 代码也被读 出;运用反操作可以核查读出的数据是否正确。有可能采用 ECC 算法来校正数据错误。能校正的
17、错误的数量取决于所用算法的校正强度。在硬件或软件中包含 ECC,就提供了强大的系统级解决方案。最 简单的硬件实现方案是采用简单的汉明(Simple Hamming)码,但是,只能校正单一位错误。瑞德索罗门(Reed-Solomon)码提供更为强大的纠错,并被目前的控制器广为采用。此外,BCH 码由于比瑞德索罗门方法的效率高,应用也日益普及。要用软件执行 NAND 闪存的区块管理。该软件负责磨损评级或逻辑到物理映射。该软件还提供 ECC 码,如果处理器不包含 ECC 硬件的话。编程或擦除操作之后,重要的是读状态寄存器,因为它确认是否成功地完成了编程或擦除操作。如果操作失败,要把该区块标记为损坏且
18、不能再使用。以前已 编写进去的数据要从损坏的区块中搬出,转移到新的(好的)存储块之中。2Gb NAND 的规范规定,它可以最多有 40 个坏的区块,这个数字在器件的生命周期(额定寿命为 10 万次编程/擦除周期)内都适用。一些有坏块的 NAND 器件能 够出厂,主要就归根于其裸片面积大。管理器件的软件负责映射坏块并由好的存储块取而代之。利用工厂对这些区块的标记,软件通过扫描块可以确定区块的好坏。坏块标记被固定在空闲区的第一个位置(列地址 2048)。如果在 0 或 1 页的列地址 2048上的数据是“non-FF“,那么,该块要标记为坏,并映射出系统。初始化软件仅仅需要扫描所有区块确定以确定哪个为坏,然后建一个坏块表供将来 参考。小心不要擦除坏块标记,这一点很重要。工厂在宽温和宽电压范围内测试了