QSPI(Quad-SPI)NOR Flash 与 XIP 执行:怎么接、怎么跑内存映射执行码
Quad-SPI 用 4 条数据线、一个 byte 只要 2 个时钟,吞吐约是标准 SPI 的 4 倍;XIP 让 CPU 直接从外部 Flash 就地执行、不必先搬到 RAM。但 XIP 一定要 NOR(随机读),NAND 做不到。本文讲清 SPI/Dual/Quad、XIP 原理,并对应 GD25Q 与「MCU 端要有 QSPI/OSPI 控制器(只有部分 GD32)」。
单线 / 双线 / 四线 SPI:为什么 Quad ≈ 4×
串行 NOR Flash 的读取速度,关键在用几条数据线。标准 SPI 一个时钟传 1 bit,一个 byte 要 8 个时钟;Dual 用 2 条线、Quad 用 IO0~IO3 四条线,Quad 一个时钟传 4 bit、一个 byte 只要 2 个时钟——所以在相同时钟下,Quad 的读取吞吐约是标准 SPI 的 4 倍。再往上还有 QPI(连「命令」也走 4 条线,省的是协议 overhead)与 Octal/xSPI(8 条线)。重点记:Quad ≈ 4× 是「机制级」的硬事实(2 vs 8 个时钟/byte);至于实测 MB/s 会依时钟、走线、控制器而变。
XIP 是什么:内存映射、直接执行
XIP(eXecute-In-Place,就地执行)是让 CPU「直接从外部串行 Flash 抓指令执行,不必先整段搬进 RAM」。做法是:MCU 的 QSPI 控制器把外部 Flash 映射进 CPU 的地址空间(常见映在某个地址区段),CPU 之后对那块地址取指,就像读内部存储器一样,而 QSPI 控制器在背后把每次取指悄悄翻成一次 Flash 读交易。好处:内部 Flash 放不下的程序代码/资产可以外挂、省内部存储器、开机与更新更省事。代价:串行取指比内部 Flash 慢,所以通常靠一小块 cache / line buffer 补延迟(没设好 cache 与 MPU 可执行属性,XIP 性能会明显掉)。
⚠️ 为什么一定要 NOR:NAND 结构上不能 XIP
XIP 为什么一定要 NOR、NAND 不行?因为 XIP 的前提是「任意地址的真随机 byte 读取」。NOR 支持随机寻址、存取可达 ~10ns 级,CPU 能直接读任一字节 → 可 XIP。NAND 是 page 架构:要先把整页载入页寄存器,首字节延迟约 20–50µs,又没有字节级寻址,所以结构上无法直接 XIP;NAND 的做法是先把程序代码搬进 RAM 再执行(shadowing)。所以「直接就地执行」这条路一定走 NOR(如 GD25Q);NAND(如 GD5F)则定位在大容量数据存储。
GD25Q 对应 + MCU 端要有 QSPI 控制器
对应料号:GigaDevice GD25Q 是 SPI NOR Flash,支持标准/双线/四线 SPI、多数型号 133MHz(部分高密度另有 104MHz x4 DTR),容量从 512Kb 一路到 256Mb(常用 GD25Q32、GD25Q128、GD25Q256),原厂也标榜「ultra-fast XIP」;放程序代码 + 字体/UI 图库等只读资产很合适。但要提醒:XIP 的前提是 MCU 端有 QSPI/OSPI 控制器——这是「分系列」的,不是每颗 GD32 都有。已确认的是:GD32H7(内建双 Octal SPI,原厂有 AN122 OSPI 执行环境文件)、GD32F4 系列(QSPI,可把 QSPI Flash 当内部存储器做 XIP);较小的 GD32F1/F3 系列多半没有,选型前务必查该型号 datasheet/用户手册。
怎么选
第一,先确认 MCU 端有 QSPI/OSPI 控制器,否则无法内存映射、就无法 XIP(GD32H7 的 Octal、GD32F4 的 QSPI 可用;小型 GD32 多半不行)。第二,接口模式两端对齐——要吃满带宽就开 Quad(必要时 QPI 与 continuous-read/XIP 模式);GD25Q 全系支持标准/双/四线。第三,容量依「程序代码 + 字体/图资产」总量挑,XIP 程序代码留足余量。第四,时钟上限取决于 MCU 控制器与 PCB 走线/信号完整性,不是只看 Flash 标称。第五,功能旗标:Suspend/Resume(更新时不中断 XIP 读)、Security Register+OTP、Unique ID、RESET/WP#/HOLD# 依需求挑;低压走线可看 1.8V 的 GD25LQ。要大容量数据存储而非执行码,则改用 SPI NAND(GD5F)。傑聯特科技是 GigaDevice 授权代理商,GD25Q 全系 SPI NOR、GD5F SPI NAND、以及具 QSPI/OSPI 的 GD32(如 GD32H7)都供应;欢迎提供你的容量、接口与 XIP 需求,我们协助选型并回复样品、规格书与报价。
文中提及的产品
GD25Q256 256Mbit SPI NOR Flash
GD25Q256 是 256Mbit(32MB)串行 SPI NOR Flash,2.7~3.6V、最高 133MHz,支持 Dual/Quad I/O 与 4-byte 寻址(存取完整 32MB)。具 OTP/Unique ID、擦写暂停/恢复等功能,封装 SOP16 / WSON8 / TFBGA24。采标准指令集,常作为 Winbond W25Q256 的替代。
GD32H759 Arm Cortex-M7 600MHz 高性能 MCU
GD32H759 是 GigaDevice 高性能 Arm Cortex-M7 MCU,主频 600MHz(含 L1 缓存、双精度 FPU),Flash 最高 3840KB、SRAM 达 1024KB(含 ITCM/DTCM 与 ECC)。整合 3× CAN-FD、双 Ethernet MAC(含 EtherCAT)、2× USB HS/FS、6× SPI、2× OSPI、TFT-LCD 与 14-bit ADC,适合工业自动化、电机控制与图形 HMI。封装 LQFP100/144/176、BGA。
GD5F1GQ5 1Gbit SPI NAND Flash
GD5F1GQ5 是 GigaDevice 1Gbit SPI NAND Flash,2KB 页、128KB 块(64 页),支持 x1/x2/x4(Quad)SPI。系列分为内建 ECC 版(UE,2.7~3.6V、最高 133MHz)与无 ECC 版(RE,1.7~2.0V、104MHz),WSON8 封装,适合 MCU/SoC 的程序与数据存储。