mover version rollback function for OTA to tool dir

This commit is contained in:
wgzAIIT 2023-05-08 14:48:38 +08:00
parent 33abc16c67
commit 078f4babf1
2 changed files with 12 additions and 14 deletions

View File

@ -414,8 +414,7 @@ void InitBoardHardware()
KPrintf("start kernel...\n");
#ifdef TOOL_USING_OTA
FLASH_Init();
//跳转成功将对应跳转失败标志设置
FLASH_DeInit();
//跳转成功设置lastjumpflag为JUMP_SUCCESS_FLAG
app_clear_jumpflag();
#endif
}

View File

@ -123,7 +123,7 @@ static void UpdateApplication(void)
ota_info_t ota_info; // 定义OTA信息结构体
// 从Flash中读取OTA信息
memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, sizeof(ota_info_t));
// 如果OTA升级状态为准备状态且APP分区与download分区版本不同,才可以进行升级
if((ota_info.status == OTA_STATUS_READY) && (ota_info.os.crc32 != ota_info.down.crc32))
@ -233,7 +233,7 @@ static void BackupVersion(void)
{
status_t status;
ota_info_t ota_info;
memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, sizeof(ota_info_t));
ota_info.status = OTA_STATUS_BACKUP;
UpdateOTAFlag(&ota_info);
@ -267,13 +267,12 @@ static void BootLoaderJumpApp(void)
{
ota_info_t ota_info;
mcuboot.flash_init();
memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, sizeof(ota_info_t));
if(ota_info.lastjumpflag == JUMP_FAILED_FLAG)
{
mcuboot.print_string("\r\n------Bootloader false, begin backup!------\r\n");
BackupVersion();
BackupVersion();
}
else
{
@ -320,7 +319,7 @@ static void app_ota(void)
mcuboot.flash_init();
mcuboot.serial_init();
memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, sizeof(ota_info_t));
ota_info.status = OTA_STATUS_DOWNLOADING;
UpdateOTAFlag(&ota_info);
size = mcuboot.download_by_serial(DOWN_FLAH_ADDRESS);
@ -359,7 +358,7 @@ void app_clear_jumpflag(void)
mcuboot.flash_init();
//跳转成功设置lastjumpflag为JUMP_SUCCESS_FLAG
ota_info_t ota_info;
memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, sizeof(ota_info_t));
ota_info.lastjumpflag = JUMP_SUCCESS_FLAG;
UpdateOTAFlag(&ota_info);
mcuboot.flash_deinit();
@ -407,12 +406,12 @@ void ota_entry(void)
switch(ch2)
{
case 0x31:
mcuboot.op_jump();
BootLoaderJumpApp();
break;
case 0x32:
mcuboot.flash_init();
memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, sizeof(ota_info_t));
/* 此时APP分区还没有有效的固件,需要在bootloader下通过iap烧写出厂固件 */
if((ota_info.os.size > APP_FLASH_SIZE) || (calculate_crc32(XIUOS_FLAH_ADDRESS, ota_info.os.size) != ota_info.os.crc32))
{
@ -425,7 +424,7 @@ void ota_entry(void)
}
mcuboot.flash_deinit();
mcuboot.op_jump();
BootLoaderJumpApp();
break;
case 0x33:
@ -436,7 +435,7 @@ void ota_entry(void)
}
else
{
mcuboot.op_jump();
BootLoaderJumpApp();
}
}
}