03-电子与通信-通信协议

作者:姚博文 · 2026-09-15

通信协议(车载总线:UART / SPI / I2C / CAN / PWM)

定位:车板上各器件"说话"的方式——五种总线的原理、对比、CAN 帧详解与工程要点 | 适用:智能小车/移动机器人开发

1\. 概述

1.1 这篇解决什么问题

一辆智能小车上通常有:2 个电机驱动器、1~2 个 IMU、编码器(2~4 路)、电池 BMS、

激光雷达、调试屏、GPS……它们和主控之间**每根线走什么协议、什么速率、怎么接线、

什么情况下会出鬼**,是硬件联调阶段最大的时间黑洞。

本文覆盖:

1. UART / SPI / I2C / CAN(CAN-FD) / PWM 五种总线的基本原理与对比选型;

2. **CAN 帧格式逐位详解**(标准帧/扩展帧、仲裁机制、位填充、CAN 2.0A/B 的 ID 区别);

3. CAN 总线工程要点(终端电阻、bus-off 恢复、波特率配置、共模电压);

4. 各典型设备(IMU/编码器/电机/激光雷达/电池)的总线映射表;

5. I2C 上拉电阻、地址冲突等常见错误的完整踩坑清单。

1.2 在自主导航链路中的位置

总线本身不产生智能,但**数据质量决定智能上限**:编码器脉冲丢了 → 里程计漂 → 定位漂;

IMU 读错 → 姿态错 → 控制错。总线选型的第一标准是**确定性与时序可靠**,第二才是带宽。

2\. 基本原理

2.1 UART(异步串行,Universal Asynchronous Receiver-Transmitter)

· 两根线:TX(发送)、RX(接收),外加共地;全双工(收发同时)。

· 异步:无时钟线,收发双方靠**约定好的波特率**(baud rate)自行采样,

起始位(低电平)触发接收,按"波特率"节奏采样每个比特。

· 帧格式(最常用 8N1):

· 无校验(可加 1 位奇偶校验位)、无应答——错误只能靠上层协议(CRC/重传)兜底;

· 点对点:一根 TX 只能对一个 RX。要一对多用 485/422 或 GPIO 模拟多路;

· 速率:常见 9600 ~ 921600 bps;线短 (<1 m) 时 1~3 Mbps 也可行,但裕量小。

2.2 SPI(同步串行,Serial Peripheral Interface)

· 四根线(每设备):SCK(时钟)、MOSI(主机出)、MISO(从机出)、CS(片选,低有效)。

· **同步**:主机产生时钟,从机在时钟边沿采样/驱动——时序确定,适合高速。

· 全双工:MOSI 与 MISO 同时传输(一个方向没数据时发废字节)。

· 速率:通常 10~50 MHz(具体看从机),比 UART 快 1~2 个数量级。

· 无地址、无应答:CS 拉低即选中某从机,**读数据靠"发一个读命令字节/空字节"触发**;

· 四种时钟模式(CPOL 空闲电平 / CPHA 采样边沿):

| 模式 | CPOL | CPHA | 空闲电平 | 采样边沿 |

| --- | --- | --- | --- | --- |

| 0 | 0 | 0 | 低 | 上升沿(第 1 边沿采样) |

| 1 | 1 | 0 | 高 | 下降沿(第 1 边沿采样) |

| 2 | 0 | 1 | 低 | 下降沿(第 2 边沿采样) |

| 3 | 1 | 1 | 高 | 上升沿(第 2 边沿采样) |

💡 SPI 第一大坑:**主机和从机模式必须一致**(查从机 datasheet 的 "SPI mode"),
不一致的症状是"能通信但数据全错/全 0",比不通信难查。

· 多从机:共享 SCK/MOSI/MISO,每设备独立 CS;MISO 是"线与"