没有胜利者,我们只是活下来了,从此便是无尽的噩梦。
– 塞尔克(萨拉热窝围城战幸存者)
一、概述
在嵌入式领域,我们经常会遇到 Flash
这个存储介质,通常是用来存储程序或者数据的。
但是如果细究起来,目前常用的 Flash
主要分为 Nand Flash
和 Nor Flash
,他们都是嵌入式开发中的常客。
面对这两种不同的 Flash
类型,肯定有很多人傻傻分不清吧,本文就来唠嗑唠嗑。
二、对比
2.1、记住他们的名字
很多人老是记不住这两个 flash
的具体名字,其实很简单,既然取了名字,这名字总有其由头,根据名字记就好了。
Nand Flash
Nand Flash
中的Nand
的意思是Not AND
(与非门
),意思就是该 Flash 的基础单元就是与非门
,如下所示:
Nor Flash
Nor Flash
中的Nor
的意思是Not OR
(或非门
),意思就是该 Flash 的基础单元就是或非门
,如下所示:
为什么会选择这两种基础单元呢?原因在于这两种基础单元适合实现存储数据的功能,兼具成本和性能优势。
就目前的工程实现来说,与非门的实现比与门更简单,因为 与门 需要 与非门 + 非门 实现。
2.2、PK 一下
Nor Flash
和Nand Flash
的使用场景
对于大多数应用较为简单的场景,比如经常使用的MCU
,其内置的 Flash 就是使用的是Nor Flash
,因为其中一个特点是支持芯片内执行(XIP
:eXecute In Place
),就是应用程序可以直接在 flash 闪存内运行,而不要先拷贝到 RAM 中,然后程序在 RAM 中执行。除了单片机内置的 Flash ,我们在一些稍微复杂的场景中使用到的外部存储器,也支持XIP
,使用的也是Nor Flash
,比如常用的W25QXX
系列。
而Nand Flash
也比较常见,适合制作一些空间比较大的存储器,我们经常在一些应用比较复杂的场景中使用到,比如电脑或者其他一些跑大型系统的产品。这些存储器我们经常能看到,比如 SD卡、固态硬盘之类的。代码无法直接在上面执行,需要先将代码拷贝到 RAM(内存)才能够执行。- 读写速度对比
NOR
的读速度比NAND
稍快一些(这一点也更适合直接执行程序),而NAND
的写入速度比NOR
快很多。
值得注意的是:
任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。
所以我们看到很多单片机(比如STM32)的代码在执行 Flash 的写入操作时,需要先进行擦除操作,就是因为这个原因。 - 成本与容量
相同容量,NAND flash
更便宜。但是只有Nor Flash
能够支持芯片内执行(XIP
:eXecute In Place
),所以单片机内置Flash
(一般容量比较小,适合存储代码)选择了这种结构。
NAND flash
的单元尺寸几乎是NOR
器件的一半,由于生产过程更为简单,NAND
结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。NOR flash
占据了容量为1~16MB
闪存市场的大部分,而NAND flash
只是用在8~128MB
的产品当中,这也说明NOR
主要应用在代码存储介质中,NAND
适合于数据存储,NAND
在CompactFlash
、Secure Digital
、PC Cards
和MMC
存储卡市场上所占份额最大。
三、参考资料
更多精彩内容,更多惊喜,请关注公众号《嵌入式小散修》。