NOR 与 NAND 架构差异
编制日期 2026-10-14 | 版本号 Rev 1.0
为什么 NOR 能直接跑代码(XIP)而 NAND 不能 —— 从阵列连线一路推到密度、速度、坏块、接口与选型
面向 XTX(芯天下)SPI NOR、PPI NOR、SPI NAND、PPI NAND、SD NAND、eMMC 产品线从业人员,回答一个被反复追问的底层问题:NOR 和 NAND 到底差在哪,为什么 NOR 能 XIP 而 NAND 不能。
本文不罗列参数,而是从一处连线方式出发做推导:阵列怎么连 → 最小读出单位多大 → 随机读能不能做 → 单元能不能做小 → 密度与成本差多少 → 坏块要不要管 → 接口该长什么样 → 最后落到你这台机器该用哪一颗(或哪两颗)。每一步都给出结构层面的原因,而不是一句「规格上就是这样」。
结论: NOR 把每个单元并联到位线,因此每个单元都能被单独挑出来读,随机读走到 ns 级,可以被 CPU 当作地址空间的一部分直接取指; NAND 把几十个单元串成一串,因此最小读出单位就是一整串(也就是一页),必须先把整页读进页缓冲、做完 ECC 才能取字节,延迟落到 µs 级——这个差距不是工艺问题,是串联结构本身决定的,无法靠制程抹平。 反过来,串联让 NAND 省掉了几乎全部接触孔,单元能做小两倍以上,密度与成本优势同样无法抹平。所以这不是谁替代谁,而是代码存储与数据存储的分工。
读者路径
| 系列篇目 | 关注层级 | 本篇的衔接点 |
|---|---|---|
| NAND 存储单元与 3D NAND | 单元与阵列 | 给出页、块、P/E、多层堆叠这些物理常量 |
| NAND 干扰机制与数据保持 | 单元间干扰 | 解释为什么 NAND 必须配 ECC 与垃圾回收 |
| FTL 映射与写放大 | 控制器固件 | 解释 NAND 侧的额外软件开销从何而来 |
| NOR 与 NAND 架构差异(本篇) | 阵列连线方式 | 把「并联 / 串联」这一处差别推到全部工程后果 |
1. 一句话差异:阵列的连接方式
NOR 与 NAND 这两个名字本身就来自它们的阵列结构。NOR 阵列里,每个单元直接挂接在位线上,单元之间互不遮挡,等价于一组并联的开关;NAND 阵列里,几十个单元首尾相接串成一条链,链的两端才通过选择管接到位线和源极线,等价于一组串联的开关。
- 并联(NOR):任意一个单元导通,它所在的那条支路就能把结果反映到位线上,任意一路都能被独立选中。
- 串联(NAND):只有整条链上所有单元都导通,位线才会被拉到对应状态;想单独测某一个,必须先把其余单元强制导通。
这一处差别是硬性的几何事实,不随工艺节点变化,也无法靠电路技巧绕过。本文后面要讲的所有差异——随机读能不能做、XIP 成不成立、单元能做多小、有没有坏块、坏块怎么管、单位比特成本差多少——都是这一句话的推论。
1.1 并联与串联:一句话说清两种阵列
把两种阵列画在一张图上(见第一章的阵列对照图),差别一目了然:NOR 的三个要素是位线、字线和一个个各自独立的单元接触;NAND 的三个要素是位线、字线和一条被两个选择管夹在中间的单元串。
这张图需要盯住的是三个细节:
- NOR 的接触孔数量:每个单元的漏极都有一条自己的金属通路挂到位线上。图里每条位线旁边那几个小方块就是接触孔,三个字线行、三条位线列,一共九个单元、九个接触。
- NAND 的串结构:一串单元被串选择管(SSL)和地选择管(GSL)夹住,整串只有两端有接触通路。要让非选中串彻底断开、选中串接通,就靠这两个选择管。
- 字线在两种阵列里的角色不同:NOR 里字线选中「一行单元」,被选中的单元直接把它所在位线的状态改变;NAND 里字线选中「一串里的某一个单元」,但要测它,还得让同一串其余单元全部导通。
从「有三个数量级差」的角度看,这个差别很难直观体会;但从几何上看非常简单:并联的每一路都能单独接通,串联的每一节都得借道邻居。后面所有性能数字,本质上都是这句话在不同环节的表现。
| 观察点 | NOR 阵列 | NAND 阵列 | 直接后果 |
|---|---|---|---|
| 单元到位线的连接 | 每个单元一条独立通路 | 整串共用串两端两条通路 | 随机寻址能力的分水岭 |
| 选中某个单元需要什么 | 把它的字线抬起来即可 | 还要把串上其余单元全部导通 | 读出单位从「一个字」变成「一整串」 |
| 是否需要选择管 | 不需要 | 需要 SSL 与 GSL 两只 | 多两只管子,但换来大量接触孔 |
| 接触孔数量 | 与单元数同量级 | 与串数同量级(约几十倍少) | 单元面积的差距从这里产生 |
| 典型一串的单元数 | 不适用 | 32 / 64 / 128(典型值) | 这个值就是页大小的雏形 |
1.2 NOR 侧:每个单元直接挂接位线
NOR 阵列的名字来自它的逻辑行为:把字线看作输入、位线看作输出,只要任意一个单元导通,位线就被拉到低电平——这是一个「或非(NOR)」关系。这个逻辑行为的前提,正是所有单元并联在同一条位线上。
读出时发生的事情非常直接:行译码器把目标字线抬到一个介于已擦除单元与已编程单元阈值之间的读电压;被选中的这一行里,某些单元导通、某些不导通;导通的那几个把自己那条位线的状态改变,灵敏放大器(sense amplifier)比较位线电流与参考电流,在一个拉到之类的时间内给出 0 或 1。
- 被选之外全不管:同一条位线上其它未被选中的单元,因为字线没被抬起而处于截止状态,对读出没有任何贡献,也不会挡路。
- 结果直接可用:灵敏放大器的输出就是数字电平,可以直接送上数据总线,不需要任何中间缓冲、不需要纠错、不需要等待。
- 地址天然成立:既然每个单元都能被行列坐标直接挑出,把它映射到 CPU 的地址空间就成了一个纯粹的译码问题。
这就是为什么 NOR 能被当作「只读存储器」而不是「块设备」来使用:CPU 给一个地址,介质在几十纳秒到一百多纳秒之后返回一个字,中间没有任何协议、没有软件栈。
| 读出环节 | NOR 阵列里的实际动作 | 耗时量级(典型值) | 能否跳过 |
|---|---|---|---|
| 行译码 | 把目标字线抬到读电压 | 纳秒级 | 不可跳过,但极短 |
| 位线预充 | 把位线充到参考电位 | 纳秒级 | 不可跳过 |
| 单元导通判断 | 被选单元决定位线是否下拉 | 纳秒到十几纳秒 | 不可跳过 |
| 灵敏放大 | 比较位线电流与参考 | 十几到几十纳秒 | 不可跳过 |
| 输出 | 数据直接上总线给 CPU | 随接口,异步几乎为零 | 可随接口优化 |
1.3 NAND 侧:一串单元夹在两个选择管之间
NAND 阵列同样让字线横向排列、每个单元的栅极接字线,但纵向不再是各自独立的接触,而是把几十个单元的沟道串成一条:上一个单元的源(漏)直接是下一个单元的漏(源),中间没有任何金属接触。这一串的两端,通过串选择管接位线、通过地选择管接源极线。
要读这一串里的某一个单元,流程被迫变成这样:
- 第一步:把串选择管打开,让这一串接到位线上;同时打开地选择管,让这一串接到源极线上。
- 第二步:把不需要读的那些字线全部抬到一个足够高的通过电压(Vpass),让它们无条件导通;只有被读的那条字线抬到读电压(Vread)。
- 第三步:整条串作为一个分压结构被充电,最终整串通不通决定了位线是被拉下来还是保持高电平。
- 第四步:整串的结果被锁进页缓冲(page buffer)。注意这里锁进来的是整条串,也就是一个字线上的所有单元——这就是「页」的物理原形。
换句话说:NAND 的每一个控制动作天然是「整串」的。串上有 32 个单元也好、128 个单元也好,读数都是一次把整串拉起来判。这个事实后面会一路传导到读延迟、页大小、ECC、FTL 和文件系统。
| 串上的部件 | 作用 | 不工作时的状态 |
|---|---|---|
| 串选择管 SSL | 把选中串接到位线,同时隔离未选中串 | 截止,整串浮空 |
| 单元 Cell 0 到 Cell n | 存储数据,沟道首尾相接 | 加通过电压后无条件导通 |
| 被读取的那个单元 | 由自身阈值电压决定这一串导不导通 | 由 Vread 与 Vt 比较决定 |
| 地选择管 GSL | 把选中串接到公共源极线 | 截止,整串浮空 |
| 页缓冲 page buffer | 锁存整串这次读出的结果,供后续串行移位输出 | 每次读前复位 |
1.4 从一处差别推导出后面全部差异
把「并联 / 串联」这一个起点,沿着工程链路往下一层一层推,就能得到本文的全部章节。下面这条因果链是全文的索引,后面每一章都是在展开其中一格。
| 推导层级 | 并联(NOR)得到什么 | 串联(NAND)得到什么 | 展开在哪一章 |
|---|---|---|---|
| 一、连接 | 每单元一条独立位线接触 | 整串共用两端接触 | 第 1 章 |
| 二、读出单位 | 一个字,甚至一个字节 | 一整串,也就是一页 | 第 2 章 |
| 三、随机访问 | 直接寻址,随机读 ns 级 | 必须先整页读出,首次读 µs 级 | 第 2、4 章 |
| 四、XIP 能力 | 条件天然成立 | 条件天然不成立 | 第 2.4 节 |
| 五、单元面积 | 每单元一套接触,约 10F² 量级 | 接触摊薄,约 4F² 量级 | 第 3 章 |
| 六、密度与成本 | 主流止步于几百 Mb 到 2 Gb | 一路到 GB、TB 级 | 第 7 章 |
| 七、写入与擦除 | 编程慢、擦除更慢(数百 ms 级) | 页编程快、块擦除毫秒级 | 第 5 章 |
| 八、坏块与 ECC | 出厂基本无坏块,一般不用 ECC | 出厂即允许坏块,必须 ECC 加坏块表 | 第 6 章 |
| 九、接口形态 | 并行地址总线或 SPI,像存储器 | 命令/地址/数据分时复用,像设备 | 第 8 章 |
| 十、用途收敛 | 代码存储:Boot、XIP、常量表 | 数据存储:文件系统、日志、媒体 | 第 9 章 |
| 十一、共存方案 | Boot NOR 加数据 NAND 双介质 | SD NAND / eMMC 单介质整合 | 第 10、11 章 |
评审会上遇到「能不能换」「能不能省」「为什么不行」这类问题,先回到第一层:这个诉求依赖的是并联还是串联带来的性质。依赖并联性质的(按字节随机取指、极低延迟确定性),换到 NAND 侧一定不成立;依赖串联性质的(单位比特成本、大容量、写入带宽),换到 NOR 侧一定吃亏。两者的差距都不是可以优化的量,而是由连线方式锁死的量。
2. 为什么 NOR 能随机访问、NAND 只能按页
「NOR 能随机访问,NAND 只能按页读」这句话经常被当成接口特性来记。实际上它既不是 NAND 协议里的一条规则,也不是厂商偷懒,而是串联阵列在物理上做不出按字节随机读。
- NOR 侧:地址线直接译成行选与列选,任何一个单元都能被独立挑出来,读出来的就是一个字。
- NAND 侧:一次读动作必然牵动整条串、必然产出整页数据,想要其中的一个字节,只能等整页读完之后再挑。
本章把这两条路径一步一步摊开,看清楚差距是哪几步累加出来的。
2.1 最小可寻址单位怎么被连线方式决定
「最小读出单位」这个概念在 NOR 和 NAND 上的含义完全不同。NOR 上它通常由接口宽度决定——并行 NOR 给出 x8/x16,就一次给一个字节或一个字;SPI NOR 更极端,按时钟一位一位往外 shift,理论上颗粒度可以到「任意字节」,只是慢。
NAND 上它完全由物理结构决定:一个字线上的所有单元在一次读动作里被同时判读,全部锁进页缓冲。这个数量等于「一条位线上挂了几串」乘「每串在这个字线上有几个单元」,也就是页大小。想要更小的单位,物理上做不到——串一端的电位恰恰反映的是整串的串联结果,你无法只问其中一个。
| 介质 | 最小读出单位由什么决定 | 典型量级 | 能不能再往下细分 |
|---|---|---|---|
| 并行 NOR(x8/x16) | 接口宽度与地址总线 | 一个字节到一个字 | 可以,代价是换用更慢的接口 |
| SPI NOR | SPI 时钟与命令开销 | 一个字节起,实际按 cache 行读 | 可以到字节级 |
| SPI NAND | NAND 页大小(物理决定) | 2 KB 到 4 KB(典型值) | 不能,接口形式不影响这一点 |
| PPI NAND / x8 NAND | NAND 页大小(物理决定) | 2 KB 到 16 KB(典型值) | 不能 |
| SD NAND / eMMC | 页大小加上 FTL 与协议封装 | 对主机是 512 B 扇区 | 主机看到的是扇区,物理仍按页 |
最后一行值得单独留意:SD NAND / eMMC 让主机看到 512 B 扇区,很容易让人误以为「控制器帮我把页变成了扇区」。控制器只是做了缓冲与再封装,底下那次物理读依然是整页,只是这份额外的整页开销被控制器吞掉了、并且摊到了后续扇区上。
2.2 一次随机读要走完的多米诺
把两条路径并排放开,差距就不是「一个数字」,而是一串步骤的累加。下图左边是 NOR 的一次随机读,右边是 NAND 想拿到一个字节必须走完的路。
需要强调的是:NAND 这六步没有一步是浪费的,每一步都被串联结构逼出来。
- 不能没有通过电压:因为其余单元截止会让整串断开,被测单元的状态再好也传不到位线上。
- 不能没有页缓冲:因为一次判读的结果整串一起出来,必须先有地方暂存,才能谈后续传输。
- 不能没有 ECC:因为 NAND 的原始误码率显著高于 NOR,在几百 KB 到几 MB 的一页里,出错几乎是必然事件,不纠错无法交付。
- 不能不要串行输出:因为页缓冲里是几千字节,接口只能逐字节或逐位送出,这一步本身就占掉相当比例的时间。
所以「NAND 读一个字节慢」不是一个可以优化掉的参数,而是六步共同决定的结果。优化能做的是压缩其中某几步(例如用更快的接口、更高页并发),但整页读出这件事本身不可能跳过。
2.3 按页不是协议规定,是结构必然
一个常见的误读是把「按页」当成 NAND 规范里的约定——仿佛只要定一个更灵活的协议就能按字节读。事实上顺序恰好相反:先有了串联阵列必然按串读的物理事实,才有了页这个数据结构,然后所有的命令集、编程模型、FTL、文件系统都是围着这个事实搭出来的。
顺着这条路往下推,会连带解释掉一大堆「为什么 NAND 非得这么麻烦」:
- 为什么要有页缓冲:因为整串一起出来,必须有一个宽度为整页的暂存区。
- 为什么写也要按页:因为 ISPP 编程脉冲是加在一条字线上的,天然是「一条字线上的所有被写单元一起编程」。
- 为什么擦除要按块:因为 FN 擦除靠的是衬底与沟道之间的隧穿电流,把整块共用的 P 阱一起抬压最省事,代价就是必须整块走。
- 为什么必须有 ECC:因为单页比特数多、原始误码率高,一页里出错几乎是必然。
- 为什么必须有 FTL:因为不能原地改写、必须异地更新,地址映射成了绕不过去的中间层。
NOR 的「可以按字节读」是并联的赠品;NAND 的「必须按页读写」是串联的账单。协议、命令集、FTL、文件系统这些软件层次,全是在为这张账单做配套,而不是账单本身。把看成是限制,会错过后面所有设计取舍的根。
2.4 XIP 成立的三个条件
XIP(eXecute In Place,就地执行)的意思是 CPU 直接从存储介质上取指令并执行,不需要先把代码整段搬到 RAM。CPU 能不能这么干,取决于三个条件必须同时成立。
| 条件 | 具体要求 | NOR 是否满足 | NAND 是否满足 |
|---|---|---|---|
| 一、可被线性寻址 | 介质必须落在 CPU 的地址空间里,给地址就能取回数据 | 满足,可直接挂在地址总线上 | 不满足,只能走命令接口 |
| 二、延迟确定且足够短 | 单次取指的延迟要接近 CPU 可接受的范围,且不能有周期性长延迟 | 满足,数十到百纳秒级且确定 | 不满足,首次读数十微秒且不确定 |
| 三、返回的数据可信 | 取回来的指令字必须无需纠错即可执行 | 满足,原始误码率极低 | 不满足,必须 ECC 后才能交付 |
三个条件里只要断一个,XIP 就不成立。NAND 是三个都不成立,而且三个都不可绕过:
- 第一点属于接口层面,理论上可以把 NAND 挂到一个控制器后面伪装成地址空间,但控制器本身还是要按页读。
- 第二点属于阵列层面,每次换页都要重新走一遍阵列充电加页缓冲加 ECC,这个 µs 级延迟无法消除。
- 第三点属于可靠性层面,CPU 取指不具备等待 ECC 引擎的条件——指令流水要求每个周期给确定的结果。
很多方案里把 SPI NAND 接到 MCU 的 QSPI 控制器上,看到「memory mapped」这个描述就以为可以 XIP。这里要区分两件事:QSPI 的地址映射模式是把 SPI 帧的地址段自动封装起来,让软件读起来像访问一段内存;但 SPI NAND 收到这些地址后,内部仍然是「整页读进 cache,再按偏移吐出来」。
结果是:命中 cache 的那一小段确实很快,一旦跨页就要再来一次完整的页读,延迟出现几十微秒级的尖峰。指令流水无法容忍这种不确定延迟,所以可以当成只读数据区用,不能当成代码执行区。SPI NOR 的同一套地址映射之所以能 XIP,是因为它每一次读的最小单位本来就是一个字节。
3. 单元结构差异与密度差的来源
串联除了改变读出方式,还带来一个更直接的收益:接触孔可以省掉。这一章讲清楚 NAND 单元为什么能比 NOR 单元小一半以上,以及这个「一半」是怎么一路变成同容量下几倍的价格差。
- NOR 单元:每个单元需要一套自己的位线接触与源极接触,接触孔占的面积是刚性的。
- NAND 单元:几十个单元串成一串,只有串的两端需要接触,摊到每个单元头上几乎可以忽略。
3.1 NOR 单元:每个单元一套独立接触
NOR 单元的版图里,真正占面积的不是那个浮栅晶体管的沟道,而是围绕它的接触与间距。一个典型的 NOR 单元要包含:一条位线接触、一条源极接触、各自的金属走线与相应的间距规则。接触孔本身必须满足最小尺寸与最小间距,这两项在任何一个工艺节点上都不可能做到无限小。
于是 NOR 单元面积的经验值长期停留在约 10F² 这个量级(F 为该节点的特征尺寸)。这个数字之所以下不来,原因有三:
- 接触孔数量刚性:单元数翻倍,接触孔数就翻倍,没有任何摊薄机制。
- 间距规则刚性:每个接触孔四周的隔离距离不能压缩,孔越多,被迫留的空白越多。
- 需要额外的金属层次:为了把源极统一连到公共源极线,往往还要增加一层金属,进一步抬高面积。
结果是:NOR 想提高密度,几乎只能靠把 F 往下压,也就是靠更先进的工艺节点——而这正是成本最高的那条路。
| 面积构成项 | 占比感觉(典型值) | 能不能缩 | 约束来自 |
|---|---|---|---|
| 沟道与栅区 | 约占三分之一 | 随 F 线性缩小 | 光刻分辨率 |
| 接触孔与金属 plug | 约占三分之一 | 基本不能缩 | 接触工艺的最小尺寸 |
| 孔间距与隔离规则 | 约占三分之一 | 基本不能缩 | 可靠性与漏电规则 |
3.2 NAND 单元:整串共享接触
NAND 的做法是把思路翻过来:既然串联已经让单元之间天然连通,那就让它们直接共享扩散区,不再打任何接触孔。整串只保留两个接触——串选择管一侧接位线,地选择管一侧接源极线。
这带来三层收益:
- 接触孔被摊薄:一串 64 个单元只需要 2 个接触,摊到每单元约 0.03 个,相比 NOR 的 2 个,差出近两个数量级。
- 间距规则被摊薄:隔离距离同样只需要在串的两端留。选择管本身也摊薄:两只在版图意义上的额外面积被几十个单元分担。
- 结果就是约 4F²:单元面积从约 10F² 降到约 4F² 这个量级,同代工艺下密度差约 2 到 3 倍。
注意这里说的是同代工艺。实际产品间的差距往往更大,因为 NAND 一侧还有两个加成:一是 NAND 主要品类早早走上了多层堆叠(3D)路线,密度不再靠缩 F;二是 NAND 的市场容量远大于 NOR,同样的成熟度下愿意投入更先进的节点。所以「NOR 几百 Mb、NAND 上 TB」这个最终结果,是单元结构、堆叠技术与产业规模三项叠加出来的。
| 结构项 | NOR 单元 | NAND 单元 | 差距来源 |
|---|---|---|---|
| 每单元接触孔数 | 约 2 个 | 约 0.03 到 0.06 个 | 串联把接触摊到整串 |
| 是否需要选择管 | 不需要 | 整串 2 只,摊薄后可忽略 | 摊薄 |
| 典型单元面积 | 约 10F² 量级 | 约 4F² 量级 | 接触孔摊薄 |
| 密度提升还能靠什么 | 只能压 F(换工艺节点) | 压 F 之外还可以加层数(3D) | 技术路线不同 |
3.3 接触孔数量怎么换算成密度与成本
从单元面积到最终报价,中间还有几步,每一步都会把差距放大一点。
- 单元面积 → 每 die 比特数:同样一片 12 英寸晶圆、同样良率,单元面积小一半多一点,同样大小的裸片就能装下约两倍到三倍的比特。
- 每 die 比特数 → die 尺寸选择:做同一个标称容量,NAND 可以选更小的 die 或者在同样 die 上做更大容量,两条路都会下压成本。
- die 尺寸 → 每晶圆产出颗数:die 越小,一颗晶圆切出来的合格 die 越多,缺陷损失也越小,这是非线性的一项。
- 产出颗数 → 单位比特成本:封装、测试、老化这些 per-package 的固定开销,被摊到更多比特上,优势进一步放大。
把这四步乘起来,同代 NAND 的单位比特成本通常只有 NOR 的一个较小比例。这就是「NOR 不是贵一点点,而是贵在结构上」的含义:哪怕把 NOR 的良率、封装、测试做到和 NAND 完全一样,单元的接触孔数量也决定了它的成本地板更高。
| 换算层级 | 关键量 | NOR 侧的处境 | NAND 侧的处境 |
|---|---|---|---|
| 单元到裸片 | 单元面积(F²) | 约 10F²,刚性 | 约 4F²,且可再加层 |
| 裸片到晶圆 | 每片晶圆的可切颗数 | 同样容量要更大 die | 更小 die 或更大容量 |
| 晶圆到良率 | 单位面积的缺陷概率 | 面积越大越吃亏 | 面积小,缺陷敏感度低 |
| 晶粒到成品 | 封装与测试的固定开销 | 摊到的比特少 | 摊到的比特多 |
| 成品到报价 | 单位比特成本 | 结构性偏高 | 结构性偏低 |
单元做小换来的密度,代价是第 2 章讲过的那些取舍:按页读写、必须用 ECC、必须有 FTL、必须按块擦除。所以严格地说,NAND 并没有「白白」省掉接触孔,它是用复杂性换面积:把 NOR 上由硬件几何保证的性质,改由控制器与软件栈在运行时动态重建。
理解这一点,就理解了为什么 SSD / eMMC / SD NAND 的产品竞争力一半来自 NAND 颗粒本身,另一半来自控制器与固件——后者正是在偿还这笔债。
4. 读性能对照:三个数量级的差距
如果把「读一个字节」这件事拆成时间预算,NOR 和 NAND 的差距不是十倍、百倍,而是约三个数量级,并且这个差距的来源完全在阵列结构里,不在工艺上。
- NOR 随机读:直接寻址、灵敏放大即出,落在数十到一百多纳秒,且延迟确定。
- NAND 首次读:命令、阵列充电、页缓冲、ECC、串行输出累加,落在数十微秒级,且每次换页都要重来。
下面先把数量级摆出来,再分别解释 NOR 为什么这么短、NAND 的时间花在哪。
4.1 先看数量级:ns 级对 µs 级
把两种介质各自「读一个字节」的延迟放在一起对比,量级差异一目了然。注意这里的 NAND 是首次读延迟(含整页读开销),连续读会另说(见 4.4 节)。
表格从物理环节层面给出数量级(均为典型值,实际随制程与接口变化):
| 介质 | 随机读典型延迟 | 顺序读吞吐(量级) | 延迟是否确定 | 说明 |
|---|---|---|---|---|
| 并行 / SPI NOR | 数十 ~ 一百多 ns | 数十 ~ 数百 MB/s | 是,稳定 | 地址直接取,无页缓冲 |
| SPI NAND | 数十 µs(整页读后取字节) | 数十 ~ 一百多 MB/s | 否,跨页有尖峰 | 接口像 NOR,行为仍是 NAND |
| PPI / x8 NAND | 数十 µs | 数百 MB/s 到 1+ Gb/s | 否,跨页有尖峰 | 整页读 + ECC 是硬开销 |
| SD NAND / eMMC | 数百 µs ~ ms(含控制器) | 数十 ~ 数百 MB/s | 否,控制器调度抖动 | 额外叠了 FTL 与协议栈 |
这张表最容易被误解的地方是最后一列:NAND 的吞吐可以很高,但那是「连续大块搬」的吞吐,不是「随机取一个字节」的延迟。吞吐和延迟是两件事,NAND 赢在前者,输在后者。
4.2 NOR 的读路径为什么这么短
回到第 1 章的阵列图:NOR 是并联结构,给一个行列地址就能直接挑出唯一单元。读出路径上没有「整页」「整串」这种批量概念,于是链路短到只剩四步(见第 1 章 NOR 读出环节表):
- 行译码:把目标字线抬到读电压,纳秒级。
- 位线预充:把位线拉到参考电位,纳秒级。
- 单元判读:被选单元导通与否直接改变位线电位,十几纳秒。
- 灵敏放大:比较位线电流与参考,给出数字电平,几十纳秒。
这四步串起来就是「几十到一百多纳秒」,而且每一步都不依赖邻居、不依赖缓冲、不依赖纠错。也正因为这四点都成立,CPU 才敢在取指周期里直接等这个结果——这就是 XIP 的物理基础。
| NOR 读步骤 | 动作 | 耗时量级(典型值) | 可省? |
|---|---|---|---|
| ① 行译码 | 目标字线抬到读电压 | 纳秒级 | 不可省,但极短 |
| ② 位线预充 | 位线充到参考电位 | 纳秒级 | 不可省 |
| ③ 单元判读 | 被选单元改变位线电位 | 十几纳秒 | 不可省 |
| ④ 灵敏放大 | 比较电流给出数字电平 | 几十纳秒 | 不可省 |
每一步都贴着硬件直连,没有任何「整页 / 整串」级别的批量动作,所以总延迟天然落在 ns 级,且上界稳定。这是 XIP 的物理基础,也是 NOR 在随机读上无法被 NAND 追上的根。
CPU 取指是流水线的节拍:每个周期期望拿到一条指令。NOR 的随机读延迟是有上界且稳定的,可以当成「内存访问」纳入时序预算;NAND 的延迟不仅长,还会因为「是否命中当前页」而忽快忽慢(见 4.4 节),这种不确定延迟对取指是致命的——指令流水无法为一个可能几十微秒后才到的指令字停下。确定性,是 XIP 成立的隐藏前提。
4.3 NAND 的首次读延迟花在哪
NAND 的读路径被串联结构强制拉长。要拿到一个字节,必须先让整串工作,于是时间预算被拆成以下几段(典型值,取数量级):
| 环节 | 耗时量级(首次读) | 为什么这一环不能省 |
|---|---|---|
| 命令与地址下发 | 数 µs | NAND 不在地址空间内,读要先发命令再给地址 |
| 阵列充电 | 数 ~ 十余 µs | 整串一起拉到稳定态,等电位建立 |
| 页缓冲锁存 | 数 µs | 整页先存进内部页寄存器才能谈传输 |
| ECC 校验与纠错 | 数 ~ 十余 µs | NAND 原始误码率高,不纠不敢交付 |
| 串行移位输出 | 十余 µs | 几千字节经 x8 / SPI 逐字节送出 |
| 接口传输 | 数 µs | 取决于接口速率,越快占比越小 |
六段加起来就是「数十微秒」。关键点:每一段都是串联结构逼出来的,不是厂商偷懒。图 4 把同样的预算画成了并排的条,可以直观看到 NAND 的总长比 NOR 长大约三个数量级。
另外要注意「首次读」与「后续读」的区别:如果接下来要的字节还在同一页里,NAND 可以从页缓冲直接吐,延迟会掉到接近接口速率;一旦跨页,上述六段整体重来。这正是 4.4 节要说的「锯齿」。
4.4 顺序读:差距为什么会收窄
既然 NAND 的慢主要来自「整页读 + ECC + 串行输出」,那么当读取模式从随机小读变成连续大块读时,这些固定开销被摊薄到成千上万个字节上,平均延迟和吞吐都会大幅改善。下图用对数示意展示:NOR 的延迟几乎不变,NAND 随连续性升高而明显下降。
但「收窄」不等于「反超」,更不等于「可以拿来取指」:
- 吞吐可以逼近甚至超过 NOR:连续大块读时,NAND 的高接口速率(x8、Toggle、ONFI)让平均带宽很漂亮。
- 延迟曲线呈锯齿:每一页内部很快,每跨一页就出现一次 µs 级尖峰。对顺序媒体流无所谓,对随机取指是灾难。
- 确定性仍未恢复:取指要求每个周期给确定结果,锯齿延迟依然不可接受。
很多现场争论源于混淆了吞吐与延迟。正确表述是:NAND 的顺序吞吐很高,但随机读延迟和确定性仍然远差于 NOR。落到选型上,连续存大文件选 NAND 没问题;任何「随机小读 + 要求确定延迟」的场景(代码取指、随机配置查表)仍然应该优先 NOR。这也是第 9 章分工表的依据。
附录 E · 延伸深读(按主题索引)
本附录把正文中「点到即止」的物理与工程机理展开成可单独阅读的短篇,方便按主题查阅。所有量级均标注「典型值」,不对应具体型号规格。
E.1 并联阵列为何天然难缩微
并联 NOR 的每个单元都要有独立的位线接触和选择管,接触占了不小的面积预算;串联 NAND 把一整串单元共享首尾两个接触,中间单元「首尾相连、不落地」,于是单元面积被压到约 4F²。这不是工艺优劣,而是拓扑红利:并联为了「每个都能直接被读到」付出了面积税,串联为了「省接触」牺牲了随机可达性。理解这一点,就不会再把「NOR 贵、NAND 便宜」简单归因为厂商定价,而是看到它写在硅片拓扑里。
E.2 串联阵列为何必须整页读出
串联结构里,选中一个单元要先打开整串的栅极、给串充上电,再让目标单元的阈值在公共位线上「被感知」。这个过程天然是「先把一页电荷都搬到页缓冲,再串行吐出来」,无法像并联那样「指哪读哪」。所以 NAND 的读单位是一页,而非一个字节;页越大吞吐越高,但首次读的「充电 + 整页 + ECC + 串行」开销也就越高。这就是 4.3 节那条时间预算条的来历。
E.3 XIP 的硬件前提清单
要让处理器「直接从存储取指执行」,存储必须满足:① 随机读延迟确定且在纳秒级;② 接口暴露为可寻址内存空间(地址 / 数据可 MMIO);③ 读出即是最终数据,无需搬运与解码。并联 NOR 天然满足这三点,所以能 XIP;NAND 因为整页读出、需 ECC、需控制器,永远先把镜像加载到 RAM 再执行,不能 XIP。SPI NAND 同样如此——它只是把 NAND 命令包进 SPI 帧,阵列本质没变,因此也 XIP 不了。
E.4 NAND 坏块管理的逐层拆解
NAND 的坏块管理不是「发现坏块就丢弃」这么粗糙,而是一套分层机制:出厂时扫描出初始坏块,记入坏块表(BBT);使用时一旦出现新坏块,立即用保留块池里的好块替换,并更新映射;读写时按逻辑地址查表,绕过物理坏块。对主机或控制器来说,看到的是一个「没有坏块的逻辑 NAND」。这套机制的成本就是软件与控制器复杂度,也正是 NOR 不需要、NAND 绕不开的差别。
E.5 磨损均衡为什么必要
NAND 每个块的擦写次数有限(典型值数百到数千次,3D 可到万次级)。如果某个块被频繁更新(热点),它会先于其他块磨损失效。磨损均衡通过把「逻辑地址」动态映射到「不同物理块」,让擦写尽量均匀分布;更进一步还有静态磨损均衡,把长期不写的冷数据也搬一搬,避免「冷块永远新、热块先老死」。这又是一层 NOR 没有、NAND 必备的软件开销。
E.6 垃圾回收与写放大
NAND 不能直接覆盖,更新一个页要先写到空闲页、再把旧页标记无效;当块里无效页越来越多,就需要垃圾回收(GC):把块里还有效的页搬走、整块擦除后 reuse。这个「为改一点而搬很多」的现象叫写放大。写放大越高,实际写吞吐越低于理论值,寿命也折损越快。FTL 的好坏,很大程度体现在能否把写放大压低。这是 NAND 存储「标称很快、实测打折」的常见根源。
E.7 ECC 为何随制程变重
随制程收紧,NAND 单元之间的阈值电压越挤越近,原始误码率(RBER)上升,于是需要的 ECC 强度从「几 bit / 1KB」涨到「数十 bit / 1KB」,甚至引入 LDPC 等更强编码。ECC 越强,页里用于冗余的 OOB 空间越大,读出延迟与控制器负担也越重。NOR 因单元隔离好、阈值分散大,通常几乎不需要 ECC——这是两者可靠性成本差异的直接体现,也是 7.3 节强调「NAND 便宜背后有代价」的原因。
E.8 读干扰与编程干扰的物理机制
读 NAND 某一页时,同串其他单元会被施加通过的读电压,长期累积会改变它们的阈值,造成读干扰;编程某单元时,同块邻居会被加上抑制电压但仍受轻微应力,造成编程干扰。两者都让「没改的位」悄悄漂移。应对手段是:读计数到阈值就搬走刷新(read retry / refresh),编程后校验。这些机制在并联 NOR 里几乎不存在,因为单元彼此独立、互不施压。这也是 NAND 必须配管理栈的又一佐证。
E.9 数据保持随制程收紧
NAND 靠浮栅 / 电荷阱里存住的电荷表达数据,电荷会随温度与时间缓慢泄漏,阈值漂移超过判读窗口就会出错。制程越细、单元越小,可存的电荷越少,数据保持(Retention)越容易收紧,需要更频繁地刷新或更强的 ECC。NOR 单元大、电荷多,保持时间典型值可达十年级,更稳定。把这一点和 5.1 节的可靠性放在一起看,就能理解为何「关键固件放 NOR、大文件放 NAND」是工程上的稳妥分工。
E.10 3D 堆叠如何改写成本曲线
平面 NAND 的成本下降依赖缩微(缩小 F),但 F 缩到十几纳米后越来越难;3D NAND 改为向上堆叠层数,把密度提升从「平面缩微」换成「纵向堆叠」,单位比特成本得以继续下探,容量天花板也抬到 GB~TB 级。并联 NOR 很难这样堆(它需要每层的并联接触),所以容量仍卡在 MB~低 GB。这正是 6.2 节两条成本曲线「越走越分」的结构性原因,也是 NAND 在容量赛道上一骑绝尘的底气。
E.11 接口带宽 ≠ 访问延迟
常有人看到 eMMC / UFS 标称「数 Gb/s」就以为它随机读也快,其实那是顺序吞吐。随机小读仍要走过「命令寻址 + 页读出 + ECC + 协议打包」的完整路径,单笔延迟还是微秒级。带宽高解决的是「大块数据搬得快」,延迟低解决的是「指哪打哪快」——NOR 赢在后者,NAND 赢在前者。选型时把这两个指标分开看,才不会在「接口很快」的错觉里选错。
E.12 SPI NAND 为何仍需 NAND 栈
SPI NAND 只是把 NAND 的「读页 / 写页 / 擦块」命令封装进 SPI 帧,对外少引脚、易布线;但它内部的阵列仍是串联 NAND,仍然需要 ECC、坏块管理、可能的磨损均衡。很多 MCU 没有现成 NAND 栈,于是要么外接带控制器的桥(如 SD NAND / 专用 NAND 控制器),要么在固件里自己实现一套精简栈。所以「用 SPI NAND 省事」只对硬件布线成立,对软件复杂度不成立——它依然 XIP 不了,也依然需要管理。
E.13 eMMC / UFS 把管理藏到哪里
eMMC 与 UFS 内部集成了 NAND 加一个控制器,把坏块表、磨损均衡、垃圾回收、ECC、FTL 全部封在芯片里,对外只暴露「逻辑块读写」这种简单接口。对主机来说,它像一个「不会坏的、可直接寻址的大存储」——代价是你看不到内部细节、坏块与寿命由厂家固件决定。这与「裸 NAND + 主机栈」是同一件事的两种分工:管理责任从主机转到控制器。选型时要想清楚你愿不愿意把这部分交给芯片厂。
E.14 选型时的隐性成本
除了单位比特成本,还要算隐性账:NOR 上手快、几乎零管理、调试直观,适合小团队快速量产;裸 NAND 便宜但需要完整软件栈、验证周期长;eMMC / UFS 开箱即用但单价高、且被厂家固件「黑盒化」。另外 NAND 行情周期性强、价格易波动,NOR 更平稳。把这些「非硅成本」加进总拥有成本,有时会让「便宜的 NAND」在中小批量的项目里并不便宜。第 12 章的决策框架正是为了把这笔账算清楚。
E.15 与本系列其他主题的衔接
本文聚焦「NOR 与 NAND 的架构差异」,是存储技术探讨的入口篇。要往下钻,推荐顺序:先看《NAND 存储单元与 3D NAND》,把页 / 块 / P/E / 多层堆叠的物理常量讲透;再看《NAND 干扰机制与数据保持》,理解 NAND 为何必须配 ECC 与刷新;最后看《FTL 映射与写放大》,搞清 NAND 侧软件开销从何而来。三篇合起来,正好补齐本文「管理开销」一节里被略过的底层细节。
E.16 一表速判你的项目该用哪种
最后给一个极简判断:① 要上电直接取指 / 存关键固件 → 选 NOR(SPI NOR 最省引脚);② 要存 OS 镜像或大文件且不在乎 XIP → 选 NAND(eMMC / UFS 最省心,裸 NAND 最便宜);③ 引脚极少又要比 NOR 大的容量 → SPI NAND / SD NAND(但要准备 NAND 栈);④ 高性能移动主存 → UFS。记住一句话:「随机取指归 NOR,批量吞吐归 NAND,中间地带看控制器」,绝大多数选型都能落到这句里。
E.17 片上执行与缓存的协同
NOR 支持 XIP,但现代处理器并不会每条指令都去 NOR 上取——取指后照样进 L1/L2 缓存,热点代码跑在缓存里,NOR 只承担「冷启动」和「缓存未命中」的直读。所以 NOR 的纳秒级随机读,真正收益体现在启动阶段和零散跳转;纯顺序的大段执行,缓存会把它盖掉。理解这一点,就不会神话 XIP 的全程加速,也能更客观地比较「NOR XIP」与「NAND 加载到 RAM 后执行」在稳态下的差距。
E.18 启动时间差异的真实来源
上电到「第一条用户代码运行」的延迟,NOR 方案通常远短:因为它可直接取指,BIOS / Bootloader 原地执行;NAND 方案要先由片内 ROM 或一级 Boot 把镜像搬进 RAM 再跳过去,多了「读整镜像 + 校验 + 搬运」几步。镜像越大、RAM 越慢,这段差距越明显。这也是为什么「启动速度是硬指标」的场景(工控、汽车、通信设备)几乎都把引导放在 NOR 上。
E.19 为什么常见「NOR 引导 + NAND 应用」
这是嵌入式最经典的分工:NOR 小、贵但快且稳,专放 Bootloader 与关键配置;NAND 大、便宜但需要管理,专放 OS 镜像、文件系统与用户数据。上电从 NOR 起,初始化完成后再挂载 NAND 上的大系统。两种介质各司其职,谁也不勉强做自己不擅长的事。本文第 9 章的分工图,本质就是把这套工程常识画清楚。
E.20 A/B 双分区与回滚
固件升级怕「升一半断电变砖」,所以常用 A/B 双分区:一份在跑,一份在写,写完整校验通过再切换。NOR 上做 A/B 简单直白(两块地址各放一份);NAND 上则依赖 FTL / 控制器把「逻辑分区」映射到不同物理块,并配合原子切换标志。无论哪种介质,回滚机制的可靠性都取决于「切换点是否原子」——这又是 NAND 需要管理栈、NOR 直接可做的差别之一。
E.21 安全启动与存储的耦合
安全启动要求「上电第一段代码可信」,因此它必须放在可读且不可被悄悄篡改的介质上。NOR 因可 XIP、内容确定、易于做只读保护,天然适合放验签后的信任根;NAND 镜像要先加载再验签,且内容可被控制器重写,需要额外的完整性校验与防回滚机制。存储介质的选择,会直接决定安全启动的实现复杂度与攻击面。
E.22 写中途掉电的存活差异
NAND 写是「按页写、异地更新」,写到一半掉电,旧页还在、新页不完整,靠日志 / 提交点保证下次起来能恢复——这要求管理栈有掉电保护设计。NOR 按字写,单字节写入是原子的,小改不易留半成品,但大块固件更新同样需要事务化。所以「抗掉电」不是介质单方面决定的,而是「介质特性 + 软件事务设计」共同的结果,NAND 更依赖后者。
E.23 低功耗与休眠模式的差异
并联 NOR 单元独立,进入深度休眠后漏电低、唤醒快;NAND 阵列密、控制器复杂,待机电流可能更高,但「大容量 + 控制器」也让它能做更激进的省电分级(关阵列、留控制器)。具体数值随器件差异很大,本文只给量级;选型时若功耗是硬约束,务必以目标型号的 datasheet 实测为准,不要凭架构类别下结论。
E.24 温度对两者的不同影响
电荷存储对温度敏感:高温加速泄漏、低温改变阈值判读窗口。NAND 因电荷更少、ECC 更重,温度裕度更紧,工业级 / 车规级器件要靠更强 ECC、更宽电压与更严筛选来兜底;NOR 单元大、电荷多,温度鲁棒性通常更好。这也是汽车、航天等宽温场景仍偏爱 NOR 存关键代码的原因之一。
E.25 工业级与车规级的可靠性账
工业 / 车规应用看重的是「十年不坏、宽温可跑、批次一致」。NOR 在这方面历史久、数据成熟;NAND 要靠控制器与管理算法把可靠性「堆」出来,且受行情与代际切换影响大。若项目生命周期要求十年以上供货与一致性,NOR 的长期可获取性优势会被放大,不能只看单位比特成本这一项。
E.26 OTA 升级的存储布局
空中升级(OTA)要求设备上有「当前区 + 备用区 + 下载缓冲 + 备份」。NOR 容量小,往往只能放得下 Bootloader 与小块固件,大镜像的 OTA 要借助外部 NAND / eMMC;NAND 容量大,天然适合做差分包缓存与多版本共存。设计 OTA 时,先算清「镜像尺寸 × 副本数」再选介质,比先定介质再塞镜像要稳妥得多。
E.27 坏块率与良率的工程折中
NAND 出厂允许坏块,本质是把「良率压力」转成「管理成本」:芯片厂不必为 100% 无坏块牺牲良率,成本随之下降,代价由坏块表承担。NOR 追求近乎零坏块,良率成本更高,单价也更高。这是同一种硅工艺在不同「质量策略」下的两种出路,理解它就能看穿「NAND 便宜」背后的产业逻辑。
E.28 多通道与多 Die 并行
NAND 的吞吐不仅靠页大,还靠「多通道 / 多 die 并行」:把数据条带化到多个独立通道同时读写,带宽成倍增长。这正是 SSD 与 eMMC / UFS 高吞吐的来源。NOR 一般单通道、随机读为主,不靠并行堆带宽。所以「NAND 顺序吞吐高」是结构 + 架构双重作用的结果,不是单一因素。
E.29 缓存读与连续读的优化
NAND 顺序读时,页缓冲 + 缓存读(read cache)能让「下一页」在后台提前搬好,连续吞吐接近接口上限;但一旦发生随机跳转或跨块,缓存失效,又要重走完整路径。所以 NAND 的性能高度依赖「访问模式是否友好」。把随机小读误当成连续读去估性能,是 NAND 选型最常见的翻车点。
E.30 ECC 引擎的算力开销
强 ECC(尤其 LDPC)不是免费午餐:它需要控制器里有专门的编解码引擎,消耗面积、功耗与延迟。NAND 越先进,ECC 越重,控制器越复杂,这部分成本最终体现在芯片价格与功耗上。NOR 几乎免 ECC,自然也免了这套引擎。把「ECC 引擎」算进 NAND 的总账,才是对「便宜」二字的诚实评估。
E.31 选型检查表(硬件工程师版)
给硬件同学的快速核对:① 是否需要上电直跑代码?是 → NOR。② 总容量是否超过 NOR 上限(MB~低 GB)?是 → NAND。③ 引脚是否极度紧张?是 → SPI NOR / SPI NAND / SD NAND。④ 是否需要大文件存储?是 → eMMC / UFS / 裸 NAND。⑤ 是否有 NAND 管理栈(或愿用带控制器的形态)?否却选 NAND → 改为 NOR 或 eMMC。逐项打勾,结论多半自现。
E.32 选型检查表(固件工程师版)
给固件同学的核对:① 你能维护坏块表 / 磨损均衡 / GC 吗?不能 → 用 eMMC / UFS,别碰裸 NAND。② 是否需要 XIP 简化链接脚本?需要 → NOR。③ 升级是否需要断电保护的事务?需要 → 确认 FTL / 控制器支持。④ 是否要算 ECC 与 OOB 布局?要 → 准备 NAND 驱动。固件侧的工作量,往往比硬件原理图更决定项目周期。
E.33 常见故障现象与归因
现场问题多半能归因到架构:① 启动偶尔卡死 → 查 NOR 取指时序 / 配置。② 跑久了某块数据损坏 → NAND 坏块 / 干扰 / 保持到期,查坏块表与刷新。③ 写越写越慢 → 写放大 / GC 抖动,查 FTL。④ 升级变砖 → 切换非原子 / 掉电,查 A/B 事务。把现象往「NOR 确定性 / NAND 需管理」上靠,定位会快很多。
E.34 与 SRAM / DRAM 的层级关系
存储是个层级:SRAM 最快最小最贵,DRAM 次之,NOR/NAND 是非易失的「下层」。NOR 填补了「掉电不丢、又能直接跑」的缝隙;NAND 填补了「掉电不丢、容量巨大、但要管理」的缝隙。它们和易失内存不是替代关系,而是「运行态用 RAM、持久态用 NOR/NAND」的互补。选型时别把 NAND 当成 RAM 的廉价替身,两者职责不同。
E.35 为何没有「NAND 直接跑代码」的成功案例
理论上给 NAND 配足够强的控制器,也能「看起来 XIP」,但代价是:每取指都要过控制器、走页读出与 ECC,延迟与确定性都达不到代码执行的要求,且功耗与成本飙升。与其这样,不如直接加一块 RAM 把镜像加载进去——这正是所有 NAND 系统的现实做法。所以「NAND 跑代码」在工程上是个伪命题,NOR 的 XIP 地位因此长期稳固。
E.36 容量规划的经验法则
粗略经验:引导 + 配置 + 小固件,几十 MB 内用 NOR 最省心;OS 镜像与文件系统,几百 MB 到数 GB 用 eMMC / 裸 NAND;媒体与大数据库,GB 级以上用 UFS / 大容量 NAND。边界处(几百 MB)可用 SPI NAND / SD NAND 过渡,但要接受管理栈成本。记住「NOR 管小、NAND 管大」的主线,容量规划就不会乱。
E.37 成本建模的简化方法
算总账时列四项:① 介质单位比特成本;② 控制器 / 管理栈的开发摊销;③ 验证与生命周期维护成本;④ 供应波动风险。NOR 在 ① 高、②③④ 低;裸 NAND ① 低、②③④ 高;eMMC/UFS ① 中、②③④ 低。中小批量项目里,NAND 的 ②③④ 常常把 ① 的优势吃光——这就是为什么「便宜的 NAND」不一定真便宜。
E.38 验证与量产的注意事项
量产时两类介质的关注点不同:NOR 重在时序、信号完整与写入校验;NAND 重在坏块扫描、ECC 强度验证、磨损与干扰压力测试、掉电鲁棒性。NAND 的验证项目明显更多,周期更长。把这些测试成本计入项目计划,才不会在量产前夜被「NAND 还要补一堆测试」吓到。
E.39 技术演进的下一步
NAND 仍在沿「更多层、更大页、更强 ECC、更智能控制器」演进,容量与吞吐继续上探;NOR 则靠接口提速(Octal SPI、HyperBus)和可靠性守住 XIP 阵地,容量提升有限但够用。两者不是「谁取代谁」,而是沿各自结构红利继续分化。理解拓扑,就能预判它们五年后的相对位置基本不变。
E.40 给新人的一句话心法
新手最容易犯的错,是把「快 / 慢」「贵 / 便宜」当成介质的固定标签。请记住:NOR 的强项是「随机取指确定快」,NAND 的强项是「批量吞吐便宜大」;前者因并联而生,后者因串联而来。所有差异都能从「阵列怎么连」推出来。把这一条刻进脑子,你就能自己推导出本文没写的下一百个细节。
E.41 为什么「擦除慢」是 NOR 的老毛病
NOR 按块擦除,块尺寸往往较大且擦除电压高、时间长,典型值到数百毫秒级,比 NAND 的擦除慢一至两个数量级。这不影响它的随机读强项,却让「频繁改写的配置区」放 NOR 时很别扭。所以即便用 NOR 存固件,也常把需要频繁改的小变量挪到 EEPROM 或 NAND 的某块,避免反复擦 NOR 大块。
E.42 编程电压与电荷泵的代价
写 / 擦都要高压,芯片内部靠电荷泵升压。NOR 因浮栅单元、按字编程,泵与加压路径更碎;NAND 按页集中编程,泵利用率高。这也是 NAND 写吞吐更高的底层原因之一。电荷泵的尺寸与功耗,是两类器件数据手册里都值得留意的一行参数。
E.43 页 / 块尺寸的演进趋势
NAND 的页从早期 512B 一路涨到 2KB、4KB、16KB,块也相应变大。页越大连续吞吐越高,但「小改也要搬一页」的写放大也更痛。NOR 没有这种页概念,按位 / 字节即可写,天然没有写放大。理解页尺寸的 trade-off,才能在「吞吐」与「小写下效率」之间选对器件。
E.44 OOB / Spare 区是干什么的
NAND 每页都带一块不计入用户容量的 OOB(Spare)区,用来存 ECC 校验码、坏块标记、逻辑—物理映射元数据。它是「NAND 必须管理」的物理证据:没有 OOB 就没地方放 ECC 与映射。NOR 没有 OOB,写下去的就是数据本身,简单直接。OOB 大小随 ECC 强度增长,是页开销的一部分。
E.45 逻辑地址与物理地址的脱钩
NAND 上逻辑块号(LBA)和物理块号不是一一对应的,这层「脱钩」正是 FTL 的核心:它让坏块、磨损、GC 都对上层透明。NOR 几乎总是物理直映,写哪个地址就是哪个地址。脱钩带来灵活性也带来复杂度——所有 NAND 的「智能」,都建立在这层映射之上。
E.46 为什么 NAND 不能直接覆盖
浮栅 / 电荷阱单元要先擦(清空电荷)才能重写,而擦的最小单位是块,远大于写单位页。所以「改一页」必须写到别处、旧页作废,不能直接原地覆盖。这就是异地更新的根源,也是 GC 与写放大的由来。NOR 虽也需擦,但按字编程粒度细,小改代价小得多。
E.47 读重试(Read Retry)是什么
当 NAND 阈值因干扰 / 保持漂移,用标准读电压读不出时,控制器会微调读电压、多次重试,这就是 read retry。它需要器件提供多组候选电压参数,并由控制器实现重试逻辑。NOR 几乎没有这回事。read retry 是 NAND「原始不可靠、靠手段救回来」的典型体现,也是控制器固件的重要组成。
E.48 数据完整性的多层防线
NAND 的可靠性是「堆」出来的:底层靠更强 ECC 纠错,中间靠坏块表与刷新规避坏位,上层靠 RAID 类冗余(如企业级 UBER 压到极低)。NOR 靠单元本身的隔离与稳定,几乎单层就够。把 NAND 的可靠性成本和 NOR 比,要算的是「整条防线」而非「单点误码率」。
E.49 控制器固件与「黑盒风险」
eMMC / UFS 把 FTL、磨损均衡、GC、ECC 全封进控制器固件,主机看不见。好处是简单,风险是「行为不可控」:写入放大、掉电策略、坏块处理都由厂家决定,你只能相信它的规格。若项目对存储行为有强约束(如确定延迟、可预测寿命),裸 NAND + 自研栈或 NOR 反而更可控。
E.50 何时该自研 NAND 栈
选裸 NAND 通常意味着要自己写或移植一套 NAND 栈(BBT、ECC、磨损均衡、GC、FTL)。只有当「成本或形态」裸 NAND 是唯一解、且团队有相应能力时才值得;否则优先 eMMC / UFS 这类「交钥匙」形态。自研栈的开发与验证成本,常常超过它省下的介质差价。
E.51 SPI NOR 的极限与替代
SPI NOR 引脚少、易布线,是嵌入式引导首选,但接口带宽受限,大固件加载慢。需要更快 XIP 时,可上 Octal SPI、HyperBus 等高速 NOR;需要更大容量时,则只能转向 NAND 系。SPI NOR 的位置很稳:小固件、配置、引导,几乎没有对手。
E.52 并行 NOR 为何仍有一席之地
当随机读带宽和确定延迟是硬指标(如某些实时、图形缓冲场景),并行 NOR 的地址 / 数据总线直读仍比串行 NOR 快。它引脚多、占板面积大,但在「速度优先于引脚」的场合无可替代。并行 NOR 没被串行 NOR 完全淘汰,正是因为 XIP 带宽这一点。
E.53 裸 NAND 与 managed NAND 的取舍
裸 NAND(SPI / PPI / ONFI / Toggle)把管理责任全甩给主机;managed NAND(SD NAND / eMMC / UFS)把管理收进芯片。前者便宜、灵活、可控,后者省心、开箱即用。选哪边,本质是「把复杂度放在自己这边,还是放在芯片厂那边」的权衡。
E.54 封装对选型的影响
同容量下,NAND 因可堆叠,封装选择多(BGA、TSOP、eMMC 模块);NOR 容量小,封装相对传统。板面积紧张时,eMMC / uMCP / ePoP 这类高集成形态能把 RAM 与存储叠在一起省空间;NOR 一般单芯片独立。封装往往是「系统级」选型的一环,不只看介质。
E.55 功耗预算怎么拆
存储功耗分「工作峰值」「待机」「休眠」三档。NAND 编程 / 擦除峰值高、待机因控制器略高;NOR 峰值与待机都较低。电池设备要同时看三档:NOR 在长待机 + 偶发读取的场景更省;NAND 在大块连续读写时单位数据能耗更低。功耗结论必须结合访问模式,不能只看峰值。
E.56 信号完整性与布线
NOR 直读、时序宽松,布线友好;高速 NAND(eMMC / UFS / 并行)对阻抗、走线长度、电源完整性更敏感,layout 门槛高。SPI 系(SPI NOR / SPI NAND)最省心,适合层数少、经验浅的团队。把「布线难度」计入选型,能少踩很多硬件坑。
E.57 软件生态与驱动成熟度
NOR 的驱动几乎是「写寄存器 + 读内存」,各 RTOS / 裸机都现成;NAND 驱动(尤其裸 NAND)要处理 ECC、坏块、FTL,生态碎片化。eMMC / UFS 则靠标准协议,OS 内置支持好。软件生态成熟度,常是「能不能按期量产」的隐形决定因素。
E.58 供应与替代料策略
NOR 生命周期长、规格稳定,替代料好找;NAND 代际切换快、容量档位多变,替代时要重测管理栈行为。对长生命周期产品(工业、汽车),供应连续性要提前规划,避免某代 NAND 退市被迫改板。把「可替代性」写进器件选型表,是老工程师的常识。
E.59 安全性:写保护与锁定
关键固件怕被误改或恶意改写,NOR 普遍支持块级写保护 / 锁定,配置简单;NAND 的写保护靠控制器与权限逻辑,更依赖软件。对「一旦写坏就变砖」的区域,NOR 的硬件写保护更让人放心,这也是引导代码偏爱 NOR 的隐性理由之一。
E.60 容量密度的物理天花板
平面 NOR 因并联接触,单元面积大,密度天花板低;3D 堆叠对并联结构不友好,所以 NOR 容量难以靠堆层突破。NAND 则靠 3D 堆叠持续加层,密度几乎只受工艺与成本约束。两者密度命运的不同,根源仍是「并联 vs 串联」这条拓扑分水岭。
E.61 为什么 NAND 适合做文件系统
文件系统需要大容量、按块管理、可磨损均衡,正好契合 NAND + FTL 的能力;NAND 把自身缺陷(坏块、写放大)藏进 FTL,向上呈现「类磁盘」接口,文件系统可直接跑。NOR 容量小、按字节写,更适合存「裸数据 / 镜像」,而不是承载大型文件系统。
E.62 为什么 NOR 适合存配置与表
配置、校准表、小脚本这类「小、要随机改、要直读」的数据,放 NOR 最顺手:改一个字节就是改一个字节,不需要页搬运,也不需管理栈。若强行放 NAND,光为改几个字节就要走整页读改写,得不偿失。这类「小随机写」是 NOR 的舒适区。
E.63 混合存储的典型框图
一块典型嵌入式板:片内 BootROM → 外部 SPI NOR(引导 + 配置)→ 外部 eMMC / NAND(OS + 应用 + 数据)。NOR 管「起得来」,NAND 管「装得下」。两者通过处理器的存储控制器并联,各走各的总线。第 11 章的参考架构,就是这个经典框图的具体化。
E.64 性能测试要避免的坑
测 NAND 性能别只跑顺序大块,那会掩盖随机小读的延迟尖峰;测 NOR 别只跑随机读,那会掩盖它写 / 擦很慢。正确做法是按真实负载画像混合测试,并用百分位数(p95 / p99)看尾延迟。NAND 的「平均快、偶尔很慢」最容易在实测里翻车。
E.65 寿命估算的粗略方法
估算 NAND 寿命:总写入量 / 每日写入量 = 天数,再除以擦写次数上限,看是否够项目周期;配合磨损均衡,实际寿命接近「总写入耐力 / 日均写入」。NOR 寿命看按字写次数,一般极长。把寿命算成「天数」而非「次数」,更容易和项目周期对上。
E.66 何时该放弃 NAND 选 NOR
出现以下任一,优先考虑 NOR:① 必须 XIP;② 数据极小且频繁随机改;③ 启动延迟是硬指标;④ 团队无力维护 NAND 栈;⑤ 要求宽温 / 长生命周期稳定。反过来,容量大、顺序吞吐优先、可接受管理栈,才轮到 NAND。用这套「反向清单」能快速排除错选。
E.67 为何市场总说「NAND 便宜」
「NAND 便宜」说的是单位比特成本,且建立在「大容量摊薄管理成本」之上。对小容量、要 XIP、要低管理负担的场景,NOR 的「总拥有成本」反而可能更低。市场上那句口号省略了前提,理解前提才不会在小项目里被它误导。
E.68 与 DRAM 搭配的取舍
NOR XIP 减少了对 RAM 的依赖(代码可原地跑),对 SRAM / DRAM 容量紧张的小 MCU 友好;NAND 方案必须先有 RAM 承载镜像,对 RAM 要求更高。所以「RAM 小的系统用 NOR、RAM 大的系统用 NAND」也是一种自然分工,和容量、XIP 一脉相承。
E.69 现场可维护性
设备部署后,NOR 上的配置可用简单工具直读直写,现场排查方便;NAND 上的内容经过 FTL 与 ECC,肉眼不可读,排查要靠专用工具或控制器接口。对「现场要能手动改配置」的设备,NOR 的可维护性优势明显。
E.70 给技术决策的落地模板
把前面的检查表固化成一张决策表:列是「XIP 需求 / 容量 / 引脚 / 管理栈能力 / 寿命 / 功耗 / 成本」,行是候选形态,逐格打勾加权。多数项目填完表,最优解会自动浮现,争论也会从「我觉得」变成「数据说」。本文第 12 章的决策框架,就是这个模板的浓缩版。
E.71 误区汇总:三条最顽固的错
再强调一次三个误区:① NOR 不一定总比 NAND 快——它只在随机取指上快,写 / 擦反而慢;② NAND 坏块不是「质量差」,而是「被管理出来的常态」, managed 形态对上层透明;③ SPI NAND 不能 XIP——它只是 NAND 的 SPI 包装,阵列本质没变。记住这三条,能避开八成选型坑。
E.72 从架构推导,而非背参数
参数会变(制程、接口、容量档位年年更新),但「并联 → 随机可达、串联 → 批量高效」这条拓扑逻辑不变。本文刻意只给量级、标「典型值」,正是希望你记住推导方法而非死记数字。下次遇到新形态,先问「它背后是哪种阵列」,答案就自己长出来了。
E.73 给硬件评审的提问清单
评审别人方案时,专问这几句:① 引导放哪、为什么能 XIP?② 大容量数据走哪、管理栈谁提供?③ 坏块 / 磨损 / GC 谁来管?④ 掉电能不能恢复?⑤ 寿命按真实负载算过吗?⑥ 供应与替代料规划了吗?六问过完,方案虚实立判。
E.74 给固件评审的提问清单
从软件侧追问:① ECC 强度与 OOB 布局对吗?② 坏块表初始化与更新可靠吗?③ 磨损均衡覆盖静态数据吗?④ GC 会卡顿 / 写放大爆表吗?⑤ 升级事务原子吗?⑥ 掉电测试覆盖了吗?NAND 方案的可靠性,基本就藏在这六问的答案里。
E.75 收尾:一句话带走全文
如果把整篇浓缩成一句:NOR 与 NAND 的所有差别,都源于「单元是并联还是串联」这一个拓扑选择;它决定了谁能 XIP、谁便宜大、谁要管理栈。带着这句话回看第 1 章的阵列图,你会发现全文没有一处是孤立的结论,而是一条逻辑链的必然展开。
E.76 再谈「快」:换个角度定义
如果「快」定义为「第一条指令多快出来」,NOR 赢;定义为「1GB 数据多快搬完」,NAND 赢;定义为「改一个配置多快生效」,NOR 赢;定义为「大批量写入吞吐」,NAND 赢。所以讨论快慢前,先定义你测的是哪个动作——这是避免选型吵架的第一步。
E.77 再谈「便宜」:换个口径算
如果「便宜」定义为每比特单价,NAND 赢;定义为总拥有成本(含软件、验证、生命周期),小项目里 NOR 可能更便宜;定义为大容量场景的落地价,NAND 碾压。把口径写进需求文档,价格争论就变成可计算的账。
E.78 为什么没有「万能介质」
并联与串联是互斥的拓扑取舍:要随机可达就得并联、付出面积;要高密度就得串联、付出管理。物理上没有「既要又要」的单元结构,所以存储永远分层、各司其职。承认这一点,就不会再执着于找一种「通吃」的介质。
E.79 给项目经理的一页纸
项目经理不必懂电荷阱,但要懂三件事:① NOR 简单贵小、NAND 复杂便宜大;② NAND 省下的硅钱会部分变成软件与验证成本;③ 启动 / XIP 需求直接指向 NOR。把这三句转给硬件与固件,立项讨论能少走很多弯路。
E.80 给采购的一页纸
采购看两点:单价与供应。NAND 单价随行情波动大、代际切换快,需做替代料预案;NOR 规格稳、生命周期长,替代容易。大批量锁价时,NAND 的窗口期比 NOR 更敏感,早锁早安心。
E.81 给测试的一页纸
测试 NOR 重时序与写入校验;测试 NAND 重坏块扫描、ECC 验证、干扰压力、保持老化、掉电鲁棒。NAND 的测试用例明显更多,排期要留足。把这套清单写进测试计划,量产前才不会手忙脚乱。
E.82 一个常见反模式
反模式:为「省一颗 NOR」把引导也塞进 NAND,结果启动慢、掉电易砖、安全启动难做,最后又不得不加回 NOR。省下的一颗料钱,远不够填回调试与返工成本。该用 NOR 引导的地方,别轻易省。
E.83 另一个常见反模式
反模式:为「图省事」在大容量项目用裸 NAND 却不写管理栈,靠「先写后读校验」硬扛,结果坏块、磨损、GC 全靠临时补丁,版本越迭代越脆弱。要么上 managed NAND,要么认真写栈,没有中间偷懒路线。
E.84 把结论写成检查清单
把全文结论压缩成一张检查清单贴在工作台:① 要 XIP 吗?② 容量多大?③ 引脚多紧?④ 有 NAND 栈吗?⑤ 寿命多久?⑥ 掉电要恢复吗?⑦ 成本算总账还是单价?七问答完,形态基本自动锁定。
E.85 本文没覆盖的边界
本文聚焦阵列架构差异,未展开:具体器件电气参数、各接口的完整命令时序、控制器固件实现细节、以及新型存储(PCRAM / ReRAM / MRAM)对传统 NOR/NAND 的潜在替代。这些属于更专门的主题,需要时另立文档深究。
E.86 给读者的进阶路径
读完本文,建议路径:本篇(架构差异)→《NAND 存储单元与 3D NAND》(物理常量)→《NAND 干扰与数据保持》(可靠性机理)→《FTL 与写放大》(软件开销)。四篇连读,NOR/NAND 选题将不再有盲区。
E.87 一句话记住拓扑
并联 = 每个单元都有「直达车票」,所以能随机取指、贵、小;串联 = 单元「串成一列车」只留车头车尾,所以能高密度、便宜、要大块搬。记住这趟车的比喻,90% 的 NOR/NAND 差异你都能自己解释。
E.88 收尾彩蛋:三个「反直觉」
三个反直觉的事实留作彩蛋:① NAND 顺序读可以很快,但随机读很慢——快慢并存;② NAND 便宜,但小项目总账未必便宜——贵在隐性;③ SPI NAND 名字带 NAND 又走 SPI,却依然不能 XIP——包装不等于本质。戳破这三条,你就超过了大多数「听过 NOR/NAND」的人。