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单主多从的物理连接拓扑,这是驱动开发中最常见的硬件布局。
拓扑要点:
- SCLK、MOSI、MISO 三根信号线由所有从机共享,属于总线型连接。
- 每个从机拥有独立的片选线 CS_n,低电平有效。主控通过拉低对应CS线来选择通信目标。
- 未被选中的从机必须将MISO引脚置为高阻态,避免总线冲突。
- 从机数量受限于主控的GPIO引脚数,每增加一个从机就需要多一根CS线。
1.1.4 SPI通信基本流程
一次完整的SPI数据传输遵循以下步骤,理解这个流程是驱动开发的基础。
- 主控拉低目标从机的CS线,从机检测到CS下降沿后进入就绪状态。
- 主控开始产生SCLK时钟信号,时钟极性和相位由CPOL和CPHA决定。
- 数据移位传输:每个时钟周期,主控通过MOSI发送1位数据,同时通过MISO接收1位数据。
- 传输结束:主控停止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米) |