diff --git a/radio/src/io/bootloader_flash.cpp b/radio/src/io/bootloader_flash.cpp index 20a7947de..09b3fc81b 100644 --- a/radio/src/io/bootloader_flash.cpp +++ b/radio/src/io/bootloader_flash.cpp @@ -59,8 +59,11 @@ void BootloaderFirmwareUpdate::flashFirmware(const char * filename, ProgressHand } for (int i = 0; i < BOOTLOADER_SIZE; i += 1024) { + watchdogSuspend(1000/*10s*/); - if (f_read(&file, buffer, sizeof(buffer), &count) != FR_OK || count != sizeof(buffer)) { + memset(buffer, 0xFF, sizeof(buffer)); + + if (f_read(&file, buffer, sizeof(buffer), &count) != FR_OK) { POPUP_WARNING(STR_SDCARD_ERROR); break; } @@ -68,12 +71,18 @@ void BootloaderFirmwareUpdate::flashFirmware(const char * filename, ProgressHand POPUP_WARNING(STR_INCOMPATIBLE); break; } - for (int j = 0; j < 1024; j += FLASH_PAGESIZE) { + for (UINT j = 0; j < count; j += FLASH_PAGESIZE) { flashWrite(CONVERT_UINT_PTR(FIRMWARE_ADDRESS + i + j), CONVERT_UINT_PTR(buffer + j)); } + // TODO: use real bootloader size rather than the maximum size progressHandler("Bootloader", STR_WRITING, i, BOOTLOADER_SIZE); + // Reached end-of-file + if (count != sizeof(buffer)) { + break; + } + #if defined(SIMU) // add an artificial delay and check for simu quit if (SIMU_SLEEP_OR_EXIT_MS(30))