QSPI Flash 概述
什么是 QSPI?从 SPI 说起
先聊聊 SPI——同步串行接口。标准 SPI 就 4 根线:SCK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。一次只能传 1 bit,时钟跑多快,吞吐就有多大。我刚开始做嵌入式时觉得这玩意儿够用了,毕竟单片机里外设就那么点数据量。
但后来系统越来越复杂。比如要跑带 GUI 的系统,或者要存几兆的配置参数。SPI 就变成了瓶颈。为什么?瓶颈就在数据线上。它只有一根单向数据线,再快的时钟也得一根一根地挪。
QSPI 全称 Quad SPI——四线串行外设接口。它把标准 SPI 的单向数据线改成了四条双向 IO 线(IO0~IO3)。
说白了,QSPI 是在 SPI 的骨架上多加了三根数据线。一个时钟周期内可以同时传 4 bit。理论吞吐量直接翻 4 倍。我习惯把标准 SPI 叫单线模式,QSPI 叫四线模式。
QSPI 与 SPI 的核心区别
具体差在哪?看下面这张表,我把它整理成了最常用的对比项:
| 对比维度 | 标准 SPI | QSPI(四线) |
|---|---|---|
| 数据线数量 | 2 根(MOSI / MISO) | 4 根(IO0~IO3) |
| 单周期传输位数 | 1 bit | 4 bit |
| 最高时钟频率 | 一般 20~80 MHz | 可达 104 MHz(常见) |
| 理论吞吐率(104 MHz) | 约 13 MB/s | 约 50 MB/s |
| DDR 模式支持 | 少数支持 | 普遍支持(双倍数据率) |
| 典型 Flash 容量 | 1~16 MB | 4~256 MB+ |
| 初始化流程 | 直接读写 | 需先发送指令进入 QSPI 模式 |
注意:初始化流程是新人最容易忽略的坑。标准 SPI Flash 上电后直接可以读数据;QSPI Flash 上电后默认工作在标准 SPI 模式,你必须发送特定指令(比如 0x38 或 0x20)才能切换到四线模式。否则你即使接对了四线,读回来的数据也是错的。
QSPI 的应用场景
你想想看,什么时候需要这么高的吞吐率?
- 应用程序存储: 系统上电从 QSPI Flash 把程序加载到 RAM 中执行,容量大、速度够,性价比远超 NAND。
- 显示帧缓冲: 小尺寸 TFT 屏幕的显存,使用 QSPI Flash 足够支撑 320×240 的 16 位色实时刷新。
- FPGA 配置: 很多 FPGA 支持从 QSPI Flash 自动加载 bitstream,四线模式能明显缩短配置时间。现场升级也更方便。
- 物联网日志/固件存储: 采集的大量日志数据需要高速写入,QSPI Flash 比 SD 卡省电、更小、更可靠。
- 语音/图像预处理数据缓冲区: 如离线语音模块、智能摄像头的小图缓存。
我个人习惯给项目选存储介质时先看数据量:小于 2 MB 用标准 SPI,2~16 MB 用 QSPI,再大就得考虑 eMMC 或 NAND 了。当然这是经验值,具体看成本和功耗约束。
实际项目中我踩过的坑
既然提到了坑,就多聊几句。QSPI 虽然强势,但工程实现时容易掉进三个坑里:
- 电平不匹配: 很多 QSPI Flash 支持 1.8V 和 3.3V 双电压。IO 电平必须匹配控制器,否则通信乱码。我在一块 STM32H743 上用过 W25Q64,它的默认 VCC 是 3.3V,但有些国产芯片要求 1.8V,控制器也要跟着改。
- 时序紧张: 开了四线模式后,时钟频率飙到 100 MHz 以上,PCB 布线要严格等长。差分对?不要求,但四条 IO 线尽量等长,误差控制在 1/10 波长以内。我见过有人从开发板上飞了三根杜邦线拉长 15 厘米,结果 80 MHz 就出乱码——说白了,高频信号不能这么玩。
- 初始化步骤遗漏: 前面提到了,必须发指令进 QSPI 模式。但还有一点:有些 Flash 进入四线模式后,所有指令(包括读 ID 和读数据)都要在四线模式下发送。你如果还像 SPI 那样只发 8 位操作码,Flash 会直接忽略。所以正确的步骤是:先在 SPI 模式下读 ID → 发模式切换指令 → 后续所有通信切换到四线模式。
本章知识图谱
下面这张图把本节的脉络串起来了。从 SPI 基础出发,引出 QSPI 的定义,再对比两者的核心差异,然后落到实际应用和避坑要点。你将来写代码、调时序、选型号,都可以回来扫一眼这张图。