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“,那么,该块要标记为坏,并映射出系统。初始化软件仅仅需要扫描所有区块确定以确定哪
19、个为坏,然后建一个坏块表供将来 参考。小心不要擦除坏块标记,这一点很重要。工厂在宽温和宽电压范围内测试了NAND;一些由工厂标记为坏的区块可能在一定的温度或电压条件下仍然能工作,但是,将来可能会失效。如果坏块信息被擦除,就无法再恢复。二、NAND FLASH 读写寻址方式 NAND Flash 的寻址方式和 NAND Flash 的 memory 组织方式紧密相关。NAND Flash 的数据是以 bit 的方式保存在 memory cell,一般来说,一个 cell 中只能存储一个 bit。这些 cell 以 8 个或者 16 个为单位,连成 bit line,形成所谓的 byte(x8)/
20、word(x16),这就是 NAND Device 的位宽。这些 Line 会再组成 Page,通常是 528Byte/page 或者 264Word/page。然后,每 32 个 page 形成一个 Block,Sizeof(block)=16kByte.Block 是 NAND Flash 中最大的操作单元,擦除就是按照 block 为单位完成的,而编程/读取是按照 page 为单位完成的。所以,按照这样的组织方式可以形成所谓的三类地址:-Block Address-Page Address-Column Address首先,必须清楚一点,对于 NAND Flash 来讲,地址和命令只能在
21、I/O7:0上传递,数据宽度可以是 8 位或者 16 位,但是,对于 x16 的 NAND Device,I/O15:8只用于传递数据。清楚了这一点,我们就可以开始分析 NAND Flash 的寻址方式了。以 528Byte/page 总容量 512Mbit+512kbyte 的 NAND 器件为例:因为,1 block=16kbyte,512Mbit=64Mbyte,Numberof(block)=10241block=32page,1page=528byte=512byte(Main Area)+16byte(Spare Area)用户数据保存在 main area 中。512byte 需
22、要 9bit 来表示,对于 528byte 系列的 NAND,这 512byte 被分成 1st half 和 2nd half,各自的访问由所谓的 pointer operation 命令来选择,也就是选择了 bit8 的高低。因此 A8 就是 halfpage pointer,A7:0就是所谓的 column address。32 个 page 需要 5bit 来表示,占用 A13:9,即该 page 在块内的相对地址。Block 的地址是由 A14 以上的 bit 来表示,例如 512Mb 的 NAND,共4096block,因此,需要 12 个 bit 来表示,即 A25:14,如果是
23、 1Gbit 的528byte/page 的 NAND Flash,共 8192 个 block,则 block address 用 A26:14表示。而 page address 就是 blcok address|page address in blockNAND Flash 的地址表示为:Block Address|Page Address in block|halfpage pointer|Column Address地址传送顺序是 Column Address,Page Address,Block Address。由于地址只能在 I/O7:0上传递,因此,必须采用移位的方式进行。例如,
24、对于 512Mbit x8 的 NAND flash,地址范围是 00x3FF_FFFF,只要是这个范围内的数值表示的地址都是有效的。以 NAND_ADDR 为例:第 1 步是传递 column address,就是 NAND_ADDR7:0,不需移位即可传递到 I/O7:0上而 halfpage pointer 即 bit8 是由操作指令决定的,即指令决定在哪个 halfpage 上进行读写,而真正的 bit8 的值是 dont care 的。第 2 步就是将 NAND_ADDR 右移 9 位,将 NAND_ADDR16:9传到 I/O7:0上;第 3 步将 NAND_ADDR24:17放到
25、 I/O 上;第 4 步需要将 NAND_ADDR25放到 I/O 上;因此,整个地址传递过程需要 4 步才能完成,即 4-step addressing。如果 NAND Flash 的容量是 256Mbit 以下,那么,block adress 最高位只到 bit24,因此寻址只需要 3 步。Nand Flash 结构与读写分析及 Nand Flash 寻址方式【ZZ】看 vivi 代码的 head.S 的时候,看到 copy_myself 的部分,尤其 nand_read_ll函数,看不太明白,不了解 nand flash 原理,结合 nand flash 的 datasheet和网上的文
26、章,对那个函数就大概了解一点了http:/ 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),每页 528Byte,每 32 个 page 形成一个 Block, Siz
27、eof(block)=16kByte 。1 block=16kbyte,512Mbit=64Mbyte,Numberof(block)=1024 1block=32page, 1page=528byte=512byte(Main Area)+16byte(Spare Area)Nand flash 以页为单位读写数据,而以块为单位擦除数据。按照这样的组织方式可以形成所谓的三类地址: -Block Address - Page Address -Column Address(即为页内偏移地址)对于 NAND Flash 来讲,地址和命令只能在 I/O7:0上传递,数据宽度是 8 位。512byt
28、e 需要 9bit 来表示,对于 528byte 系列的 NAND,这 512byte 被分成 1st half 和 2nd half,各自的访问由地址指针命令来选择,A7:0就是所谓的column address。32 个 page 需要 5bit 来表示,占用 A13:9,即该 page 在块内的相对地址。Block 的地址是由 A14 以上的 bit 来表示,例如 512Mb 的NAND,共 4096block,因此,需要 12 个 bit 来表示,即 A25:14,如果是1Gbit 的 528byte/page 的 NAND Flash,则 block address 用 A26:14
29、表示。而 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/O7:0上传递,因此,必须采用移位的方式进行。 例如,对于 512Mbit x8 的 NAND flash,地址范围是00x3FF_FFFF,只要是这个范围内的数值表示的地址都是有效的。以
30、NAND_ADDR 为例: 第 1 步是传递 column address,就是 NAND_ADDR7:0,不需移位即可传递到 I/O7:0上,而 halfpage pointer 即 bit8 是由操作指令决定的,即指令决定在哪个 halfpage 上进行读写。而真正的 bit8 的值是dont care 的。 第 2 步就是将 NAND_ADDR 右移 9 位,将 NAND_ADDR16:9传到 I/O7:0上 第 3 步将 NAND_ADDR24:17放到 I/O 上 第 4 步需要将NAND_ADDR25放到 I/O 上 因此,整个地址传递过程需要 4 步才能完成,即4-step ad
31、dressing。 如果 NAND Flash 的容量是 256Mbit 以下,那么,block adress 最高位只到 bit24,因此寻址 只需要 3 步。下面,就 x16 的 NAND flash 器件稍微进行一下说明。 由于一个 page 的 main area 的容量为 256word,仍相当于 512byte。但是,这个时候没有所谓 的 1st halfpage 和 2nd halfpage 之分了,所以,bit8 就变得没有意义了,也就是这个时候 bit8 完全不用管,地址传递仍然和 x8 器件相同。除了,这一点之外,x16 的 NAND 使用方法和 x8 的使用方法完全相同。
32、norflash 和 nandflash 的区别norflash 中可以运行程序,nandflash 不可以Nor flash 按 sector 可擦除,按 bit 可读写。Nand Flash 按 Block 可擦除,按Page 可读写。最主要是寻址方式不同*Nand Flash 寻址方式NAND Flash 的寻址方式和 NAND Flash 的 memory 组织方式紧密相关。NAND Flash 的数据是以 bit 的方式保存在 memory cell,一般来说,一个 cell 中只能存储一个 bit。这些 cell 以 8 个或者 16 个为单位,连成 bit line,形成所谓的
33、byte(x8)/word(x16),这就是 NAND Device 的位宽。这些 Line 会再组成 Page,通常是 528Byte/page 或者 264Word/page。然后,每 32 个 page 形成一个 Block,Sizeof(block)=16kByte.Block 是 NAND Flash 中最大的操作单元,擦除就是按照 block 为单位完成的,而编程/读取是按照 page 为单位完成的。所以,按照这样的组织方式可以形成所谓的三类地址:-Block Address-Page Address-Column Address首先,必须清楚一点,对于 NAND Flash 来讲
34、,地址和命令只能在I/O7:0上传递,数据宽度可以是 8 位或者 16 位,但是,对于 x16 的 NAND Device,I/O15:8只用于传递数据。清楚了这一点,我们就可以开始分析 NAND Flash 的寻址方式了。以 528Byte/page 总容量 512Mbit+512kbyte 的 NAND 器件为例:因为,1 block=16kbyte,512Mbit=64Mbyte,Numberof(block)=10241block=32page,1page=528byte=512byte(Main Area)+16byte(Spare Area)用户数据保存在 main area 中。
35、512byte 需要 9bit 来表示,对于 528byte 系列的 NAND,这 512byte 被分成 1st half 和 2nd half,各自的访问由所谓的 pointer operation 命令来选择,也就是选择了 bit8 的高低。因此 A8 就是 halfpage pointer,A7:0就是所谓的 column address。32 个 page 需要 5bit 来表示,占用 A13:9,即该 page 在块内的相对地址。Block 的地址是由 A14 以上的 bit 来表示,例如 512Mb 的 NAND,共4096block,因此,需要 12 个 bit 来表示,即 A
36、25:14,如果是 1Gbit 的528byte/page 的 NAND Flash,共 8192 个 block,则 block address 用 A26:14表示。而 page address 就是 blcok address|page address in blockNAND Flash 的地址表示为:Block Address|Page Address in block|halfpage pointer|Column Address地址传送顺序是 Column Address,Page Address,Block Address。由于地址只能在 I/O7:0上传递,因此,必须采用移位
37、的方式进行。例如,对于 512Mbit x8 的 NAND flash,地址范围是 00x3FF_FFFF,只要是这个范围内的数值表示的地址都是有效的。以 NAND_ADDR 为例:第 1 步是传递 column address,就是 NAND_ADDR7:0,不需移位即可传递到 I/O7:0上而 halfpage pointer 即 bit8 是由操作指令决定的,即指令决定在哪个 halfpage 上进行读写,而真正的 bit8 的值是 dont care 的。第 2 步就是将 NAND_ADDR 右移 9 位,将 NAND_ADDR16:9传到 I/O7:0上;第 3 步将 NAND_AD
38、DR24:17放到 I/O 上;第 4 步需要将 NAND_ADDR25放到 I/O 上;因此,整个地址传递过程需要 4 步才能完成,即 4-step addressing。如果 NAND Flash 的容量是 256Mbit 以下,那么,block adress 最高位只到 bit24,因此寻址只需要 3 步。NAND Flash ArchitectureArchitectureNAND Flash 是由 4096 個 Blocks 所組成的,每個 Block 是由 128 個 Pages 所組成的,而每個 Page 是由 4KBytes 的 User Data 加上 128Bytes 的
39、Spare Data 所構成的,故每個 Block 的容量為 528Kbytes,每個 Page 的容量為 4224Bytes。其中,Spare Data 主要是用來存放 ECC(Error Correcting Code)、Bad Block Information 和 File System 的資料。 Figure 1.Flash Memory Geometry NAND Flash 的操作特點為:抹除(Erase)的最小單位是 Block,而讀取(Read)和寫入(Write)則是以 Page 為單位。因 NAND Flash 的每個 bit 只能由 1 變為 0,而不能從 0 變為 1
40、,所以對 Flash 做寫入時一定要將其對應的 Block 先抹除掉,才能做寫入的動作,也因此同樣 一個 page 只能夠寫入一次。 Constraints and FunctionalitiesConstraintsSequential Page program在一個 Block 裡,Page 必須從 LSB(least significant bit) Page 依序寫到MSB(most significant bit) Page,隨意不照 Page address 來寫入是禁止的。另外,LSB 是寫入的 Pages 中最小的位址,不一定是 Page 0。 Figure 2.Sequent
41、ial Page program 1 Partial Page program在 NAND Flash 中,存取資料的最小單位是 Page。在 SLC Flash 中,若想修改Page 中的 Data 時可以更改部分的 Bit 而不需要將整個 Page 抹除後才更改。例如 Page 中的 Data 為 1001011101,若想將 Data 改成 1001010001,只需將其中的 2 個 Bit 更改為 0 即可,不用抹除後寫入。但之後的 MLC Flash,已經不允許此功能了。 Performance-Improving CommandsCopy Back ProgramCopy Back
42、 Program 可以快速地將 1 頁的資料複製(Copy)到另 1 個指定的頁中,也對於垃圾收集(Garbage Collection)非常的有用。例如當 1 頁裡的資料壞掉造成整個區塊(Block)為損壞區塊(Bad Block, or Worn-Out Block)時,Copy Back Program 可以有效率地將所有有效頁(Valid Page)的資料複製到指定的區塊中。 Copy Back Program 是將 1 整頁的資料(來源 Page)讀取且複製到內部頁緩衝器(Internal Page Buffer)中,再將它寫到另 1 整頁中(目標 Page)。因為它不像一般的讀取、
43、寫入指令將資料存取到外部記憶體(Memory),而是將資料存在內部 頁緩衝器中,所以會比一般的讀取加上寫入少了將資料讀寫到外部記憶體的時間,執行上也更快且更有效率。 Figure 3.Copy Back Program 1 Random data input/output當對 Page 的資料做讀寫時,必須將 1 整頁的所有資料都存在於外部記憶體中,當外部的 RAM 不夠大時,無法一次存放整個頁的資料,故利用 NAND Flash 的Internal Page Buffer 來存放整個頁的資料,並使用 Random Data Input/Output 就可以對頁中任意位址的資料做存取。 對 1
44、 頁裡的資料做一般的讀寫時,資料都是 Sequential 的,但若想要隨意存取1 頁裡的資料,如想要存取 ECC 的資料,便可使用 Random data input/output跳至 User Data 的尾端去存取 ECC 的資料。 -Plane programNAND Flash Vendor 將 Memory Array 分成 2 個 Plane,可以同時對 2 個不同Block addresses 做 Read/Write/Erase 的操作。 Figure 4.2-Plane Program 6 NAND-flash Management IssuesAddress Transl
45、ationNAND Flash Memory 的同 1 個 page 不能做重覆寫入的行為。再者,在寫入 1 個sector 資料之前,必須要有抹除 1 個 Block 的資料才能做寫入的動作,但抹除 1 個 Block 的動作需要耗費相當多的時間,此舉造成了 NAND Flash 效能下降的最大原因。為了改善效能,最有效的方法就是減少 Erase 的次數,因此有了Mapping Table。 Mapping Table 的管理分為 Block level、Sector level 以及改良的 Hybrid level。 Block level 的 address mapping 是指 1 個
46、 Logical Block 對應到 1 個Physical Block,它的 mapping table 相對於 sector-level 的 mapping table來的小,能夠節省 mapping table 所占 RAM 的使用量。但當 Logical Block 的個數少於 Physical Block 個數時,會發生 Logical Block 時常被 overwrite 的狀況,選定要 overwrite 的 Logical block 和它 mapping 的 Physical Block 都要將資料更新到新的 Physical Block 上,且做 erase-before
47、-write 的動作,而造成效能的下降,此外轉換單位大,每次寫入的單位也大,因此會帶來額外的資料寫入成 本。 而 Sector-Level 的 address mapping 是 1 個 Logical Sector 可以對應到任 1個 Physical Block 裡的 Sector,雖然這種 mapping 的方式彈性佳,可以減少因轉換單位大而帶來額外的資料寫入成本,但是 mapping table 的 Size 過大,例如 1GB 的 Flash,1 個 sector 的大小為 512byte 的話,RAM 就要維護二百萬筆的 sector 資訊。 Figure 5. 資料區塊,紀錄區塊
48、,以及備用區塊的使用。 (a)完整的資料區塊(b)資料依序寫入紀錄區塊的可寫頁中(c)區塊鏈的 Merge 改良的 Hybrid level,擷取 Block level 和 Sector level 的優點,採用 Block level 的方式,再加上有限數量的 Block 做為 Sector level 的 mapping,除了讓 mapping table 的 size 限制住不至於龐大,也減少了 erase-before-write的動作。Hybrid level 中,將 Physical Block 取名為資料區塊(Data Block),因為資料不能直接更新於資料區塊裡,我們找了一段可寫的 Block 來紀錄更新的資料,並將它取名為紀錄區塊(Log Block)。經過一段時間的寫入,一個LBA(Logical Block Address)對應會對應一個資料區塊,而此資料區塊會跟著數個紀錄區塊,整個形成一個區塊鏈(Block Chain),如圖 5(b)所示。 Figure 6.Hybrid Level mapping table 7 Hybrid Level