SPI,IIC,UART对比

I2C、SPI和UART串行通信协议对比

1. I2C通信

特点:

  • 多主机和多从机
  • 两根线:SDA(数据线)和SCL(时钟线)
  • 通信速率:100kbps(标准模式)至3.4Mbps(高速模式)
  • 地址模式:7位或10位设备地址

通信时序:

  1. 起始信号:SDA从高电平拉低(SCL保持高电平)
  2. 设备地址:发送7位地址 + 读写位(0写/1读)
  3. 数据传输:每字节后接收方返回ACK/NACK
  4. 停止信号:SDA从低电平拉高(SCL保持高电平)

时序示例(发送0x12到地址0x50):

时间 0 1 2 3 4 5 6 7 8 9 10 11 12 13
__ __ __ __ __ __ __ __ __ __ __ __
SDA | S | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | P
↑ ↓ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↓ ↑
SCL —– ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑

  • S:起始条件
  • P:停止条件

初始化步骤:

  1. 配置SDA和SCL为推挽输出
  2. 设置时钟频率(如100kHz)
  3. 配置设备地址和读/写模式

2. SPI通信

特点:

  • 全双工通信
  • 四根线:MISO、MOSI、SCLK、SS
  • 速率:可达几Mbps
  • 时钟控制:主设备生成时钟

通信时序:

  1. 起始:SS拉低选择从机
  2. 时钟同步:SCLK由主机控制(CPOL/CPHA配置边沿)
  3. 数据传输:MOSI发送数据,MISO接收数据
  4. 停止:SS拉高

时序示例(发送0x12,CPOL=0, CPHA=0):

时间 0 1 2 3 4 5 6 7 8 9 10
SCLK –|–|–|–|–|–|–|–|–|–|–|–
MOSI | 0 1 0 0 1 0 0 1 0 1 | (发送数据)
MISO | | (接收数据)
SS |—|——————–|—| (选择从机)

  • 数据在SCLK上升沿采样

初始化步骤:

  1. 配置MISO/MOSI/SCLK/SS引脚
  2. 设置CPOL、CPHA、数据位数和速率
  3. 定义主/从模式

3. UART通信

特点:

  • 异步通信
  • 两根线:TX(发送)和RX(接收)
  • 速率:常见9600bps~115200bps

通信时序:

  1. 起始位:TX从高电平拉低
  2. 数据位:传输8位数据(LSB优先)
  3. 停止位:TX恢复高电平

时序示例(发送0x12):

时间 0 1 2 3 4 5 6 7 8 9 10 11
TX ↓ 1 0 0 0 1 0 0 1 0 1 ↑ (停止位)

  • 起始位(低)→ 数据位(0x12= 00010010)→ 停止位(高)

初始化步骤:

  1. 配置TX/RX引脚
  2. 设置波特率、数据位、校验位和停止位

4. 对比总结

特性 I2C SPI UART
线数 2(SDA, SCL) 4(MISO, MOSI, SCLK, SS) 2(TX, RX)
模式 多主多从 主从全双工 异步点对点
速率 100kbps~3.4Mbps 几Mbps 9600bps~115200bps
应用 低速多设备(如传感器) 高速短距(如Flash存储器) 长距异步通信(如调试口)

SPI,IIC,UART对比
https://chrisy0618.github.io/2025/04/15/20250416/
作者
Chris.Y
发布于
2025年4月15日
许可协议