feat(upgrade): 升级完成置APP_BOOT_UPGRADE_FLAG标记,参数分区擦除改由App侧执行
- 升级成功(CRC32校验通过)后AppFlag置APP_BOOT_UPGRADE_FLAG(0x5A5A55A5),每次升级均置位 - 启动判断放行该标记: 升级完成后直接启动App,不再停留在BL_IDLE - 擦除动作由App初始化完成: 检测标记后擦除外部SPI Flash参数分区(扇区0~1,非全片擦除,历史日志保留),随后恢复APP_START_FLAG并加载默认参数 - 目的: 防止固件升级后参数结构体布局变化导致字段错位(曾引发注册表乱码/传感器无法注册) - main.h统一UTF-8编码,新增APP_BOOT_UPGRADE_FLAG定义(与App侧bsp.h保持一致) - bsp.h配置更新: 网关编号0x0003,服务器端口8083
This commit is contained in:
+29
-7
@@ -10,14 +10,14 @@
|
||||
> ```c
|
||||
> #define GATEWAY_VER_INFO GATEWAY_VER1_0 // 版本信息 → Mac[0](Bit7固定1)
|
||||
> #define GATEWAY_PRJ_NUM GATEWAY_PRJ_YAXIA // 项目编号 → Mac[1:3](枚举见 bsp.h:17-26)
|
||||
> #define GATEWAY_GW_NUM 0x0000 // 网关编号 → Mac[4:5](1~65535,按设备唯一分配)
|
||||
> #define $10x0003 // 网关编号 → Mac[4:5](1~65535,按设备唯一分配)
|
||||
> ```
|
||||
>
|
||||
> | 项 | 当前值 | 影响 |
|
||||
> | --- | --- | --- |
|
||||
> | GATEWAY_VER_INFO | GATEWAY_VER1_0 | 写入 MAC[0],标识网关软件版本 |
|
||||
> | GATEWAY_PRJ_NUM | GATEWAY_PRJ_YAXIA | 写入 MAC[1:3],标识所属项目(换项目必改) |
|
||||
> | GATEWAY_GW_NUM | 0x0000 | 写入 MAC[4:5],每台设备必须唯一(按网关编号分配) |
|
||||
> | GATEWAY_GW_NUM | 0x0003 | 写入 MAC[4:5],每台设备必须唯一(按网关编号分配) |
|
||||
>
|
||||
> ### ② CAT1 服务器 / Lora 配置(bsp.h:67-73)
|
||||
>
|
||||
@@ -26,15 +26,15 @@
|
||||
> #define GATEWAY_SVR_ADDR1 106 // 服务器 IP[1]
|
||||
> #define GATEWAY_SVR_ADDR2 103 // 服务器 IP[2]
|
||||
> #define GATEWAY_SVR_ADDR3 147 // 服务器 IP[3]
|
||||
> #define GATEWAY_SVR_PORT 8080 // 服务器端口
|
||||
> #define GATEWAY_LORA_FREQ CH3 // Lora 中心频率(CH0~CH45,470.1MHz~492.6MHz)
|
||||
> #define $18083 // 服务器端口
|
||||
> #define GATEWAY_LORA_FREQ CH0 // Lora 中心频率(CH0~CH45,470.1MHz~492.6MHz)
|
||||
> ```
|
||||
>
|
||||
> | 项 | 当前值 | 说明 |
|
||||
> | --- | --- | --- |
|
||||
> | 服务器 IP | 39.106.103.147 | CAT1 上传的默认服务器地址 |
|
||||
> | 服务器端口 | 8080 | CAT1 上传的默认端口 |
|
||||
> | GATEWAY_LORA_FREQ | CH3 | Lora 中心频率,按现场干扰/组网需要从 CH0~CH45 中选择 |
|
||||
> | 服务器端口 | 8083 | CAT1 上传的默认端口 |
|
||||
> | GATEWAY_LORA_FREQ | CH0 | Lora 中心频率,按现场干扰/组网需要从 CH0~CH45 中选择 |
|
||||
>
|
||||
> ### ③ 默认通道配置(bsp.h:76-79)
|
||||
>
|
||||
@@ -51,6 +51,9 @@
|
||||
> | GATEWAY_AUCH | CH_NULL | 辅助上传通道,-1 表示不使用 |
|
||||
> | GATEWAY_DUCH | CH_CAT1 | 调试/升级通道 |
|
||||
> | GATEWAY_CUCH_MASK | CUCH_LORA | 通讯单元通道掩码,可多通道按位或(CUCH_CH1/CUCH_CH2/CUCH_ETH/CUCH_LORA/CUCH_CAT1) |
|
||||
>
|
||||
> **编码约定**:所有源码文件统一使用 UTF-8 编码(无 BOM),注释使用中文;
|
||||
> 新增/修改代码时勿以 GB2312/ANSI 保存。
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
@@ -193,6 +196,7 @@ ReadBootPara() // 读参数区
|
||||
│ ├─ 同步 s_DevMac
|
||||
│ ├─ 旧参数区(0xFF)补默认值
|
||||
│ ├─ AppFlag==APP_START_FLAG -> BL_START_APP (直接跳APP)
|
||||
│ ├─ AppFlag==APP_BOOT_UPGRADE_FLAG -> BL_START_APP (升级完成,启动后由App擦参数分区)
|
||||
│ ├─ UpdateFlag==APP_UPDATE_FLAG -> BL_ERASE_FLASH (续升级)
|
||||
│ └─ 否则 -> BL_IDLE (等待升级指令)
|
||||
└─ while(1): FeedDogHandler() + BootLoaderLoopHandler()
|
||||
@@ -210,7 +214,7 @@ BL_WAIT_REV ── 500ms 超时 ──> BL_GET_DATA_TIMEOUT
|
||||
BL_GET_DATA_TIMEOUT ── 重试<3次 ──> BL_GET_DATA
|
||||
BL_GET_DATA_TIMEOUT ── 重试>=3次 ──> BL_IDLE (清除升级标志)
|
||||
└─ 全部包写完 -> CRC32 校验
|
||||
├─ 成功 -> 写 AppFlag + 复位 -> BL_RESET -> 启动 APP
|
||||
├─ 成功 -> 写 AppFlag=APP_BOOT_UPGRADE_FLAG + 复位 -> BL_RESET -> 启动 APP
|
||||
└─ 失败 -> 清标志 -> BL_IDLE
|
||||
```
|
||||
|
||||
@@ -257,7 +261,25 @@ BL_GET_DATA_TIMEOUT ── 重试>=3次 ──> BL_IDLE (清除升级标志)
|
||||
### 6.5 帧接收组帧 (main.c:291-329)
|
||||
|
||||
中断逐字节接收,按 0x7D 帧头、第 9 字节载荷长度、`sizeof(FrameHeader_t)+PayloadLen+2` 组帧完成判断,存入 `BL.RxBuff` 并置 `BL.RxFlag`。
|
||||
### 6.6 升级完成后的参数分区擦除(App 侧执行)
|
||||
|
||||
Boot 升级成功(CRC32 校验通过)后置 `AppFlag = APP_BOOT_UPGRADE_FLAG`(0x5A5A55A5,**每次升级均置位**)并复位;
|
||||
启动判断对该标记直接放行 `BL_START_APP`,擦除动作由 APP 侧完成:
|
||||
|
||||
```
|
||||
App GateWayInit():
|
||||
检测 AppFlag == APP_BOOT_UPGRADE_FLAG
|
||||
├─ 打印 "Upgrade done, erasing parameter partition..."
|
||||
├─ 擦除外部 SPI Flash 参数分区(扇区0~1,仅8KB,非全片擦除,历史日志保留)
|
||||
├─ AppFlag 恢复 APP_START_FLAG 并写回 Boot 参数区
|
||||
└─ 后续 ReadPara 读到空白数据 -> 自动加载 Boot 默认参数,传感器重新注册
|
||||
```
|
||||
|
||||
- 设计原因:升级后新固件的参数结构体布局可能变化,保留旧参数会导致字段错位
|
||||
(曾引发注册表乱码、传感器无法注册)。
|
||||
- 兜底机制:APP 侧参数 `SavFlag` 绑定 `PARA_LAYOUT_VER` 布局版本戳,
|
||||
布局变更时旧参数自动失效回退默认值。
|
||||
- 注意:每次升级后传感器注册表被清空,设备需重新注册。
|
||||
### 6.6 APP 跳转 (main.c:85-109)
|
||||
|
||||
校验栈顶在 SRAM 范围内后:
|
||||
|
||||
Reference in New Issue
Block a user