app启动时如果boot魔数校验错误则自动升级bootloader
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
// 保存参数
|
||||
|
@@ -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);
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user