I²C、SPI、UART、CAN 通信协议详解

发布于:2025-04-05 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、协议基本特性对比

特性 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:高可靠性和抗干扰需求的工业、汽车领域标配,但需复杂硬件支持。