2. 匿名安全通信协议
大家在使用飞控时,经常会使用串口数传一类的无线通信模块,这类模块会极大提高调试和使用飞控的便捷程
度,可以无限实时监视飞控状态、调整参数等。但无线数传相比有线通信,其稳定性大大降低,数据发送出去,并
不能保证对侧能百分百接收到。这在传输显示数据时没有问题,因为显示数据缺少部分数据并不会影响飞控正常运
行。当时如果关键敏感的数据丢失或者接收错误,比如控制命令、航点信息等,就会影响飞控的正常运行,故必须
定义一种安全通信协议。
匿名规定,参数写入类、命令控制类、航点读写类等非显示类帧,均需返回验证,其过程如下:
如发送一个参数 ID 为 10 的参数值给飞控,应使用帧 ID 为 0xE2 的参数写入帧,当上位机发送参数后,会等待
帧 ID 为 0 的校验帧,校验帧格式如下。只有当上位机收到校验帧,并且校验帧的 ID_GET、SC_GET、AC_GET 与发
送帧相同时,代表本次通信完成,飞控已经正确收到了该参数。
若飞控在规定时间内没有收到帧 ID 为 0 的校验帧,或者校验帧数据和发送帧的不同,则上位机认为本次通信
出错,会重新尝试发送该参数。
1) ID:0x00:数据校验帧
ID_GET:需要校验的帧的帧 ID 码。
SC_GET、AC_GET:需要校验的帧的和校验 SC 和附加校验 AC。
3. 灵活格式帧
灵活格式帧,我们也可以叫做用户自定义帧,也就是用户可以自己定义数据内容格式的数据帧。可能从名字无
法很好的理解灵活格式帧有什么用,那么我们举一个简单的例子。
加入我在调试一个自己写的滤波算法,传感器原始数据 A,为 int16 格式,使用滤波算法对 A 进行滤波后,得
到滤波后数据 B,B 也是 int16 格式。滤波后数据经过控制算法,输出一个控制量 C,C 是 int32 格式。那我需要对
滤波算法和控制算法进行调试,肯定是需要得到 ABC 三个数据的波形,根据波形进行数据分析。
那么如何将数据 ABC 发送至上位机进行显示呢,就要用到灵活格式帧了。灵活格式帧共 10 帧,帧 ID 从 0xF1
到 0xFA,每一帧最多可以携带 10 个数据,每一个数据可以分别设置为 U8、S16、U16、S32 的格式。如果您需要显
示 float 型数据,可以根据数据范围以及精度要求,乘以 1000 或者 100 变成 S32 型整数进行传输。
那么我们可以用 0xF1 帧,配置第一个数据为 int16,第二个数据为 int16,第三个数据为 int32,并且勾选使能
F1 帧。如下图: