Skip to content

SPI 协议(Serial Peripheral Interface,串行外设接口)

一、SPI 概述

SPI 是一种 全双工、同步、主从式 的串行通信协议。 常用于 MCU ↔ 外设 的高速数据传输,例如:

  • MCU 与 Flash (W25Qxx)
  • MCU 与 LCD/OLED
  • MCU 与 AD/DA 芯片
  • MCU 与无线模块

它的主要特点:

  • 接口简单,只有 4 根基本线
  • 速度高(MHz 级别,远快于 I²C)
  • 不支持多主机(一般只有一个主机 MCU,多个从机)

二、SPI 硬件连接

基本的 4 根线:

  1. SCLK(Serial Clock)串行时钟 → 主机输出给从机
  2. MOSI(Master Out Slave In)主输出,从输入
  3. MISO(Master In Slave Out)主输入,从输出
  4. CS/SS(Chip Select / Slave Select)片选信号,低电平有效

当有多个从机时:

  • SCLK、MOSI、MISO 共用
  • 每个从机有独立的 CS

三、SPI 工作原理

SPI 传输过程中,主机产生 时钟信号 SCLK

  • 在时钟的边沿,数据在 MOSI / MISO 上传输。
  • 每个时钟传输 1 bit 数据,全双工
    • 主机通过 MOSI 发数据给从机
    • 从机通过 MISO 发数据给主机
    • 一边发送,一边接收(像两条流水线)

一个字节传输过程:

  • 主机发送 8 bit → 同时接收 8 bit
  • 从机也发送 8 bit → 同时接收 8 bit

四、SPI 的时序模式

SPI 有 四种模式,由 时钟极性 (CPOL)时钟相位 (CPHA) 决定:

模式CPOLCPHA空闲时钟采样时机
000低电平上升沿采样
101低电平下降沿采样
210高电平下降沿采样
311高电平上升沿采样
  • CPOL = 0 → SCLK 空闲为低
  • CPOL = 1 → SCLK 空闲为高
  • CPHA = 0 → 第一个边沿采样
  • CPHA = 1 → 第二个边沿采样

常见外设通常用 模式 0 或 3


五、SPI 特点

  • 速度高:通常可到几 MHz ~ 数十 MHz
  • 硬件简单:比 I²C 少复杂性,不需要地址,只用片选
  • 全双工:比 I²C、UART 快
  • 缺点
    • 线多(4 根,比 I²C 的 2 根多)
    • 不支持多主机
    • 没有应答机制(不像 I²C 的 ACK/NACK),只能依靠协议层

六、举例(W25Q128 SPI Flash)

比如 MCU 要读 Flash:

  1. CS 拉低(选中芯片)
  2. MOSI 发送指令(如 0x03 = Read Data)
  3. MOSI 发送地址(24 位)
  4. MISO 输出数据流(每个 SCLK 一个 bit)
  5. 读完数据后,CS 拉高(释放芯片)

👉 总结一句: SPI 就是主机时钟驱动下,主机和从机通过 MOSI/MISO 同时收发数据的高速总线协议