SPI,IIC,UART对比
I2C、SPI和UART串行通信协议对比
1. I2C通信
特点:
- 多主机和多从机
- 两根线:SDA(数据线)和SCL(时钟线)
- 通信速率:100kbps(标准模式)至3.4Mbps(高速模式)
- 地址模式:7位或10位设备地址
通信时序:
- 起始信号:SDA从高电平拉低(SCL保持高电平)
- 设备地址:发送7位地址 + 读写位(0写/1读)
- 数据传输:每字节后接收方返回ACK/NACK
- 停止信号: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:停止条件
初始化步骤:
- 配置SDA和SCL为推挽输出
- 设置时钟频率(如100kHz)
- 配置设备地址和读/写模式
2. SPI通信
特点:
- 全双工通信
- 四根线:MISO、MOSI、SCLK、SS
- 速率:可达几Mbps
- 时钟控制:主设备生成时钟
通信时序:
- 起始:SS拉低选择从机
- 时钟同步:SCLK由主机控制(CPOL/CPHA配置边沿)
- 数据传输:MOSI发送数据,MISO接收数据
- 停止: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上升沿采样
初始化步骤:
- 配置MISO/MOSI/SCLK/SS引脚
- 设置CPOL、CPHA、数据位数和速率
- 定义主/从模式
3. UART通信
特点:
- 异步通信
- 两根线:TX(发送)和RX(接收)
- 速率:常见9600bps~115200bps
通信时序:
- 起始位:TX从高电平拉低
- 数据位:传输8位数据(LSB优先)
- 停止位: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)→ 停止位(高)
初始化步骤:
- 配置TX/RX引脚
- 设置波特率、数据位、校验位和停止位
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/