UART、I²C 与 SPI 怎样传输数据
UART:双方约定时间,没有共享时钟线
空闲通常为高,发送端先给起始位,再按约定波特率发送数据位,最后给停止位。双方若波特率、数据位、校验或停止位不一致,字节会错帧。
I²C:共享时钟与数据线,用地址选择设备
SCL、SDA 通常为开漏并依靠上拉。SCL 为高时 SDA 的下降沿表示 START,上升沿表示 STOP;每 8 位数据后由接收方在第 9 个时钟给 ACK/NACK。地址不是“传感器寄存器地址”,设备地址与设备内部寄存器地址属于不同层。
SPI:控制器提供时钟和片选
常见四线为 SCLK、CS、MOSI、MISO。每个时钟边沿同时移出一位、采入一位;CPOL/CPHA 决定空闲电平与采样边沿。SPI 没有统一的帧、地址和错误处理语义,必须以器件协议定义为准。
选择不是速度排行榜
| 维度 | UART | I²C | SPI |
|---|---|---|---|
| 时钟 | 双方约定 | 共享 SCL | 控制器 SCLK |
| 典型线数 | TX/RX | SDA/SCL | SCLK/CS/MOSI/MISO |
| 多设备 | 额外拓扑 | 总线地址 | 多片选或级联 |
| 电气层 | 常为推挽逻辑电平 | 开漏 + 上拉 | 常为推挽 |
| 标准错误信号 | 帧/奇偶错误 | ACK/NACK、仲裁 | 通常由上层协议定义 |
接口名称不等于完整兼容性。还要核对电压域、逻辑阈值、线长、上拉、负载、电磁环境、帧格式和器件时序。
下一步:外设与协议波形实验。