一、协议基本特性对比
特性 | I²C | SPI | UART | CAN |
---|---|---|---|---|
通信类型 | 同步、半双工 | 同步、全双工 | 异步、全双工 | 异步、多主多从 |
信号线 | SDA(数据)、SCL(时钟) | MOSI、MISO、SCK、SS(片选) | TX(发送)、RX(接收) | CAN_H、CAN_L(差分信号) |
拓扑结构 | 多主多从(总线式) | 主从式(需片选) | 点对点 | 多主多从(总线式) |
最大速率 | 标准模式 100kbps,高速模式 3.4Mbps | 可达 100Mbps+ | 通常 ≤ 115200bps(部分可达 1Mbps) | 1Mbps(短距离)或 125kbps(长距离) |
错误检测 | 无 | 无 | 奇偶校验(可选) | CRC、ACK、错误帧自动重传 |
典型应用 | 传感器、EEPROM | 存储器、显示屏 | 调试接口、简单设备通信 | 汽车电子、工业控制 |
二、实现方式与工作原理
1. I²C(Inter-Integrated Circuit)
实现方式:
主设备控制时钟线(SCL),通过 SDA 发送地址和数据。
7/10 位地址寻址,支持广播模式。
开漏输出,需外接上拉电阻(通常 4.7kΩ)。
时序特点:
起始条件(SDA 下降沿时 SCL 高电平)、停止条件(SDA 上升沿时 SCL 高电平)。
每个字节后需接收方发送 ACK/NACK。
2. SPI(Serial Peripheral Interface)
实现方式:
主设备通过 SCK 提供时钟,MOSI 发送数据,MISO 接收从设备数据。
每个从设备需独立 SS 线,片选信号低电平有效。
时序特点:
时钟极性(CPOL)和相位(CPHA)需主从一致。
全双工传输,数据在时钟边沿采样。
3. UART(Universal Asynchronous Receiver/Transmitter)
实现方式:
无时钟线,依赖双方约定波特率(如 9600、115200)。
数据帧包括起始位(低电平)、数据位(5-9 位)、校验位(可选)、停止位(高电平)。
扩展协议:
RS232(电平转换,±3~15V)、RS485(差分信号,支持多点通信)。
4. CAN(Controller Area Network)
实现方式:
差分信号(CAN_H 和 CAN_L),总线两端需 120Ω 终端电阻。
基于消息优先级(ID 仲裁)的非破坏性冲突解决机制。
帧结构:
数据帧(ID、数据长度、数据域)、远程帧、错误帧、过载帧。
三、优缺点对比
协议 | 优点 | 缺点 |
---|---|---|
I²C | 引脚少、支持多设备、成本低 | 速度低、总线电容限制距离(通常 < 1m) |
SPI | 高速、全双工、无地址冲突 | 引脚多(每个从设备需 SS 线)、不支持多主 |
UART | 简单、点对点、广泛支持 | 速率低、无多设备支持、易受干扰 |
CAN | 高可靠性、抗干扰、支持多主 | 硬件复杂、成本高、速率受限 |
四、电路设计注意事项
1. I²C 设计要点
上拉电阻:根据总线速度和电容选择阻值(4.7kΩ~10kΩ),确保上升时间满足要求。
地址冲突:避免从设备地址重复,必要时使用地址扩展芯片(如 PCA9548)。
总线电容:总线上设备过多时,需降低速率或分段设计。
2. SPI 设计要点
信号完整性:
短距离布线,避免时钟偏移(SCK 与数据线长度匹配)。
高速场景使用阻抗控制走线(如 50Ω 单端)。
片选管理:多从设备时,使用 GPIO 扩展芯片或译码器减少引脚占用。
3. UART 设计要点
电平转换:
TTL 电平(3.3V/5V)需通过 MAX3232 等芯片转换为 RS232 电平。
长距离通信使用 RS485(差分信号,需 SN65HVD72 收发器)。
抗干扰:
添加 TVS 二极管(如 SMAJ5.0A)防护 ESD。
使用屏蔽双绞线(RS485)减少共模干扰。
4. CAN 设计要点
终端电阻:总线两端必须接 120Ω 电阻,消除信号反射。
布线规范:
双绞线布线(CAN_H 和 CAN_L 绞合),长度差 < 1cm。
避免分支(“T”型连接),采用菊花链拓扑。
共模滤波:添加共模扼流圈(如 WE-CMB)抑制高频噪声。
五、应用场景推荐
I²C:传感器网络(如温度传感器、加速度计)、低复杂度多设备控制。
SPI:高速数据传输(如 Flash 存储器、TFT 显示屏)、ADC/DAC 接口。
UART:设备调试日志输出、GPS 模块通信、简单主从控制。
CAN:汽车电子(ECU 通信)、工业自动化(PLC 网络)、机器人控制。
六、总结
I²C:低成本、多设备场景的首选,但需注意总线负载和速度限制。
SPI:追求高速和全双工时的最佳选择,但引脚资源消耗较大。
UART:简单点对点通信的理想方案,适合调试和短距离传输。
CAN:高可靠性和抗干扰需求的工业、汽车领域标配,但需复杂硬件支持。