一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
没有胜利者,我们只是活下来了,从此便是无尽的噩梦。 -- 塞尔克(萨拉热窝围城战幸存者)
一、概述
在嵌入式领域,我们经常会遇到 Flash 这个存储介质,通常是用来存储程序或者数据的。
但是如果细究起来,目前常用的 Flash 主要分为 Nand Flash 和 Nor Flash,他们都是嵌入式开发中的常客。
面对这两种不同的 Flash 类型,肯定有很多人傻傻分不清吧,本文就来唠嗑唠嗑。
二、对比
2.1、记住他们的名字
很多人老是记不住这两个 flash 的具体名字,其实很简单,既然取了名字,这名字总有其由头,根据名字记就好了。
Nand FlashNand Flash中的Nand的意思是Not AND(与非门),意思就是该 Flash 的基础单元就是与非门,如下所示:Nor FlashNor 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更便宜。但是只有Nand 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存储卡市场上所占份额最大。