From 3f0b5d3fd1307bc64c67fee73cda9e6ef5c21d61 Mon Sep 17 00:00:00 2001 From: Felix Date: Thu, 2 Jan 2025 13:31:21 +0100 Subject: [PATCH] Fix flash wear leveling sector calculation --- .../chibios/drivers/wear_leveling/wear_leveling_efl.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/platforms/chibios/drivers/wear_leveling/wear_leveling_efl.c b/platforms/chibios/drivers/wear_leveling/wear_leveling_efl.c index fed16d20b1a..1a331e1a474 100644 --- a/platforms/chibios/drivers/wear_leveling/wear_leveling_efl.c +++ b/platforms/chibios/drivers/wear_leveling/wear_leveling_efl.c @@ -84,12 +84,14 @@ bool backing_store_init(void) { // Work out how many sectors we want to use, working backwards from the end of the flash flash_sector_t last_sector = desc->sectors_count - WEAR_LEVELING_EFL_OMIT_LAST_SECTOR_COUNT; + + // skip sectors that are past the actual flash size + while (flashGetSectorOffset(flash, last_sector) >= flash_size) { + last_sector--; + } + for (flash_sector_t i = 0; i < last_sector; ++i) { first_sector = last_sector - i - 1; - if (flashGetSectorOffset(flash, first_sector) >= flash_size) { - last_sector = first_sector; - continue; - } counter += flashGetSectorSize(flash, first_sector); if (counter >= (WEAR_LEVELING_BACKING_SIZE)) { sector_count = last_sector - first_sector;