非常好的问题,它触及了嵌入式系统设计中的一个核心概念。
让我们来分层次清晰地解答:
1. XIP 的默认含义
是的,在大多数嵌入式开发语境下,“XIP”默认指的就是在 XIP Flash 上执行程序。
原因如下:
- 历史与普遍性:Nor Flash(XIP Flash的主流类型)是最早、最广泛支持XIP的非易失性存储器。它允许CPU像读取内存一样直接通过地址总线读取数据,无需先拷贝到RAM。
- 系统启动的必要性:系统上电后,RAM(包括PSRAM)是空的,CPU需要立刻从某个已知地址获取第一条指令。这个“启动设备”必须是非易失性且支持XIP的。Nor Flash(或类似技术的QSPI Flash)完美扮演了这个角色。
- 代码存储的基础:对于许多资源受限的MCU,代码通常存储在片上Flash或外部Nor Flash中,并直接从那里执行,以节省宝贵的RAM空间。
因此,当人们说“这个芯片支持XIP”或“我们在XIP模式下运行”,默认就是指代码存储在Flash中并直接从Flash执行。
2. XIP 能否指在 PSRAM 上执行程序?
答案是:技术上完全可以,但这是一种特定且高级的用法。
核心前提:XIP 是一种“执行模式”,而不是存储器的固有属性。它的定义是“就地执行”,即CPU直接从代码所在的存储器地址取指并执行,无需将代码先复制到系统RAM。
只要满足以下条件,任何存储器都可以支持XIP:
- 存储器映射:该存储器的物理存储单元被映射到CPU的地址空间(即有一个具体的地址范围,如
0x6000_0000)。 - 随机访问:CPU可以通过地址总线随机访问该存储器的任意位置,并且访问延迟和时序是可预测的(满足CPU取指要求)。
- 总线支持:连接该存储器的总线(如AHB、AXI、QSPI)支持高效、低延迟的读取操作。
PSRAM(伪静态随机存储器)是一种易失性的RAM,但它具有类似SRAM的接口(无需复杂刷新),通常通过类似QSPI或HyperBus的高速接口连接。它完全满足上述XIP条件。
3. 为什么在 PSRAM 上执行 XIP 不那么“默认”?
虽然技术上可行,但将PSRAM用作XIP设备有以下挑战和考虑,使其成为“非默认”选择:
- 易失性问题:PSRAM掉电后数据丢失。因此,你不能直接从PSRAM启动(Boot)。系统必须从一个非易失性XIP设备(如Flash)启动,由启动代码(Bootloader)将应用程序代码从Flash(或其它存储)加载到PSRAM中,然后跳转到PSRAM的地址去执行。这个过程本身已经不是“直接就地执行存储介质里的原始代码”了。
- 需要初始化:PSRAM控制器通常在上电后需要配置(如时序、时钟模式),之后才能使用。这个初始化代码必须在能运行的地方执行,比如片内SRAM或Flash。
- 成本与功耗:PSRAM通常比Flash更贵,且作为易失性存储器,保持数据需要持续供电,功耗通常高于Flash。
- 速度匹配:虽然PSRAM速度比Nor Flash快,但比芯片内部的紧密耦合内存(TCM)或系统SRAM慢。对于追求极致性能的代码段(如中断服务程序),仍可能需要拷贝到更快的内存中执行。
4. 典型应用场景
那么,什么时候会使用“XIP from PSRAM”呢?
- 性能提升:当应用程序代码太大,无法全部放入高速片上SRAM,但直接在外置Flash中执行(XIP from Flash)又成为性能瓶颈时。一个常见的优化方案是:
- 系统从Flash启动。
- 将关键的、对性能敏感的函数或代码段(如视频编解码算法、图形处理库)从Flash加载到PSRAM。
- CPU跳转到PSRAM的地址去全速执行这些代码。
- 大容量代码执行:对于需要运行大型应用(如LVGL图形库、解释器)的物联网设备或高端MCU,片上Flash和RAM都不够用。可以将整个应用存放在大容量的QSPI NAND Flash中,启动时将其加载到大容量的外部PSRAM(如Octal PSRAM)中,然后在PSRAM中全速运行。
总结
| 特性 | XIP Flash (默认的XIP) | XIP from PSRAM |
|---|---|---|
| 存储器类型 | 非易失性 (Nor, QSPI Flash) | 易失性 (PSRAM) |
| 能否作为启动设备 | 能,是主要用途 | 不能,需要从Flash启动并加载 |
| 主要目的 | 存储并直接执行代码,节省RAM | 提供比Flash更快的执行速度,或作为大容量执行内存 |
| 典型访问接口 | QSPI, OSPI, HyperFlash | QSPI, OSPI, HyperRAM (与Flash接口类似) |
| 执行速度 | 较慢(受Flash读延迟和接口带宽限制) | 较快(接近RAM速度) |
| 成本与功耗 | 较低(存储成本) | 较高 |
结论:
- 默认情况:XIP指的是在XIP Flash上执行程序。
- 广义概念:XIP是一种执行模式,只要存储器被映射到CPU地址空间且支持随机读,PSRAM、甚至标准的DRAM(理论上)都可以支持XIP。
- 实际应用:在PSRAM上执行XIP是一种性能优化或容量扩展手段,通常需要与Flash配合使用(从Flash启动并加载代码至PSRAM),而非替代Flash作为启动和主存储设备。