1. SPI通信基础概念解析
SPI(Serial Peripheral Interface)作为一种同步串行通信协议,在嵌入式系统和硬件开发中扮演着重要角色。我第一次接触SPI是在调试一个传感器模块时,当时被其简洁的四线制设计和高速传输特性所吸引。与I2C相比,SPI最大的特点是没有复杂的地址机制和应答信号,这使得它在点对点通信场景下表现出极高的效率。
SPI总线由四根基本信号线构成:
- MOSI(Master Output Slave Input):主设备输出,从设备输入
- MISO(Master Input Slave Output):主设备输入,从设备输出
- SCLK(Serial Clock):时钟信号,由主设备产生
- SS/CS(Slave Select/Chip Select):片选信号,低电平有效
关键提示:不同厂商对信号线的命名可能有所差异,比如SIMO/SOMI、DO/DI等,但功能本质相同。阅读器件手册时需特别注意这个细节。
SPI的工作模式看似简单,但实际应用中存在许多需要特别注意的细节。比如时钟极性(CPOL)和时钟相位(CPHA)的组合就决定了数据采样的具体时序,这直接影响到通信的可靠性。我在早期项目中就曾因为模式配置错误导致传感器数据读取异常,花费数小时才定位到这个基础问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SPI硬件工作原理深度剖析
2.1 时钟与数据传输机制
SPI的核心在于时钟同步的移位寄存器工作原理。主设备通过SCLK提供时钟信号,每个时钟周期传输一位数据。以CPOL=0、CPHA=0模式为例:
- SS线拉低激活从设备
- 时钟上升沿时刻,主从设备各自采样输入数据
- 时钟下降沿时刻,双方寄存器移位输出下一位
- 传输完成后SS线恢复高电平
数据传输通常以8位或16位为单位,MSB(最高有效位)或LSB(最低有效位)优先取决于设备配置。我曾遇到过一个ADC芯片要求LSB优先传输,而主控默认MSB优先,导致读取的数值完全错误。这种位序问题在跨平台开发中尤为常见。
2.2 多从机连接方案对比
SPI支持多种从设备连接方式,各有优缺点:
-
独立片选方案:
- 每个从设备独占一个SS线
- 硬件简单但占用IO口多
- 适合从设备数量少的场景
-
菊花链方案:
