feat: 完善Mesh继电器OTA与地址协议
- 增加STM8 Bootloader工程及出厂固件恢复流程\n- 增加W25Q64外部Flash驱动和OTA分包接收、CRC16校验、断点续传状态管理\n- 增加固件版本查询、升级结果上报与主机确认机制\n- 将业务帧从55 AA帧头调整为发送方Mesh短地址+CMD+LEN+DATA+CRC16\n- 修正JDY-28M外层地址与业务发送方地址的职责划分,支持广播请求定向应答\n- 同步更新硬件引脚、存储分区、OTA流程和主机通信协议文档\n- 已使用SDCC重新编译,应用代码大小为5512字节,链接地址为0x8800
This commit is contained in:
+11
-11
@@ -79,7 +79,7 @@ Mesh 初始化完成,允许继电器业务运行
|
||||
- 如果连续重试仍无法确认模式或短地址,进入 `BT_INIT_FAULT`,继电器保持断开,并通过 LED/故障状态报告蓝牙初始化故障;Mesh 尚未组网本身不属于初始化故障,不强制断开继电器;
|
||||
- 短地址不写入 EEPROM,设备每次上电都从 JDY-28M 重新查询。
|
||||
|
||||
JDY-28M 手册说明,MESH 指令模式相关配置需要注意模块的指令/透传状态和 PWRC 管脚条件。实际硬件上应确认 `PC5_JDY-28M-PWRC` 的上电电平;如果模块未进入指令窗口,STM8 应先按手册要求控制 PWRC,再发送 `AT+ROLE`。
|
||||
JDY-28M 手册说明,MESH 指令模式相关配置需要注意模块的指令/透传状态和 PWRC 管脚条件。当前硬件使用 `PA2_JDY-28M-PWRC`,RESET 使用 `PD2_JDY-28M-RESET`;如果模块未进入指令窗口,STM8 应先按手册要求控制 PWRC,再发送 `AT+ROLE`。
|
||||
|
||||
建议的初始化状态枚举如下:
|
||||
|
||||
@@ -109,13 +109,13 @@ void Bluetooth_InitTask(void)
|
||||
|
||||
短地址只保存在运行期 RAM 中。上电时必须重新执行 `AT+MADDR` 查询并校验,查询失败不能使用旧地址替代。
|
||||
|
||||
### 4.2 LED3 蓝牙状态指示
|
||||
### 4.2 PB5 蓝牙状态指示
|
||||
|
||||
LED3 由 STM8 的 `PD3` 控制,`PC3_JDY-28M-STAT` 用于读取 JDY-28M 的 Mesh 状态。蓝牙初始化完成后,程序需要区分“模块初始化成功”和“已经完成组网”两个状态,不能仅凭 `AT+ROLE2` 成功就认为已经入网。
|
||||
蓝牙状态/故障指示灯由 STM8 的 `PB5` 控制,低电平点亮;`PD3` 改作继电器状态指示灯,高电平点亮。`PC3_JDY-28M-STAT` 用于读取 JDY-28M 的 Mesh 状态。蓝牙初始化完成后,程序需要区分“模块初始化成功”和“已经完成组网”两个状态,不能仅凭 `AT+ROLE2` 成功就认为已经入网。
|
||||
|
||||
LED3 显示规则如下:
|
||||
PB5蓝牙状态/故障灯显示规则如下:
|
||||
|
||||
| 条件 | LED3 状态 | 说明 |
|
||||
| 条件 | PB5 状态 | 说明 |
|
||||
|---|---|---|
|
||||
| 蓝牙模块初始化故障 | 300 ms 亮、300 ms 灭 | 最高优先级,表示 ROLE/RESET/MADDR 初始化失败 |
|
||||
| 初始化成功但尚未完成 Mesh 组网 | 1 s 亮、1 s 灭 | 表示模块正常,但当前没有完成组网 |
|
||||
@@ -134,7 +134,7 @@ JDY-28M 手册第 7 页对 STAT(第 6 脚)给出了明确规定:在 MESH
|
||||
#define JDY_MESH_JOINED_LEVEL 1
|
||||
|
||||
/*
|
||||
* 更新 LED3 显示状态。
|
||||
* 更新 PB5 蓝牙状态/故障灯显示状态。
|
||||
* - 初始化故障时以 300 ms 周期闪烁;
|
||||
* - 初始化成功但 PC3 未确认组网时以 1 s 周期闪烁;
|
||||
* - PC3 连续稳定确认已组网时保持常亮。
|
||||
@@ -146,7 +146,7 @@ void BluetoothLed_Update(uint8_t init_fault, uint8_t init_ready,
|
||||
}
|
||||
```
|
||||
|
||||
PC3 状态必须连续稳定确认至少 3 秒:连续 3 秒读取到高电平才切换为常亮;连续 3 秒读取到低电平才切换为 1 秒闪烁。模块的 ALED(第 17 脚)是 JDY-28M 自带的广播 LED 指示脚,不应与本项目由 STM8 PD3 控制的 LED3 混淆。
|
||||
PC3 状态必须连续稳定确认至少 3 秒:连续 3 秒读取到高电平才切换为常亮;连续 3 秒读取到低电平才切换为 1 秒闪烁。模块的 ALED(第 17 脚)是 JDY-28M 自带的广播 LED 指示脚,不应与本项目由 STM8 PB5 控制的蓝牙状态灯混淆;PD3只用于继电器状态指示。
|
||||
|
||||
### 4.3 量产配置
|
||||
|
||||
@@ -305,7 +305,7 @@ CMD=0x05, LEN=2, DATA=[ADDR_L, ADDR_H]
|
||||
`0x04` 故障上报建议定义为:
|
||||
|
||||
```text
|
||||
DATA[0]:故障码,0x00=继电器已吸合但没有电流输出,0x01=继电器已断开但仍存在异常电流,0x02=ACS712采样异常,0x04=电流故障恢复,0x06=采样异常恢复。蓝牙初始化异常不通过 Mesh 上报,只通过 LED3 指示。
|
||||
DATA[0]:故障码,0x00=继电器已吸合但没有电流输出,0x01=继电器已断开但仍存在异常电流,0x02=ACS712采样异常,0x04=电流故障恢复,0x06=采样异常恢复。蓝牙初始化异常不通过 Mesh 上报,只通过 PB5 指示。
|
||||
```
|
||||
|
||||
`CMD=0x03` 的电流数据是 STM8 根据 ACS712 采样值、零点偏置和校准系数计算出的实际电流,不是 ADC 原始值。数据类型为 16 位无符号整数,单位为 mA,低字节在前,并采用四舍五入:
|
||||
@@ -338,7 +338,7 @@ JDY-28M 先按 MESH 外层帧完成目标地址处理和来源地址携带,STM
|
||||
|
||||
1. JDY-28M 已确认 `AT+ROLE=2`;
|
||||
2. 已成功查询并校验 Mesh 短地址;
|
||||
3. 已读取并保存 Mesh 状态;组网状态由 LED3 单独指示;
|
||||
3. 已读取并保存 Mesh 状态;组网状态由 PB5 蓝牙状态灯单独指示;PD3指示继电器状态;
|
||||
4. STM8 已完成 ACS712 零点初始化;
|
||||
5. 继电器输出已经处于安全的断开状态。
|
||||
|
||||
@@ -409,8 +409,8 @@ CMD=0x06, LEN=2, DATA=[THRESHOLD_L, THRESHOLD_H]
|
||||
|
||||
- 吸合后持续检测至少 10 s,电流始终低于 `I_ON_THRESHOLD`,主动上报 `0x00`;
|
||||
- 断开后持续检测至少 10 s,电流仍持续高于 `I_OFF_THRESHOLD`,主动上报 `0x01`;
|
||||
- ACS712 采样异常上报 `0x02`;蓝牙初始化异常无法通过 Mesh 上报,只通过 LED3 指示;
|
||||
- 后续连续检测恢复正常至少 10 s 时,清除对应故障并主动上报恢复码 `0x04` 或 `0x06`;蓝牙初始化故障无法通过 Mesh 上报,恢复后仅结束 LED3 故障闪烁;
|
||||
- ACS712 采样异常上报 `0x02`;蓝牙初始化异常无法通过 Mesh 上报,只通过 PB5 指示;
|
||||
- 后续连续检测恢复正常至少 10 s 时,清除对应故障并主动上报恢复码 `0x04` 或 `0x06`;蓝牙初始化故障无法通过 Mesh 上报,恢复后仅结束 PB5 故障闪烁;
|
||||
- 故障或恢复上报发送后,等待主机返回 `CMD=0x84` 确认;
|
||||
- 未收到确认时,每隔 10 s 重发一次相同的 `CMD=0x04` 上报帧;
|
||||
- 收到 `CMD=0x84` 且 DATA 与当前待确认故障码一致后,停止该事件的周期重发;
|
||||
|
||||
Reference in New Issue
Block a user