1.1 SPI总线概述

SPI(Serial Peripheral Interface,串行外设接口)由摩托罗拉公司在20世纪80年代中期推出,最初用于MC68000系列微处理器与外围芯片之间的短距离高速通信。经过近四十年的发展,SPI已成为嵌入式系统中最广泛使用的同步串行接口之一,在传感器数据采集、存储器读写、显示驱动等场景中占据核心地位。

核心定位:全双工、同步、主从架构的串行通信总线,专为芯片间高速数据交换设计。

1.1.1 典型应用场景

应用领域 典型器件 SPI优势 典型速率
传感器 ADXL345加速度计、MPU6050陀螺仪、MAX31865热电偶 低延迟、可连续读取多轴数据 1~10 MHz
存储器 W25Qxx Flash、MicroSD卡、FRAM 全双工读写、页编程效率高 20~104 MHz
显示器 ILI9341 TFT、SSD1306 OLED、ST7789 像素数据批量传输、DMA友好 10~80 MHz
数据转换 ADS1256 ADC、DAC8568 DAC 同步采样、多通道切换 5~30 MHz
无线通信 nRF24L01、CC1101、SX1278 LoRa 寄存器配置灵活、数据包收发 1~10 MHz
实战提示:在传感器应用中,SPI的连续读取模式(Burst Read)可以比I2C快5~10倍,这对需要高频采样的惯性导航系统至关重要。

1.1.2 SPI与I2C/UART的对比

三种串行总线在嵌入式系统中各有定位,理解其差异是正确选型的前提。

特性 SPI I2C UART
信号线数量 4线(SCLK, MOSI, MISO, CS) 2线(SCL, SDA) 2线(TX, RX)
通信模式 全双工 半双工 全双工
同步方式 同步(时钟线) 同步(时钟线) 异步(波特率约定)
最大速率 通常 10~104 MHz 标准 100 kHz / 快速 400 kHz / 高速 3.4 MHz 通常 115200 bps ~ 3 Mbps
从机选择 独立CS线(硬件片选) 7位/10位地址(软件寻址) 点对点(无寻址)
多从机支持 每从机一根CS线 总线式多从机(地址区分) 需额外协议(如RS-485)
硬件复杂度 中等(引脚多) 低(引脚少) 低(引脚少)
典型功耗 较高(持续时钟) 低(开漏+上拉) 中等
抗干扰能力 强(差分可选) 中等(开漏易受干扰) 弱(单端)
选型陷阱:不要因为I2C引脚少就盲目选用。当需要连续高速读取Flash或传感器时,I2C的ACK/NACK机制和半双工特性会严重拖累吞吐量。SPI的全双工特性配合DMA可以实现零CPU开销的数据搬运。

1.1.3 SPI总线拓扑结构

下图展示了标准SPI单主多从的物理连接拓扑,这是驱动开发中最常见的硬件布局。

SPI单主多从拓扑结构 主控器 (Master) SCLK / MOSI / MISO 从机 1 CS1 从机 2 CS2 从机 3 CS3 共享信号线 SCLK(时钟) MOSI(主出从入) MISO(主入从出) 独立片选线 CS1 → 从机1 CS2 → 从机2 CS3 → 从机3 SCLK/MOSI/MISO SCLK/MOSI/MISO SCLK/MOSI/MISO
拓扑要点:
  • SCLK、MOSI、MISO 三根信号线由所有从机共享,属于总线型连接。
  • 每个从机拥有独立的片选线 CS_n,低电平有效。主控通过拉低对应CS线来选择通信目标。
  • 未被选中的从机必须将MISO引脚置为高阻态,避免总线冲突。
  • 从机数量受限于主控的GPIO引脚数,每增加一个从机就需要多一根CS线。

1.1.4 SPI通信基本流程

一次完整的SPI数据传输遵循以下步骤,理解这个流程是驱动开发的基础。

  1. 主控拉低目标从机的CS线,从机检测到CS下降沿后进入就绪状态。
  2. 主控开始产生SCLK时钟信号,时钟极性和相位由CPOL和CPHA决定。
  3. 数据移位传输:每个时钟周期,主控通过MOSI发送1位数据,同时通过MISO接收1位数据。
  4. 传输结束:主控停止SCLK时钟,拉高CS线,从机释放MISO总线。
驱动开发关键:SPI是全双工通信,主控发送一个字节的同时必然接收一个字节。即使只需要读取从机数据,主控也必须发送虚拟字节(通常为0x00或0xFF)来产生时钟。这是SPI驱动中常见的"假发送"技巧。

1.1.5 SPI协议的四线定义

信号线 全称 方向 功能描述
SCLK Serial Clock 主控 → 从机 由主控产生的同步时钟,决定数据传输速率
MOSI Master Out Slave In 主控 → 从机 主控发送数据到从机的通道
MISO Master In Slave Out 从机 → 主控 从机发送数据到主控的通道
CS Chip Select 主控 → 从机 片选信号,低电平有效,用于选择通信从机
常见混淆:有些厂商将MOSI称为SDI(Serial Data In,从机视角),将MISO称为SDO(Serial Data Out,从机视角)。在阅读数据手册时,务必确认信号方向,避免接线错误导致通信失败。

1.1.6 SPI协议的核心优势与局限

优势 局限
全双工通信,吞吐量高 引脚数量多(4线),占用PCB面积大
无协议开销,无地址帧/ACK帧 无内置流控和错误检测机制
速率极高,可达100+ MHz 多从机时CS线数量线性增长
硬件实现简单,DMA友好 无标准协议层,各厂商寄存器定义不统一
数据帧长度灵活(8/16/32位) 远距离传输能力弱(通常<1米)