IustitiaeのBlog
首页项目归档照片墙音乐说说笔记关于
封面
📓 笔记/📁 嵌入式/嵌入式通信协议UART、I2C、SPI对比详解

嵌入式通信协议UART、I2C、SPI对比详解

2026-06-27 15:00:00
# 单片机
# 通信协议
# UART
# I2C
# SPI

引言

在嵌入式系统中,通信协议是各模块之间对话的语言。UART、I2C 和 SPI 是最常用的三种串行通信协议——它们各自有着鲜明的性格特点,适用的场景也截然不同。理解它们的差异,是选择正确协议的前提。

一、UART —— 异步通信的经典

基本原理

UART(Universal Asynchronous Receiver/Transmitter)是一种异步、全双工、点对点的串行通信协议。它不需要共享时钟信号,通信双方通过预先约定相同的波特率来同步。

硬件连接

  • 最少 2 根线:TX(发送)、RX(接收)
  • 可选硬件流控:RTS、CTS

数据帧格式

┌─────────┬──────────────────┬──────────┬──────────┐
│ 起始位   │  数据位(5~9位)   │  校验位   │  停止位   │
│  (1位)   │   (通常8位)      │  (可选)   │ (1/2位)  │
└─────────┴──────────────────┴──────────┴──────────┘
  • 起始位:数据线从高拉低,通知接收方开始传输
  • 数据位:5~9 位(通常 8 位),LSB 先发
  • 奇偶校验位:可选,用于错误检测
  • 停止位:将数据线拉高,持续 1 位或 2 位时间

优缺点

优点缺点仅需 2 根线,简单易用仅支持点对点通信无需时钟信号数据帧最大 9 位有奇偶校验位两端波特率偏差不能超过约 10%可扩展为 RS-232/RS-485速度较慢(通常 ≤ 115200 bps)

二、I²C —— 多设备总线的优雅

基本原理

I²C(Inter-Integrated Circuit)是一种同步、半双工、多主多从的串行通信协议。它通过地址寻址方式选择通信目标设备。

硬件连接

  • 仅 2 根线:SDA(数据)、SCL(时钟)
  • 两条线都需要上拉电阻(通常 4.7KΩ)
  • 总线为开漏输出设计,支持多设备共享

通信时序

┌──────────────────────────────────────────────────────────────┐
│ 起始条件 │ 从机地址(7/10位)+R/W位 │ ACK │ 数据帧 │ ACK │ ... │ 停止条件 │
└──────────────────────────────────────────────────────────────┘
  • 起始条件:SCL 高电平时,SDA 由高→低
  • 停止条件:SCL 高电平时,SDA 由低→高
  • 地址帧:7 位或 10 位从机地址 + 1 位读写位
  • ACK/NACK:接收方拉低 SDA 表示确认

优缺点

优点缺点仅需 2 根线速度比 SPI 慢支持多主多从架构数据帧固定 8 位内置 ACK/NACK 确认协议复杂度较高地址寻址,节省 GPIO通信距离短(通常板内)

三、SPI —— 高速通信的王者

基本原理

SPI(Serial Peripheral Interface)是一种同步、全双工、主从架构的串行通信协议。它通过**片选信号(CS)**来选择通信目标。

硬件连接

  • 4 根线:
  • SCLK/SCK:时钟线(主机产生)
  • MOSI:主机输出、从机输入
  • MISO:主机输入、从机输出
  • SS/CS:片选信号(每个从机一条独立线)

4 种工作模式

模式CPOLCPHA说明模式 000空闲时钟低,第一个边沿采样(最常用)模式 101空闲时钟低,第二个边沿采样模式 210空闲时钟高,第一个边沿采样模式 311空闲时钟高,第二个边沿采样

传输过程

  1. 主机输出时钟信号
  2. 主机拉低目标从机的 CS 引脚,激活从机
  3. 主机通过 MOSI 发送数据,同时从机通过 MISO 返回数据(全双工)
  4. 传输完成后,主机拉高 CS 释放从机

优缺点

优点缺点速度最快(10~50 MHz)需要 4 根线,每增加从机多一根 CS全双工,可同时收发无内置错误检测和确认机制无起始/停止位,数据可连续流不支持多主机协议简单无标准协议层

四、三大协议全面对比

特性UARTI²CSPI通信方式异步同步同步双工模式全双工半双工全双工信号线数2 根2 根4 根拓扑结构点对点多主多从单主多从设备选择无(仅一对)地址寻址片选信号 CS典型速率9.6K115.2K bps100K/400K/3.4M bps10M50M bps数据帧大小5~9 位固定 8 位无限制(连续传输)错误检测奇偶校验位ACK/NACK无内置通信距离较长(RS-485 可达千米)短(板内 <1m)短(<0.5m)复杂度中等较高简单

五、选型指南 —— 什么时候选谁?

🟢 选 UART 的场景

  • 调试与日志输出:嵌入式开发中最常用的调试手段
  • PC 与 MCU 通信:通过 USB 转串口连接
  • GPS/GSM/蓝牙模块:点对点无线通信模块
  • 工业远距离通信:配合 RS-232/RS-485 电平转换

🔵 选 I²C 的场景

  • 多传感器网络:温湿度传感器(SHT30)、气压传感器(BMP280)
  • EEPROM 存储:AT24Cxx 系列
  • RTC 实时时钟:DS3231、PCF8563
  • GPIO 扩展/ADC/DAC:需要节省引脚资源
  • OLED 小屏幕:SSD1306 等

🔴 选 SPI 的场景

  • 高速数据存储:NOR Flash(W25Qxx)、SD 卡
  • TFT 彩屏驱动:ST7789、ILI9341
  • 高速 ADC/DAC:音频采集、高速采样
  • WiFi 模块:部分高速无线模块

六、总结口诀

速度排名:  SPI  >>  I²C  >  UART
引脚数量:  SPI(4+) >  UART(2~4)  >  I²C(2)
设备扩展:  I²C(地址寻址)  >  SPI(片选)  >  UART(仅点对点)
协议复杂度:I²C  >  UART  >  SPI
通信距离:  UART(远)  >>  I²C(短)  ≈  SPI(短)
可靠性:   I²C(ACK)  >  UART(校验)  >  SPI(无内置)

没有最好的协议,只有最合适的协议。在实际项目中,三种协议往往是配合使用的——用 UART 调试通信,用 I²C 挂载传感器,用 SPI 驱动屏幕和存储。各取所长,才是正道。

avatar

Iustitiae

在代码、单片机,电机控制模拟间穿梭的普通人。近期正埋头于 freerots学习。

2026年6月

一
二
三
四
五
六
日
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

Recent Records

比较器基础——输出级、输入范围与颤振的解决之道

2026-08-03 12:00:00

MOS管基础——从电压控制的电子开关到电源开关与防反接

2026-08-03 12:00:00

三极管基础——从小电流撬动大电流的放大器到电子开关

2026-07-29 12:00:00