app启动时如果boot魔数校验错误则自动升级bootloader

This commit is contained in:
andy
2023-10-12 23:37:12 +08:00
parent 17b4ebf188
commit fda9545130
18 changed files with 2865 additions and 1408 deletions

View File

@@ -16,6 +16,7 @@ typedef struct{
uint32_t reboot_curr;// 最后一次复位标志
void (*wdog_refresh)(void);// 刷新看门口
uint32_t reboot_times;// 软件重启次数
uint32_t boot_magic_number;// app校验boot是否为指定版本
}back_def;
@@ -79,7 +80,7 @@ void bk_init(void)
g_back->reboot_curr=g_back->reboot_type;
g_back->reboot_type=REBOOT_INIT;
g_back->wdog_refresh=0;
g_back->boot_magic_number=BOOT_MAGIC_NUM;
// 每软件重启一次就增加计数
if(bk_soft_reboot())
{
@@ -146,4 +147,13 @@ void *bk_wdog_fun(void)
return g_back->wdog_refresh;
}
// 校验魔数,不对返回1
int bk_check_magic_num(void)
{
if(g_back->boot_magic_number!=BOOT_MAGIC_NUM){
return 1;
}
return 0;
}

View File

@@ -14,6 +14,10 @@
#define REBOOT_INIT 0xffff
// 定义boot魔数
#define BOOT_MAGIC_NUM ((uint32_t)(('b')<<0)|(('o')<<8)|(('o')<<16)|(('t')<<24))
void bk_reboot_app(void);
void bk_reboot_boot(void);
void bk_reboot_updata(void);
@@ -26,6 +30,7 @@ const char *bk_get_currtype(void);
void bk_set_wdog_fun(void (*fun)(void));
void *bk_wdog_fun(void);
uint32_t bk_reboot_times(void);
int bk_check_magic_num(void);

View File

@@ -33,6 +33,8 @@ scheme 109~110
*/
#define FLASH_SECTOR_SIZE 2048
#define FLASH_BOOT_SECTOR (0)
#define FLASH_BOOT_SECTOR_NUM (8)
#define FLASH_APP_SECTOR (8)
#define FLASH_APP_SECTOR_NUM (50)
#define FLASH_BUFF_SECTOR (58)
@@ -145,7 +147,16 @@ int flash_operate_end(void)
return 0;
}
// boot区
int flash_erase_boot(void)
{
int ret;
for(int i=0;i<FLASH_BOOT_SECTOR_NUM;i++){
ret=flash_erase(FLASH_BOOT_SECTOR+i);
if(ret!=0) return -1;
}
return 0;
}
// 参数区2K
int flash_erase_param(void)
@@ -340,6 +351,12 @@ int flash_updata_app(uint8_t *rom,uint32_t size)
}
int flash_updata_boot(uint8_t *rom,uint32_t size)
{
uint8_t *dst=(uint8_t *)0x08000000;
flash_erase_boot();
return flash_write(dst,rom,size);
}
// 保存参数

View File

@@ -59,6 +59,7 @@ typedef struct{
uint8_t *flash_get_rom(rom_head **head);
int flash_updata_app(uint8_t *rom,uint32_t size);
int flash_updata_boot(uint8_t *rom,uint32_t size);