SPI通信协议详解
SPI(Serial Peripheral Interface,串行外设接口)是一种高速、全双工、同步的串行通信协议,由摩托罗拉(Motorola)公司开发,广泛应用于短距离设备间通信(如微控制器与传感器、EEPROM、显示屏等外设的连接)。其核心特点是通过少数几根线实现高速数据传输,结构简单且灵活。
一、SPI 协议的基本结构
SPI 通信涉及一个主设备(Master) 和一个或多个从设备(Slave),采用 “主从模式” 工作(主设备主动发起通信,从设备被动响应)。
核心信号线包括 4 根(部分场景可简化):
SCK | Serial Clock | 串行时钟线,由主设备产生,用于同步主从设备的数据传输节奏(决定通信速率)。 |
MOSI | Master Out Slave In | 主设备输出、从设备输入线,主设备通过此线向从设备发送数据。 |
MISO | Master In Slave Out | 主设备输入、从设备输出线,从设备通过此线向主设备返回数据。 |
SS/CS | Slave Select/Chip Select | 从设备选择线(低电平有效),主设备通过拉低某从设备的 SS 线选中该设备进行通信(多从设备时必备)。 |
二、SPI 通信的核心原理
1. 同步通信机制
SPI 是同步通信,数据传输由主设备产生的 SCK 时钟信号同步:
- 主设备控制 SCK 的频率(通常可配置,如 1MHz~100MHz),决定通信速度。
- 数据在 SCK 的特定边沿(上升沿或下降沿)被采样或发送,主从设备需约定一致的时钟极性和相位(见下文 “时序模式”)。
2. 全双工数据传输
SPI 支持全双工通信,主从设备可同时发送和接收数据:
- 数据通过 MOSI 和 MISO 线同时传输,传输单位为 “字节(8 位)” 或 “位(可自定义)”。
- 传输过程类似 “移位寄存器”:主设备发送 1 位数据到 MOSI 的同时,从设备通过 MISO 返回 1 位数据,8 个时钟周期后完成 1 字节的双向传输。
3. 从设备选择(SS/CS 线的作用)
- 当系统存在多个从设备时,每个从设备都有独立的 SS 线,主设备通过拉低目标从设备的 SS 线(置为低电平)选中它,未被选中的从设备 SS 线为高电平,不响应通信。
- 若只有一个从设备,SS 线可固定接低电平(简化电路)。
三、SPI 的时序模式(时钟极性与相位)
SPI 的时序由时钟极性(CPOL) 和时钟相位(CPHA) 定义,共 4 种组合(称为 SPI 模式),主从设备必须使用相同的模式才能正常通信。
0 | 0 | 0 | SCK 空闲时为低电平(0),数据在 SCK 的上升沿采样,下降沿发送。 |
1 | 0 | 1 | SCK 空闲时为低电平(0),数据在 SCK 的下降沿采样,上升沿发送。 |
2 | 1 | 0 | SCK 空闲时为高电平(1),数据在 SCK 的下降沿采样,上升沿发送。 |
3 | 1 | 1 | SCK 空闲时为高电平(1),数据在 SCK 的上升沿采样,下降沿发送。 |
- CPOL:定义 SCK 在空闲状态(无数据传输时)的电平(0 = 低电平,1 = 高电平)。
- CPHA:定义数据采样的时刻(0 = 第 1 个边沿采样,1 = 第 2 个边沿采样)。
示例(模式 0 的时序):
- SCK 空闲时为低电平(CPOL=0)。
- 主设备拉低 SS 线选中从设备,启动通信。
- 主设备发送 SCK 时钟,在 SCK 的上升沿(从低到高)采样 MISO 上的数据(读取从设备发送的位),在下降沿(从高到低)通过 MOSI 发送数据位。
- 8 个时钟周期后,主设备拉高 SS 线,结束通信。
四、SPI 的通信流程(单字节传输示例)
以 “模式 0” 和 “单个从设备” 为例,流程如下:
- 主设备拉低从设备的 SS 线(选中设备)。
- 主设备产生 SCK 时钟信号,同时通过 MOSI 线逐位发送数据(如 0x55)。
- 从设备在 SCK 的上升沿采样 MOSI 数据,同时通过 MISO 线逐位返回数据(如 0xAA)。
- 8 个时钟周期后,1 字节数据传输完成,主设备和从设备分别接收到对方的数据。
- 主设备拉高 SS 线(结束通信),从设备退出选中状态。
五、SPI 协议的优缺点
优点:
- 高速传输:同步通信 + 全双工,速率远高于 I2C(通常可达几十 MHz,甚至数百 MHz)。
- 结构简单:无需复杂的地址机制(通过 SS 线选择从设备),协议逻辑简单,易实现。
- 灵活性高:支持多从设备,可自定义数据位数(不限于 8 位)和时序模式。
- 全双工支持:可同时收发数据,适合需要双向高速通信的场景(如显示屏、无线模块)。
缺点:
- 信号线较多:相比 I2C(仅 2 根线),SPI 最少需要 3 根线(无 SS 时),多从设备时需更多 SS 线,不适合长距离布线。
- 无硬件应答机制:协议本身没有错误检测(如奇偶校验、ACK 信号),需软件实现校验(如 CRC)。
- 主从模式限制:必须有主设备控制,从设备不能主动发起通信。
六、SPI 的典型应用场景
- 短距离高速通信:如微控制器与传感器(加速度计、陀螺仪)、SD 卡、OLED 显示屏、无线模块(蓝牙、WiFi)的连接。
- 全双工需求场景:如数据采集系统(主设备发送配置指令,同时接收传感器数据)。
- 多从设备系统:如嵌入式主板连接多个外设(通过 SS 线独立控制)。
总结
SPI 是一种高效、灵活的同步串行通信协议,以高速全双工和简单结构为核心优势,适合短距离内主从设备的高速数据传输。理解其时序模式、信号线作用及与其他协议的差异,有助于在嵌入式开发中正确选型和实现通信功能。
更多内容全在下方专栏
全网最受欢迎的嵌入式笔试专栏
笔试专栏包含全部最新的笔试必考考点,非常适合在找工作面经薄弱的同学
3000+订阅还会涨价,提前订阅提前享受,持续更新中。
专栏链接:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
#嵌入式秋招##嵌入式#