diff --git a/src/stm32f103/backup.c b/src/stm32f103/backup.c index 18a4c20..1137568 100644 --- a/src/stm32f103/backup.c +++ b/src/stm32f103/backup.c @@ -24,18 +24,15 @@ #define RTC_BKP_DR(reg) MMIO16(BACKUP_REGS_BASE + 4 + (4 * (reg))) -void backup_write(enum BackupRegister reg, uint32_t value) { +void backup_write(enum BackupRegister reg, uint16_t value) { rcc_periph_clock_enable(RCC_PWR); rcc_periph_clock_enable(RCC_BKP); pwr_disable_backup_domain_write_protect(); - RTC_BKP_DR((int)reg*2) = value & 0xFFFFUL; - RTC_BKP_DR((int)reg*2+1) = (value & 0xFFFF0000UL) >> 16; + RTC_BKP_DR((int)reg) = value; pwr_enable_backup_domain_write_protect(); } -uint32_t backup_read(enum BackupRegister reg) { - uint32_t value = ((uint32_t)RTC_BKP_DR((int)reg*2+1) << 16) - | ((uint32_t)RTC_BKP_DR((int)reg*2) << 0); - return value; +uint16_t backup_read(enum BackupRegister reg) { + return RTC_BKP_DR((int)reg); } diff --git a/src/stm32f103/backup.h b/src/stm32f103/backup.h index c2fe2b0..5e265a9 100644 --- a/src/stm32f103/backup.h +++ b/src/stm32f103/backup.h @@ -20,14 +20,19 @@ #define BACKUP_H_INCLUDED enum BackupRegister { - BKP0 = 0, BKP1, BKP2, BKP3, BKP4, + BKP5, + BKP6, + BKP7, + BKP8, + BKP9, + BKP10, }; -extern void backup_write(enum BackupRegister reg, uint32_t value); -extern uint32_t backup_read(enum BackupRegister reg); +extern void backup_write(enum BackupRegister reg, uint16_t value); +extern uint16_t backup_read(enum BackupRegister reg); #endif diff --git a/src/stm32f103/target_stm32f103.c b/src/stm32f103/target_stm32f103.c index 6948482..557f630 100644 --- a/src/stm32f103/target_stm32f103.c +++ b/src/stm32f103/target_stm32f103.c @@ -55,7 +55,13 @@ _Static_assert((FLASH_BASE + FLASH_SIZE_OVERRIDE >= APP_BASE_ADDRESS), "Incompatible flash size"); #endif -static const uint32_t CMD_BOOT = 0x544F4F42UL; +#ifndef REG_BOOT +#define REG_BOOT BKP1 +#endif + +#ifndef CMD_BOOT +#define CMD_BOOT 0x4F42UL +#endif void target_clock_setup(void) { #ifdef USE_HSI @@ -160,13 +166,13 @@ const usbd_driver* target_usb_init(void) { bool target_get_force_bootloader(void) { bool force = false; /* Check the RTC backup register */ - uint32_t cmd = backup_read(BKP0); + uint16_t cmd = backup_read(REG_BOOT); if (cmd == CMD_BOOT) { force = true; } /* Clear the RTC backup register */ - backup_write(BKP0, 0); + backup_write(REG_BOOT, 0); #if HAVE_BUTTON /* Wait some time in case the button has some debounce capacitor */ diff --git a/src/stm32l1/target_stm32l1.c b/src/stm32l1/target_stm32l1.c index 57b4825..f94bd90 100644 --- a/src/stm32l1/target_stm32l1.c +++ b/src/stm32l1/target_stm32l1.c @@ -27,8 +27,15 @@ #include "config.h" #include "backup.h" +#ifndef REG_BOOT +#define REG_BOOT BKP1 +#endif + +#ifndef CMD_BOOT +#define CMD_BOOT 0x544F4F42UL +#endif + //#define CMD_FAST_BOOT 0xfa57b007 -static const uint32_t CMD_BOOT = 0x544F4F42UL; void target_clock_setup(void) { @@ -82,11 +89,11 @@ const usbd_driver* target_usb_init(void) bool target_get_force_bootloader(void) { bool enter_bl = false; - uint32_t cmd = backup_read(BKP0); + uint32_t cmd = backup_read(REG_BOOT); if (cmd == CMD_BOOT) { enter_bl = true; } - backup_write(BKP0, 0); + backup_write(REG_BOOT, 0); #if HAVE_BUTTON #warning HAVE_BUTTON not implemented for L1