在SOC的SDK上进行修改,删除了静态库链接,增加了文档

This commit is contained in:
2026-08-05 18:13:49 +08:00
commit 75195c7290
921 changed files with 225183 additions and 0 deletions
+627
View File
@@ -0,0 +1,627 @@
# BLE\+MCU架构开发流程
# 1\. 系统架构说明
## 功能说明
设备采用 BLE \+ MCU 双芯片架构:
- MCU
- 负责产品业务控制;
- 传感器采集;
- 外设控制;
- 产品逻辑处理。
- BLE 模组:
- 负责 BLE 通信;
- APP连接;
- 网关接入;
- 云端通信;
- OTA升级;
- 数据透传。
整体通信链路:
```Plain Text
APP
|
BLE
|
MCU
|
设备功能
```
云端通信:
```Plain Text
设备
|
BLE----------
| |
网关 APP
| |
服务器-------
```
---
# 2\. BLE启动流程
## 2\.1 BLE上电初始化
### 功能说明
BLE 模组上电完成初始化后,主动向 MCU 获取设备身份信息。
### BLE → MCU
请求获取设备信息:
|**字段**|**内容**|
|---|---|
|命令|0x01|
|请求类型|获取设备身份信息|
---
### MCU → BLE
返回设备身份信息:
|**字段**|**内容**|
|---|---|
|产品类别|Product Type|
|产品型号|Product Model|
|设备SN|Device SN(可选)|
BLE收到信息后:
1. 保存产品类别;
2. 保存产品型号;
3. 生成BLE广播数据。
广播内容:
```Plain Text
Product Type
+
Product Model
+
设备标识
```
注意:
> BLE上电后默认不启动配网广播。
>
>
只有收到 MCU 配网指令后才进入配网状态。
---
# 3\. 配网流程
## 3\.1 用户触发配网
### 功能说明
用户长按设备按键进入配网。
流程:
```Plain Text
用户操作
MCU检测按键
MCU发送配网指令
BLE开启配网广播
网关连接
完成配网
```
---
## 3\.2 MCU通知BLE进入配网
### MCU → BLE
|**字段**|**内容**|
|---|---|
|命令|0x10|
|参数|配网模式\+配网超时时间|
BLE收到后:
1. 清除旧连接状态;
2. 开启BLE广播;
3. 等待APP或网关连接。
---
# 4\. BLE联网成功流程
## 4\.1 获取MCU版本信息
### 功能说明
BLE完成联网后,获取MCU版本信息并上传服务器。
流程:
```Plain Text
BLE联网成功
BLE请求MCU版本
MCU返回版本
BLE组合自身版本信息
上传服务器
```
版本信息:
|**类型**|**示例**|
|---|---|
|BLE版本|V1\.0\.0|
|MCU固件版本|V1\.0\.0|
|硬件版本|V1\.0\.0|
说明:
> 服务器出厂时已保存设备版本,因此该上报主要用于版本同步和调试。
>
>
---
# 5\. BLE状态同步机制
## 功能说明
BLE实时同步当前通信状态给 MCU。
### BLE → MCU
状态字段:
|**状态**|**描述**|
|---|---|
|Bit0|已完成配网|
|Bit1|已连接互联网(云)|
|Bit2|APP 在线|
|Bit3|手机已连接 BLE|
|Bit4|OTA 升级中|
|Bit5|配网模式中|
|Bit6\~Bit7|Reserved|
例如:
设备断电重新启动:
```Plain Text
BLE启动
检测保存的配网信息
发送回连广播
成功连接网关
BLE通知MCU:设备已完成配网
```
---
# 6\. BLE与MCU心跳机制
## 6\.1 心跳检测
### 功能说明
检测 BLE 与 MCU UART通信是否正常。
规则:
- BLE超过55秒没有收到 MCU 数据;
- BLE主动发送心跳。
---
## BLE → MCU
### 心跳请求
|**字段**|**内容**|
|---|---|
|命令|0x12|
|序号|Seq|
---
## MCU → BLE
### 心跳回复
|**字段**|**内容**|
|---|---|
|命令|0x13|
|状态|执行结果|
---
## 6\.2 心跳异常
判断:
```Plain Text
发送心跳
等待回复
失败
次数+1
连续3次失败
```
进入异常状态。
---
# 7\. MCU通信异常报警
## 7\.1 BLE内部异常记录
BLE保存:
|**参数**|**说明**|
|---|---|
|异常类型|MCU通信异常|
|时间|时间戳|
---
## 7\.2 报警上报协议
### BLE → Server
|序号|字段名称|字节长度|内容说明|
|---|---|---|---|
|1|包头|2|固定 `0x55AA`|
|2|包长度|2|`len(命令...校验和)`|
|3|命令|1|0x12|
|4|序列号|1|数据包序列号|
|5|Error Code|1|错误码|
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
错误码定义:
|**错误码**|**描述**|
|---|---|
|0x01|MCU通信超时|
|0x02\~0xFF|预留|
---
## 离线处理
如果:
```Plain Text
BLE未联网
```
则:
```Plain Text
BLE保存报警记录
等待BLE重新联网
主动补报服务器
```
---
# 8\. APP通信流程
## 功能说明
设备完成配网后:
BLE作为透明传输通道。
```Plain Text
APP
BLE
MCU
------------
MCU
BLE
APP
```
BLE不解析业务数据。
---
# 9\. 摄像功能控制
## 9\.1 MCU控制录像/拍照
流程:
```Plain Text
MCU
BLE
迈科网关协议
网关
摄像头执行
```
BLE收到MCU命令:
- 开启录像;
- 停止录像;
- 拍照。
按照迈科协议转换发送。
---
# 10\. 音频播放功能
## 功能说明
MCU通知BLE播放指定Flash音频。
流程:
```Plain Text
MCU发送音频编号
BLE查询Flash
播放对应音频
```
例如:
```Plain Text
音频ID:
001 开机声音
002 报警声音
003 完成声音
```
---
# 11\. OTA升级流程
## 11\.1 OTA类型
OTA分为:
|**类型**|**说明**|
|---|---|
|MCU OTA|MCU固件升级|
|BLE OTA|BLE固件升级|
---
# 11\.2 MCU OTA流程
流程:
```Plain Text
APP发送OTA请求
BLE判断类型
MCU OTA
转发升级
```
BLE处理:
删除OTA类型字段:
```Plain Text
APP OTA协议
MCU OTA协议
```
---
## 升级数据流程
```Plain Text
APP发送数据包
BLE
MCU
MCU应答
BLE转发APP
APP继续发送下一包
```
---
升级完成:
MCU
1. 校验MD5
2. 保存固件;
3. 重启;
4. 切换固件。
成功:
```Plain Text
MCU OTA完成通知
BLE + 类型
APP
```
BLE增加:
```Plain Text
OTA类型 = MCU
```
---
# 11\.3 BLE OTA流程
流程:
```Plain Text
APP
BLE判断OTA类型
BLE自身升级
```
BLE
1. 回复包长度;
2. 接收数据;
3. 校验;
4. 写入Flash
5. 重启。
完成:
BLE发送:
```Plain Text
OTA完成通知
OTA类型 = BLE
```
---
# 12\. OTA异常处理
|**异常**|**处理**|
|---|---|
|数据超时|重新请求|
|MD5失败|升级失败|
|断电|恢复升级|
|BLE断链|保存进度|
|MCU升级失败|上报失败|
---
# 13\. BLE直连模式
场景:
```Plain Text
网关离线
网关断开BLE
APP扫描设备广播
APP直接连接BLE
控制设备
```
BLE支持:
- 回连广播;
- APP直连;
- 数据透传。
---
# 14\. 总体流程总结
```Plain Text
BLE上电
获取MCU身份信息
生成设备广播信息
等待MCU配网指令
开启配网广播
连接网关
获取MCU版本
上传服务器
状态同步MCU
APP数据透传
业务控制
OTA升级
异常监控
```
---
+809
View File
@@ -0,0 +1,809 @@
# 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|和校验(包长度\.\.\.校验和前一个字节)|