UART单对单包装
协议基础依然相同,不再过多介绍,必须先阅读基础消息结构。
针对 UART 的单对单,不必考虑物理链路上的杂乱数据,也没有事实的广播,那么采用的包装仅需要针对串口进行长度指示和校验。
和校验说明
和校验实际有效是一字节,除了帧头的两个字节外,所有的帧内容相加后取最低字节是和校验内容。
可与示例帧映证。
请求单帧结构
帧头(2字节) | 控制消息(4字节) | 额外消息长度(小端2字节) | 额外消息(n字节) | 和校验(1字节) | 和校验取反(1字节) |
---|---|---|---|---|---|
FE EF | 基础消息结构 | 包装 | 基础消息结构 | 包装 | 包装 |
示例帧
/* 帧头 */
FE EF
/* 控制信息 */
05 FA 04 01
/* 额外消息长度 */
08 00
/* 额外消息,无实际意义,握手时控制信息已经可以表达所有有效信息 */
00 01 00 00 00 00 00 00
/* 和校验及其取反 */
0D F2
回复单帧结构
帧头(2字节) | 控制消息(4字节) | 回复状态长度(2字节) | 回复状态(8字节) | 和校验(1字节) | 和校验取反(1字节) |
---|---|---|---|---|---|
FE EF | 基础消息结构 | 包装(固定是00 08) | 基础消息结构 | 包装 | 包装 |
示例帧 对上面握手消息的回复为
/* 帧头 */
FE EF
/* 控制信息 */
00 FA 80 41
/* 回复状态长度 */
08 00
/* 回复状态 */
00 01 00 06 00 00 00 00
/* 和校验及其取反 */
CA 35
烧录流程
沿用基础消息结构中介绍过的最简烧录流程
- 0xFA 命令烧录(或者其他特有命令),此时需要从APP跳入OTA程序
- 0xFA 再次命令烧录,作为ping功能,区别在于回复状态的头两个字节,跳转回复是00 01,而ping是00 02,表达已经在OTA程序中
- 0xF4 擦除指示,将固件需要的部分ROM全部擦掉
- 0xF7 首包指示,指示接下来的烧录起始、烧录长度、烧录校验
- 许多 0xF5 包,符合指示的长度,但是 OTA 会寄存最开始数个字节而不烧录,使得 APP 不完整。
- 反复进行 4、5 直到上位机认为完成
- 此时 OTA 程序自校验是否长度、校验都符合,写入最开始的数个字节,使得 APP 完整。
- 0xF8 上位机发起重启跳转,接收到确认回复,完成烧录