QSPI Flash 概述与应用场景

大家好,我是老周。做嵌入式这些年,SPI Flash 用得最多,但一到高速大容量场景,就得请出它的升级版——QSPI Flash。这玩意儿名字听着挺唬人,说白了就是四通道 SPI。标准 SPI 一次只能传 1 位,QSPI 一次能传 4 位,数据吞吐量直接翻四倍。嗯,这个提升很实在。

什么是 QSPI Flash?

先看名字:Quad Serial Peripheral Interface,四线串行外围接口。它在传统 SPI 的 SCK(时钟)、CS(片选)、MOSI(主出从入)、MISO(主入从出)基础上,把剩下的两根数据线也利用起来,变成 IO0~IO3 共 4 根双向数据线。

关键点:QSPI Flash 内部存储单元还是 NOR Flash 或 NAND Flash,区别在于对外通信接口。它支持 SPI 模式(单线)、Dual SPI(双线)和 Quad SPI(四线),有的还支持 QPI(四线命令/地址/数据全用四线)。

我个人习惯把 QSPI Flash 看作“少吃多快”的存储方案。引脚少,只占 8 个脚(SOIC-8 或 WSON-8);速度快,跑 80/108/133 MHz 很常见,四线模式下理论带宽能到 532 Mbps。你想想看,传统并口 Flash 要几十个引脚才能达到这个速度,QSPI 用 8 个脚就搞定了。

QSPI 相比 SPI 的优势在哪里?

我整理了一个对比表,你可以一目了然:

对比项 标准 SPI Flash QSPI Flash 说明
数据线宽度 1 位(MOSI/MISO) 4 位(IO0~IO3) QSPI 吞吐量是 SPI 的 4 倍
最高时钟频率 50~80 MHz 80~133 MHz 工艺更新,QSPI 频率更高
引脚数(典型封装) 8 脚 8 脚(相同) PCB 布局一样方便
读取带宽(理论) 50 MB/s(50 MHz) 266 MB/s(133 MHz × 4) 实际受控于控制器和内部延时
DDR 模式 无 部分支持 QSPI 可加倍传数
典型容量 1~64 MB 4 MB~256 MB(甚至 1 GB) QSPI 更能大容量

我在一个车机项目中用过 64 MB 的 QSPI Flash 存导航地图数据。当时用标准 SPI 读地图,卡得要死;换成 QSPI 四线模式后,地图加载时间从 8 秒降到 1.5 秒。这个提升,客户一眼就看出来了。

小提示:QSPI Flash 的驱动强度很容易被忽略。同样是 8 脚封装,不同厂商的驱动电流默认值不一样。我曾经遇到过读数据偶尔飘错,折腾了两天,最后发现是驱动强度设成了 25% 而不是 100%。换了寄存器配置,问题消失。

应用场景——哪些场合非 QSPI 不可?

嵌入式系统中的固件存储

MCU 上电后需要快速从 Flash 加载代码。QSPI 支持内存映射模式(XIP,Execute In Place),CPU 可以直接像读内部 Flash 一样读外部 QSPI Flash,不需要先拷贝到 RAM。我做的 STM32H743 项目就是这样,片外一个 16 MB 的 QSPI Flash 存程序,跑起来和内部 Flash 速度差不多,但成本低多了。

物联网终端的数据日志

IoT 设备要把传感器数据、运行日志写到 Flash 里。QSPI 的页编程速度(一般 0.5~2 ms/256 字节)比普通 SPI 快一倍。而且 QSPI 支持连续写,批量日志写入很快。

汽车电子与工业控制

车规级 QSPI Flash 支持 -40°C~125°C 宽温,抗振动。我去年帮一个工控客户做产线,他们用 QSPI Flash 存 PLC 的梯形图程序,现场高温高湿环境下跑了两年没出过一次读错(当然,ECC 和 CRC 校验必须自己做)。

显示应用中的帧缓冲区

一些不带 RAM 的彩屏模块喜欢用 QSPI Flash 做帧缓存。四线模式读取速度足够刷新 320×240 的 16 位色屏幕,而且功耗比并口 SRAM 低很多。

典型系统框图

下面这张图展示了 QSPI Flash 在嵌入式系统中的位置,以及它和主控之间的信号关系:

QSPI Flash 知识体系全景 主控 MCU/MPU QSPI 控制器 物理连接 SCK / CS / IO[0:3] VCC / GND QSPI Flash 工作模式 SPI / Dual SPI / QPI DDR / STR 模式 命令集 Read / Fast Read / Quad Read Page Program / Sector Erase 典型应用场景 固件 XIP / 数据日志 汽车电子 / 工业控制 关键参数:速度 / 容量 / 电压 / 擦写寿命 参考数据手册,匹配 MCU 时序 说明:QSPI Flash 通过 4 线数据总线实现高速传输,支持内存映射和 XIP,是嵌入式大容量存储的首选。 实际项目中需重点关注 PCB 信号完整性、驱动强度配置和时序裕量。

避坑指南——初学者最容易犯的错:QSPI Flash 的引脚 IO0~IO3 在 SPI 模式下可以作为普通数据线,但有些芯片的 IO2 和 IO3 在 SPI 模式下内部默认是高阻还是弱上拉?不同的厂商定义不同。我以前在 GD32 上翻过车——买的 W25Q64JV 在 SPI 模式时 IO2/IO3 是弱上拉,结果电路板上浮空没接,读 ID 一直出错。后来加了个 10kΩ 上拉才稳定。

选型时还要注意什么?

  • 电压范围:1.8V 还是 3.3V?别和主控的电平不匹配。我建议直接选 3.3V 通用型,如果 MCU 是 1.8V,得加电平转换。
  • 页大小:多数 QSPI Flash 页是 256 或 512 字节。写操作必须按页对齐,否则会跨页写入失败。
  • QE 位:进入 Quad 模式前,要先往状态寄存器写 QE=1。这个操作很容易被忽略,导致 Quad 读出来的数据全乱码。遇到过吧?我遇到过。
  • 扇区大小:常见 4 kB、8 kB、64 kB。擦除最小单位是扇区,所以小文件很多的话,选 4 kB 小扇区更灵活。

总结一句话:QSPI Flash 就是用最少的引脚实现最高效的串行读取,适合代码就地执行、大数据日志、图形缓存三个核心场景。但速度提上去之后,PCB 布局和寄存器配置的坑就冒出来了——后面章节我会一个个带你看。