Files
JBao_JL7016_MOD_FW/Doc/BLE+MCU架构开发流程.md

628 lines
6.6 KiB
Markdown
Raw Permalink 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.
# 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升级
异常监控
```
---