static void
ao_intflash_unlock(void)
{
+ /* Disable backup write protection */
+ stm_pwr.cr |= (1 << STM_PWR_CR_DBP);
+
/* Unlock Data EEPROM and FLASH_PECR register */
stm_flash.pekeyr = STM_FLASH_PEKEYR_PEKEY1;
stm_flash.pekeyr = STM_FLASH_PEKEYR_PEKEY2;
+ if (stm_flash.pecr & (1 << STM_FLASH_PECR_PELOCK))
+ printf ("eeprom unlock failed\n");
+
/* Configure the FTDW bit (FLASH_PECR[8]) to execute
* word write, whatever the previous value of the word
* being written to
(0 << STM_FLASH_PECR_EOPIE) |
(0 << STM_FLASH_PECR_FPRG) |
(0 << STM_FLASH_PECR_ERASE) |
- (0 << STM_FLASH_PECR_FTDW) |
- (1 << STM_FLASH_PECR_DATA) |
+ (1 << STM_FLASH_PECR_FTDW) |
+ (0 << STM_FLASH_PECR_DATA) |
(0 << STM_FLASH_PECR_PROG) |
(0 << STM_FLASH_PECR_OPTLOCK) |
(0 << STM_FLASH_PECR_PRGLOCK) |
addr = (uint32_t *) (stm_eeprom + pos);
- /* Erase previous word */
- *addr = 0;
+ /* Write a word to a valid address in the data EEPROM */
+ *addr = w;
ao_intflash_wait();
-
- if (w) {
- /* Write a word to a valid address in the data EEPROM */
- *addr = w;
- ao_intflash_wait();
- }
}
static void