Skip to content

Commit 4fcf8cd

Browse files
committed
Fixes to let SBUBoot always find UPDATE.OK when present
1 parent 64e1cc5 commit 4fcf8cd

File tree

3 files changed

+2490
-2410
lines changed

3 files changed

+2490
-2410
lines changed

libraries/SBU/extras/SBUBoot/SBUBoot.ino

+18-6
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ static constexpr char CHECK_FILE_NAME[] = "UPDATE.OK";
2929

3030
FlashClass mcu_flash;
3131

32-
NBFileUtils fileUtils;
32+
NBFileUtils fileUtils(true);
3333

3434
extern "C" void __libc_init_array(void);
3535

@@ -51,30 +51,42 @@ int main()
5151
// Try to update only if update file
5252
// has been download successfully.
5353

54-
if (fileUtils.listFile(CHECK_FILE_NAME)) {
54+
if (fileUtils.existFile(CHECK_FILE_NAME)) {
5555
Serial1.println("Update file exists");
5656
uint32_t updateSize = fileUtils.listFile(UPDATE_FILE_NAME);
57-
size_t cycles = (updateSize / blockSize) + 1;
57+
uint32_t tot_bytes = 0;
58+
uint32_t read_bytes = 0;
5859

5960
if (updateSize > SBU_SIZE) {
6061
updateSize = updateSize - SBU_SIZE - SBU_START;
62+
size_t cycles = (updateSize / blockSize);
63+
size_t spare_bytes = (updateSize % blockSize);
6164
/* Erase the MCU flash */
6265
uint32_t flash_address = (uint32_t)SKETCH_START;
6366
mcu_flash.erase((void*)flash_address, updateSize);
6467

6568
for (auto i = 0; i < cycles; i++) {
6669
uint8_t block[blockSize] { 0 };
6770
digitalWrite(LED_BUILTIN, LOW);
68-
uint32_t read_bytes = fileUtils.readBlock(UPDATE_FILE_NAME, (i * blockSize) + SBU_SIZE + SBU_START, blockSize, block);
71+
read_bytes = fileUtils.readBlock(UPDATE_FILE_NAME, (i * blockSize) + SBU_SIZE + SBU_START, blockSize, block);
72+
digitalWrite(LED_BUILTIN, HIGH);
73+
mcu_flash.write((void*)flash_address, block, read_bytes);
74+
flash_address += read_bytes;
75+
tot_bytes += read_bytes;
76+
}
77+
78+
if (spare_bytes){
79+
uint8_t block[spare_bytes] { 0 };
80+
digitalWrite(LED_BUILTIN, LOW);
81+
read_bytes = fileUtils.readBlock(UPDATE_FILE_NAME, tot_bytes + SBU_SIZE + SBU_START, spare_bytes, block);
6982
digitalWrite(LED_BUILTIN, HIGH);
7083
mcu_flash.write((void*)flash_address, block, read_bytes);
7184
flash_address += read_bytes;
7285
}
7386
update_success = true;
7487
}
7588
if (update_success) {
76-
fileUtils.deleteFile(UPDATE_FILE_NAME);
77-
fileUtils.deleteFile(CHECK_FILE_NAME);
89+
fileUtils.deleteFiles();
7890
}
7991
}
8092
else {

0 commit comments

Comments
 (0)