From 5e7ec39440087cb507e3e1fc4c83fa8225733c80 Mon Sep 17 00:00:00 2001 From: Piotr Esden-Tempski Date: Tue, 26 Feb 2013 15:25:55 -0800 Subject: FLASH: Make sure that the flash unlock register state is cleared before trying to unlock the flash. --- lib/stm32/f1/flash.c | 3 +++ lib/stm32/f2/flash.c | 7 +++++++ lib/stm32/f4/flash.c | 7 +++++++ 3 files changed, 17 insertions(+) diff --git a/lib/stm32/f1/flash.c b/lib/stm32/f1/flash.c index 49f182c..babfc45 100644 --- a/lib/stm32/f1/flash.c +++ b/lib/stm32/f1/flash.c @@ -52,6 +52,9 @@ void flash_set_ws(u32 ws) void flash_unlock(void) { + /* Clear the unlock state. */ + FLASH_CR |= FLASH_CR_LOCK; + /* Authorize the FPEC access. */ FLASH_KEYR = FLASH_KEYR_KEY1; FLASH_KEYR = FLASH_KEYR_KEY2; diff --git a/lib/stm32/f2/flash.c b/lib/stm32/f2/flash.c index 0b9f834..c41ddf2 100644 --- a/lib/stm32/f2/flash.c +++ b/lib/stm32/f2/flash.c @@ -78,6 +78,9 @@ void flash_set_ws(u32 ws) void flash_unlock(void) { + /* Clear the unlock state. */ + FLASH_CR |= FLASH_CR_LOCK; + /* Authorize the FPEC access. */ FLASH_KEYR = FLASH_KEYR_KEY1; FLASH_KEYR = FLASH_KEYR_KEY2; @@ -130,6 +133,10 @@ void flash_clear_status_flags(void) void flash_unlock_option_bytes(void) { + /* Clear the unlock state. */ + FLASH_OPTCR |= FLASH_OPTCR_OPTLOCK; + + /* Unlock the option bytes. */ FLASH_OPTKEYR = FLASH_OPTKEYR_KEY1; FLASH_OPTKEYR = FLASH_OPTKEYR_KEY2; } diff --git a/lib/stm32/f4/flash.c b/lib/stm32/f4/flash.c index 75446ea..a204543 100644 --- a/lib/stm32/f4/flash.c +++ b/lib/stm32/f4/flash.c @@ -78,6 +78,9 @@ void flash_set_ws(u32 ws) void flash_unlock(void) { + /* Clear the unlock sequence state. */ + FLASH_CR |= FLASH_CR_LOCK; + /* Authorize the FPEC access. */ FLASH_KEYR = FLASH_KEYR_KEY1; FLASH_KEYR = FLASH_KEYR_KEY2; @@ -130,6 +133,10 @@ void flash_clear_status_flags(void) void flash_unlock_option_bytes(void) { + /* Clear the unlock state. */ + FLASH_OPTCR |= FLASH_OPTCR_OPTLOCK; + + /* Unlock option bytes. */ FLASH_OPTKEYR = FLASH_OPTKEYR_KEY1; FLASH_OPTKEYR = FLASH_OPTKEYR_KEY2; } -- cgit v1.2.3