跳转至

通信协议

本专题解释无人机系统中的数据怎样从电气信号变成可解释、可验证且可演进的协议契约。重点不是背诵协议名称,而是建立一套能够回答以下问题的方法:

  1. 两端通过什么物理接口交换数据;
  2. 接收端怎样识别一帧的开始、长度和结束;
  3. 字段采用什么字节序、单位、比例和有效条件;
  4. 校验能够发现哪些错误,不能防止哪些攻击;
  5. 丢帧、重复、乱序、延迟和重启后如何处理;
  6. 版本、扩展和工具不一致时怎样安全退化;
  7. 如何用抓包、解码器、计数器和一致性测试证明实现正确。

通信协议分层地图

适用范围

本专题覆盖常见开源无人机系统中的:

  • 通用异步收发器(UART,Universal Asynchronous Receiver/Transmitter)串行成帧;
  • 遥控接收机到飞控的CRSF、SBUS和Classic F.Port机内协议;F.Port 2.0与FBUS只说明不兼容边界;
  • 微型飞行器链路协议(MAVLink,Micro Air Vehicle Link)2;
  • 多旋翼飞行器串行协议(MSP,MultiWii Serial Protocol)v1、v2和显示端口扩展;
  • 数字油门协议(DShot,Digital Shot)、双向DShot和扩展DShot遥测;
  • 控制器局域网(CAN,Controller Area Network)、DroneCAN与Cyphal边界;
  • SmartAudio、Tramp和MSP图传控制;
  • 带宽、时延、完整性、认证、抓包、模糊测试和版本迁移。

本专题不替代:

09专题负责解释协议为什么这样工作、实现怎样判定正确以及兼容性如何验证。实体接线、端口配置、故障处置和飞行放行仍分别由对应专题负责。

固定版本基线

平台行为必须绑定版本,不能把滚动文档或master分支直接当作稳定版本事实:

平台 固定版本 固定提交
Betaflight 2026.6.2 e0b7bb01b17b21351057e9ead2d1ab39dd44fa16
INAV 9.1.0 e519b69b02e27c8bdc03b4a0889f1baaae211a54
ArduPilot Copter 4.7.1 dbe792162d06cab66c3475fd5556bf7a120f119e
PX4 v1.17.0 d6f12ad1c4f70ad3230afd7d86e971421e02fef4

协议依赖也固定到本次核验对象:

对象 固定版本或提交 用途
TBS CRSF规范 001b4058231c1d6f2288458500293a0f9de0a3de 帧、地址、命令和CRC
MAVLink C参考库 4fc2d3afba8a900cc2c7c010fb10771a5f8f767d MAVLink 2帧与签名实现
PX4 MAVLink子模块 33af200d25ec6f0925b49b1ba82bbf1294ea5f72 PX4 v1.17.0实际消息定义
ArduPilot MAVLink子模块 288b907c384a892c8519bfe271682424b1e1a3a0 Copter 4.7.1实际消息定义
DroneCAN规范网站 16bb2d07fe1afcfb3aafde44bdc40784f516d193 CAN传输规范
ArduPilot DroneCAN DSDL 04e0e818b06c180eb1720fcdf16484d0f12895ee Copter 4.7.1实际数据类型
Cyphal规范 efbcccd5696ec5cd96e083724f211780c4d80b2e Cyphal/CAN v1边界
Extended DShot Telemetry 438b87983b58369e3e46068b0b975634f4ea5416,v2.1.1 EDT类型、启停与时序
SmartAudio Revision 09 单线控制协议
MSP、DShot、DisplayPort、Tramp Betaflight 2026.6.2固定源码 线格式和固定实现行为

开放协议还要记录消息定义或数据类型仓库提交、生成器版本和本地修改。协议名称相同不代表消息集合、扩展字段、默认速率或安全策略相同。

六层阅读框架

主要问题 典型对象
物理与电气 电压、极性、单双工、终端和方向是否兼容 UART、CAN收发器、单线信号
链路与成帧 怎样发现边界、长度、地址和校验 起始字节、长度、CRC、序号
传输与调度 数据如何排队、仲裁、重试和限流 CAN仲裁、串口队列、半双工换向
消息与数据 字段如何解释 消息ID、单位、比例、枚举、有效标志
会话与状态 请求、响应、超时、恢复如何进行 命令确认、设备发现、参数事务
安全与治理 谁能发送、能否重放、怎样演进 签名、密钥、权限、版本和审计

一个系统可能在不同层复用不同标准。例如,接收机可以使用UART电气接口,在机内发送CRSF帧,而CRSF又承载通道、链路统计和设备管理消息。把三层都简称为“串口协议”会隐藏关键兼容条件。

接线与实现术语

术语 含义
发送端(TX,Transmit) 设备向外输出串行数据的信号端
接收端(RX,Receive) 设备接收串行数据的信号端
参考地(GND,Ground) 两端判断信号电压的共同参考,不等于任意大电流回路都可混接
推挽输出(Push-Pull Output) 输出级主动驱动高、低电平;两个推挽输出不得直接对接
开漏输出(Open-Drain Output) 输出级只主动拉低,释放后依赖上拉电阻形成高电平
应用程序编程接口(API,Application Programming Interface) 软件组件向调用方承诺的命令、数据和兼容契约
屏幕叠加显示(OSD,On-Screen Display) 在视频画面上叠加状态、字符或图形
视频发射机(VTX,Video Transmitter) 机载视频发送设备
数据结构描述语言(DSDL,Data Structure Description Language) DroneCAN/Cyphal用于定义可生成序列化代码的数据类型语言
数据长度码(DLC,Data Length Code) CAN帧用于表示数据字段长度的编码
总线关闭(Bus-off) CAN控制器错误计数达到阈值后停止参与总线的保护状态

学习顺序

  1. 在执行任何主动测试前,先完成附录B第0节安全与范围,并阅读第10篇的捕获和证据方法;不满足时只允许阅读和离线样本分析。
  2. 协议分层、契约与状态机
  3. UART、串行成帧与错误边界
  4. 遥控空口与机内CRSF、SBUS、Classic F.Port
  5. MAVLink 2帧、消息、签名与路由
  6. MSP v1、v2与DisplayPort
  7. DShot、双向遥测与扩展遥测
  8. CAN、DroneCAN与Cyphal边界
  9. SmartAudio、Tramp与图传控制
  10. 带宽、时延、完整性与认证
  11. 抓包、解码、一致性与版本迁移
  12. 附录A:四个平台协议入口
  13. 附录B:协议审查与测试卡

01与02是共同基础;03至08解释具体协议;09建立跨协议预算和安全模型;10把规范转成可重复证据。附录只用于查找和执行,不能代替正文中的边界判断。

证据等级

等级 证据 能支持的结论
P0 名称、界面或营销描述 只能建立待核验假设
P1 官方规范、固定版本源码或生成定义 能说明预期格式和实现
P2 已保存的线上原始字节、电气测量和双端计数 能说明该次链路实际发生了什么
P3 独立解码、反例、边界用例和重复测试 能说明实现与契约在给定范围内一致

界面显示“已连接”通常只属于应用层现象。没有原始帧、更新时间、错误计数和失效分支时,不能据此声称协议全部通过。

安全边界

协议测试能够产生真实控制、参数修改、重启、刷写或执行器命令。主动注入必须遵守:

  • 首选离线样本、单元测试和软件在环(SITL,Software In The Loop);
  • 需要真实控制器时使用硬件在环(HITL,Hardware In The Loop)或专用隔离台架;
  • 实体机必须拆除螺旋桨并固定,执行器动力级保持断开或物理失能;
  • 不向开放无线环境、他人设备、在役网络或飞行中的飞行器发送测试帧;
  • 不使用生产密钥测试伪造、重放或密钥错误;
  • 对CAN等共享总线,错误帧和高负载注入必须在独立测试总线上进行;
  • 接线、电平和终端变更必须断电完成。

只读抓包也要评估探头负载、公共地、隔离和敏感信息泄露。原始捕获可能包含设备身份、位置、任务和认证材料,应限制访问。

完成定义

某个协议只有同时满足以下条件,才能在指定组合中标记为“已验证”:

  • 两端硬件、固件、配置和协议定义已固定;
  • 电气接口、速率、方向和单双工模式已核对;
  • 帧边界、长度、校验和端序已由原始样本证明;
  • 正常、截断、超长、校验错误、未知消息和重启分支已测试;
  • 更新率、延迟、丢包、队列和错误计数达到预先定义的阈值;
  • 高风险命令的状态门禁、权限和拒绝结果已验证;
  • 版本升级和降级策略明确;
  • 测试环境、脚本、样本摘要和结论可由其他人复核。

专题完成只表示文档通过核验,不表示任何实体机、射频链路、参数组合或飞行任务已经获得放行。