Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 314ff67f26 | |||
| 6d4aad164b | |||
| b1cba74aa7 | |||
| 2cf17c4387 | |||
| e23a0d01ae |
@@ -0,0 +1,112 @@
|
||||
# Boot A/B 分区升级改造计划
|
||||
|
||||
## 背景
|
||||
|
||||
当前 Boot 升级流程:收到 0x81 升级请求后复位 → **先整片擦除 App 区(0x8000\~0x7C000, 58扇区)** → 逐包(200字节)边收边写 → 收完才做 CRC32 整包校验 → 失败/超时仅清标志,但 App 区已被擦除,**设备变砖只剩 Boot**。
|
||||
|
||||
改造目标:App 区分 A/B 两区。新固件先下载到 B 区暂存,**整包 CRC 校验成功后才搬运到 A 区**;任何失败(CRC 错/下载超时/断电)都能回到 A 区原有 App,彻底消除变砖风险。RS485 协议(0x81/0x82/0x01/0x02 帧)不变,主机升级工具无需修改。
|
||||
|
||||
## 新 Flash 分区(512KB = 64 扇区 × 8KB)
|
||||
|
||||
| 分区 | 地址范围 | 扇区数 | 说明 |
|
||||
| ---------- | ---------------- | -------------- | --------------------------- |
|
||||
| Boot | 0x00000\~0x07FFF | 4 (32KB) | 不变,MAC 常量 0x4000 不受影响 |
|
||||
| **A区(运行)** | 0x08000\~0x41FFF | **29 (232KB)** | App 链接基址仍为 0x8000 |
|
||||
| **B区(暂存)** | 0x42000\~0x7BFFF | **29 (232KB)** | 升级包下载区 |
|
||||
| 参数区 | 0x7C000\~0x7DFFF | 1 | 不变,boot\_para\_t 结构**完全不变** |
|
||||
| 备用 | 0x7E000\~0x7FFFF | 1 | 不变 |
|
||||
|
||||
App 当前实际 113KB,A/B 各 232KB 有约一倍余量。断电状态全部由 `UpdateFlag + AppSize + Crc32Check + B区CRC实测` 推导,**无需新增参数字段**。
|
||||
|
||||
## 新升级状态机
|
||||
|
||||
```
|
||||
main() 决策(不变): AppFlag==START/BOOT_UPGRADE→跳A | UpdateFlag==UPDATE→BL_ERASE_FLASH | 其他→BL_IDLE
|
||||
|
||||
BL_ERASE_FLASH(改):
|
||||
AppSize非法(==0 或 >232KB) → AppFlag=START_FLAG/UpdateFlag=0 → BL_RESET(回老App)
|
||||
GetCrc32(B区, AppSize)==Crc32Check ? ──是(断电续传:已下载完/搬运中断电)──→ BL_COPY_TO_A
|
||||
└─否→ 仅擦B区29扇区 → BL_GET_DATA(逐包写B区) → 收完 ↓
|
||||
|
||||
0x82 收完全部包(改):
|
||||
CRC32(B区,AppSize)==Crc32Check ?
|
||||
├─是→ UpDateFlag=false → BL_COPY_TO_A
|
||||
└─否→ AppFlag=APP_START_FLAG / UpdateFlag=0 → 写参数 → BL_RESET (回老App, 原来是BL_IDLE变砖)
|
||||
|
||||
BL_COPY_TO_A(新增):
|
||||
按 ceil(AppSize/8K) 扇区数逐扇区: FeedDog → 擦A扇区 → 从B读8KB到RAM缓冲 → FlashWrite写A
|
||||
→ CRC32(A区,AppSize)==Crc32Check ?
|
||||
├─是→ AppFlag=APP_BOOT_UPGRADE_FLAG / UpdateFlag=0 → 写参数 → BL_RESET → 跳A
|
||||
└─否→ CopyRetryCnt<1 重试搬运; 仍失败→ AppFlag=0/UpdateFlag=0 → BL_IDLE
|
||||
|
||||
BL_GET_DATA_TIMEOUT(改): 重试3次耗尽 → AppFlag=APP_START_FLAG / UpdateFlag=0 → BL_RESET(回老App, 原来是BL_IDLE)
|
||||
```
|
||||
|
||||
断电自愈覆盖:①下载中断电→重启 B 校验失败→重新下载;②搬运中断电→A 残缺但 B 仍有效→重启自动重搬;③擦 A 前提是 AppFlag=0 且 Boot 不会在 UpdateFlag 置位时跳转,无跳半擦区风险;④0x81 写参数中断电→参数区 0xFF→走 FirstRunFlag 分支跳 A,老 App 完好。
|
||||
|
||||
## Boot 工程改动(d:\keilProject\hc32f460\git\hc32f460bootloader)
|
||||
|
||||
**bsp.h**(分区宏,L194-206):
|
||||
|
||||
* `APP_A_ADDRESS = FLASH_BASE + BOOT_SIZE` (0x8000)、`APP_BANK_SECTORS 29u`、`APP_BANK_SIZE = 29*8K` (232KB)、`APP_B_ADDRESS = APP_A_ADDRESS + APP_BANK_SIZE` (0x42000)、`APP_ADDRESS` 保留别名指向 A 区、`BOOT_PARA_ADDRESS = APP_B_ADDRESS + APP_BANK_SIZE` (0x7C000 不变)
|
||||
|
||||
**main.h**:
|
||||
|
||||
* 枚举加 `BL_COPY_TO_A`;`BootLoader_t` 加 `uint32_t CopyRetryCnt`
|
||||
|
||||
**bsp.c**:
|
||||
|
||||
* `FlashWrite`/`FlashRead` 长度参数 `uint8_t` → `int`(8KB 整扇区 2048 字超出 uint8\_t,评审发现 P2)
|
||||
|
||||
* `FlashWrite` 尾部不足 4 字节时按 0xFF 补齐组字写入(防 AppSize 非 4 对齐时丢尾字节导致 CRC 永败)
|
||||
|
||||
* `EraseFlash()` 参数化为擦指定起始地址+扇区数(现仅用于擦 B 区 29 扇区,不再碰 A 区)
|
||||
|
||||
**main.c**:
|
||||
|
||||
* `GetCrc32(int dwLen)` → `GetCrc32(uint32_t BaseAddr, int dwLen)`(现有 L50 固定读 APP\_ADDRESS)
|
||||
|
||||
* `AppWriteFlash` 加基址参数,下载包写入 `APP_B_ADDRESS + offset`
|
||||
|
||||
* `AnalyzeData`:
|
||||
|
||||
* 0x81 分支:加 AppSize 合法性拒绝(>232KB 或 0 时忽略)
|
||||
|
||||
* 0x82 分支:加状态守卫 `Status 必须为 BL_GET_DATA/BL_WAIT_REV`(评审发现 P1:防迟到包破坏搬运期 B 区);收完 CRC 改算 B 区,成功→`BL_COPY_TO_A`,失败→恢复 START\_FLAG→BL\_RESET
|
||||
|
||||
* `BootLoaderLoopHandler`:`BL_ERASE_FLASH` 改为先校验 B 区(断电续传入口);新增 `BL_COPY_TO_A` case(调 CopyAppBtoA);`BL_GET_DATA_TIMEOUT` 耗尽改恢复 START\_FLAG+BL\_RESET
|
||||
|
||||
* 新增 `CopyAppBtoA()`:main.c 内实现,`static uint32_t s_CopyBuf[2048]`(8KB),逐扇区 EFM\_SectorErase(A)+读 B 缓冲+FlashWrite(A),每扇区 FeedDog,结尾 CRC32(A) 校验返回 bool
|
||||
|
||||
## App 工程改动(d:\keilProject\HC32F460\Git\GateWay)
|
||||
|
||||
**Project/GateWay/source/User/Inc/bsp.h**(L19-29,评审 P0 关键):
|
||||
|
||||
* `FLASH_APP_SIZE` 58→29 扇区后 `FLASH_BINFO_BASE` 会错算成 0x42000,**必须**改为:
|
||||
`FLASH_APP_A_SIZE(29*8K)` + `FLASH_APPB_BASE = FLASH_APP_BASE + FLASH_APP_A_SIZE`(0x42000) + `FLASH_APPB_SIZE(29*8K)` + `FLASH_BINFO_BASE = FLASH_APPB_BASE + FLASH_APPB_SIZE`(**仍=0x7C000**)、FLASH\_CFG\_BASE 连带仍=0x7E000
|
||||
|
||||
**MDK/GateWay\_app.sct**:`LR_IROM1/ER_IROM1` 尺寸 `0x74000` → `0x3A000`(两个 target 共用此 sct,sct 优先于 uvprojx IROM)
|
||||
|
||||
**MDK/GateWay.uvprojx**:app\_boot target(L1168) IROM Size `0x6c000`→`0x3a000`(一致性,app\_dubeg 的 0x0/0x80000 本就与 sct 不一致,不动)
|
||||
|
||||
**source/User/Src/Update.c** `Update()`:加 `AppSize==0 || AppSize>FLASH_APPB_SIZE` 时报错返回,不置标志不复位
|
||||
|
||||
其余 App 代码(VTOR 动态基址、UpdateInit、升级异常检测、JumpToApp)均无需改动。
|
||||
|
||||
## 实施注意事项
|
||||
|
||||
1. **编码**:所有源文件含中文注释,一律 UTF-8。用 .NET 脚本(`UTF8Encoding(false)`)做替换修改(本会话已验证 Edit 工具会把 GBK 污染写入),改后校验 git diff 行数与编码
|
||||
2. boot\_para\_t 结构、BOOT\_PARA\_ADDRESS、协议帧均不变 → 新旧 Boot/App 交叉兼容
|
||||
3. 编译验证:Boot(Keil MDK)+ App(app\_boot target)分别编译通过,App 镜像 113KB < 232KB
|
||||
|
||||
## 验证清单
|
||||
|
||||
1. 正常升级全流程:新固件运行、外部参数分区按 APP\_BOOT\_UPGRADE\_FLAG 清理、传感器重新注册
|
||||
2. 下载中断电 → 重启回老 App → 可再次升级
|
||||
3. 下载超时(主机停发)→ 3 次重试后自动回老 App
|
||||
4. CRC 注入失败 → 回老 App
|
||||
5. 搬运中断电 → 重启自愈重搬 → 升级成功
|
||||
6. B 区残留旧镜像 + 新 0x81(不同 AppSize/CRC)→ 不误判、重新下载
|
||||
7. COPY 阶段发 0x81/0x82 → 均被拒绝,搬运不被干扰
|
||||
8. AppSize=0 / >232KB → 拒绝
|
||||
|
||||
@@ -1165,7 +1165,7 @@
|
||||
<OCR_RVCT4>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x8000</StartAddress>
|
||||
<Size>0x6c000</Size>
|
||||
<Size>0x3a000</Size>
|
||||
</OCR_RVCT4>
|
||||
<OCR_RVCT5>
|
||||
<Type>1</Type>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
; *************************************************************
|
||||
; *** Scatter-Loading Description File for GateWay APP ***
|
||||
; *** Flash: APP区 0x8000起 (Boot 32KB), 到参数区0x7C000前 ***
|
||||
; *** Flash: A区 0x8000~0x41FFF(232KB, 运行) + B区 0x42000~0x7BFFF(232KB, 升级暂存), 参数区0x7C000 ***
|
||||
; *************************************************************
|
||||
|
||||
LR_IROM1 0x00008000 0x00074000 {
|
||||
ER_IROM1 0x00008000 0x00074000 {
|
||||
LR_IROM1 0x00008000 0x0003A000 {
|
||||
ER_IROM1 0x00008000 0x0003A000 {
|
||||
*.o (RESET, +First)
|
||||
*(InRoot$$Sections)
|
||||
.ANY (+RO)
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
#define RT_DEBUG_INIT 0
|
||||
// <c1>thread stack over flow detect
|
||||
// <i> Diable Thread stack over flow detect
|
||||
//#define RT_USING_OVERFLOW_CHECK
|
||||
#define RT_USING_OVERFLOW_CHECK
|
||||
// </c>
|
||||
// </h>
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
; *** Scatter-Loading Description File generated by uVision ***
|
||||
; *************************************************************
|
||||
|
||||
LR_IROM1 0x00008000 0x0006C000 { ; load region size_region
|
||||
ER_IROM1 0x00008000 0x0006C000 { ; load address = execution address
|
||||
LR_IROM1 0x00008000 0x0003A000 { ; load region size_region
|
||||
ER_IROM1 0x00008000 0x0003A000 { ; load address = execution address
|
||||
*.o (RESET, +First)
|
||||
*(InRoot$$Sections)
|
||||
.ANY (+RO)
|
||||
|
||||
@@ -478,7 +478,14 @@ const uint32_t gdwSx1276ChannelTbl[SX1276_CHANNEL_MAX]={
|
||||
CH10, CH11, CH12, CH13, CH14, CH15, CH16, CH17, CH18, CH19,
|
||||
CH20, CH21, CH22, CH23, CH24, CH25, CH26, CH27, CH28, CH29,
|
||||
CH30, CH31, CH32, CH33, CH34, CH35, CH36, CH37, CH38, CH39,
|
||||
CH40, CH41, CH42, CH43, CH44, CH45
|
||||
CH40, CH41, CH42, CH43, CH44, CH45, CH46, CH47, CH48, CH49,
|
||||
CH50, CH51, CH52, CH53, CH54, CH55, CH56, CH57, CH58, CH59,
|
||||
CH60, CH61, CH62, CH63, CH64, CH65, CH66, CH67, CH68, CH69,
|
||||
CH70, CH71, CH72, CH73, CH74, CH75, CH76, CH77, CH78, CH79,
|
||||
CH80, CH81, CH82, CH83, CH84, CH85, CH86, CH87, CH88, CH89,
|
||||
CH90, CH91, CH92, CH93, CH94, CH95, CH96, CH97, CH98, CH99,
|
||||
CH100, CH101, CH102, CH103, CH104, CH105, CH106, CH107, CH108, CH109,
|
||||
CH110, CH111, CH112, CH113, CH114, CH115, CH116, CH117, CH118, CH119
|
||||
};
|
||||
|
||||
//LORAPT_CHANNEL
|
||||
@@ -666,7 +673,7 @@ bool LoraSetRegPreamble(uint8_t RegPreamble)
|
||||
}
|
||||
bool LoraSetFreqCent(uint32_t FreqCent)
|
||||
{
|
||||
if(FreqCent < 470100000 || FreqCent > 492600000)
|
||||
if(FreqCent < 433100000 || FreqCent > 492600000) //lora-wide: 433.1MHz~492.6MHz(与信道表匹配)
|
||||
return false;
|
||||
LoRaPara.dwFreqHz = FreqCent;
|
||||
return true;
|
||||
|
||||
@@ -660,7 +660,7 @@ typedef enum{
|
||||
LORAPT_MAX
|
||||
}Sx1276LoraParaType;
|
||||
|
||||
#define SX1276_CHANNEL_MAX 46
|
||||
#define SX1276_CHANNEL_MAX 120
|
||||
|
||||
#define LORA_SPI_NSS_SET() SPI2_NSS_SET()
|
||||
#define LORA_SPI_NSS_CLR() SPI2_NSS_CLR()
|
||||
@@ -758,54 +758,128 @@ typedef struct {
|
||||
#endif
|
||||
|
||||
/*
|
||||
Lora频率:470100000ul + 500000*N, N=0~45, 共46个信道(470.1MHz~492.6MHz)
|
||||
Lora频率:433100000ul + 500000*N, N=0~119, 共120个信道(433.1MHz~492.6MHz) [lora-wide宽频版]
|
||||
*/
|
||||
#define CH0 (470100000ul + 0) //470.1MHz
|
||||
#define CH1 (470100000ul + 500000)
|
||||
#define CH2 (470100000ul + 1000000)
|
||||
#define CH3 (470100000ul + 1500000)
|
||||
#define CH4 (470100000ul + 2000000)
|
||||
#define CH5 (470100000ul + 2500000)
|
||||
#define CH6 (470100000ul + 3000000)
|
||||
#define CH7 (470100000ul + 3500000)
|
||||
#define CH8 (470100000ul + 4000000)
|
||||
#define CH9 (470100000ul + 4500000)
|
||||
#define CH10 (470100000ul + 5000000)
|
||||
#define CH11 (470100000ul + 5500000)
|
||||
#define CH12 (470100000ul + 6000000)
|
||||
#define CH13 (470100000ul + 6500000)
|
||||
#define CH14 (470100000ul + 7000000)
|
||||
#define CH15 (470100000ul + 7500000)
|
||||
#define CH16 (470100000ul + 8000000)
|
||||
#define CH17 (470100000ul + 8500000)
|
||||
#define CH18 (470100000ul + 9000000)
|
||||
#define CH19 (470100000ul + 9500000)
|
||||
#define CH20 (470100000ul + 10000000)
|
||||
#define CH21 (470100000ul + 10500000)
|
||||
#define CH22 (470100000ul + 11000000)
|
||||
#define CH23 (470100000ul + 11500000)
|
||||
#define CH24 (470100000ul + 12000000)
|
||||
#define CH25 (470100000ul + 12500000)
|
||||
#define CH26 (470100000ul + 13000000)
|
||||
#define CH27 (470100000ul + 13500000)
|
||||
#define CH28 (470100000ul + 14000000)
|
||||
#define CH29 (470100000ul + 14500000)
|
||||
#define CH30 (470100000ul + 15000000)
|
||||
#define CH31 (470100000ul + 15500000)
|
||||
#define CH32 (470100000ul + 16000000)
|
||||
#define CH33 (470100000ul + 16500000)
|
||||
#define CH34 (470100000ul + 17000000)
|
||||
#define CH35 (470100000ul + 17500000)
|
||||
#define CH36 (470100000ul + 18000000)
|
||||
#define CH37 (470100000ul + 18500000)
|
||||
#define CH38 (470100000ul + 19000000)
|
||||
#define CH39 (470100000ul + 19500000)
|
||||
#define CH40 (470100000ul + 20000000)
|
||||
#define CH41 (470100000ul + 20500000)
|
||||
#define CH42 (470100000ul + 21000000)
|
||||
#define CH43 (470100000ul + 21500000)
|
||||
#define CH44 (470100000ul + 22000000)
|
||||
#define CH45 (470100000ul + 22500000) //492.6MHz
|
||||
#define CH0 (433100000ul + 0) //433.1MHz
|
||||
#define CH1 (433100000ul + 500000)
|
||||
#define CH2 (433100000ul + 1000000)
|
||||
#define CH3 (433100000ul + 1500000)
|
||||
#define CH4 (433100000ul + 2000000)
|
||||
#define CH5 (433100000ul + 2500000)
|
||||
#define CH6 (433100000ul + 3000000)
|
||||
#define CH7 (433100000ul + 3500000)
|
||||
#define CH8 (433100000ul + 4000000)
|
||||
#define CH9 (433100000ul + 4500000)
|
||||
#define CH10 (433100000ul + 5000000)
|
||||
#define CH11 (433100000ul + 5500000)
|
||||
#define CH12 (433100000ul + 6000000)
|
||||
#define CH13 (433100000ul + 6500000)
|
||||
#define CH14 (433100000ul + 7000000)
|
||||
#define CH15 (433100000ul + 7500000)
|
||||
#define CH16 (433100000ul + 8000000)
|
||||
#define CH17 (433100000ul + 8500000)
|
||||
#define CH18 (433100000ul + 9000000)
|
||||
#define CH19 (433100000ul + 9500000)
|
||||
#define CH20 (433100000ul + 10000000)
|
||||
#define CH21 (433100000ul + 10500000)
|
||||
#define CH22 (433100000ul + 11000000)
|
||||
#define CH23 (433100000ul + 11500000)
|
||||
#define CH24 (433100000ul + 12000000)
|
||||
#define CH25 (433100000ul + 12500000)
|
||||
#define CH26 (433100000ul + 13000000)
|
||||
#define CH27 (433100000ul + 13500000)
|
||||
#define CH28 (433100000ul + 14000000)
|
||||
#define CH29 (433100000ul + 14500000)
|
||||
#define CH30 (433100000ul + 15000000)
|
||||
#define CH31 (433100000ul + 15500000)
|
||||
#define CH32 (433100000ul + 16000000)
|
||||
#define CH33 (433100000ul + 16500000)
|
||||
#define CH34 (433100000ul + 17000000)
|
||||
#define CH35 (433100000ul + 17500000)
|
||||
#define CH36 (433100000ul + 18000000)
|
||||
#define CH37 (433100000ul + 18500000)
|
||||
#define CH38 (433100000ul + 19000000)
|
||||
#define CH39 (433100000ul + 19500000)
|
||||
#define CH40 (433100000ul + 20000000)
|
||||
#define CH41 (433100000ul + 20500000)
|
||||
#define CH42 (433100000ul + 21000000)
|
||||
#define CH43 (433100000ul + 21500000)
|
||||
#define CH44 (433100000ul + 22000000)
|
||||
#define CH45 (433100000ul + 22500000)
|
||||
#define CH46 (433100000ul + 23000000)
|
||||
#define CH47 (433100000ul + 23500000)
|
||||
#define CH48 (433100000ul + 24000000)
|
||||
#define CH49 (433100000ul + 24500000)
|
||||
#define CH50 (433100000ul + 25000000)
|
||||
#define CH51 (433100000ul + 25500000)
|
||||
#define CH52 (433100000ul + 26000000)
|
||||
#define CH53 (433100000ul + 26500000)
|
||||
#define CH54 (433100000ul + 27000000)
|
||||
#define CH55 (433100000ul + 27500000)
|
||||
#define CH56 (433100000ul + 28000000)
|
||||
#define CH57 (433100000ul + 28500000)
|
||||
#define CH58 (433100000ul + 29000000)
|
||||
#define CH59 (433100000ul + 29500000)
|
||||
#define CH60 (433100000ul + 30000000)
|
||||
#define CH61 (433100000ul + 30500000)
|
||||
#define CH62 (433100000ul + 31000000)
|
||||
#define CH63 (433100000ul + 31500000)
|
||||
#define CH64 (433100000ul + 32000000)
|
||||
#define CH65 (433100000ul + 32500000)
|
||||
#define CH66 (433100000ul + 33000000)
|
||||
#define CH67 (433100000ul + 33500000)
|
||||
#define CH68 (433100000ul + 34000000)
|
||||
#define CH69 (433100000ul + 34500000)
|
||||
#define CH70 (433100000ul + 35000000)
|
||||
#define CH71 (433100000ul + 35500000)
|
||||
#define CH72 (433100000ul + 36000000)
|
||||
#define CH73 (433100000ul + 36500000)
|
||||
#define CH74 (433100000ul + 37000000)
|
||||
#define CH75 (433100000ul + 37500000)
|
||||
#define CH76 (433100000ul + 38000000)
|
||||
#define CH77 (433100000ul + 38500000)
|
||||
#define CH78 (433100000ul + 39000000)
|
||||
#define CH79 (433100000ul + 39500000)
|
||||
#define CH80 (433100000ul + 40000000)
|
||||
#define CH81 (433100000ul + 40500000)
|
||||
#define CH82 (433100000ul + 41000000)
|
||||
#define CH83 (433100000ul + 41500000)
|
||||
#define CH84 (433100000ul + 42000000)
|
||||
#define CH85 (433100000ul + 42500000)
|
||||
#define CH86 (433100000ul + 43000000)
|
||||
#define CH87 (433100000ul + 43500000)
|
||||
#define CH88 (433100000ul + 44000000)
|
||||
#define CH89 (433100000ul + 44500000)
|
||||
#define CH90 (433100000ul + 45000000)
|
||||
#define CH91 (433100000ul + 45500000)
|
||||
#define CH92 (433100000ul + 46000000)
|
||||
#define CH93 (433100000ul + 46500000)
|
||||
#define CH94 (433100000ul + 47000000)
|
||||
#define CH95 (433100000ul + 47500000)
|
||||
#define CH96 (433100000ul + 48000000)
|
||||
#define CH97 (433100000ul + 48500000)
|
||||
#define CH98 (433100000ul + 49000000)
|
||||
#define CH99 (433100000ul + 49500000)
|
||||
#define CH100 (433100000ul + 50000000)
|
||||
#define CH101 (433100000ul + 50500000)
|
||||
#define CH102 (433100000ul + 51000000)
|
||||
#define CH103 (433100000ul + 51500000)
|
||||
#define CH104 (433100000ul + 52000000)
|
||||
#define CH105 (433100000ul + 52500000)
|
||||
#define CH106 (433100000ul + 53000000)
|
||||
#define CH107 (433100000ul + 53500000)
|
||||
#define CH108 (433100000ul + 54000000)
|
||||
#define CH109 (433100000ul + 54500000)
|
||||
#define CH110 (433100000ul + 55000000)
|
||||
#define CH111 (433100000ul + 55500000)
|
||||
#define CH112 (433100000ul + 56000000)
|
||||
#define CH113 (433100000ul + 56500000)
|
||||
#define CH114 (433100000ul + 57000000)
|
||||
#define CH115 (433100000ul + 57500000)
|
||||
#define CH116 (433100000ul + 58000000)
|
||||
#define CH117 (433100000ul + 58500000)
|
||||
#define CH118 (433100000ul + 59000000)
|
||||
#define CH119 (433100000ul + 59500000) //492.6MHz
|
||||
|
||||
/*Lora中心频率默认值(编译期用于频道表等)
|
||||
实际运行频率由Boot参数区(BootPara_t.LoraFreq)配置, APP启动时覆盖ConfigPara.Lora.FreqCent*/
|
||||
|
||||
@@ -16,12 +16,14 @@
|
||||
|
||||
#define FLASH_BOOT_BASE (FLASH_BASE)
|
||||
#define FLASH_BOOT_SIZE (4*FLASH_SECTOR_SIZE)
|
||||
//app
|
||||
//app A区(运行, 0x8000起, 232KB) + B区(升级暂存, 0x42000起, 232KB) - 与Boot A/B分区一致
|
||||
#define FLASH_APP_BASE (FLASH_BOOT_BASE+ FLASH_BOOT_SIZE)
|
||||
#define FLASH_APP_SIZE (58*FLASH_SECTOR_SIZE)
|
||||
#define FLASH_APP_SIZE (29*FLASH_SECTOR_SIZE)
|
||||
#define FLASH_APPB_BASE (FLASH_APP_BASE + FLASH_APP_SIZE)
|
||||
#define FLASH_APPB_SIZE (29*FLASH_SECTOR_SIZE)
|
||||
|
||||
//boot info
|
||||
#define FLASH_BINFO_BASE (FLASH_APP_BASE + FLASH_APP_SIZE)
|
||||
//boot info (0x7C000, 位置不变)
|
||||
#define FLASH_BINFO_BASE (FLASH_APPB_BASE + FLASH_APPB_SIZE)
|
||||
#define FLASH_BINFO_SIZE (1*FLASH_SECTOR_SIZE)
|
||||
|
||||
//user config
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "Public.h"
|
||||
#include "DebugCmd.h"
|
||||
|
||||
#define SOFTWARE_VERSION 13
|
||||
#define SOFTWARE_VERSION 14
|
||||
#define HARDWARE_VERSION 12
|
||||
|
||||
extern bool MainDispEn;
|
||||
|
||||
@@ -92,7 +92,7 @@ void Lora_Thread_Entry(void *parameter)
|
||||
Debug_Printf("CatOneIRQ Sem Create Failed!\r\n");
|
||||
}
|
||||
|
||||
LoraIRQ_Thread = rt_thread_create("LoraIRQ", LoraIRQ_Thread_Entry, NULL, 1024, 3, 20);
|
||||
LoraIRQ_Thread = rt_thread_create("LoraIRQ", LoraIRQ_Thread_Entry, NULL, 2048, 3, 20);
|
||||
if (LoraIRQ_Thread != RT_NULL)
|
||||
rt_thread_startup(LoraIRQ_Thread);
|
||||
|
||||
|
||||
@@ -19,6 +19,12 @@ void Update(uint8_t *PayLoad)
|
||||
|
||||
memcpy(&Req, PayLoad, sizeof(UpDataRequset_t));
|
||||
|
||||
/*固件大小校验: 为0或超出B区容量时拒绝升级, 不置标志不复位*/
|
||||
if(Req.AppSize == 0 || Req.AppSize > FLASH_APPB_SIZE) {
|
||||
U_DBG_LOG("AppSize invalid: %d (max %d)\r\n", (int)Req.AppSize, (int)FLASH_APPB_SIZE);
|
||||
return;
|
||||
}
|
||||
|
||||
/*读回现有boot参数,保留FirstRunFlag等字段*/
|
||||
dev_boot_read_param(&cfg);
|
||||
cfg.AppSize = Req.AppSize;
|
||||
|
||||
@@ -235,7 +235,7 @@ void GateWayInit(void)
|
||||
}
|
||||
if(LoraSetFreqCent(GateWay.ConfigPara.Lora.FreqCent) == false)
|
||||
{
|
||||
GateWay.ConfigPara.Lora.FreqCent = 470100000;
|
||||
GateWay.ConfigPara.Lora.FreqCent = 433100000; //lora-wide: 回退到CH0
|
||||
LoraSetFreqCent(GateWay.ConfigPara.Lora.FreqCent);
|
||||
}
|
||||
if(LoraSetPower(GateWay.ConfigPara.Lora.ucPower) == false) {
|
||||
@@ -397,7 +397,7 @@ int main(void)
|
||||
else
|
||||
return -1;
|
||||
|
||||
Lora_Thread = rt_thread_create("Lora", Lora_Thread_Entry, &GateWay, 1024, 3, 20);
|
||||
Lora_Thread = rt_thread_create("Lora", Lora_Thread_Entry, &GateWay, 2048, 3, 20);
|
||||
if (Lora_Thread != RT_NULL)
|
||||
rt_thread_startup(Lora_Thread);
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user