diff options
| author | Keith Packard <keithp@keithp.com> | 2012-08-28 18:10:34 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-08-28 23:00:23 -0700 | 
| commit | eb1a9a8c3f3d3993d5986925bc4ad112c2bbc119 (patch) | |
| tree | fb1fedb1a0c15c7cbdb9c8400e362a66a272179b /src | |
| parent | 3fe5a70d9ac2114ee554813b1dbb3019a3e4aff7 (diff) | |
altos: Explicitly erase memory in STM eeprom driver.
This seems to make the STM32L152 happier
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/stm/ao_eeprom_stm.c | 24 | 
1 files changed, 18 insertions, 6 deletions
| diff --git a/src/stm/ao_eeprom_stm.c b/src/stm/ao_eeprom_stm.c index 1e51b417..5a75a97d 100644 --- a/src/stm/ao_eeprom_stm.c +++ b/src/stm/ao_eeprom_stm.c @@ -83,18 +83,29 @@ ao_intflash_lock(void)  }  static void +ao_intflash_wait(void) +{ +	/* Wait for the flash unit to go idle */ +	while (stm_flash.sr & (1 << STM_FLASH_SR_BSY)) +		; +} + +static void  ao_intflash_write32(uint16_t pos, uint32_t w)  { -	uint32_t	*addr; +	volatile uint32_t	*addr;  	addr = (uint32_t *) (stm_eeprom + pos); -	/* Write a word to a valid address in the data EEPROM */ -	*addr = w; +	/* Erase previous word */ +	*addr = 0; +	ao_intflash_wait(); -	/* Wait for the flash unit to go idle */ -	while (stm_flash.sr & (1 << STM_FLASH_SR_BSY)) -		; +	if (w) { +		/* Write a word to a valid address in the data EEPROM */ +		*addr = w; +		ao_intflash_wait(); +	}  }  static void @@ -182,6 +193,7 @@ ao_storage_setup(void)  void  ao_storage_device_info(void) __reentrant  { +	uint8_t	i;  	printf ("Using internal flash\n");  } | 
