跳转至

嵌入式通讯协议

嵌入式系统的核心工作之一是让芯片与外设、传感器、电机驱动器"对话"。掌握通讯协议,就掌握了嵌入式系统的"神经网络"。


一、为什么需要多种协议?

不同的应用场景对通讯有不同要求:速度、距离、设备数量、实时性、成本。这就是为什么嵌入式世界中有那么多协议并存。

mindmap
  root((嵌入式通讯))
    芯片内/板级
      SPI - 高速外设
      I²C - 多传感器总线
      UART - 调试 · 模块通信
      1-Wire - 温度传感器
    板间/设备间
      CAN Bus - 汽车 · 机器人
      RS485/Modbus - 工业控制
      RS232 - 老设备
    无线
      蓝牙 BLE
      WiFi
      LoRa
    高速/工业以太网
      EtherCAT - 高实时
      USB - PC 接口

二、协议横向对比

基础参数对比

协议 信号线数 拓扑 双工 最大速率 最大距离 典型应用
UART 2(TX/RX) 点对点 全双工 ~10 Mbps ~15 m(TTL)/ 更远(RS232) 调试、GPS、蓝牙模块
SPI 4+(CLK/MOSI/MISO/CS) 一主多从 全双工 ~50 Mbps <1 m(板内) Flash、LCD、ADC、编码器
I²C 2(SCL/SDA) 一主多从 半双工 3.4 Mbps <1 m MPU6050、气压计、OLED
CAN Bus 2(差分 CANH/CANL) 多主总线 半双工 1 Mbps ~40 m@1Mbps 汽车 ECU、机器人电机驱动器
RS485 2(差分 A/B) 多主/主从 半双工 10 Mbps ~1200 m 工业步进驱动器、Modbus
RS232 3+(TX/RX/GND) 点对点 全双工 ~1 Mbps ~15 m 老式设备、工控机接口

电气特性对比

协议 电平标准 抗干扰能力 说明
UART (TTL) 0/3.3V 或 0/5V 单端信号,怕电磁干扰
SPI 0/VCC 单端 板内使用,短距离
I²C 0/VCC 开漏上拉 板内,有地址冲突风险
CAN 差分 ±2V 高抗干扰,车载环境设计
RS485 差分 ±2.5V 长距离工业首选
RS232 ±3V ~ ±25V 电平摆幅大,历史遗留

三、各协议典型应用场景

传感器通讯

传感器类型 推荐协议 代表芯片 理由
6轴 IMU I²C / SPI MPU6050(I²C)、ICM42688(SPI) 高速采样用 SPI
气压计 I²C / SPI BMP280、MS5611 低速传感器,I²C 足够
温湿度 I²C / 1-Wire SHT30、DHT22、DS18B20 简单外设
磁编码器 SPI / I²C AS5048B(SPI)、AS5600(I²C) 高精度用 SPI
激光雷达 UART / ETH RPLIDAR、Livox 数据量大用高速接口
深度相机 USB / ETH D435、L515 图像数据带宽需求
GPS UART ublox NEO-M8N NMEA 协议

电机驱动器通讯

驱动器类型 协议 代表产品 说明
大疆电调 CAN Bus M3508、M2006、GM6020 1 Mbps CAN,指令+反馈
宇树电机 CAN Bus / RS485 A1、GO1 关节电机 自定义 CAN 帧
工业步进驱动器 RS485 Modbus 雷赛 DM332、奥托 标准 Modbus RTU
舵机总线 UART Dynamixel、飞特舵机 半双工 TTL 总线
RC 电调(无刷) PWM / DSHOT 通用 ESC 1~2ms 脉宽或数字协议
商业伺服驱动器 EtherCAT / CANopen 汇川、西门子 工业自动化

四、选型建议

flowchart TD
    Q1{"需要多少设备?"}
    Q1 --> |"1对1"| Q2{"速率要求?"}
    Q1 --> |"多个设备"| Q3{"主要需求?"}

    Q2 --> |"< 10 Mbps"| R1["UART<br>简单、通用"]
    Q2 --> |"> 10 Mbps"| R2["SPI<br>高速板内"]

    Q3 --> |"传感器为主"| R3["I²C<br>2根线挂多个传感器"]
    Q3 --> |"抗干扰/长距"| Q4{"工业总线?"}
    Q3 --> |"高实时电机控制"| R5["CAN Bus<br>机器人/车载首选"]

    Q4 --> |"是"| R6["RS485 + Modbus<br>工业标准"]
    Q4 --> |"否"| R7["SPI 多CS<br>板内多从机"]

五、本章笔记索引

笔记 覆盖协议 主要内容
UART / USART UART、RS232、USART 异步串口原理、STM32 HAL、Linux pyserial、调试技巧
SPI SPI、QSPI 同步串口原理、STM32 HAL、Linux spidev、编码器接线
I²C I²C、SMBus 总线仲裁原理、STM32 HAL、Linux smbus2、传感器实战
CAN Bus CAN 2.0A/B、CANopen 差分总线原理、STM32 bxCAN/FDCAN、Linux SocketCAN、大疆电机
RS485 / Modbus RS485、Modbus RTU/TCP 长距离通讯、STM32 半双工实现、Linux pymodbus、步进驱动器

学习路径建议

  1. 先掌握 UART — 调试入门,几乎所有项目都用到
  2. 再学 I²C — 快速接传感器
  3. 然后 SPI — 需要速度时上
  4. 最后 CAN Bus — 做机器人/电机控制必须掌握
  5. RS485/Modbus — 对接工业设备时学