Nand Flash 和 Nor Flash 详解

代码写的越急,程序跑得越慢。—— Roy Carlson

前言

Nor Flash 和 Nand Flash 在各种嵌入式系统中都扮演着不可或缺的角色,所以在这里整理下。


历史

以下摘自维基百科

闪存(无论是 NOR 型或 NAND 型)是舛冈富士雄博士 1980 年申请了一个叫做 simultaneously erasable EEPROM 的专利。然而,东芝公司的论资排辈却让这项划时代的发明石沉大海,直到4年之后。“我终于被提拔了,可以不用批准就去工厂,让工人们帮忙做出样品了”,富士雄说。 据东芝表示闪存之所以命名为 “Flash” 是由舛冈博士的同事有泉正二建议,因为这种存储器的抹除流程让他想起了相机的闪光灯。舛冈博士在 1984 年的加州旧金山 IEEE 国际电子组件会议 (International Electron Devices Meeting, IEDM) 上发表了这项发明。Intel 看到了这项发明的巨大潜力,并于 1988 年推出第一款商业性的 NOR Flash 芯片。

NOR Flash 需要很长的时间进行抹写,但是它提供完整的寻址与资料总线,并允许随机存取存储器上的任何区域,这使的它非常适合取代老式的 ROM 芯片。当时 ROM 芯片主要用来存储几乎不需更新的代码,例如电脑的 BIOS 或机顶盒(Set-top Box)的固件。NOR Flash 可以承受一万到一百万次抹写循环,它同时也是早期的可移除式快闪存储媒体的基础。CompactFlash 本来便是以 NOR Flash 为基础的,虽然它之后跳槽到成本较低的 NAND Flash。

舛冈富士雄没有停止追求,在 1986 年发明了 NAND Flash,大大降低了制造成本。由于他的贡献,东芝奖励了他一笔几百美金的奖金和一个位置很高却悠闲的职位。做为一个工程师,他忍受不了这种待遇,不得不辞职进入大学继续科研。东芝在 1989 年的国际固态电路会议(ISSCC)上发表了 NAND Flash。NAND Flash 具有较快的抹写时间,而且每个存储单元的面积也较小,这让 NAND Flash 相较于 NOR Flash 具有较高的存储密度与较低的每比特成本。同时它的可抹除次数也高出 NOR Flash 十倍。然而 NAND Flash 的I/O接口并没有随机存取外部地址总线,它必须以区块性的方式进行读取,NAND Flash 典型的区块大小是数百至数千比特。

因为多数微处理器与微控制器要求字节等级的随机存取,所以 NAND Flash 不适合取代那些用以装载程序的 ROM。从这样的角度看来,NAND Flash 比较像光盘、硬盘这类的次级存储设备。NAND Flash 非常适合用于储存卡之类的大量存储设备。第一款创建在 NAND Flash 基础上的可移除式存储媒体是 SmartMedia,此后许多存储媒体也跟着采用 NAND Flash,包括 MultiMediaCard、Secure Digital、Memory Stick 与 xD 卡。

在很长一段时间,东芝公司甚至不承认 NOR flash 是舛冈富士雄发明的,宣称是 Intel 发明的。直到 IEEE 在 1997 年颁给舛冈富士雄特殊贡献奖后才改口。舛冈富士雄觉得自己的贡献被东芝公司抹杀了,于 2006 年起诉了东芝公司,并索要 10 亿日元的补偿,最后和东芝公司达成和解,得到 8700 万日元(合 758,000 美元)。


Nor Flash 和 Nand Flash

什么是 Nor Flash ?

Nor Flash 最常用于需要写入和读取单个字节数据的应用程序,并且最常用于需要随机访问和就地执行访问技术的应用程序。由于每个读取访问都花费相同的时间,因此顺序读取访问不会比随机访问快。擦除/编程周期通常可能很长。

当今的 Nor Flash 设备具有几兆比特和几千兆字节的容量。根据设备的不同,在写入数据之前必须擦除单个字节或扇区,擦除/编程速度通常低于 1MB/s。

Nor Flash 具有很高的可靠性,通常可将其数据完整性保持20年或更长时间。

Nor Flash 的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在 flash 闪存内运行,不必再把代码读到系统 RAM 中。Nor Flash 的优点是传输效率很高,但是工艺复杂,价格较贵。在 1~4MB 的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。Nor Flash 在开发板中应用的非常广泛,通过 JTAG/JLINK 把 boot 烧到 Nor Flash 中,通电后自动运行。

Nor Flash 非常适合低密度、高速读取应用,这些应用大多是只读的,通常被称为代码存储应用。


什么是 Nand Flash ?

Nand Flash 按块排列,可以在其中写入,读取或擦除数据。在顺序读取期间,接收第一个数据字节的等待时间比使用 Nor Flash 要长得多,但是随后读取数据的顺序字节要比使用NOR闪存快得多。写入数据时,可以将完整的数据块快速传输到 Nand Flash 设备,然后在单个操作中写入该数据块。有效的读取和写入速度以及块擦除时间比 Nor Flash 快得多。

Nand Flash 最适合执行大型顺序数据访问的系统,这与当今用作计算系统和带有面向块的存储子系统的操作系统的主要存储设备的映射非常吻合。

由于闪存单元的物理硅设计,对于类似的处理技术,Nand Flash 单元比 Nor Flash 单元占用的硅面积大约少 40%。

Nand Flash 其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand Flash 的优点是容量大、便宜、改写速度快,缺点是无法寻址直接运行程序,只能存储数据。另外Nand Flash 非常容易出现坏区,所以需要有校验的算法。应用 Nand Flash 的困难在于 Flash 的管理和需要特殊的系统接口。Nand Flash 适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3 随身听记忆卡、体积小巧的U盘等。

Nand Flash 非常适合低成本、高密度、高速编程/擦除应用,通常被称为数据存储应用。


Nor Flash 和 Nand Flash 的共性

  • 都是非易失存储介质。即掉电都不会丢失内容。
  • 在写入前都需要擦除。实际上 Nor Flash 的一个 bit 可以从 1 变成 0,而要从 0 变 1 就要擦除整块。NAND flash 都需要擦除。

Nor Flash 和 Nand Flash 的差异

结构差异

  • Nor Flash 体系结构提供了足够的地址线以映射整个存储器范围。这具有随机访问和读取时间短的优点,非常适合代码执行。采用内存的随机读取技术,各个存储单元并联连接,对存储单元进行统一编址,使器件能够实现随机访问。既然是统一编址,Nor Flash 就可以在芯片内执行,即应用程序可直接在 Flash 内运行,而无需先拷贝到 RAM。这种配置能够缩短随机存取微处理器指令所需的读取时间。

  • Nand Flash 是作为一种针对高密度数据存储进行优化的替代方案开发的,它放弃了随机访问能力,以实现更小的单元大小为代价,这意味着芯片大小会更小和单位成本会更低。数据线和地址线共用 I/O 线,需额外联接一些控制的输入输出。Nand Flash 通过对数据块进行编程来实现更快的写入和擦除。


可靠性差异

  • 寿命(耐用性):Flash 写入和擦除数据时会导致介质的氧化降解。 Nor Flash 的擦写次数是 10 万次,Nand Flash 的擦写次数是 100 万次。
  • 坏块处理:Nand Flash 器件的坏块是随机分布的,在使用过程中,难免会产生坏块。所以在使用时要进行坏块管理,以保障数据可靠。在 Flash 的位翻转(一个 bit 位发生翻转)现象上,Nand Flash 的出现几率要比 Nor Flash 大得多.这个问题在 Flash 存储关键文件时是致命的,所以在使用 Nand Flash 时建议同时使用EDC/ECC等校验算法.

成本和容量差异

  • Nand Flash 的单元尺寸几乎是 Nor Flash 器件的一半,由于生产过程更为简单,Nand Flash 结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。

  • 与 Nor Flash 相比,Nand Flash 的密度要高得多,主要是因为其每比特成本较低。Nand Flash 通常具有 1Gb 至 16Gb 的容量。Nor Flash 的密度范围从 64Mb 到 2Gb。由于 Nand Flash 具有更高的密度,因此主要用于数据存储应用。


读写速度的差异

  • Nor Flash 有更快的读取速度,Nand Flash 有更快的写、擦除速度。
  • Flash 是非易失存储器,可以存储器单元块进行擦写和再编程。任何 Flash 器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。Nand Flash 器件执行擦除操作是十分简单的,而 Nor Flash 则要求在进行擦除前先要将目标块内所有的位都写为 0。由于擦除 Nor Flash 器件时是以 64-128KB 的块进行的,执行一个写入/擦除操作的时间为 5s,与此相反,擦除 Nand Flash 器件是以 8-32KB 的块进行的,执行相同的操作最多只需要 4ms。执行擦除时块尺寸的不同进一步拉大了 Nor Flash 和 Nand Flash 之间的性能差距。

易用性的差异

  • Nor Flash 有专用的地址引脚来寻址,较容易和其他芯片联接,还支持本地执行。Nand Flash 的 IO 端口采用复用的数据线和地址线,必须先通过寄存器串行地进行数据存取。各厂商对信号的定义会有差异,增加了应用的难度。

编程角度的差异

  • Nor Flash 采用统一编址(有独立地址线),可随机读取每个“字”,但 Nor Flash 不能像 RAM 以字节改写数据,只能按“页”写,故 Nor Flash 不能代替 RAM。擦除既可整页擦除,也可整块擦除。Nand Flash 共用地址线和数据线,页是读写数据的最小单元,块是擦除数据的最小单元。另外,Flash 进行写操作时,只能将相应的位由 1 变 0,而擦除才能把块内所有位由 0 变 1。所有写入数据时,如果该页已经存在数据,必须先擦除再写。

功耗的差异

  • 在功耗方面,Nor Flash 闪存首次通电时需要比 Nand Flash 高的电流。但是,一旦上电,Nor Flash 的待机功耗就比 Nand Flash 低得多。因此,Nor Flash 通常更适合于从内存中进行随机读取,而 Nand Flash 在写入,擦除和顺序读取方面效率更高。

整理为表格

bin Nand Flash Nor Flash
容量 很大 较小
xip(可执行代码) 不行 可以
读写性能 读取块(顺序读)、写入块、擦除块(可按块擦除) 读取块(RAM 方式)、写入慢、擦除慢
寿命 约百万次 约十万次
访问方式 顺序读写 随机读写
接口方式 任意 I/O 特定完整存储器接口
价格
  • Nand Flash 读取速度与 Nor Flash 相近,根据接口的不同有所差异;
  • Nand Flash 的写入速度比 Nor Flash 快很多;
  • Nand Flash 的擦除速度比 Nor Flash 快很多;
  • Nand Flash 最大擦次数比 Nor Flash 多;
  • Nor Flash 支持片上执行,可以在上面直接运行代码;
  • Nor Flash 软件驱动比 Nand Flash 简单;
  • Nor Flash 可以随机按字节读取数据,Nand Flash 需要按块进行读取。
  • 大容量下 Nand Flash 比 Nor Flash 成本要低很多,体积也更小;

结语

本来是想要学习 Nor Flash 以及 Nand Flash 的知识,结果网上有非常多相似的文章,这方面的信息实在是太多了,所以基本就"写" 一点,"搬运"一点了。