跳转至

附录B:协议审查与测试卡

本卡用于把一次协议接入、升级或故障修复转化为可复核记录。每个“通过”都必须关联证据;未知项保持未测试阻断,不得默认勾选。

文中的复选框只是覆盖索引,不是测试结果。每个适用项都必须在第8节的执行记录表中单独填写环境、输入、预期、实际、证据和状态后,才允许勾选。

0. 安全与范围

测试编号:
负责人:
复核人:
日期、时间和时区:
测试环境:离线 / SITL / HITL / 无功率级波形负载 / 独立CAN测试总线 / 拆桨隔离台架 / 不适用
螺旋桨:已拆除 / 不适用
机体固定:是 / 否 / 不适用
执行器动力级:断开 / 物理失能 / 不适用
射频负载:匹配天线 / 额定假负载 / 不适用
辐射隔离:屏蔽环境 / 其他批准措施 / 不适用
频率与功率合法性:已核验 / 不适用
生产密钥:未使用
外部在役网络:未连接
紧急断电:已验证 / 不适用
允许的主动操作:
禁止的主动操作:

出现以下任一项立即停止:

  • 螺旋桨仍安装;
  • 执行器可能产生未受控动作;
  • 图传没有匹配天线或额定假负载却可能进入发射状态;
  • 仅有屏蔽或最低功率设置,却没有合法射频负载;
  • 发射频率、功率、地点或用途未完成合法性核验;
  • CAN异常注入会进入在役总线;
  • 需要使用生产密钥验证伪造或重放;
  • 接口电压、公共地或仪器额定范围未知;
  • 当前版本、目标设备或测试边界不明确。

1. 身份冻结

项目 发送端 接收端 工具/网关 证据
硬件型号/修订
固件版本
提交
构建目标
构建选项
本地差异
协议规范版本
消息定义/方言/DSDL
配置工具版本

2. 物理与电气

  • 连接器、焊盘和针脚号已记录;
  • 信号方向已记录;
  • 供电电压与逻辑电平分别确认;
  • 公共参考地或隔离方案明确;
  • 反相要求明确;
  • 全双工、半双工或单线明确;
  • UART字符格式明确;
  • CAN收发器、比特率和终端明确;
  • 空闲电平和实测幅值符合要求;
  • 探头不会造成短路或过度负载;
  • 仅USB、低压供电和动力供电差异已记录。

证据:

原理图或手册:
实体连接表:
电压测量:
波形文件:
断电终端测量:
限制:

3. 帧契约

项目 结论 来源 实测
帧头/同步
方向或地址
长度字段语义
最小帧
最大帧
多字节端序
位字段顺序
校验算法
校验初值
校验覆盖范围
帧间隔或换向
重同步规则

4. 消息契约

每个关键消息填写:

消息名称和ID:
方向:
请求/响应/广播:
最小和最大长度:
字段:
单位和比例:
坐标系:
枚举与保留值:
有效标志:
产生时间:
最大允许年龄:
序号或Transfer-ID:
重复处理:
乱序处理:
未知扩展处理:
错误响应:

5. 状态与权限

动作 来源要求 系统状态 幂等性 成功证据 失败/回滚
读取状态
写参数
保存配置
修改端口
切换模式
解锁请求
执行器命令
重启/引导加载
固件更新

检查:

  • 地址或系统ID没有被当作认证;
  • 校验或CRC没有被当作认证;
  • 认证成功后仍执行授权和状态门禁;
  • 超时与明确失败分开;
  • 非幂等动作不会盲目重试;
  • 断线后最终状态可以重新判定;
  • 拒绝原因和审计记录可观察。

6. 带宽

串口

方向 完整字节/帧 帧/秒 位/字节 bit/s
上行
下行
标称速率:
平均计算利用率:
100 ms峰值:
10 ms峰值:
半双工换向开销:
重试预算:
允许上限及依据:

CAN

仲裁速率:
数据阶段速率:
Classic CAN / CAN FD:
MTU:
扩展/标准ID:
平均总线负载:
峰值总线负载:
最高优先级流量:
最低优先级最坏等待:
错误帧和重发:

7. 时延与新鲜度

数据或动作 起点 终点 P50 P95 P99 最大 门限
时钟来源:
对齐事件:
对齐误差:
最大允许数据年龄:
最大连续丢失:
超时后动作:
恢复所需连续有效样本:

8. 正常样本

先为每个正常、负面、恢复和专项用例建立一行记录。期望结果安全环境为空时禁止执行;证据为空时不得标记通过:

用例ID 环境 前置状态 输入/动作 期望结果 实际结果 证据 状态
离线/SITL/HITL/无功率级波形负载/独立CAN测试总线/拆桨隔离台架/不适用 未测试/通过/不通过/阻断/不适用

环境必须取表中一个值。涉及畸形电气时序、总线争用、错误帧洪泛或DShot特殊命令边界的用例,优先选择离线模型或无真实功率级的专用负载,不能因为机体已拆桨就默认允许执行。

  • 最短合法帧;
  • 最大合法帧;
  • 零长度或最小载荷;
  • 载荷尾零;
  • 最小和最大字段值;
  • 请求和成功响应;
  • 错误响应;
  • 单帧与多帧;
  • 启动后的第一帧;
  • 稳态连续帧;
  • 重启后的恢复;
  • 不同方向同时传输;
  • 工具与设备显示一致。

每个样本还要在证据中包含文件、SHA-256摘要、原始字节或帧、校验复算和应用结果。

9. 负面和边界样本

  • 帧头逐字节截断;
  • 固定头完整但长度缺失;
  • 长度小于最小值;
  • 长度大于协议上限;
  • 长度合法但超过本地缓冲;
  • 载荷逐字节截断;
  • 校验缺失;
  • 校验错误;
  • 未知消息;
  • 未知兼容标志;
  • 未知不兼容标志;
  • 非法枚举;
  • NaN、无穷大或超范围数值;
  • 重复帧;
  • 乱序帧;
  • 过期帧;
  • 噪声后合法帧;
  • 载荷内嵌帧头;
  • 队列满;
  • 计数器回绕;
  • 设备重启;
  • 网关重启;

通过标准:

  • 不崩溃;
  • 不越界读写;
  • 不无限循环;
  • 不无界分配;
  • 不执行部分命令;
  • 错误分类正确;
  • 错误日志限速;
  • 后续合法帧可恢复;
  • 高风险动作未发生。

10. 认证与防重放

机制:
密钥或凭据类型:
密钥域:
发送策略:
接收策略:
未认证只读策略:
未认证高风险命令策略:
防重放状态键:
时间或序号来源:
持久化方式:
重启恢复:
轮换与吊销:

测试:

  • 正确认证;
  • 错误认证;
  • 缺失认证;
  • 内容被修改;
  • 相同帧重放;
  • 旧时间戳或序号;
  • 相同时间戳或序号;
  • 发送端重启;
  • 接收端重启;
  • 多链路;
  • 凭据轮换;
  • SETUP_SIGNING只在安全直连链路定向发送;
  • SETUP_SIGNING的42字节完整解码布局、64位小端initial_timestamp和合法尾零裁剪已验证;
  • 初始时间戳没有回退接收端已接受的防重放状态;
  • SETUP_SIGNING广播被禁止;
  • 网关不会自动转发SETUP_SIGNING
  • 日志省略SETUP_SIGNING或把32字节秘密替换为固定脱敏值;
  • 认证成功但状态不允许的命令仍被拒绝。

所有测试使用临时凭据和隔离环境,证据中不得包含密钥值。

11. 协议专项检查

CRSF

  • 飞行端416666波特、8N1、非反相条件已核对;
  • 常见420000兼容实现没有被误写成规范唯一值;
  • Length为2至62,完整帧不超过64字节;
  • CRC-8多项式0xD5且覆盖Type至Payload;
  • 扩展帧目标和来源进入CRC;
  • Direct Command命令CRC使用多项式0xBA并覆盖类型、目标、来源、命令ID和命令载荷;
  • 外层CRC正确但Direct Command命令CRC错误时被拒绝;
  • 16个11位通道按22字节连续位流解码;
  • 空中协议与机内CRSF分开;
  • 通道帧、链路统计和失联分别判断。

SBUS

  • 100000波特、8E2和反相路径已核对;
  • 固定25字节;
  • 16个11位模拟通道;
  • 数字通道17/18、帧丢失和失联位已解析;
  • 未强制假设所有实现末字节为0x00
  • Fast SBUS仅在两端共同支持时启用;
  • 缓存通道值没有覆盖失联状态。

Classic F.Port

  • 固定范围为Classic F.Port,没有套用到F.Port 2.0或FBUS;
  • 115200波特、8N1;
  • 0x7E帧边界和0x7D转义已验证;
  • FrSky折叠加法校验已复算;
  • 控制、遥测请求和遥测响应类型已区分;
  • 有效请求后500至2000微秒响应窗口已测量;
  • 错误长度、校验或类型不会触发遥测发送;
  • 反相、半双工、线路释放和本机回显已验证;
  • F.Port 2.0或FBUS若使用,已建立独立规范和测试卡。
  • Magic为0xFD
  • 24位消息ID按低字节先传;
  • 载荷尾零截断已测试;
  • CRC覆盖头部和实际载荷并加入CRC_EXTRA
  • 扩展字段不改变旧消息CRC_EXTRA
  • 未知不兼容标志导致丢弃;
  • 签名块为1+6+6字节;
  • 签名明确不加密;
  • 防重放按SystemID、ComponentID和LinkID维护;
  • 线上原始帧用于证明签名,未只依赖tlog
  • SETUP_SIGNING未广播、未自动转发、未泄露到日志。

MSP

  • v1方向、长度、命令和XOR正确;
  • native v2的16位小端命令和长度正确;
  • v2 CRC-8/DVB-S2覆盖范围正确;
  • v2-over-v1命令255和双层校验正确;
  • Betaflight固定接收器的内外长度偏差已做差分测试;
  • 线格式版本与MSP API版本分开;
  • 192字节接收缓冲与发送侧Jumbo单向边界已验证;
  • 未知命令优雅失败;
  • DisplayPort与视频码流分开。

DShot

  • 11位数值、1位请求、4位校验;
  • 0、1至47、48至2047已在离线编码器覆盖;
  • 1至47未在实物上逐值扫描;
  • 双向模式发送波形和校验反相;
  • 传统遥测请求位未被当作双向回包开关;
  • 返回GCR解码和校验已验证;
  • eRPM周期、极对数和机械RPM分开;
  • EDT返回槽与eRPM返回槽分开解释;
  • EDT命令13/14、至少6次要求、固定实现10次行为和版本帧已验证;
  • DShot释放后30微秒EDT响应边界已测量;
  • 实物特殊命令逐项记录名称、目标、重复次数、预期副作用和可逆性;
  • 特殊命令后冷启动并复核电机方向和电调持久状态。

DroneCAN/Cyphal

  • 29位扩展ID布局按正确协议解释;
  • 广播消息与点对点服务分开;
  • 优先级0最高;
  • Tail byte起止、Toggle和Transfer-ID正确;
  • DroneCAN多帧CRC位于数据流开头;
  • DroneCAN多帧CRC按低字节、再高字节传输;
  • 单帧没有额外传输CRC;
  • Transfer-ID状态按传输描述符维护;
  • 模32回绕和2秒内重复已测试;
  • 发送端映射删除后从Transfer-ID 0重建;
  • 接收端2秒超时后可接受新的合法起始序列;
  • 1秒传输中止和服务响应等待边界已测试;
  • DroneCAN/UAVCAN v0与Cyphal/UAVCAN v1未混用;
  • Classic CAN和CAN FD MTU一致;
  • 节点ID冲突和重启已测试。

SmartAudio/Tramp

  • SmartAudio为非反相单线半双工;
  • SmartAudio主机命令和响应命令编码分开;
  • 发送与接收CRC覆盖按固定实现核对;
  • 自适应波特率未写成协议协商;
  • Tramp控制焊盘、线数、TX/RX选择、驱动方式和回读路径均有硬件修订证据;
  • 未把两个推挽输出直接相连;
  • Tramp固定16字节;
  • Tramp字节1至13做8位模加和;
  • 写入后重新查询实际状态;
  • 图传控制、OSD和视频载荷三条路径分开。

12. 恢复与回归

  • 恢复原端口、速率和协议;
  • 删除临时密钥;
  • 恢复射频合法配置;
  • 射频负载、屏蔽和合法性三项重新确认;
  • 恢复终端和线束;
  • 冷启动;
  • 重新读取身份和配置;
  • DShot特殊命令测试后逐个复核电机方向和电调持久状态;
  • 正常输入、失联和恢复回归;
  • 执行器仍处于物理安全状态;
  • 错误计数回到已知基线;
  • 原始证据和摘要归档;
  • 未完成项进入问题单;
  • 独立复核人签署。

结论

结论:未测试 / 阻断 / 受限通过 / 一致通过 / 安全通过 / 不通过 / 不适用
通过范围:
未覆盖范围:
残余风险:
阻断项:
证据位置:
作者:
独立复核人:
日期:

存在任一未关闭的阻断项时,整体结论必须为阻断,不能被局部通过或受限通过覆盖。

本卡通过只说明固定组合在记录范围内满足协议测试,不表示实体机已经通过动力、飞行、射频或法规放行。