XIP 全称 eXecute In Place,也就是就地执行,核心是 CPU 不用把 Flash 里的代码预先拷贝搬运到 RAM,直接在 NOR Flash 上读取指令译码执行,能节省嵌入式设备宝贵的 SRAM 资源,很多人会疑惑为什么只有 NOR Flash 支持 XIP、NAND 不行,本质是 NOR 支持任意地址随机读,CPU 取指是随机跳转,而 NAND 是按块读取,没办法满足 CPU 随时跳转到任意地址拿指令的需求,再加上芯片的 QSPI/OSPI 控制器支持内存映射模式,把 NOR Flash 映射到 CPU 的统一地址空间,CPU 访问这个地址就像访问普通 ROM 一样,控制器自动把总线地址转换成 SPI/QSPI 读命令,整套机制配合缓存、预取缓冲弥补 Flash 速度慢的短板,工程上需要同步修改链接脚本、启动代码、MPU 配置,同时规避地址不匹配、总线冲突、擦写和 XIP 互斥、性能衰减等坑,适合 IoT、跨域 MCU、工业控制这类 RAM 资源紧张的嵌入式项目。
一、XIP 基础概念对照表
| 项目 | 说明 |
|---|---|
| 英文全称 | eXecute In Place,就地执行 |
| 核心行为 | CPU 直接从 NOR Flash 取指令,不需要 shadow 拷贝到 RAM |
| 必备硬件 | 支持内存映射的 QSPI/OSPI 控制器、NOR Flash |
| 不支持介质 | NAND Flash、eMMC(需要先搬运到 RAM) |
| 核心依赖特性 | NOR Flash 随机地址读取、字节级寻址 |
| 性能短板 | Flash 带宽、延迟低于 RAM,无缓存时执行速度明显变慢 |
| 内存占用 | .text、.rodata 放在 Flash;.data、.bss、栈、堆依然放在 RAM |
二、XIP 底层原理拆解
- 地址映射:SOC 的 QSPI 控制器配置成内存映射模式,给外部 NOR Flash 分配一段系统地址空间,在 CPU 视角里,这块区域和 ROM、RAM 地址没有区别,直接发地址就能读数据。
- 协议转换:CPU 发起取指总线请求,控制器自动把地址翻译成 SPI/QSPI 连续读指令,发给 NOR Flash,Flash 返回指令数据给 CPU 流水线,不需要软件发读写命令。
- NOR Flash 特性支撑:NOR 每个地址都可以独立随机读取,跳转任意地址都能立刻返回数据;NAND 只能按页读取,无法匹配 CPU 取指的随机跳转逻辑,原生不支持 XIP。
- 缓存补偿机制:依靠 CPU I-Cache、预取 buffer,把高频执行代码缓存进高速缓存,减少频繁访问慢速 Flash,缓解 XIP 性能下降问题。
- 读写互斥规则:XIP 读代码模式下,同一 QSPI 总线不能同时做 Flash 擦除、烧写;写 Flash 时要切回普通 SPI 间接模式,暂停 XIP 执行。
三、传统 Shadow 加载方案 vs XIP 方案对比
| 对比项 | 传统 Shadow(代码拷贝到 RAM) | XIP 就地执行 |
|---|---|---|
| RAM 开销 | 大,代码镜像全部占用 SRAM | 小,只读代码段放在 Flash,只占用数据段 RAM |
| 启动流程 | Bootloader 先把 Flash 代码复制到 RAM,再跳转执行 | 配置 QSPI 映射后直接跳转 Flash 地址,省去拷贝步骤 |
| 执行速度 | 快,RAM 带宽高、延迟低 | 慢,Flash 串行访问,依赖缓存提速 |
| Flash 擦写 | 不受限制,代码在 RAM 运行,可以后台擦写 Flash | XIP 运行时同总线无法擦写,需要切换模式 |
| 适用场景 | 性能优先、RAM 充足 | RAM 紧张、IoT、低 BOM 成本、代码体积大 |
四、XIP 工程实战落地步骤清单
- 硬件确认:SOC 的 QSPI/OSPI 控制器支持 DAC 内存映射 XIP 模式,Flash 为串行 NOR Flash,布线满足 QSPI 时序要求。
- 链接脚本修改:把.text、.rodata 段指定到 Flash 映射地址,.data、.bss 分配到 RAM 区域,区分运行地址、加载地址。
- 启动代码适配:Boot 阶段初始化 QSPI 控制器,开启内存映射、连续读模式,配置 MPU/MMU 属性(只读、可执行)。
- 缓存配置:开启 XIP 区域的指令缓存,配置预取缓冲,这是保证 XIP 可用性能的关键;无缓存内核不建议上 XIP。
- 镜像烧录:固件镜像按照 Flash 物理偏移烧录,保证链接地址、烧录偏移、CPU 取指地址三者一致,这是最常见的故障点。
- 功能调试:测试分支跳转、中断、Flash 在线升级(OTA),OTA 写 Flash 时切换 QSPI 到非 XIP 模式,避免总线冲突。
- 功耗与性能评估:QSPI 持续活动会拉高功耗,循环密集型实时代码建议单独搬运到 RAM 执行。
五、工程高频踩坑清单
❌ 链接地址、烧录偏移、跳转地址三者对不上,取指拿到非法数据,直接 HardFault
❌ 没有开启 I-Cache,循环代码跑在 Flash 上,性能暴跌
❌ XIP 模式下直接调用 Flash 擦写函数,总线冲突,系统卡死
❌ 混淆 NOR 和 NAND,想用 NAND 做 XIP,启动直接失败
❌ 忽略 MPU 配置,Flash 区域权限配置错误,触发内存保护异常
❌ 加密 XIP 额外增加实时解密开销,没有预留性能余量
六、典型应用场景
- 低成本 IoT、蓝牙 WiFi 模组,片上 SRAM 很小,固件体积大
- i.MX RT、瑞萨 RZ/T、TI AM64x 这类跨域 MCU,外部串行 NOR 启动
- 工业设备、车载边缘轻量固件,非实时逻辑放 XIP,实时关键代码搬入 RAM
- 固件资源、字体、图片常量 rodata 直接 XIP 访问,不占用内存
七、XIP 优缺点总结
✅ 优点
- 大幅节省 SRAM,降低 BOM 成本,支持更大固件
- 省去代码拷贝,缩短启动时间
- 只读代码掉电不丢失,天然非易失
❌ 缺点
- 串行 Flash 访问延迟高,无缓存时性能差
- XIP 读和 Flash 擦写互斥,OTA 升级流程复杂
- QSPI 总线持续工作,静态功耗更高
- 不适合高频循环、硬实时、高吞吐的代码段
【相关 FAQ】
问题 1:XIP 就地执行技术里,为什么 CPU 只能从 NOR Flash 取指,NAND Flash 不能做 XIP?
回答 1:XIP 就地执行依赖随机地址读取,NOR Flash 支持任意地址随机读,适配 CPU 取指随机跳转;NAND 只能按页批量读取,无法随时返回任意地址指令,原生不支持 XIP。
问题 2:XIP 就地执行是什么意思,CPU 直接从 NOR Flash 取指还需要拷贝代码到 RAM 吗?
回答 2:XIP 就地执行就是 CPU 直接从 NOR Flash 取指运行,只读代码段不需要拷贝到 RAM;但是.data、.bss、栈、堆这些可读写数据,依然需要放在 RAM 里面。
问题 3:XIP 工程实战的时候,链接脚本在 XIP 里面起到什么作用?
回答 3:XIP 工程实战里链接脚本用来指定.text、rodata 放在 NOR Flash 映射地址,可读写数据段放到 RAM,保证链接地址、烧录偏移、CPU 取指地址匹配,是 XIP 正常跑起来的关键配置。
问题 4:XIP 就地执行性能比 RAM 执行差吗,怎么优化 XIP 的运行速度?
回答 4:XIP 就地执行直接访问串行 NOR Flash,原生速度比 RAM 慢;工程上主要靠开启 I-Cache、指令预取 buffer、使用 QSPI 高速模式来弥补 XIP 的性能短板。
【参考资料】
[2026-11-12](深入理解 XIP:从原理到工程实战,CPU 为什么能直接从 NOR Flash 取指执行?)电子工程专辑
[2026-10-28](瑞萨 RZ/T2M 平台 XSPI XiP 功能及例程分析)电子工程专辑
[2026-05-11](How to Achieve Both XiP and Real-Time Data Logging with QSPI)RAMXEED
[2026-02-09](SD NAND 为何不能存启动代码,SPI NAND 与 NOR Flash 却可以)腾讯云开发者社区
[2025-08-10](XIP eXecute In Place 嵌入式就地执行原理)NXP 半导体白皮书
【免责声明】
本文仅为嵌入式 XIP 就地执行技术资讯整理,XIP 的寄存器配置、控制器特性、时序约束随 SOC 厂商、NOR Flash 型号差异很大;XIP 工程调试存在硬件时序、总线冲突、OTA 升级风险,本文不构成硬件原理图、固件开发、量产方案建议,开发落地请以芯片原厂参考手册、SDK 例程为准。
本文来自作者[晶序共振]投稿,不代表乌兰科技网立场,如若转载,请注明出处:https://www.wlcbnews.com/itzx/202611/2851.html
评论列表(4条)
我是乌兰科技网的签约作者“晶序共振”!
希望本篇文章《深入解析 XIP 就地执行原理与工程落地,搞懂 CPU 为什么可以直接从 NOR Flash 取指运行》能对你有所帮助!
本站[乌兰科技网]内容主要涵盖:互联网行业的追踪与探索
本文概览:XIP 全称 eXecute In Place,也就是就地执行,核心是 CPU 不用把 Flash 里的代码预先拷贝搬运到 RAM,直接在 NOR Flash 上读取指令译码执行,能节省嵌入式设备宝贵的 SRAM 资源,很多人会疑惑为什么只有 NOR Flash 支持 XIP、NAND 不行,本质是 NOR 支持任意地址随机读,CPU 取指是随机跳转,而 NAND 是按块读取,没办法满足 CPU 随时跳转到任意地址拿指令的需求,再加上芯片的 QSPI OSPI 控制器支持内存映射模式,把 NOR Flash 映射到 CPU 的统一地址空间,CPU 访问这个地址就像访问普通 ROM 一样,控制器自动把总线地址转换成 SPI QSPI 读命令,整套机制配合缓存、预取缓冲弥补 Flash 速度慢的短板,工程上需要同步修改链接脚本、启动代码、MPU 配置,同时规避地址不匹配、总线冲突、擦写和 XIP 互斥、性能衰减等坑,适合 IoT、跨域 MCU、工业控制这类 RAM 资源紧张的嵌入式项目。