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

烧录流程

沿用基础消息结构中介绍过的最简烧录流程

  1. 0xFA 命令烧录(或者其他特有命令),此时需要从APP跳入OTA程序
  2. 0xFA 再次命令烧录,作为ping功能,区别在于回复状态的头两个字节,跳转回复是00 01,而ping是00 02,表达已经在OTA程序中
  3. 0xF4 擦除指示,将固件需要的部分ROM全部擦掉
  4. 0xF7 首包指示,指示接下来的烧录起始、烧录长度、烧录校验
  5. 许多 0xF5 包,符合指示的长度,但是 OTA 会寄存最开始数个字节而不烧录,使得 APP 不完整。
  6. 反复进行 4、5 直到上位机认为完成
  7. 此时 OTA 程序自校验是否长度、校验都符合,写入最开始的数个字节,使得 APP 完整。
  8. 0xF8 上位机发起重启跳转,接收到确认回复,完成烧录