From b1cba74aa74a6b1471751f1a95c1fd46eed72a98 Mon Sep 17 00:00:00 2001
From: YuanHongbin <975559679@qq.com>
Date: Wed, 23 Sep 2026 11:16:55 +0800
Subject: [PATCH] =?UTF-8?q?feat(app):=20=E9=85=8D=E5=90=88Boot=20A/B?=
=?UTF-8?q?=E5=88=86=E5=8C=BA=E5=8D=87=E7=BA=A7,=20=E9=93=BE=E6=8E=A5?=
=?UTF-8?q?=E5=8C=BA=E9=99=90=E5=AE=9AA=E5=8C=BA232KB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
bsp.h分区宏改A区29扇区+新增B区宏(FLASH_BINFO_BASE仍=0x7C000); GateWay_app.sct IROM 0x74000→0x3A000;
Update()增加AppSize<=FLASH_APPB_SIZE校验, 超限拒绝不置标志不复位
---
Project/GateWay/MDK/GateWay.uvprojx | 2 +-
Project/GateWay/MDK/GateWay_app.sct | 6 +++---
Project/GateWay/MDK/output/GateWay.sct | 4 ++--
Project/GateWay/source/User/Inc/bsp.h | 10 ++++++----
Project/GateWay/source/User/Src/Update.c | 6 ++++++
5 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/Project/GateWay/MDK/GateWay.uvprojx b/Project/GateWay/MDK/GateWay.uvprojx
index 1cfa7f0..8093107 100644
--- a/Project/GateWay/MDK/GateWay.uvprojx
+++ b/Project/GateWay/MDK/GateWay.uvprojx
@@ -1165,7 +1165,7 @@
1
0x8000
- 0x6c000
+ 0x3a000
1
diff --git a/Project/GateWay/MDK/GateWay_app.sct b/Project/GateWay/MDK/GateWay_app.sct
index 4653f69..c9b8750 100644
--- a/Project/GateWay/MDK/GateWay_app.sct
+++ b/Project/GateWay/MDK/GateWay_app.sct
@@ -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)
diff --git a/Project/GateWay/MDK/output/GateWay.sct b/Project/GateWay/MDK/output/GateWay.sct
index f056ad7..463e5a2 100644
--- a/Project/GateWay/MDK/output/GateWay.sct
+++ b/Project/GateWay/MDK/output/GateWay.sct
@@ -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)
diff --git a/Project/GateWay/source/User/Inc/bsp.h b/Project/GateWay/source/User/Inc/bsp.h
index f3072de..d47c579 100644
--- a/Project/GateWay/source/User/Inc/bsp.h
+++ b/Project/GateWay/source/User/Inc/bsp.h
@@ -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
diff --git a/Project/GateWay/source/User/Src/Update.c b/Project/GateWay/source/User/Src/Update.c
index 7d10ef1..3f17192 100644
--- a/Project/GateWay/source/User/Src/Update.c
+++ b/Project/GateWay/source/User/Src/Update.c
@@ -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;