本章核心要点: NOR 和 NAND 的架构决定了它们的命运——一个给 XIP 当主角,一个给大容量当仓库。QSPI 读速度的瓶颈往往不在 Flash 芯片本身,而在 PCB 走线和控制器配置。我会把这些坑一个个抖出来。
4. Flash存储器基础:NOR vs NAND,QSPI Flash的读速度与延迟特性
4.1 为什么嵌入式系统离不开这两种 Flash?
说到嵌入式系统的非易失存储,你脑子里蹦出来的八成是 NOR 和 NAND。我早年做工控板时,一直以为 NOR 是“落后”的技术,直到某次客户的固件需要从 Flash 直接 XIP 执行……嗯,那一次我彻底明白了它们各自的位置。
简单说,NOR 是“内存型”Flash——它支持随机读取,读延时低,每个字节都能被 CPU 直接寻址。NAND 是“块设备型”Flash——读要一页一页来,写前还得先擦除整个块。
个人经验: 有一次我为了省成本,把原来 NOR 的方案改成 NAND + 启动引导,结果系统冷启动时间从 50ms 变成了 500ms。老板盯着我看的眼神——你懂的。
4.2 NOR 与 NAND 的硬核对比
我把两者的关键差异拉了一张表,你一看就明白为什么方案选型时绝不能「差不多就行」。
| 维度 | NOR Flash | NAND Flash |
|---|---|---|
| 存储单元结构 | 每个存储单元与位线并联,类似或非门电路 | 多个单元串联,类似与非门电路 |
| 随机读取 | 支持,地址线直接映射到内部阵列 | 不支持随机字节寻址,必须以页为单位 |
| 读延时(典型) | ~80ns(随机访问) | ~25μs(首次访问)+ 后续每字节约 25ns |
| XIP 支持 | 天生支持,CPU 可直接取指令 | 不直接支持,需加载到 RAM 再执行 |
| 写入速度 | 慢(~200KB/s) | 快(~10MB/s,但需先擦除) |
| 擦除粒度 | 块/扇区,通常 64KB~256KB | 块,通常 128KB~2MB |
| 寿命 | 约 10 万次擦写 | 约 1 万~10 万次,随制程提升会降 |
| 密度 / 成本 | 低密度(≤512Mb),成本高 | 高密度(可达 2Tb+),成本低 |
避坑指南: 我曾经在一个高速信号采集的项目里,想用 NAND 做代码就地执行——结果跑不了。CPU 一取指就卡死,原因就是 NAND 的随机访问延时太大,而且没有地址线直接映射。后来老老实实换成 SPI NOR + QSPI 接口才解决。
4.3 QSPI Flash 的读速度与延迟——数字游戏还是硬指标?
你可能会说:“QSPI 不是最多能跑到 100MHz 吗?算下来带宽有 400Mbps 了,还不够快?” 嗯,账不是这么算的。
QSPI Flash 的读操作包含三个阶段:
- 命令/地址发送: 至少需要 8 个时钟周期的命令码 + 24 到 32 个时钟周期的地址(四线模式下可缩短)。
- 等待期(dummy cycles): 绝大多数 QSPI NOR Flash 在读操作后需要 6~10 个 dummy cycle 让内部阵列准备好数据。你想想看,这个 dummy 周期在低频下可能无所谓,但在 100MHz 下,10 个周期就是 100ns 的纯浪费。
- 数据传输: 四线模式下每个时钟传 4 个 bit。
所以实际有效带宽不是引脚频率乘以 4,要扣除协议开销。我测过一款国产 QSPI NOR,标称 133MHz 四线读,实际连续读吞吐只有约 420Mbps。为什么?因为内部阵列读延时卡在 80ns 左右,dummy cycle 设成 10,效率就被拉下来了。
实操要点: 配置 QSPI 控制器时,dummy cycle 的值一定要核对 Flash datasheet 里的最大工作频率。我曾经偷懒用了默认值,结果在高低温测试时,高温侧读取偶发错误——就是因为 dummy cycle 留少了,内部摆幅不稳定。
4.4 延迟的构成——你以为是 Flash 慢,其实是总线在等
读延迟不只是 Flash 芯片内部的 tAC(地址到数据输出时间)。整个路径包括:
- 命令封装延迟: QSPI 控制器把读命令和地址包装成帧,需要几个时钟。
- 信号传输延迟: PCB 走线带来的传播延时(每英寸约 150ps),在高速设计里可能差几十 ns。
- Flash 内部延迟: 阵列读取 + 灵敏放大器建立 + dummy cycle。
- 数据回传延迟: SDR/DDR 模式下的边沿对齐与采样窗口。
我曾经用示波器测过一组真实波形——从 MCU 发出读命令到第一个字节出现在 MISO 上,花了大约 160ns(133MHz QSPI)。而芯片手册只给了 tV(命令到数据有效)典型值 80ns。多出来的 80ns 就是协议和 PCB 的贡献。所以做 XIP 时,你的 Cache 命中率必须足够高,否则每次 miss 都要扛 160ns+ 的惩罚。
实话实说: 很多工程师只看主频不看真实延迟。我建议你在硬件调通后跑一个 memcpy 从 QSPI Flash 读到 RAM,然后用逻辑分析仪抓出来算有效带宽。那才是最真实的数据。
4.5 一张图看懂对比与延迟因素
我把 NOR vs NAND 的架构差异,以及 QSPI 读延迟的构成,画成了下面这张图。你可以把它当成选型速查卡。
4.6 小结:选型时的三个灵魂拷问
每次我在方案评审时,都会问硬件和软件同事三个问题:
- 你的代码是就地执行还是拷贝到 RAM? —— 要 XIP,想都别想,必须用 NOR,而且 QSPI 的延迟和 Cache 配合要算清楚。
- 你的持续读带宽要求是多少? —— 如果只是偶尔读配置,100Mbps 都够了;但如果你要做 Flash 内 GUI 显存映射,没 300Mbps 以上会卡成幻灯片。
- 你的 dummy cycle 配置正确吗? —— 把 Flash datasheet 里的 tAC 和 tACC 换算成时钟数,再留 15% 余量。
记住,NOR 和 NAND 本来就不是竞争关系,它们是互补的。你的板子上完全可以同时存在:一颗 QSPI NOR 做启动 XIP,一颗 SD NAND 或 eMMC 做文件系统。我自己最喜欢这种「分工明确」的设计——省心,也好调。
尾声: Flash 的基础讲到这里,下一层我们就要深入 QSPI 协议的具体时序和寄存器配置了。嗯,到时候我会把如何用示波器抓出真正死因的方法也抖出来。