【通信协议】串口、SPI和IIC通信协议小结
本文对比了UART、SPI和I²C三种通信协议的特性与应用场景。UART采用异步通信,简单可靠但速度较慢;SPI同步全双工传输,速度最快但引脚占用多;I²C仅需两根线支持多设备,但协议复杂速度较慢。选择时需考虑速度、引脚数量、设备规模等因素:高速选SPI,多设备选I²C,简单调试用UART,长距离通信可转换为RS-485标准。
目录
一、三种协议的对比
| 特性维度 | UART (串口) | SPI | I²C |
|---|---|---|---|
| 全称 | Universal Asynchronous Receiver/Transmitter | Serial Peripheral Interface | Inter-Integrated Circuit |
| 通信类型 | 异步 | 同步 | 同步 |
| 信号线 | TX, RX, GND (最少3线) | SCLK, MOSI, MISO, SS (每从机需1条SS线,4+N线) | SDA, SCL (2线) |
| 拓扑结构 | 点对点 | 一主多从 (星型) | 多主多从 (总线型) |
| 通信方式 | 全双工 | 全双工 | 半双工 |
| 数据寻址 | 无 (靠物理连接) | 硬件片选 (SS线) | 软件地址 (7位/10位) |
| 最高速度 | 约 115.2 kbps (常见),可达数Mbps | > 100 Mbps (非常快) | 标准模式 100 kbps,快速模式 400 kbps,高速模式 3.4 Mbps |
| 数据顺序 | 低位先行 | 高位先行 (通常,可配置) | 高位先行 |
| 应答机制 | 无 (靠软件校验) | 无 (靠软件校验) | 有 (硬件应答位) |
| 硬件复杂度 | 低 (MCU基本集成) | 中等 (连线多,尤其从机多时) | 低 (连线极少) |
| 软件复杂度 | 低 (配置波特率即可) | 低 (逻辑简单) | 中等 (需遵循状态机) |
| 优势 | 实现简单,全双工,历史悠久,成本低 | 速度极快,全双工,协议灵活简单 | 引脚最省,硬件地址,多主控,标准成熟 |
| 劣势 | 速度较慢,无时钟同步,点对点 | 引脚占用多(随从设备增加而增加),无硬件应答,无寻址 | 速度相对慢,半双工,协议复杂,有上拉电阻功耗 |
二、三种协议通信过程简述
串口通信实现方式(低位先行的数据传输)
串口通信是异步的,不需要时钟线,依赖双方预先约定好的参数进行通信。
核心步骤:
-
参数配置:通信双方必须事先配置完全相同的参数:
-
波特率:数据传输的速度(如9600, 115200)。
-
数据位:每个字节的数据长度(通常为8位)。
-
停止位:表示一个数据包结束的信号(通常为1位)。
-
校验位:用于简单的错误检测(奇校验、偶校验或无)。
-
-
通信过程:
-
空闲状态:线路保持在高电平。
-
起始位:发送方先将线路拉低一个时钟周期,作为一个字节传输开始的信号,同步接收方。
-
数据位:紧接着起始位,发送5-8个数据位(从最低位开始发送)。
-
校验位:(可选)发送一个校验位。
-
停止位:最后将线路拉高(至少1个时钟周期),表示该字节传输结束。
-
特点:硬件简单,仅需两根线(TX、RX)即可实现全双工,但效率相对较低,且依赖精确的波特率匹配。
SPI通信实现方式(常使用高位先行的数据交换)
SPI是同步、全双工的通信协议,由主设备完全控制时钟。
核心步骤:
-
硬件连接:主设备需要连接所有从设备的公共线(SCLK, MOSI, MISO),并为每个从设备提供一条独立的片选线。
-
通信过程:
-
初始化:主设备将目标从机的片选线电平拉低,激活该从机。
-
生成时钟:主设备产生时钟信号,通过SCLK线发送给从机。
-
数据传输:在时钟信号的每个周期内,主设备通过MOSI线向从机发送一位数据,同时从机也通过MISO线向主设备返回一位数据。一位数据发送和一位数据接收同时完成,实现全双工。
-
结束通信:通信完成后,主设备将片选线拉高,取消选中该从机。
-
特点:实现简单,速度非常快,是全双工通信。缺点是引脚占用多(尤其是从设备数量多时),没有硬件应答机制。
I²C通信实现方式(高位先行的数据传输)
I²C是同步、半双工的通信协议,仅使用两根线支持多主多从。
核心步骤:
-
硬件连接:所有设备(主、从)的SDA和SCL线分别连接在一起,并且通过上拉电阻接到电源。
-
通信过程:
-
起始条件:主设备在SCL为高电平时,将SDA从高拉低,表示一次传输的开始。
-
地址帧:主设备发送一个7位或10位的从机地址,后面紧跟一个读写位(表示主设备希望读取还是写入数据)。
-
应答位:被寻址的从机在收到地址匹配后,在第9个时钟周期将SDA线拉低,作为应答信号。
-
数据帧:主设备或从机开始发送8位数据。每发送完一个字节(8位),接收方必须在第9个时钟周期发送一个应答位。
-
停止条件:主设备在SCL为高电平时,将SDA从低拉高,表示本次传输的结束。
-
特点:硬件连接极其简单,支持多主设备和硬件地址寻址。缺点是协议相对复杂,速度较慢,是半双工通信。
三、如何根据需求选择使用的通信协议
-
要速度? -> 首选 SPI。
-
需要引脚少、设备多? -> 首选 I²C。
-
只是两个设备简单通信或调试? -> 首选 UART。
-
需要长距离通信? -> UART(可转换为RS-485标准实现长距离通信),I²C和SPI通常用于板内短距离通信。
更多推荐


所有评论(0)