QSPI 硬件接口:信号线详解与功能归纳
学 QSPI 之前,我们先把它那几根线搞明白。别看名字花哨——CS、CLK、IO0~IO3——其实每根线都有自己的脾气。我在项目中吃过不少亏,都是因为没搞懂它们的复用逻辑。今天咱们一条一条捋清楚。
1. 片选信号 CS
CS(Chip Select)是所有 SPI 类接口的“指挥官”。低电平有效——意思是线上从高拉低,从机知道“主人要跟我说话了”。
我个人习惯叫它“使能钉”。在 QSPI 里,CS 的作用和普通 SPI 一模一样:选中某颗 Flash,其他未选中的芯片 IO 脚必须高阻,不能抢总线。
| 阶段 | CS电平 | 说明 |
|---|---|---|
| 空闲 | 高 | 总线释放,从机休眠 |
| 启动 | 高→低 | 主机发起一次事务 |
| 传输中 | 保持低 | 数据在时钟驱动下交换 |
| 结束 | 低→高 | 从机停止接收,释放总线 |
2. 时钟信号 CLK
CLK 是“心跳”。QSPI 的时钟频率可以跑到 100MHz 甚至更高(高端 Flash 能上 166MHz)。你想想看,这么高的频率,一根线稍微歪一点,信号反射就能把数据整崩。
SPI 有 CPOL(时钟极性)和 CPHA(时钟相位)的搭配,搞出四种模式。但 QSPI 为了标准化,绝大多数 Flash 只工作在 Mode 0(CPOL=0, CPHA=0,空闲低电平,首个边沿采样)或 Mode 3(CPOL=1, CPHA=1,空闲高电平,首个边沿采样)。我个人习惯统一用 Mode 0,因为大多数 MCU 的 QSPI 控制器默认就是这个,踩坑几率小。
3. 数据线 IO0~IO3
这是 QSPI 最核心的特色。普通 SPI 只有两条数据线(MOSI/MISO),QSPI 却给了四条:IO0、IO1、IO2、IO3。而且这些线是双向复用的——既能发又能收,还能兼容老协议。
3.1 信号映射关系
当你用 QSPI 的单线模式(其实就是标准 SPI)时,接线是这样:
- IO0 → MOSI(主机输出,从机输入)
- IO1 → MISO(主机输入,从机输出)
- IO2 → WP#(写保护,低电平有效)
- IO3 → HOLD#(保持,低电平时暂停传输)
当你切换到四线模式(Quad I/O)时,IO0~IO3 全都变成双向数据线,用于地址/数据并行传输。WP# 和 HOLD# 的功能被暂时屏蔽,由软件通过状态寄存器控制。
3.2 IO 方向与驱动能力
每条 IO 线都是三态的——可以是输出、输入或高阻。在发送阶段,主机驱动 IO 线;在读数据阶段,从机驱动 IO 线。切换必须由硬件自动完成,不能用 GPIO 模拟,否则时序会乱。
我见过一个项目,工程师用普通 GPIO 口来接 QSPI Flash,想省成本。结果四线模式根本跑不起来,因为 GPIO 的驱动能力不够,上升沿太缓。换成专用的 QSPI 控制器引脚后,问题立马解决。说白了,QSPI 对引脚的输出摆率有硬要求,别想着走捷径。
3.3 IO2 和 IO3 的特殊行为
这两个引脚在常规 SPI 模式下是控制脚,所以你必须在初始化前把它们拉高(通过 MCU 内部上拉或外部电阻),防止 Flash 误进写保护或保持状态。
| 模式 | IO2 | IO3 |
|---|---|---|
| 标准 SPI | WP#(输入) | HOLD#(输入) |
| Dual I/O | 双向数据线 | 未用(建议上拉) |
| Quad I/O | 双向数据线 | 双向数据线 |
4. 信号功能归纳总结
下面这张表看一眼,基本就记住了:
| 信号 | 方向 | 功能 | 备注 |
|---|---|---|---|
| CS | 主机→从机 | 片选,低选中 | 事务开始/结束标记 |
| CLK | 主机→从机 | 时钟,协调数据传输 | Mode 0 或 Mode 3 |
| IO0 | 双向 | 单线模式:MOSI;四线模式:数据位0 | 默认上拉 |
| IO1 | 双向 | 单线模式:MISO;四线模式:数据位1 | 默认上拉 |
| IO2 | 双向 | 单线模式:WP#;四线模式:数据位2 | 上电注意状态 |
| IO3 | 双向 | 单线模式:HOLD#;四线模式:数据位3 | 上电注意状态 |
看到这里你应该明白了:QSPI 本质上就是一条可配置的复用总线。它通过在标准 SPI 基础上增加两根数据线,并让四根线都变成双向,把吞吐量直接翻 4 倍(相比单线)。同时保留了对老协议的兼容,让你在低速调试时可以只焊三根线(CS、CLK、IO0),就把它当普通 SPI 用。
嗯,这就是 QSPI 的接口底层逻辑。下一部分我们就要开始讲如何用代码让这些线真正跑起来——初始化配置。先把线认全了,后面才不会手忙脚乱。
一句话总结: CS 选人,CLK 打拍,IO 线既要传数据又能干杂活。搞懂它们的复用规则和上电初始状态,QSPI 初始化就成功了一半。