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那样先读一整页,再慢慢找。
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给你示意一下:
4.4 NOR Flash的缺点:别只看好的一面
没有完美的存储介质。NOR Flash虽然读快,但写和擦很慢。一个块擦除可能要几百毫秒。
- 写速度:按字节写还行,但大块数据写入很慢。我见过有人试图在NOR Flash上做日志系统,结果擦写一次要等很久,系统卡死。
- 容量限制:NOR Flash的存储密度低。同成本下,NAND Flash容量大得多。如果你要存大文件、多媒体数据,NOR Flash不合适。
- 寿命问题:典型的NOR Flash擦写次数在10万次左右(有些标称100万次),但频繁写入的话,还是得加磨损均衡。
4.5 总结:NOR Flash与XIP的最佳组合
说白了,XIP就是利用了NOR Flash的随机访问特性。CPU取指时,发出地址,NOR Flash立刻响应。不用搬数据,不用等页面缓存。
我个人的观点是:如果你的系统对启动速度有硬要求(比如汽车仪表、工控PLC),NOR Flash + XIP几乎是唯一的选择。虽然成本比NAND高一些,但换来的实时性和可靠性,值。
下边把这章的要点再列一下:
| 特性 | 对XIP的影响 |
|---|---|
| 随机访问 | CPU直接寻址,无需加载页 |
| 独立地址/数据总线 | 与处理器总线无缝对接 |
| 读延迟低(~100ns) | 满足主流MCU取指时序 |
| 写入慢、擦除慢 | 不适合频繁写,适合放代码 |
| 容量小 | 适合中小规模固件 |
嗯,NOR Flash这部分就讲到这里。