从芯片级的 SPI / I²C / UART,到现场总线的 RS485 / CAN / Modbus。

一、板级总线

SPI协议

SPI 是高速同步串行总线,主设备提供时钟,MOSI、MISO 分方向传数据,片选区分从设备。模式由 CPOL 与 CPHA 四个组合决定采样边沿,Flash、ADC、显示屏常用。没有内建寻址,一根片选对应一个从机。全双工让读的同时可以写,适合大块数据。

接线注意地线和时钟线长度,过快的时钟在飞线阶段容易采错。片选空闲电平、位序 MSB/LSB 要和器件手册一致。多从机不要共用 MISO 却忘了三态。调试用逻辑分析仪对齐时钟与数据。软件模拟 SPI 能救急,但实时性差。把模式、速率和片选脚写成驱动配置,换芯片时只改表。SPI 求快,I2C 求省脚,选型看吞吐而不是习惯。

I²C总线协议

I²C 用 SDA、SCL 两根开漏线加上拉,支持多主多从。7 位地址加读写位组成第一字节,应答位确认从机还在。速率常见 100k、400k,高速模式要更严格的上拉和布线。传感器、EEPROM、电源管理芯片大量使用它,因为省脚。

上拉电阻太大边沿慢,太小灌电流不够。总线挂死时常是从机卡住拉低 SDA,需要时钟脉冲把状态机踢走。地址冲突要用扫描确认。长线要降速或加缓冲。调试先看有没有 ACK,再看寄存器读写是否符合手册页地址。重复起始能在一次传输里切写读。把超时和错误恢复写进驱动,现场才不会因为一次噪声永远卡死总线。

UART

UART 是异步串口,用起始位、数据位、校验位和停止位在 TX/RX 两根线上传字节,双方必须约定相同波特率。它没有时钟线,因此对波特率误差敏感,常见 9600 到 115200。

硬件上注意电平和交叉连接:MCU 的 3.3V TTL 不能直接接 RS-232。流控可用 RTS/CTS,短线调试常省掉。中断接收要防溢出,DMA 更适合持续日志。协议层应加帧头、长度和校验,不要假设字节流永远对齐。接地和共地不良会造成乱码。调试时先用环回测试确认收发器,再查电缆与波特率。

二、工业串行总线

RS232、RS422、RS485

RS-232 是点对点全双工,电平 ±3~±15V,距离短。RS-422 差分全双工,可一主多从。RS-485 差分半双工多点。三者都是物理层,不定义应用帧。

接线:232 要 TX/RX/GND,交叉才通。422/485 看 A/B 极性,接反会全是乱码。USB 转串口注意驱动与流控(RTS/CTS)。

选型:桌面调试用 232,工业现场用 485。混合时用转换器并共地。软件上统一用串口 API,用协议(Modbus 等)区分设备。冲突问题多出在 485 半双工未关发送。

RS485

RS-485 是差分串行总线,抗干扰强,适合几百米多设备。半双工时收发要切 DE/RE 引脚,发完再听。终端电阻 120Ω 在总线两端。多点最多约 32 个单位负载,加中继可扩展。

波特率、校验位必须与从机一致。地电位差大会烧毁芯片,注意共地或隔离。冲突表现为 CRC 错与偶发超时。菊花链布线优于星型。

和 RS-232 比:485 多点、更远;232 点对点。USB 转 485 芯片(CH340/FT232+485)在 PC 调试常用。协议层另说,485 只保证电气。

Modbus协议

Modbus 是工控常用主从协议:RTU 走串口,TCP 走 502 端口。功能码读线圈、寄存器。地址从 0 或 1 开始要和设备手册对齐。CRC(RTU)与 MBAP(TCP)校验不同。

一主多从时从站地址不能冲突。超时与重试要按总线负载调。网关常做 TCP 转 RTU。写多个寄存器要注意原子性与字节序(大小端)。

排障用串口工具抓帧。不要在 UI 线程同步读。Android 可通过 USB-OTG 转 485 芯片。安全上 Modbus 明文,产线应隔离网段,不能直接暴露公网。

电总协议

电总协议是中国通信行业蓄电池与电源监控常用的串口规约,俗称“部颁协议”。它规定主站如何查询模块电压、电流、告警和开关量,从站按固定帧格式应答。帧里通常有地址、命令字、数据和校验。机房里的开关电源、蓄电池巡检仪很多都实现这一套,好接入动环系统。

对接时先确认波特率、校验位和设备地址,再用串口工具抓一帧对照文档。多设备共线时地址不能冲突。告警点要和现场实际继电器对应,否则监控室会误报。升级固件后核对命令字是否兼容。电总协议胜在简单稳定,不适合当通用物联网协议去扩展复杂对象模型。把点表和寄存器含义写成配置,比把解析写死在代码里更经得起换型号。

三、汽车与无人机总线

CAN协议

CAN 是控制器局域网总线,用差分对传输,仲裁靠标识符优先级:ID 越小越优先。帧有标准 11 位和扩展 29 位。错误帧、重传和 CRC 让短距离工业与汽车环境很稳。物理层常见 125k 到 1M,终端电阻 120 欧要在总线两端。上层有 CANopen、J1939、ISO-TP 等。

布线要双绞、远离动力线,节点接地策略要统一。波特率必须全网一致。调试用 USB-CAN 看错误计数和应答位,没人应答时发送节点会报错。滤波在控制器里配,避免 CPU 被无关帧打断。负载率长期过高会让低优先级帧饿死。改 DBC 文件要版本化。CAN 适合周期控制和状态广播,大数据块应切分或改用其他链路。

DroneCan总线协议

DroneCAN 源于 UAVCAN v0,跑在 CAN 总线上,给无人机外设(电调、GPS、空速计)提供标准消息。节点有唯一 ID,用 DSDL 描述数据类型,支持广播遥测和请求响应式配置。

布线遵循 CAN 的 120 欧终端和双绞线,波特率常为 1Mbps。ID 冲突会导致总线异常,上电要用分配机制或预置。固件升级可通过协议走文件传输,但应在地面完成。调试看 bus load 和错误帧,而不是只看飞控日志。新项目可评估 UAVCAN v1 / Cyphal,但存量生态仍以 DroneCAN 设备为主。不要把高带宽视频塞进 CAN。

doip协议

DoIP(Diagnostics over IP)把整车诊断从传统 CAN 诊断扩展到以太网,对应 ISO 13400。它让诊断仪通过 TCP 与车载网关通信,承载 UDS 服务,适合刷写大容量 ECU 和高速数据采集。

实现上要处理车辆识别、路由激活、连接保活和安全访问。车载网络必须隔离诊断网段,避免诊断口直接打到关键域。刷写要有断电保护和完整性校验。实验室可用仿真节点,实车则要注意唤醒与电源模式。和 CAN 诊断并存时,网关负责协议转换。开发文档应写清逻辑地址与功能地址,否则多 ECU 环境会路由错目标。