SPI/QSPI 串行 PSRAM 与 cache 接口:内存映射、线数与等待态
更新时间:2026-09-19。前置:Quad/Octal SPI 控制器、HyperRAM/Octal PSRAM、SPI Flash XIP。除了高速 HyperRAM,还有一类更便宜、引脚更少的 SPI/QSPI PSRAM(如 1x/4x 线、8/16/64MB 级),用普通 SPI 引脚即可为 MCU 扩内存。
本文要回答的问题
- 串行 PSRAM 和 SPI Flash、HyperRAM 用法差在哪?
- 内存映射读怎么工作,命令读/写怎么走?
- 为什么随机访问很慢、cache 行填充能救多少?
- QSPI PSRAM 与 HyperRAM 如何选型,有哪些坑?
一、接口与线宽
- 标准 SPI PSRAM:SI/SO/CLK/CE#(必要时加 WP#/HOLD#),1-1-1 命令地址数据,省引脚但慢。
- Quad SPI PSRAM:复用成 4 根双向数据线 SIO[3:0],命令/地址可 1 线、数据 4 线(1-1-4)或命令地址数据全 4 线(QPI),带宽大幅提升;很多和 QSPI Flash 共用同一控制器(见 Quad/OSPI)。
- 与 NOR Flash 命令风格类似(命令码 + 地址 + 模式 + 等待 + 数据),但 PSRAM 可随机读写、按字节改、无需先擦除(内核是 DRAM,但对用户表现为随机访问 RAM)。
- 与 HyperRAM 区别:HyperBus 有独立 RWDS、8 线 DDR、带宽高;QSPI PSRAM 引脚更少、命令式、多为 SDR,成本低、速率中低。
二、读写:命令模式与内存映射
两种访问路径:
1. 命令/间接访问(控制寄存器 + FIFO)
软件或控制器按命令序列操作:
写: WRITE ENABLE(0x02 类) → 命令(FAST_WRITE/QUAD_WRITE) + 24b 地址 + 模式字节(可选)
→ 等待 latency → 数据线送数据(可连续突发,地址自增)
读: 命令(FAST_READ 0x0B / QUAD_READ 0xEB) + 地址 + 模式 + dummy cycle
→ 等待 latency → 读出数据- 读有 dummy/等待周期(器件内部取数),quad 读前若干 dummy 还用于切换线宽/模式。
- 写通常先写使能、内部完成较快,连续写可跨地址自动递增。
- 刷新由器件内部自动完成(与 HyperRAM 一样用户不发刷新命令),部分器件在内部刷新时会插入等待或限制访问频率,数据手册给出刷新相关时序。
2. 内存映射读(Memory-Mapped)
控制器把一段 CPU 地址映射到 PSRAM,硬件在每次访问时自动发起「命令+地址+突发读」:
- 对软件透明,像读普通内存;主要用于读数据/指令(XIP 类,见 XIP 启动)。
- 写在内存映射模式下支持有限(很多控制器要求写走间接/命令接口,或映射写被缓冲)。
- CE# 可在连续地址访问中保持有效做突发,跨页/越界需重启命令。
三、cache 行填充掩盖延迟
串行 PSRAM 的首字节延迟高(命令+地址+dummy,动辄十几到几十个时钟),但一旦开始就能连续突发。因此典型系统在它前面加一层 cache:
CPU 取一字节/指令 miss
→ cache 控制器发起整行读取(如 32/64B 突发)
→ 摊薄命令/地址/dummy 开销(amortize)
→ 后续顺序访问 hit- 这和 AXI 突发与 cache、HyperRAM 长突发原理一致:顺序代码/数据局部性好时,cache 行填充让有效吞吐接近线速;纯随机访问每次都付完整命令开销,延迟很高。
- 写策略(write-through/write-back/写缓冲)要配合慢写延迟;可写 XIP/数据区的 cache 一致性需软件维护(见 DMA 与 cache)。
四、应用与选型
| 需求 | 选择 |
|---|---|
| 引脚极紧、成本敏感、带宽要求中等(GUI 缓冲、大查找表、扩展堆) | QSPI PSRAM |
| 高带宽图形/大内存、可接受 8 线/RWDS | HyperRAM/Octal PSRAM |
| 只放代码/只读资源、不需写 | QSPI NOR Flash XIP(见 XIP) |
常见用途:低端 GUI 的帧缓冲/图片资源、AI 小模型权重、音频缓冲、Lua/脚本堆、协议栈大缓冲。注意总带宽要和显示刷新/DMA 争抢预算(见 多通道 DMA)。
五、常见的坑
- 随机访问当 SRAM:每次都付命令+地址+dummy,性能崩塌;要靠 cache/突发/局部性。
- 线宽模式不匹配:进入 quad/QPI 模式后控制器仍按 1 线发命令,或反之,器件不响应。
- dummy cycle 数配错:读等待周期少于器件要求,前几字节错;不同频率档 dummy 不同。
- 写走内存映射假设:很多控制器映射模式只读,写必须走间接/命令接口,直接写无效或错位。
- 写使能/写完成忽略:未发 WREN 或未等内部写完成就连写。
- 突发页边界:连续访问越过页/边界时地址回卷,未重发命令导致数据回绕。
- cache 一致性:DMA 与 CPU 共享 PSRAM 数据时未 clean/invalidate(见 DMA cache)。
- CE# 保持策略错:过度拉长 CE# 低或每字节都重发命令,效率差或行为异常。
- 刷新/最大访问间隔:过热或长时间不访问/访问模式极端时刷新受限,需读数据手册刷新规则。
- 时钟频率超规格/SI:quad 高速时走线、电容导致误码,降频可过则是信号问题(见 SI)。
- 与 Flash 共用总线冲突:同一 QSPI 总线挂 PSRAM+Flash 时 CE#、模式(QPI 退出)互相影响。
- 容量地址位数:大容量需 32 位地址命令,沿用 24 位地址访问不到高位。
相关与延伸
多线 SPI 基础见 Quad/Octal SPI;高速 8 线版本见 HyperRAM/Octal PSRAM;XIP 与 cache 填充见 SPI Flash XIP、AXI 突发与 cache。
总结
SPI/QSPI PSRAM 用和 QSPI Flash 相同的少量引脚(1 线或 4 线 SIO、CLK、CE#)以命令码+地址+dummy 等待+数据的方式随机读写 RAM,无需擦除、刷新由器件内部自管:CPU 既可经命令/间接接口读写,也可把一段地址内存映射后由控制器自动发突发读实现透明访问/XIP,但首字节要付命令、地址和 dummy 的高延迟,因此必须靠 cache 行填充和顺序局部性把开销摊薄,纯随机访问仍很慢、写往往要走间接通道;它比 8 线 DDR、带 RWDS 的 HyperRAM 便宜省脚但带宽低——把它当零等待 SRAM、线宽/dummy 配错、映射模式假设可写和忽略页边界是四大常见坑。