[具身智能-589]:RS485 / I2C / SPI / CAN 总线完整选型对比
📅 2026/7/21 5:39:45
👁️ 阅读次数
📝 编程学习
覆盖:硬件拓扑、寻址方式、速率、距离、多从机、寄存器访问、帧边界、抗干扰、适用场景、优缺点、选型决策。
基础统一前提
- I2C/SPI:板载短距离同步总线;RS485/CAN:长线工业差分异步总线
- I2C/SPI 底层无上层协议,寄存器读写、多设备寻址靠硬件时序 / 指令;
- RS485 裸口无协议,必须搭载Modbus-RTU才能实现一主多从寄存器读写;
- CAN 自带完整硬件帧协议,天然支持多节点、错误重传、仲裁。
一、四大核心维度详细拆解
1. 多从设备区分机制
- I2C帧内置 7 位硬件从地址;每条总线 SDA/SDA 并联所有设备,硬件自动 ACK 匹配地址,无需额外 GPIO。 上限:7 位地址最多 112 个有效节点。
- SPI无总线地址;每个从机独占独立 CS 片选 GPIO;同一时间仅拉低 1 路 CS,分时访问。 节点越多占用 GPIO 越多,理论无上限,但硬件布线成本高,并非真正总线拓扑。
- RS485(Modbus-RTU)物理层无寻址;依靠上层 Modbus 帧首 1 字节从站地址区分设备; 总线半双工,同一时刻只能一台设备发送,软件轮询避免总线冲突;标准单总线 32 节点。
- CAN硬件帧自带 11/29 位 ID,ID 同时作为设备标识 + 报文功能标识; 硬件载波仲裁,多节点同时发时自动保留高优先级 ID,无需主机轮询;单总线标准 32~110 节点。
2. 访问从机内部寄存器 / 地址空间
- I2C寻址字节后紧跟寄存器偏移地址;标准时序固定「写寄存器地址 → 重复起始读数据」; 底层裸接口仅原始字节收发,寄存器逻辑上层代码拼接。
- SPI每次传输首字节封装读写标志 + 寄存器偏移(Bit7 = 读 / 写,低 7 位地址); 读操作需填充 Dummy 字节产生时钟同步读取 MISO 数据;硬件支持地址自增实现批量读写。
- RS485+Modbus依靠上层协议字段:功能码(操作类型)+2 字节起始寄存器偏移 + 读写长度; 标准化四类地址空间(线圈、离散输入、保持寄存器、输入寄存器)。
- CANCAN 底层无寄存器概念,无内置地址空间规范; 寄存器读写需要自定义应用层协议(如 CANopen、自定义协议),将寄存器偏移封装在 8 字节数据域内。
3. 多字节连续批量传输
- I2C外设硬件地址自增,发送一次起始偏移后持续收发多字节;主机通过 ACK/NACK 控制传输长度。
- SPI硬件地址自增,持续输出 SCK 时钟批量收发;读操作填充对应数量 Dummy 字节。
- Modbus-RTU(RS485)帧内置2 字节长度字段,明确本次读写寄存器数量;从机应答携带数据长度头,批量传输标准化。
- CAN单帧最大 8 字节负载;大批量数据需分包传输(CANopen SDO 分段、自定义分包),硬件无批量自动寻址能力。
4. 帧边界识别机制
- I2C专用硬件时序:START/STOP/ 重复 START 分割完整传输会话,硬件天然区分帧。
- SPI完全依靠 CS 片选电平:CS 拉低 = 帧开始,CS 拉高 = 帧结束;无内置时序标记。
- RS485 Modbus-RTU依靠总线空闲时序:≥3.5 字符静默判定一帧结束,再校验 CRC16 分割报文;物理串口无帧边界标识。
- CAN硬件固定帧结构(SOF、ID、DLC、CRC、EOF),控制器硬件自动识别帧起止,无需软件计时。
5. 电气、速率、传输距离、抗干扰
表格
| 总线 | 信号线 | 电平 | 最高速率 | 典型距离 | 差分抗干扰 | 拓扑限制 |
|---|---|---|---|---|---|---|
| I2C | SDA、SCL 2 单端开漏 | 3.3V/5V | 400kHz 快速模式 | <50cm 板内 | 极差,单端易受干扰 | 仅 PCB 板载,禁止长线 |
| SPI | SCK、MOSI、MISO、CS | 3.3V/5V 推挽 | 几十 MHz | <30cm 板内 | 极差,单端 | 点对点分时,多设备多 CS 引脚 |
| RS485 | A/B 差分双线 | 差分 ±2~6V | 115200bps@100m,9.6k@1200m | 最长 1200m | 优秀,抑制共模干扰 | 总线并联半双工,需终端 120Ω 电阻 |
| CAN 2.0A/B | CAN_H/CAN_L 差分双线 | 差分 1.5V | 1Mbps@40m,125k@1000m | 最长 1000m | 工业顶级抗干扰,带硬件错误检测 | 总线并联,两端 120Ω 终端电阻 |
6. 通信模式、总线冲突处理、容错能力
- I2C:纯主从,无硬件冲突仲裁;SDA 卡死低电平直接总线锁死,无硬件错误重传。
- SPI:纯主从,分时 CS 隔离,天然无冲突;无校验、无错误检测,全靠上层软件校验。
- RS485 Modbus:严格一主多从轮询,禁止从机主动上报;仅软件 CRC 校验,总线短路无硬件保护,无自动重传。
- CAN:多主对等架构,硬件 ID 仲裁,支持节点主动上报;内置 CRC、位错误、填充错误检测,硬件自动重传、故障节点自动离线隔离。
二、综合对比总表
表格
| 对比项 | I2C | SPI | RS485(Modbus-RTU) | CAN2.0 |
|---|---|---|---|---|
| 拓扑类型 | 板内同步总线 | 板内分时点对点 | 长线半双工差分总线 | 长线多主差分总线 |
| 设备寻址 | 硬件 7 位从地址 | 独立 GPIO CS 片选 | Modbus 帧从站地址 | 硬件 11/29 位 CAN ID |
| 寄存器原生支持 | 硬件时序自带寄存器偏移 | 指令字节内置寄存器地址 | Modbus 标准化寄存器模型 | 底层无寄存器,依赖上层协议 (CANopen) |
| 帧分割方式 | START/STOP 时序 | CS 高低电平 | 3.5 字符空闲时序 | 硬件帧头帧尾标识 |
| 最大节点数 | 112 | 无上限 (受 GPIO 限制) | 32 | 32~110 |
| 传输距离 | 板内<0.5m | 板内<0.3m | 最远 1200m | 最远 1000m |
| 最高速率 | 400kHz | 数十 MHz | 115200bps | 1Mbps |
| 差分抗干扰 | 无,单端 | 无,单端 | 良好 | 极强(车载 / 工业首选) |
| 总线架构 | 一主多从 | 纯主从分时 | 一主多从轮询 | 多主对等,支持主动上报 |
| 错误处理 | 无硬件容错 | 无校验容错 | 软件 CRC 校验 | 硬件 CRC、仲裁、自动重传、故障隔离 |
| 终端匹配电阻 | 不需要 | 不需要 | 总线两端 120Ω | 总线两端 120Ω |
| 典型负载 | 板载传感器、EEPROM、OLED、ADC | 高速 Flash、ADC、屏幕、射频模块 | 车间仪表、变频器、远程传感器 | 车载、机器人底盘、多设备联动、安全控制 |
三、各总线优缺点总结
I2C
✅ 优势:仅 2 根线、占用引脚少、原生一主多从、时序标准简单、外设生态极丰富;
❌ 劣势:距离极短、单端抗干扰差、总线卡死风险、速率低;
适用:设备PCB 内部短距离小传感器。
SPI
✅ 优势:速率极高、全双工、时序简单、连续高速传输;
❌ 劣势:多设备需要大量 CS GPIO、无总线地址、距离极短、无硬件校验;
适用:板内高速外设(Flash、LCD、高速 ADC)。
RS485 + Modbus-RTU
✅ 优势:长线差分、成本低、工业仪表通用标准、一主多从采集成熟;
❌ 劣势:只能一主多从轮询、从机不能主动上报、无硬件错误重传、总线短路易损坏芯片;
适用:厂房远距离传感器、变频器、温湿度仪表采集,低成本多从采集。
CAN 2.0
✅ 优势:多主对等、节点主动上报、硬件仲裁 + 错误重传、工业最强抗干扰、长距离稳定;
❌ 劣势:单帧数据最大 8 字节、大批量数据需分包、控制器成本高于 485;
适用:机器人底盘、车载设备、多节点联动控制、高可靠性工业设备。
四、快速选型决策指南
- 电路板内部、短距离、多小型传感器(温感、EEPROM、OLED)→I2C
- 电路板内部、高速传输(Flash、高速 ADC、显示屏)→SPI
- 车间远距离、大量仪表采集、成本敏感、主机轮询读取数据,不支持主动上报→RS485 Modbus
- 机器人 / 车载、多设备主动上报、高电磁干扰、需要故障自动容错、多节点对等通信 →CAN 总线。
编程学习
技术分享
实战经验