
SPI 是一种高速、全双工、同步串行总线协议QSPI 是 SPI 的扩展通过多数据线并行传输大幅提升带宽广泛用于 Flash 存储器访问。第一部分SPI 协议解析一、SPI 基本概念SPISerial Peripheral Interface串行外设接口由 Motorola 提出是同步、全双工、主从架构的串行总线。特性说明同步方式同步有独立时钟线 SCLK通信方式全双工同时收发架构单主多从速率高可达数十 MHz~上百 MHz线数标准 4 线二、SPI 的四根信号线SCLK ───────────────► Master MOSI ─────────► Slave ◄──────── MISO CS/SS ──────────────►低电平选中信号全称方向作用SCLKSerial Clock主→从时钟由主机产生MOSIMaster Out Slave In主→从主机发送数据MISOMaster In Slave Out从→主从机发送数据CS/SSChip/Slave Select主→从片选低电平有效别名MOSI 也叫SDO/DO/SIMISO 也叫SDI/DI/SOCS 也叫NSS/SSEL。三、多从机连接方式1. 独立片选常用┌─► Slave1 (CS1) Master ─SCLK/MOSI/MISO─┼─► Slave2 (CS2) └─► Slave3 (CS3)每个从机一根独立 CS主机通过拉低对应 CS 选择通信对象。2. 菊花链Daisy ChainMaster MOSI → S1 → S2 → S3 → Master MISO数据串联流过所有从机节省片选线但软件复杂。四、SPI 工作模式CPOL / CPHA★ 核心SPI 通过CPOL时钟极性和CPHA时钟相位组合出4 种模式。参数含义CPOL时钟空闲时的电平。0空闲为低1空闲为高CPHA采样边沿。0第1个边沿采样1第2个边沿采样四种模式表模式CPOLCPHA空闲电平采样边沿发送边沿Mode 000低上升沿采样下降沿移出Mode 101低下降沿采样上升沿移出Mode 210高下降沿采样上升沿移出Mode 311高上升沿采样下降沿移出最常用Mode 0 和 Mode 3。主从双方必须配置相同模式否则数据错乱。时序图Mode 0 为例CS ──┐ ┌── └──────────────────────────────┘ SCLK ────┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌── └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ ↑ ↑ ↑ ↑ ↑ ↑ MOSI ── D7 D6 D5 D4 D3 ... 上升沿采样(↑)下降沿数据切换五、SPI 数据传输机制1. 全双工移位寄存器模型SPI 本质是两个移位寄存器首尾相连成环Master 移位寄存器 Slave 移位寄存器 [10110010] ─MOSI─► [00000000] ◄─MISO─ 每个时钟主从各移出1位、移入1位 → 8个时钟后完成一字节交换关键SPI 每发送一位的同时也接收一位收发同步进行。即使只想读也得发出dummy字节产生时钟。2. 传输顺序通常MSB 先发高位在前但部分器件可配置 LSB first。六、SPI 数据解析示例主机向从机写入0xA510100101Mode 0SCLK 边沿MOSI 位说明1↑1D7MSB2↑0D63↑1D54↑0D45↑0D36↑1D27↑0D18↑1D0LSB8 个上升沿采样得101001010xA5✓七、SPI 优缺点优点缺点速度快全双工无协议开销引脚多每个从机需独立 CS协议简单无需地址/应答无应答机制不知从机是否收到支持高速无错误检测无校验硬件实现简单无标准厂商实现略有差异第二部分QSPI 协议解析一、QSPI 概述QSPIQuad SPI四线 SPI是 SPI 的扩展通过增加数据线数量实现并行传输大幅提升速度。主要用于外部 FlashNOR Flash的高速访问如 XIP就地执行。模式数据线数相对速度Single标准 SPI1 线MOSI/MISO 各 11×Dual2 线2×Quad4 线4×二、QSPI 信号线QSPI 把原来单向的 MOSI/MISO升级为 4 根双向数据线SCLK ───────────────► CS ───────────────► Master IO0 ◄────────────► Flash IO1 ◄────────────► IO2 ◄────────────► IO3 ◄────────────►信号标准 SPI 对应说明IO0MOSI数据线 0双向IO1MISO数据线 1双向IO2/WP数据线 2双向/写保护IO3/HOLD数据线 3双向/保持SCLKSCLK时钟CSCS片选Quad 模式下4 根 IO 线同时传输每个时钟传 4 bit。三、QSPI 传输的关键概念阶段PhaseQSPI 一次完整传输分为多个阶段每个阶段可独立配置用几线1/2/4 线┌─────────┬─────────┬─────────┬─────────┬─────────┐ │指令阶段 │ 地址阶段 │ 交替字节 │ 空周期 │ 数据阶段 │ │Instruction│ Address │ Alt-byte │ Dummy │ Data │ └─────────┴─────────┴─────────┴─────────┴─────────┘阶段作用线数可配指令Instruction命令码如读 0x6B、写 0x321/2/4 线地址AddressFlash 内地址24/32 位1/2/4 线交替字节Alternate模式字节可选1/2/4 线空周期Dummy等待 Flash 准备数据无数据数据Data实际读/写数据1/2/4 线灵活组合例如 1-1-4 表示指令1线、地址1线、数据4线1-4-4 指令1线、地址4线、数据4线Quad I/O 模式。四、QSPI Flash 典型读命令解析以Quad Output Fast Read0x6B为例从 Flash 读数据阶段: 指令 地址(24bit) Dummy 数据 线数: 1线 1线 8周期 4线 ───────────────────────────────────────────── CS ──┐ ┌── └──────────────────────────────────────┘ IO0 ─ 0x6B (单线) 地址(单线) dummy 数据D0 ... IO1 ────────────────────────────── 数据D1 ... IO2 ────────────────────────────── 数据D2 ... IO3 ────────────────────────────── 数据D3 ... 指令单线发 地址单线发 等待 4线并行读流程主机拉低 CS单线发指令0x6B单线发 24 位地址8 个 dummy 周期等 Flash 内部寻址4 线并行读出数据每周期 4 bit拉高 CS 结束不同读模式对比命令名称模式速度0x03Read Data1-1-1慢0x0BFast Read1-1-1带dummy中0x3BDual Output1-1-2较快0x6BQuad Output1-1-4快0xEBQuad I/O1-4-4最快五、QSPI XIP就地执行模式QSPI 支持XIPeXecute In PlaceCPU直接从外部 QSPI Flash 取指执行无需先拷贝到 RAM。特性说明原理QSPI 控制器把 Flash 映射到内存地址空间优点节省 RAM代码可直接运行关键用 Quad I/O 模式 连续读速度接近内部 Flash应用MCU 外扩大容量代码空间六、SPI vs QSPI vs Dual SPI 对比维度标准 SPIDual SPIQSPI (Quad)数据线11MOSI/MISO24每时钟传输1 bit2 bit4 bit双工全双工半双工半双工速度1×2×4×引脚446典型用途通用外设Flash高速 Flash / XIP注意QSPI 是半双工4 根线同向而标准 SPI 是全双工。QSPI 牺牲全双工换取 4 倍带宽。七、OSPIOctal SPI—— 进一步扩展更高端的还有OSPI八线 SPI用8 根数据线每时钟传 8 bit速度再翻倍常配合DTR/DDR双沿采样实现极高带宽用于高性能 MCU 外扩 Flash/PSRAM。协议数据线每时钟SDR每时钟DDRSPI11 bit2 bitQSPI44 bit8 bitOSPI88 bit16 bit八、协议层次关系┌──────────────────────────────────────────┐ │ 应用层Flash 命令集读/写/擦除/状态 │ │ (0x03读, 0x6B四线读, 0x02写, 0xD8擦除...) │ ├──────────────────────────────────────────┤ │ 传输层QSPI 阶段(指令/地址/dummy/数据) │ │ 多线并行(1/2/4线) │ ├──────────────────────────────────────────┤ │ 物理层SCLK / CS / IO0~IO3 │ │ 时钟极性相位(CPOL/CPHA) │ └──────────────────────────────────────────┘九、验证视角SPI/QSPI Monitor 设计思路结合芯片验证背景QSPI 协议解析器要点// 概念性 QSPI 解析状态机 typedef enum {IDLE, CMD, ADDR, DUMMY, DATA} qspi_state_e; // 关键点1: CS 下降沿开始一次传输 always (negedge CS) - transaction_start; // 关键点2: 根据当前线模式采样 // 单线: 只采 IO0 // 四线: 每个 SCLK 采 {IO3,IO2,IO1,IO0} 4 bit always (posedge SCLK) begin case (line_mode) SINGLE: shift {shift[6:0], IO0}; QUAD: shift {shift[3:0], IO3, IO2, IO1, IO0}; endcase end // 关键点3: 按阶段解析 // CMD(8bit) → 查命令表决定后续阶段配置 → ADDR → DUMMY → DATA // 关键点4: CS 上升沿结束传输 always (posedge CS) - transaction_end;解析难点线模式动态切换——指令可能 1 线、数据 4 线monitor 要按阶段切换采样位宽dummy 周期——不同命令 dummy 数不同需查命令表方向判断——读/写决定 IO 线方向十、总结协议一句话总结SPI4 线SCLK/MOSI/MISO/CS同步全双工靠 CPOL/CPHA 4 种模式约定采样边沿移位寄存器收发同步MSB 先发简单高速但引脚多、无校验QSPISPI 的 4 数据线扩展传输分指令/地址/dummy/数据多阶段每阶段可配 1/2/4 线4 线并行使速度达 4 倍主要用于高速 Flash 访问和 XIP 就地执行核心演进逻辑SPI(1线) → Dual(2线) → QSPI(4线) → OSPI(8线) 带宽递增引脚递增从全双工转为半双工换取吞吐量