4、NOR Flash与XIP:为什么它天生适合原地执行

讲XIP,绕不开NOR Flash。说实话,我最早接触嵌入式系统时,对Flash的分类没什么概念,觉得能存程序就行。直到有一次做一款工业控制器,需要上电瞬间响应,我才真正搞明白:为什么前辈们都在强调“必须用NOR Flash”。

NOR Flash的结构和特性,决定了它和XIP是天生一对。今天咱们就把它掰开揉碎,讲清楚。

4.1 NOR Flash的内部结构:更像一张“内存网”

NOR Flash的存储单元是并联的。每个存储单元的一端接地,另一端连到字线(Word Line)。这种结构,说白了就是每个bit都有一个独立的“通道”连到数据总线上。你想想看,这像不像一张矩阵网?

我个人习惯把这结构比作一个老式电话交换台。每个存储单元就是一个小接线口,CPU想读哪个地址,直接拨号(地址线)就能连上对应的口,拿到数据。

关键点来了:随机访问。CPU给一个地址,NOR Flash能在几十纳秒内直接读出该地址上的数据。不需要像NAND Flash那样先读一整页,再慢慢找。

核心区别:NOR Flash的读操作,跟SRAM几乎一样快。这是它能支持XIP的根本原因。

4.2 随机访问特性:直接寻址的底气

什么叫“随机访问”?就是你可以随意指定一个地址,直接读,不依赖任何“前序操作”。NOR Flash的地址线和数据线是独立分开的,跟处理器总线天然对接。

我做过的项目中,评估过不少Flash方案。有一次选型,团队里有人想用NAND Flash配合XIP模拟器,结果发现每次读指令都要先加载一页数据到SRAM,延迟大得离谱。你想想,如果CPU取指要等几百微秒,这系统还怎么跑?

NOR Flash的随机访问时间通常在70ns到100ns之间。虽然比SRAM慢一点(SRAM可以做到10ns以内),但对于大部分MCU和低端应用处理器来说,完全够用。配合Cache效果更好。

存储介质 随机访问时间(典型值) 是否支持直接取指
SRAM 10-20ns ✅ 是
NOR Flash 70-100ns ✅ 是
NAND Flash 20-50μs(页加载) ❌ 否
DRAM 50-80ns ✅ 是(需刷新)

嗯,这里要提醒一下:NOR Flash的随机访问时间会受温度影响。我在-40℃环境下测过,读延迟会多出10-20ns。设计时最好留余量。

4.3 为什么NOR Flash适合XIP?三个字:无缝映射

XIP的核心要求是:CPU发出的取指地址,能直接命中存储介质上的物理地址。不需要软件搬运,不需要DMA干预。

NOR Flash的地址线是完整的。你给它一个28位的地址,它直接返回该地址的数据。这意味着什么?意味着它的地址空间可以被CPU的地址总线直接覆盖。

我以前给一个同事解释这事时,画了一张图。现在用SVG给你示意一下:

NOR Flash 在 XIP 系统中的位置与数据流 CPU核心 取指单元 指令缓存 (可选) 存储控制器 地址/数据桥接 NOR Flash 0x60000000 地址 / 数据总线(32位) 内存映射地址空间 0x60000000 - 0x60FFFFFF(XIP区域)
经验之谈:图中虚线表示地址映射关系。实际项目中,NOR Flash的片选信号(CS#)会和CPU的内存控制器直接相连。你配置好MMU或静态分区表,Flash就“挂”在总线上,地址对齐后,CPU就能直接取指。

4.4 NOR Flash的缺点:别只看好的一面

没有完美的存储介质。NOR Flash虽然读快,但写和擦很慢。一个块擦除可能要几百毫秒。

  • 写速度:按字节写还行,但大块数据写入很慢。我见过有人试图在NOR Flash上做日志系统,结果擦写一次要等很久,系统卡死。
  • 容量限制:NOR Flash的存储密度低。同成本下,NAND Flash容量大得多。如果你要存大文件、多媒体数据,NOR Flash不合适。
  • 寿命问题:典型的NOR Flash擦写次数在10万次左右(有些标称100万次),但频繁写入的话,还是得加磨损均衡。
避坑提示:我曾经接手过一个项目,同事把NOR Flash当成数据记录器用,每个周期都写几个字节。结果三个月后,Flash那块的存储单元全坏了,程序也跑飞了。记住:NOR Flash适合存“相对静态”的代码和关键配置。频繁写入的场景,请用EEPROM或NAND Flash配合FTL。

4.5 总结:NOR Flash与XIP的最佳组合

说白了,XIP就是利用了NOR Flash的随机访问特性。CPU取指时,发出地址,NOR Flash立刻响应。不用搬数据,不用等页面缓存。

我个人的观点是:如果你的系统对启动速度有硬要求(比如汽车仪表、工控PLC),NOR Flash + XIP几乎是唯一的选择。虽然成本比NAND高一些,但换来的实时性和可靠性,值。

下边把这章的要点再列一下:

特性 对XIP的影响
随机访问 CPU直接寻址,无需加载页
独立地址/数据总线 与处理器总线无缝对接
读延迟低(~100ns) 满足主流MCU取指时序
写入慢、擦除慢 不适合频繁写,适合放代码
容量小 适合中小规模固件

嗯,NOR Flash这部分就讲到这里。