@ -17,27 +17,25 @@ static flash_sector_t first_sector = UINT16_MAX;
static flash_sector_t sector_count = UINT16_MAX ;
static flash_sector_t sector_count = UINT16_MAX ;
static BaseFlash * flash ;
static BaseFlash * flash ;
# ifndef WEAR_LEVELING_EFL_FIRST_SECTOR
/ / " Automatic " detection of the flash size - - ideally ChibiOS would have this already , but alas , it doesn ' t .
/ / " Automatic " detection of the flash size - - ideally ChibiOS would have this already , but alas , it doesn ' t .
static inline uint32_t detect_flash_size ( void ) {
static inline uint32_t detect_flash_size ( void ) {
# if defined(WEAR_LEVELING_EFL_FLASH_SIZE)
# if defined(WEAR_LEVELING_EFL_FLASH_SIZE)
return WEAR_LEVELING_EFL_FLASH_SIZE ;
return WEAR_LEVELING_EFL_FLASH_SIZE ;
# elif defined(FLASH_BANK_SIZE)
# elif defined(FLASH_BANK_SIZE)
return FLASH_BANK_SIZE ;
return FLASH_BANK_SIZE ;
# elif defined(FLASH_SIZE)
# elif defined(FLASH_SIZE)
return FLASH_SIZE ;
return FLASH_SIZE ;
# elif defined(FLASHSIZE_BASE)
# if defined(QMK_MCU_SERIES_STM32F0XX) || defined(QMK_MCU_SERIES_STM32F1XX) || defined(QMK_MCU_SERIES_STM32F3XX) || defined(QMK_MCU_SERIES_STM32F4XX) || defined(QMK_MCU_SERIES_STM32G4XX) || defined(QMK_MCU_SERIES_STM32L0XX) || defined(QMK_MCU_SERIES_STM32L4XX) || defined(QMK_MCU_SERIES_GD32VF103)
# elif defined(FLASHSIZE_BASE)
# if defined(QMK_MCU_SERIES_STM32F0XX) || defined(QMK_MCU_SERIES_STM32F1XX) || defined(QMK_MCU_SERIES_STM32F3XX) || defined(QMK_MCU_SERIES_STM32F4XX) || defined(QMK_MCU_SERIES_STM32G4XX) || defined(QMK_MCU_SERIES_STM32L0XX) || defined(QMK_MCU_SERIES_STM32L4XX) || defined(QMK_MCU_SERIES_GD32VF103)
return ( ( * ( uint32_t * ) FLASHSIZE_BASE ) & 0xFFFFU ) < < 10U ; / / this register has the flash size in kB , so we convert it to bytes
return ( ( * ( uint32_t * ) FLASHSIZE_BASE ) & 0xFFFFU ) < < 10U ; / / this register has the flash size in kB , so we convert it to bytes
# elif defined(QMK_MCU_SERIES_STM32L1XX)
# error This MCU family has an uncommon flash size register definition and has not been implemented. Perhaps try using the true EEPROM on the MCU instead?
# endif
# else
# error Unknown flash size definition.
return 0 ;
# elif defined(QMK_MCU_SERIES_STM32L1XX)
# error This MCU family has an uncommon flash size register definition and has not been implemented. Perhaps try using the true EEPROM on the MCU instead?
# endif
# endif
# else
# error Unknown flash size definition.
return 0 ;
# endif
}
}
# endif / / WEAR_LEVELING_EFL_FIRST_SECTOR
bool backing_store_init ( void ) {
bool backing_store_init ( void ) {
bs_dprintf ( " Init \n " ) ;
bs_dprintf ( " Init \n " ) ;
@ -46,8 +44,9 @@ bool backing_store_init(void) {
/ / Need to re - lock the EFL , as if we ' ve just had the bootloader executing it ' ll already be unlocked .
/ / Need to re - lock the EFL , as if we ' ve just had the bootloader executing it ' ll already be unlocked .
backing_store_lock ( ) ;
backing_store_lock ( ) ;
const flash_descriptor_t * desc = flashGetDescriptor ( flash ) ;
uint32_t counter = 0 ;
const flash_descriptor_t * desc = flashGetDescriptor ( flash ) ;
uint32_t counter = 0 ;
uint32_t flash_size = detect_flash_size ( ) ;
# if defined(WEAR_LEVELING_EFL_FIRST_SECTOR)
# if defined(WEAR_LEVELING_EFL_FIRST_SECTOR)
@ -68,7 +67,6 @@ bool backing_store_init(void) {
# else / / defined(WEAR_LEVELING_EFL_FIRST_SECTOR)
# else / / defined(WEAR_LEVELING_EFL_FIRST_SECTOR)
/ / Work out how many sectors we want to use , working backwards from the end of the flash
/ / Work out how many sectors we want to use , working backwards from the end of the flash
uint32_t flash_size = detect_flash_size ( ) ;
flash_sector_t last_sector = desc - > sectors_count ;
flash_sector_t last_sector = desc - > sectors_count ;
for ( flash_sector_t i = 0 ; i < desc - > sectors_count ; + + i ) {
for ( flash_sector_t i = 0 ; i < desc - > sectors_count ; + + i ) {
first_sector = desc - > sectors_count - i - 1 ;
first_sector = desc - > sectors_count - i - 1 ;