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;