summaryrefslogtreecommitdiff
path: root/src/stm/ao_eeprom_stm.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-04-22 17:20:51 -0500
committerKeith Packard <keithp@keithp.com>2013-04-22 17:20:51 -0500
commit33c3b2c57d0d4285b75d4dcf7ca67ad19da08c86 (patch)
treea9ff47afab29fe141dcd1da0ca276b367f911cb6 /src/stm/ao_eeprom_stm.c
parent1a84db819a359be39be51c9105039ab28c9fc894 (diff)
parent90b0db1ae53182c94bf12d661446fc369d916366 (diff)
Merge branch 'master' into stm-flash
Conflicts: ao-tools/ao-stmload/ao-stmload.c
Diffstat (limited to 'src/stm/ao_eeprom_stm.c')
-rw-r--r--src/stm/ao_eeprom_stm.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/stm/ao_eeprom_stm.c b/src/stm/ao_eeprom_stm.c
index 5a75a97d..58783f1a 100644
--- a/src/stm/ao_eeprom_stm.c
+++ b/src/stm/ao_eeprom_stm.c
@@ -55,10 +55,16 @@ ao_storage_erase(ao_pos_t pos) __reentrant
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
@@ -68,8 +74,8 @@ ao_intflash_unlock(void)
(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) |
@@ -97,15 +103,9 @@ ao_intflash_write32(uint16_t pos, uint32_t w)
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