diff --git a/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/board.c b/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/board.c index 4c2dc16a9..614c8264c 100644 --- a/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/board.c +++ b/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/board.c @@ -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 } diff --git a/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c b/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c index e4b5956ce..4e0416e19 100644 --- a/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c +++ b/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c @@ -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(); } } }