Files
JBao_JL7016_MOD_FW/Doc/MCU方案接入协议通讯文档.md
T
wuchuyuan 7b7583668b 补齐 MCU 桥 P1(管理/对时/版本),并接入硬件 RTC;网关侧发送改为等 GATT CCC 就绪,避免回连刚连上就 app_send_fail。
P1 业务:
- 管理:0x16 出厂复位(清配对+时区)、0x18 模组重启、0x1A 通知 MCU 重启(预留)
- 对时:网关 DEVICEINFO 下发 Unix 秒+时区,写入 RTC;MCU 0x1C/0x1D 读当前时间
- 版本:UART 0x40 拉 MCU 信息,SOC 0x41 上报网关;网关 ACK 等待 2s,最多 3 次
RTC:
- 新增 usr_periph,打开板级 "rtc";开发板无 32K 用 LRC,量产模组再改 CLK_SEL_32K
- 对时补偿 +1s;时区存 VM;出厂复位清除时区;硬件走时,软件只刷新 UTC 缓存
链路与 0x14:
- VM paired_flag 仍表示已绑定;CONFIGURED 改为绑定+已连接+CCC,否则保持 RECONNECTING
- 0x07/0x41 等 notify 未就绪不发送、不占重试,避免 MCU 过早上报
2026-08-14 19:22:41 +08:00

810 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MCU方案接入协议通讯文档
# 修订记录
|文档版本|协议版本|日期|编写人|修订类型|修订内容|
|---|---|---|---|---|---|
|V1\.0\.0|V1\.0|2026\-07\-08|麦田|新建|首次发布 MCU方案接入协议通讯文档|
---
# 协议说明
- 通信接口:UART。
- 默认通信参数:9600bps,8数据位,1停止位,无校验,无流控。
- 数据采用**大端模式**Big Endian)传输。
- 数据帧格式: **包头 \+ 包长度 \+ 命令 \+ 序列号 \+ 数据 \+ 校验和**
- 包头固定为 `0x55AA`
- 包长度表示 **命令开始至校验和结束** 的数据长度。
- 命令字(Command)用于区分不同功能。
- 序列号(Seq)由请求方递增生成,ACK需原样返回,用于匹配请求与响应。
- 默认所有命令采用 **一问一答机制**,发送方发送命令后,接收方必须返回对应 ACK。
- ACK 数据包包含 Result 字段,用于返回执行结果。
- 超时未收到 ACK 时,发送方可进行重试,最大重试次数建议为 3 次。
- 数据点标志(Bitmap)由 DP 配置文档自动生成,一个 Bit 对应一个 DP。
- 数据点值按照 Bitmap 中 Bit 置位顺序依次排列。
- 读取命令通过 Bitmap 指定需要读取的 DP,Bitmap 全 1 表示读取全部 DP。
- BLE 模组主要负责数据透传、蓝牙连接及状态管理,业务数据由 MCU 处理。
- 校验方式:累加和校验(Sum Check),计算范围为 **包长度字段至校验和前一个字节**
## Result 定义:
|值|含义|
|---|---|
|0x00|成功|
|0x01|参数错误|
|0x02|设备忙|
|0x03|不支持该操作|
|0x04|校验错误|
|0x05|执行失败|
### OTA 专用错误码
|值|含义|
|---|---|
|0x20|无需升级(版本一致)|
|0x21|OTA 版本低于当前版本|
|0x22|Flash 空间不足|
|0x23|OTA 状态错误|
|0x24|OTA文件检验失败|
|0x25|升级失败|
# 基本通讯协议
## BLE获取设备身份信息
### BLE模组 =\> MCU
> **功能说明:**
> BLE上电启动完成后,主动向MCU获取设备身份信息。
> BLE需要获取产品类别、产品型号等信息,用于蓝牙广播及设备识别。
>
>
|**序号**|**字段名称**|**字节长度**|**内容说明**|
|---|---|---|---|
|1|包头|2|固定 0x55AA|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x01|
|4|序列号|1|数据包序列号|
|5|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### MCU =\> BLE模组
> **功能说明:**
> MCU返回设备身份信息,BLE保存后用于蓝牙广播。
>
>
|**序号**|**字段名称**|**字节长度**|**内容说明**|
|---|---|---|---|
|1|包头|2|固定 0x55AA|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x02|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果|
|6|Protocol Version |2|通讯协议版本号|
|7|Category Code|8|产品类别,例如 CBCT|
|8|Product Code|8|产品型号,例如 PICBCT|
|9|SN|16|产品唯一序列号(预留)|
|10|Capability Bitmap|8|产品能力信息(预留)|
|11|校验和|1|和校验|
#### Capability Bitmap定义
> **功能说明:**
> 用于描述设备支持的功能能力,APP根据能力决定是否显示对应功能。
>
>
|**Bit**|**功能定义**|**说明**|
|---|---|---|
|Bit0|BLE OTA|支持BLE固件升级|
|Bit1|MCU OTA|支持MCU固件升级|
|Bit2|APP直连BLE|支持APP直接连接BLE|
|Bit3|IPC网关连接|支持IPC作为BLE网关|
|Bit4|产测模式|支持生产测试|
|Bit5|参数配置|支持参数读写|
|Bit6|日志功能|支持日志上传|
|Bit7|预留||
|Bit8\~63|扩展|后续功能扩展|
---
## BLE模组获取MCU信息
> BLE模组绑定之后会向MCU获取版本号,并与自身的版本号进行组包发送给网关。
>
>
### BLE模组 =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|0x55AA|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x40(下发控制)|
|4|序列号|1|APP递增生成,ACK原样回传|
|7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### MCU =\> BLE模组
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|0x55AA|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x41(应答下发控制)|
|4|序列号|1|与请求的序列号一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|MCU Version|3|MCU固件版本号,格式:主版本号\(1Byte\)\+次版本号\(1Byte\)\+修订版本号\(1Byte\),显示格式为:`Vx.x.x`|
|7|Hardware Version|3|MCU硬件版本号,格式:硬件主版本号\(1Byte\)\+硬件次版本号\(1Byte\)\+硬件修订版本号\(1Byte\),显示格式:`Vx.x.x`|
|8|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
#### Version版本格式说明
|字节|字段名称|内容说明|
|---|---|---|
|Byte0|主版本号|产品架构、通信协议等重大变化时递增|
|Byte1|次版本号|新增功能或功能优化时递增|
|Byte2|修订版本号|Bug修复、参数调整、性能优化时递增|
#### 示例
|MCU Version|版本号|
|---|---|
|0x01 0x02 0x05|V1\.2\.5|
|0x05 0x02 0x21|V5\.2\.33|
---
## BLE模块控制设备
> 数据部分BLE只是负责透传,所以实际上数据是APP与MCU的通讯,BLE后面会做成一个模块,为了后续嵌入式开发工程师不必关心APP端,所以这里写BLE,方便理解
>
>
### BLE模组 =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|0x55AA|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x03(下发控制)|
|4|序列号|1|APP递增生成,ACK原样回传|
|5|数据点标志|x\(DP数量\+7\)/8)|一个字节可代表8个数据点|
|6|数据点值|x|数据值|
|7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### MCU =\> BLE模组
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|0x55AA|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x04(应答下发控制)|
|4|序列号|1|与请求的序列号一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## BLE模块读取设备
> 数据部分BLE只是负责透传,所以实际上数据是APP与MCU的通讯,BLE后面会做成一个模块,为了后续嵌入式开发工程师不必关心APP端,所以这里写BLE,方便理解
>
>
### BLE模组 =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|0x55AA|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x05(下发读取)|
|4|序列号|1|APP递增生成,ACK原样回传|
|5|数据点标志|x\(DP数量\+7\)/8|指定需要读取的 DPBitmap 全 1 表示读取全部 DP|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### MCU =\> BLE模组
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|0x55AA|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x06(应答读取)|
|4|序列号|1|与请求的序列号一致|
|5|数据点标志|x\(DP数量\+7\)/8)|返回的数据点标志|
|6|数据点值|x|数据值|
|7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## MCU主动向BLE模组上报数据
> 数据部分BLE只是负责透传,所以实际上数据是APP与MCU的通讯,BLE后面会做成一个模块,为了后续嵌入式开发工程师不必关心APP端,所以这里写BLE,方便理解
>
>
### MCU =\> BLE模组
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|0x55AA|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x07(主动上报)|
|4|序列号|1|设备递增生成|
|5|数据点标志|x\(DP数量\+7\)/8)|一个字节可代表8个数据点|
|6|数据点值|x|数据值|
|7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE模组 =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|0x55AA|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x08(应答主动上报)|
|4|序列号|1|与上报的序列号一致|
|5|Result|1|执行结果(一般返回0x00|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## MCU配置配网参数
### MCU =\> BLE模组
> **功能说明:**
MCU 请求 BLE 进入配对(配网)模式。BLE 收到请求后进入配网状态,并返回执行结果。
> 这里预留了Param 字段,该字段仅对wifi模组有效,目前预留着,后续可能会用wifi模组。
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x10|
|4|序列号|1|数据包序列号|
|5|配网方式|1|1:纯蓝牙配网<br>2WIFI/双模配网|
|6|配网超时时间|2|单位:秒,例如 `120`|
|7|Param Len|1|当配网方式为2时,存在该字段。<br>用于配置参数长度|
|8|Param Data|Param Len|当配网方式为2时,存在该字段。<br>用于配置参数数|
|9|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE模组 =\> MCU
> **功能说明:**
BLE 返回进入配对(配网)模式的执行结果。
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x11|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## 心跳
> 当BLE模组超过55秒没有收到MCU的数据包,应向MCU发送心跳包。MCU收到心跳包后马上应答。当BLE模组连续3次没有收到MCU 的心跳回复,可进行报警。
>
>
### BLE模组 =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x12|
|4|序列号|1|数据包序列号|
|5|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### MCU=\>BLE模组
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x13|
|4|序列号|1|与通知保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
## BLE模组推送工作状态
### BLE模组 =\> MCU
> **功能说明:**
BLE 模组工作状态发生变化时,主动通知 MCU 当前工作状态,MCU 根据状态更新联网、配网及 OTA 状态。
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x14|
|4|序列号|1|数据包序列号|
|5|工作状态|1|工作状态 Bit 位定义见下表|
|6|RSSI|1|当前信号强度(单位:dBm,以 `uint8_t` 补码传输)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
#### 工作状态定义
|Bit|含义|
|---|---|
|Bit0|已完成配网|
|Bit1|已连接互联网(云)|
|Bit2|APP 在线|
|Bit3|手机已连接 BLE|
|Bit4|OTA 升级中|
|Bit5|配网模式中|
|Bit6\~Bit7|Reserved|
#### RSSI 说明
- RSSI 占 **1 Byte**
- 协议传输类型为 **uint8\_t**
- 实际数值采用 **int8\_t 补码格式**表示,单位为 **dBm**
##### 示例
|接收数据(Hex|实际 RSSI|
|---|---|
|0xD8|\-40 dBm|
|0xC4|\-60 dBm|
|0xB0|\-80 dBm|
|0xA6|\-90 dBm|
##### RSSI 参考范围
|RSSI\(dBm\)|信号质量|
|---|---|
|≥ \-60|优秀|
|\-61 \~ \-70|良好|
|\-71 \~ \-80|一般|
|\-81 \~ \-90|较差|
|\< \-90|很差|
### MCU =\> BLE模组
> **功能说明:**
> MCU 收到 BLE 工作状态同步后返回执行结果,BLE 收到成功应答后认为 MCU 已完成状态更新。
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x15|
|4|序列号|1|与通知保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## MCU重置BLE模组
> 该命令预留,用于将BLE模组或者WiFi模组恢复出厂设置。
>
>
### MCU =\> BLE模组
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x16|
|4|序列号|1|数据包序列号|
|5|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE模组 =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x17|
|4|序列号|1|与通知保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## MCU重启BLE模组
> **功能说明:**
MCU 请求 BLE 模组 重启。
> MCU 发出命令后,BLE模组 需要回复ACK表示接受命令成功后再重启。
### MCU =\> BLE模组
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x18|
|4|序列号|1|数据包序列号|
|5|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE模组 =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x19|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## BLE模组通知MCU重启
> **功能说明:**
BLE模组 请求 MCU 重启设备。
> MCU 回复 BLE模组 后需等待600毫秒再进行重启,这是为了避免BLE模组没收到ACK而重复通知重启MCU。
### BLE模组 =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x1A|
|4|序列号|1|数据包序列号|
|5|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### MCU =\> BLE模组
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x1B|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## MCU请求获取网络时间
> 当模组端没有获取到网络时间时,返回全0。
>
>
### MCU =\> BLE模组
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x1C|
|4|序列号|1|数据包序列号|
|5|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x1D|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|年|2|当前时区|
|7|月|1|当前时区|
|8|日|1|当前时区|
|9|时|1|当前时区|
|10|分|1|当前时区|
|11|秒|1|当前时区|
|12|Unix 时间|4|UTC 时间戳(秒)|
|13|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
# 扩展通讯协议
## MCU请求BLE模组进入产测模式
> **功能说明:**
MCU 请求 BLE 进入或退出产测模式。
### MCU =\> BLE
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x20|
|4|序列号|1|数据包序列号|
|5|模式|1|`0x00`:退出产测;`0x01`:进入产测|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x21|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## MCU通知BLE模组开启拍照
> 该指令发送给BLE模组后,BLE模组会通知摄像头网关开启拍照。
>
>
### MCU =\> BLE
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x22|
|4|序列号|1|数据包序列号|
|6|预留字段|2|预留两个字节的字段,后期可扩展|
|7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x23|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## MCU通知BLE模组开启录像
> 该指令发送给BLE模组后,BLE模组会通知摄像头网关开启录像。
>
> 录像时间为0时表示关闭录像
>
>
### MCU =\> BLE
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x24|
|4|序列号|1|数据包序列号|
|5|录像时间|2|单位:秒|
|6|预留字段|2|预留两个字节的字段,后期可扩展|
|7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x25|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## MCU通知BLE模组启动音频
> 该指令发送给BLE模组后,BLE模组会根据音频编号来播放flash中对应的音频。
>
> 录像时间为0时表示关闭录像
>
>
### MCU =\> BLE
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x26|
|4|序列号|1|数据包序列号|
|5|音频编号|1|BLE模组中的音频编号|
|6|预留字段|2|预留两个字节的字段,后期可扩展|
|7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x27|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## BLE模组向MCU推送OTA升级
> **功能说明:**
BLE 将 升级相关的信息发送给 MCU,MCU 根据这些信息判断是否允许OTA升级,并返回升级准备结果。
### BLE =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|len\(命令\.\.\.校验和\)|
|3|命令|1|0x30|
|4|序列号|1|数据包序列号|
|5|固件版本(Firmware Version|3|OTA 固件版本号|
|6|固件长度(Payload Length|4|OTA Bin 数据长度|
|7|固件 CRC32Payload CRC32|4|OTA Bin 数据 CRC32 校验值|
|8|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### MCU =\> BLE
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x31|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result OTA 专用错误码定义)|
|6|Max Data Length|2|MCU 单次允许接收的最大 Payload 长度(Byte|
|7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## BLE模组向MCU推送OTA数据
> **功能说明:**
BLE 根据 MCU 返回的 **Max Data Length** 对 OTA Bin 进行分片,并按顺序发送给 MCU。
MCU 每接收一包数据后立即返回应答,BLE 收到成功应答后继续发送下一包。
### BLE =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x32|
|4|序列号|1|数据包序列号|
|5|分片序号|2|当前数据包的分片序号,分片序号从1开始计算|
|6|总分片数|2||
|7|Payload Data|x|OTA Bin 数据,长度 ≤ Max Data Length|
|8|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### MCU =\> BLE
> **功能说明:**
MCU 成功接收并处理当前 OTA 数据包后返回 Result。
BLE 收到成功应答后继续发送下一包 OTA 数据;若返回失败,则停止本次 OTA 升级。
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x33|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
## MCU通知BLE模组OTA升级完成
> **功能说明:
** MCU完成OTA升级后,主动通知BLE当前升级结果及版本信息。**
** BLE收到后上传APP或服务器。
### MCU =\> BLE
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x34|
|4|序列号|1|数据包序列号|
|5|OTA Result|1|OTA结果|
|6|MCU Version|3|当前MCU固件版本|
|7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x35|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## BLE模组向MCU通知OTA停止
> **功能说明:**
BLE 主动通知 MCU 终止当前 OTA 升级流程。MCU 收到后立即停止 OTA 数据接收,释放 OTA 相关资源,并返回处理结果。
### BLE =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x36|
|4|序列号|1|数据包序列号|
|5|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### MCU =\> BLE
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x37|
|4|序列号|1|与请求保持一致|
|5|Result|1|执行结果(见 Result 定义)|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
---
## MCU向BLE模组通知OTA停止
> **功能说明:**
MCU 在 OTA 过程中因内部异常无法继续升级时,主动通知 BLE 停止当前 OTA。BLE 收到通知后立即停止发送 OTA 数据,并返回应答。
### MCU =\> BLE
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x38|
|4|序列号|1|数据包序列号|
|5|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
### BLE =\> MCU
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x39|
|4|序列号|1|与通知保持一致|
|5|Result|1|`0x00`:已收到并停止 OTA|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|