通信协议¶
本专题解释无人机系统中的数据怎样从电气信号变成可解释、可验证且可演进的协议契约。重点不是背诵协议名称,而是建立一套能够回答以下问题的方法:
- 两端通过什么物理接口交换数据;
- 接收端怎样识别一帧的开始、长度和结束;
- 字段采用什么字节序、单位、比例和有效条件;
- 校验能够发现哪些错误,不能防止哪些攻击;
- 丢帧、重复、乱序、延迟和重启后如何处理;
- 版本、扩展和工具不一致时怎样安全退化;
- 如何用抓包、解码器、计数器和一致性测试证明实现正确。

适用范围¶
本专题覆盖常见开源无人机系统中的:
- 通用异步收发器(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控制器错误计数达到阈值后停止参与总线的保护状态 |
学习顺序¶
- 在执行任何主动测试前,先完成附录B第0节安全与范围,并阅读第10篇的捕获和证据方法;不满足时只允许阅读和离线样本分析。
- 协议分层、契约与状态机
- UART、串行成帧与错误边界
- 遥控空口与机内CRSF、SBUS、Classic F.Port
- MAVLink 2帧、消息、签名与路由
- MSP v1、v2与DisplayPort
- DShot、双向遥测与扩展遥测
- CAN、DroneCAN与Cyphal边界
- SmartAudio、Tramp与图传控制
- 带宽、时延、完整性与认证
- 抓包、解码、一致性与版本迁移
- 附录A:四个平台协议入口
- 附录B:协议审查与测试卡
01与02是共同基础;03至08解释具体协议;09建立跨协议预算和安全模型;10把规范转成可重复证据。附录只用于查找和执行,不能代替正文中的边界判断。
证据等级¶
| 等级 | 证据 | 能支持的结论 |
|---|---|---|
| P0 | 名称、界面或营销描述 | 只能建立待核验假设 |
| P1 | 官方规范、固定版本源码或生成定义 | 能说明预期格式和实现 |
| P2 | 已保存的线上原始字节、电气测量和双端计数 | 能说明该次链路实际发生了什么 |
| P3 | 独立解码、反例、边界用例和重复测试 | 能说明实现与契约在给定范围内一致 |
界面显示“已连接”通常只属于应用层现象。没有原始帧、更新时间、错误计数和失效分支时,不能据此声称协议全部通过。
安全边界¶
协议测试能够产生真实控制、参数修改、重启、刷写或执行器命令。主动注入必须遵守:
- 首选离线样本、单元测试和软件在环(SITL,Software In The Loop);
- 需要真实控制器时使用硬件在环(HITL,Hardware In The Loop)或专用隔离台架;
- 实体机必须拆除螺旋桨并固定,执行器动力级保持断开或物理失能;
- 不向开放无线环境、他人设备、在役网络或飞行中的飞行器发送测试帧;
- 不使用生产密钥测试伪造、重放或密钥错误;
- 对CAN等共享总线,错误帧和高负载注入必须在独立测试总线上进行;
- 接线、电平和终端变更必须断电完成。
只读抓包也要评估探头负载、公共地、隔离和敏感信息泄露。原始捕获可能包含设备身份、位置、任务和认证材料,应限制访问。
完成定义¶
某个协议只有同时满足以下条件,才能在指定组合中标记为“已验证”:
- 两端硬件、固件、配置和协议定义已固定;
- 电气接口、速率、方向和单双工模式已核对;
- 帧边界、长度、校验和端序已由原始样本证明;
- 正常、截断、超长、校验错误、未知消息和重启分支已测试;
- 更新率、延迟、丢包、队列和错误计数达到预先定义的阈值;
- 高风险命令的状态门禁、权限和拒绝结果已验证;
- 版本升级和降级策略明确;
- 测试环境、脚本、样本摘要和结论可由其他人复核。
专题完成只表示文档通过核验,不表示任何实体机、射频链路、参数组合或飞行任务已经获得放行。