hunting/middleware/McuManager/README.md
2024-06-15 08:35:07 +08:00

384 lines
13 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.

# 1. 打猎相机外置MCU软件设计
  为满足打猎相机的低功耗需求使用外置MCU的硬件设计框架在非工作状态下保持外置MCU供电CPU断电满足低功耗的产品需求。
| 版本 | 时间 | 说明 |
| ---- | ---- | ---- |
| V1.0 | 2024-5-14 | 首次评审。 |
| V1.1 | 2024-5-16 | 完善时序图。 |
| V1.2 | 2024-5-20 | MCU默认关闭喂狗。 |
## 1.1. 基本概念
* **工作状态:**
| 工作状态 | 说明 |
| ---- | ---- |
| OFF状态 | 整机处于断电状态包括外置MCU和主控。 |
| TEST状态 | 非正常工作状态此时主控常通电除非无操作时自动切换到ON状态。 |
| ON状态 | 设备正常工作状态必须保证低功耗性能PIR触发抓拍后必须快速关机主控断电。 |
**评审补充:**
1. 首次整机上电必须CPU物理上电完成SD卡产测文件检测实现产测功能
2. 动态切换到TEST/ON状态需要CPU物理上电
* **启动模式决定CPU单次启动的任务内容**
  每次启动的时间都是有限的由CPU完成单次启动完成任务后发送断电关机指令给MCUMCU给CPU断开物理电源启动模式可以由CPU主动询问也可以由MCU主动发送。
| 启动模式 | 说明 |
| ---- | ---- |
| PIR启动 | PIR触发启动。 |
| TEST启动 | 三档拨键拨到“TEST”常通电的工作模式。 |
| ON启动 | 三档拨键拨到“ON”正常工作模式。 |
| 连拍启动 | PIR触发场景下用户可以设置连拍的张数和连拍的间隔CPU通过协议告诉MCU在多少时间之后进行连拍启动。 |
| PIR延时启动 | 同PIR启动只是PIR触发后需要延时一段时间再给CPU上电。 |
| 定时启动 | 间隔固定时间启动一次例如60min/次 **待定** |
| 关机启动 | 某种场景下需要关机给CPU上电一次由CPU正式下发“关机”指令。 |
| 低电关机 | 电池低电需要关机给CPU上电一次由CPU正式下发“关机”指令。 |
| 异常启动 | CPU不正常时断电重启例如喂狗异常超时启动异常。 |
  工作模式对应板子上的三档拨键,有三个工作模式:关机/TEST/ON。
**评审补充:**
* 一个PIR连拍周期内忽略PIR触发
## 1.2. MCU基本功能
* 外围连接RTCPIR传感器电量计
* 保存数据包括CPU的启动模式CPU定时启动时间工作时间周期PIR灵敏度
* 使用串口协议与CPU进行数据/功能协议交互;
| 需要保存的数据 | 说明 |
| ---- | ---- |
| 启动模式 | ---- |
| 定时启动时间 | 例如60min/次 |
| 工作时间 | 打猎机正常PIR触发的时间周期例如200 ~ 2000 |
| PIR灵敏度 | PIR灵敏度设置 |
**存疑:**
硬件光敏接在主控上先由主控内置MCU控制正常启动后Linux是否可以复用此GPIO口。
## 1.3. 功能UML时序图
### 1.3.1. 整机物理上电启动
  整机物理上电时设备一定会进入TEST或者ON状态主控Linux启动一次。
```mermaid
sequenceDiagram
participant CPU
participant MCU
MCU ->> MCU:物理上电
MCU ->> CPU:物理上电
CPU ->> MCU:查询启动模式
alt 检测到TEST拨档挡位
MCU -->> CPU:回复TEST启动
CPU ->> CPU:TEST启动
loop 无操作
CPU ->> MCU:发送关机指令
MCU ->> CPU:物理断电
end
else 检测到ON拨档挡位
note over MCU:正常工作模式PIR触发后可给主控上电
MCU -->> CPU:回复ON启动
CPU ->> CPU:ON启动
CPU ->> MCU:发送关机指令
MCU ->> CPU:物理断电
end
loop 默认开启喂狗
opt 喂狗超时
MCU ->> CPU:断电重启
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复喂狗异常启动
CPU ->> MCU:发送关机指令
MCU ->> CPU:物理断电
end
end
MCU ->> MCU:休眠
note over MCU:休眠后进入正常工作模式当发生PIR触发时<br>给CPU物理上电并发送PIR启动命令
```
### 1.3.2. MCU休眠逻辑
&emsp;&emsp;合理的休眠设计,最大降低产品功耗,延长单次换电的使用周期。
定时中断待确认;
```mermaid
sequenceDiagram
participant CPU
participant MCU
loop 常通电待机
opt PIR触发中断
MCU ->> MCU:休眠唤醒
MCU ->> CPU:物理上电
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复PIR启动
end
opt TEST/ON按键中断
MCU ->> MCU:休眠唤醒
MCU ->> CPU:物理上电
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复TEST/ON启动
end
opt 设置定时唤醒
CPU ->> MCU:发送设置定时唤醒协议
opt 定时唤醒中断
MCU ->> MCU:休眠唤醒
MCU ->> CPU:物理上电
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复喂狗异常启动
end
end
MCU ->> MCU:休眠
end
```
### 1.3.3. 常通电待机
&emsp;&emsp;描述上电后的各种场景。
#### 1.3.3.1. 定时唤醒刷新环境数据(**待定,忽略**
&emsp;&emsp;MCU定时唤醒更新环境参数保证工作触发时的环境参数正确性。
```mermaid
sequenceDiagram
participant CPU
participant MCU
loop 常通电待机
loop 大循环定时中断(20min/次)
note over MCU:大循环定时中断负责定时触发小循环定时中断
opt 定时唤醒中断
loop 小循环采集数据1s/次共30次
note over MCU:小循环定时器,短时间间隔唤醒,多次采集环境数据,<br>计算出合理稳定的环境参数并保存,在工作时可快速响应。
MCU ->> MCU:采集环境数据
note right of MCU:采集光敏数据
opt 采集30次完成
note over MCU:计算平均值作为单次采集的真实数据
MCU ->> MCU:计算30次平均值
opt 对比上次发生翻转
MCU ->> MCU:保存最新数据(白天/黑夜)
MCU ->> +CPU:发送数据同步任务
CPU -->> -MCU:回复OK
MCU ->> CPU:物理上电
CPU ->> +MCU:读取白天黑夜数据
MCU -->> -CPU:回复白天黑夜数据
CPU ->> MCU:断电关机
MCU ->> CPU:物理断电
end
end
end
end
end
end
```
#### 1.3.3.2. 喂狗
&emsp;&emsp;外置MCU充当硬件狗在系统异常时断电重启系统。喂狗逻辑和启动模式无关。默认关闭喂狗功能主控喂狗之后开启喂狗功能。
**注意物理通电后如果主控从未进行喂狗MCU喂狗功能一直关闭。**
```mermaid
sequenceDiagram
participant CPU
participant MCU
MCU ->> MCU:物理上电
MCU ->> MCU:默认关闭喂狗功能
MCU ->> CPU:某种启动模式触发物理上电
alt 主控喂狗
MCU ->> MCU:开启喂狗功能
loop 喂狗
opt 设置喂狗周期
note over CPU:主控选择性设置喂狗周期
CPU ->> +MCU:开启狗/设置喂狗周期
MCU -->> -CPU:回复OK
end
opt 主控喂狗
note over MCU:喂狗不需要回复
CPU ->> MCU:喂狗
end
alt 主控喂狗异常
MCU ->> CPU:断电重启
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复喂狗异常启动
CPU ->> MCU:断电关机
end
end
else 主控未喂狗
note over MCU:如果主控在物理通电后从来没有喂狗,<br>MCU关闭喂狗功能
end
CPU ->> MCU:断电关机
MCU ->> CPU:物理断电
MCU ->> MCU:休眠
note over MCU:休眠后进入正常工作模式当发生PIR触发时<br>给CPU物理上电并发送PIR启动命令
```
#### 1.3.3.3. 超时异常启动
&emsp;&emsp;CPU单次上电时间都是有限的在主控未正常发送关机指令时**10min**后断电进行异常启动。TEST/产测模式等需要一直开机的场景,主控关闭喂狗功能即可。
```mermaid
sequenceDiagram
participant CPU
participant MCU
MCU ->> MCU:物理上电
MCU ->> CPU:某种启动模式触发物理上电
alt 主控未关闭喂狗
note over MCU:如果主控关闭喂狗的功能,<br>也同时关闭超时异常启动功能
opt 主控未正常发送关机指令
MCU ->> CPU:物理断电
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复喂狗异常启动
end
end
CPU ->> MCU:断电关机
MCU ->> CPU:物理断电
MCU ->> MCU:休眠
```
#### 1.3.3.4. PIR触发任务
&emsp;&emsp;PIR触发是相机的正常工作模式相机会快速启动抓拍并快速关机。
```mermaid
sequenceDiagram
participant CPU
participant MCU
loop 常通电待机
opt PIR触发中断
MCU ->> MCU:休眠唤醒
MCU ->> CPU:物理上电
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复PIR触发启动
CPU ->> CPU:Do something
CPU ->> MCU:断电关机
MCU ->> CPU:物理断电
MCU ->> MCU:休眠
end
end
```
#### 1.3.3.5. TEST拨键启动
&emsp;&emsp;TEST模式相机处于一个长通电状态功耗较高长时间无操作会进入正常工作状态。
**存疑:** 实际使用时当有人把按键从ON拨到TEST时大概率会先触发PIR启动再触发TEST启动。
```mermaid
sequenceDiagram
participant CPU
participant MCU
MCU ->> MCU:常电待机
opt 拨键从ON/OFF拨到TEST
note over MCU:TEST模式启动只会发生在从ON/OFF切换到TEST的瞬间<br>如果PIR触发时已经处于TEST挡位此时不影响PIR模式启动
MCU ->> CPU:物理上电
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复TEST启动
CPU ->> CPU:Do something
opt CPU关机
note over MCU:超时关机时,<br>此时拨键还是处于“TEST”挡位的
CPU ->> MCU:发送断电关机
MCU ->> CPU:物理断电
end
end
MCU ->> MCU:休眠
```
#### 1.3.3.6. 主控通电时发生启动事件
&emsp;&emsp;如果主控在通电后(主控发送关机指令之前)发生启动事件的动态变化,需要先主动发送启动事件,有主控发送关机指令后,再断电重启触发新的启动事件。
```mermaid
sequenceDiagram
participant CPU
participant MCU
MCU ->> MCU:主控已经上电,常电待机
note over MCU:此处不管由于何总原因的主控上电,<br>如果发生启动事件动态变化,需要先发送启动命令给主控
opt 拨键从ON拨到TEST
MCU ->> +CPU:发送启动模式TEST启动
CPU ->> CPU:Do something
CPU -->> -MCU:回复OK
CPU ->> MCU:发送断电关机
MCU ->> CPU:物理断电重启
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复TEST启动
CPU ->> CPU:TEST启动
opt CPU关机
note over MCU:超时关机时,<br>此时拨键还是处于“TEST”挡位的
CPU ->> MCU:发送断电关机
MCU ->> CPU:物理断电
end
end
opt 拨键从TEST拨到ON
MCU ->> +CPU:发送启动模式ON启动
CPU ->> CPU:Do something
CPU -->> -MCU:回复OK
CPU ->> MCU:发送断电关机
MCU ->> CPU:物理断电重启
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复ON启动
CPU ->> CPU:ON启动
opt CPU关机
CPU ->> MCU:发送断电关机
MCU ->> CPU:物理断电
end
end
opt PIR触发
note over MCU:上电后发生PIR触发主控立即处理抓拍流程无需断电重启。
MCU ->> +CPU:发送启动模式PIR启动
CPU ->> CPU:Do something
CPU -->> -MCU:回复OK
opt CPU关机
CPU ->> MCU:发送断电关机
MCU ->> CPU:物理断电
end
end
opt 定时启动
note over MCU:上电后发生定时启动,主控立即处理抓拍流程,无需断电重启。
MCU ->> +CPU:发送启动模式:定时启动
CPU ->> CPU:Do something
CPU -->> -MCU:回复OK
opt CPU关机
CPU ->> MCU:发送断电关机
MCU ->> CPU:物理断电
end
end
MCU ->> MCU:休眠
```
#### 1.3.3.7. 数据同步
&emsp;&emsp;主控和外置MCU之间数据同步包括主控发给外置MCU的也包括外置MCU发给主控的。数据同步流程可以在任意的工作状态下进行。
```mermaid
sequenceDiagram
participant CPU
participant MCU
MCU ->> MCU:物理上电
MCU ->> CPU:某种启动模式触发物理上电
opt 数据同步
note over MCU:此处根据协议只做一个数据示例,其它协议雷同。
MCU ->> +CPU:获取灵敏度
CPU -->> -MCU:回复数据
end
CPU ->> MCU:断电关机
MCU ->> CPU:物理断电
MCU ->> MCU:休眠
note over MCU:休眠后进入正常工作模式当发生PIR触发时<br>给CPU物理上电并发送PIR启动命令
```
### 1.3.4. 连拍
&emsp;&emsp;打猎机可以设置连拍张数和连拍间隔。连拍张数1-3连拍间隔0-60s
**备注竞品的连拍间隔为0/1/2s。先做0/1/2s连拍此时与外置MCU无关。**
## 1.4. MCU协议
&emsp;&emsp;负责对MCU协议进行封包/解包,协议封包/解包功能独立封装成库,详见[协议文档](../../utils/McuProtocol/README.md)。