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 的 CS、SCK、操作码、地址这些概念基本一样。区别主要在数据线上。

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 NOR Flash,写了半天代码死活读不出正确的 flash ID。查了两天发现——我把 IO0~IO3 的顺序接反了一根,而且忘了发模式切换指令。从那以后我给自己定了个规矩:先把 Flash 当标准 SPI 读出 ID,确认连接无误,再发切换指令进四线模式。

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 → 发模式切换指令 → 后续所有通信切换到四线模式。
经验公式: QSPI 实际吞吐率 ≈ (时钟频率 × 4) / (命令帧开销 × 1.2)。命令帧开销包括操作码、地址、dummy cycles。你算算 104 MHz 四线模式下的真实速率是多少?大概 40~45 MB/s,比理论 50 MB/s 要低一截,这很正常。

本章知识图谱

下面这张图把本节的脉络串起来了。从 SPI 基础出发,引出 QSPI 的定义,再对比两者的核心差异,然后落到实际应用和避坑要点。你将来写代码、调时序、选型号,都可以回来扫一眼这张图。

QSPI Flash 知识图谱 QSPI Flash 概述 标准 SPI 基础 QSPI 四线增强 局限性:单bit / 低吞吐 优势:4bit / 高速 / DDR 程序存储 / 显存 / FPGA 配置 物联网日志 / 语音缓存 图像预处理缓冲区 避坑点:电平匹配 → 未初始化前默认 SPI 模式 → 指令时序 → 四线等长布线