aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-10-10 10:12:55 +0000
committerGitHub <[email protected]>2023-10-10 10:12:55 +0000
commiteff73d6dfa4c5920a55a5ee2bf5c0b2ef68fbae1 (patch)
treed97e2f77fa47b368ccdc6d44706758c8d4aec50e
parent904f1cfc7a8065b2dc794342b2d2cc401ded9b41 (diff)
parent3616d68aaa0d41bd489295942c57e29a43338dac (diff)
Merge pull request #2032 from andresv/stm32-check-flash-lock-before-unlocking
stm32 flash: check lock bit before unlocking
-rw-r--r--embassy-stm32/src/flash/f0.rs6
-rw-r--r--embassy-stm32/src/flash/f3.rs6
-rw-r--r--embassy-stm32/src/flash/f4.rs6
-rw-r--r--embassy-stm32/src/flash/f7.rs6
-rw-r--r--embassy-stm32/src/flash/g0.rs6
-rw-r--r--embassy-stm32/src/flash/h7.rs12
-rw-r--r--embassy-stm32/src/flash/l.rs18
7 files changed, 40 insertions, 20 deletions
diff --git a/embassy-stm32/src/flash/f0.rs b/embassy-stm32/src/flash/f0.rs
index d011522be..1ab8435a0 100644
--- a/embassy-stm32/src/flash/f0.rs
+++ b/embassy-stm32/src/flash/f0.rs
@@ -19,8 +19,10 @@ pub(crate) unsafe fn lock() {
19} 19}
20 20
21pub(crate) unsafe fn unlock() { 21pub(crate) unsafe fn unlock() {
22 pac::FLASH.keyr().write(|w| w.set_fkeyr(0x4567_0123)); 22 if pac::FLASH.cr().read().lock() {
23 pac::FLASH.keyr().write(|w| w.set_fkeyr(0xCDEF_89AB)); 23 pac::FLASH.keyr().write(|w| w.set_fkeyr(0x4567_0123));
24 pac::FLASH.keyr().write(|w| w.set_fkeyr(0xCDEF_89AB));
25 }
24} 26}
25 27
26pub(crate) unsafe fn enable_blocking_write() { 28pub(crate) unsafe fn enable_blocking_write() {
diff --git a/embassy-stm32/src/flash/f3.rs b/embassy-stm32/src/flash/f3.rs
index 065369f64..7e6d7ca26 100644
--- a/embassy-stm32/src/flash/f3.rs
+++ b/embassy-stm32/src/flash/f3.rs
@@ -19,8 +19,10 @@ pub(crate) unsafe fn lock() {
19} 19}
20 20
21pub(crate) unsafe fn unlock() { 21pub(crate) unsafe fn unlock() {
22 pac::FLASH.keyr().write(|w| w.set_fkeyr(0x4567_0123)); 22 if pac::FLASH.cr().read().lock() {
23 pac::FLASH.keyr().write(|w| w.set_fkeyr(0xCDEF_89AB)); 23 pac::FLASH.keyr().write(|w| w.set_fkeyr(0x4567_0123));
24 pac::FLASH.keyr().write(|w| w.set_fkeyr(0xCDEF_89AB));
25 }
24} 26}
25 27
26pub(crate) unsafe fn enable_blocking_write() { 28pub(crate) unsafe fn enable_blocking_write() {
diff --git a/embassy-stm32/src/flash/f4.rs b/embassy-stm32/src/flash/f4.rs
index 913950fe5..81deaa179 100644
--- a/embassy-stm32/src/flash/f4.rs
+++ b/embassy-stm32/src/flash/f4.rs
@@ -228,8 +228,10 @@ pub(crate) unsafe fn lock() {
228} 228}
229 229
230pub(crate) unsafe fn unlock() { 230pub(crate) unsafe fn unlock() {
231 pac::FLASH.keyr().write(|w| w.set_key(0x45670123)); 231 if pac::FLASH.cr().read().lock() {
232 pac::FLASH.keyr().write(|w| w.set_key(0xCDEF89AB)); 232 pac::FLASH.keyr().write(|w| w.set_key(0x45670123));
233 pac::FLASH.keyr().write(|w| w.set_key(0xCDEF89AB));
234 }
233} 235}
234 236
235pub(crate) unsafe fn enable_write() { 237pub(crate) unsafe fn enable_write() {
diff --git a/embassy-stm32/src/flash/f7.rs b/embassy-stm32/src/flash/f7.rs
index 3a5bdf9c5..b52231ca8 100644
--- a/embassy-stm32/src/flash/f7.rs
+++ b/embassy-stm32/src/flash/f7.rs
@@ -19,8 +19,10 @@ pub(crate) unsafe fn lock() {
19} 19}
20 20
21pub(crate) unsafe fn unlock() { 21pub(crate) unsafe fn unlock() {
22 pac::FLASH.keyr().write(|w| w.set_key(0x4567_0123)); 22 if pac::FLASH.cr().read().lock() {
23 pac::FLASH.keyr().write(|w| w.set_key(0xCDEF_89AB)); 23 pac::FLASH.keyr().write(|w| w.set_key(0x4567_0123));
24 pac::FLASH.keyr().write(|w| w.set_key(0xCDEF_89AB));
25 }
24} 26}
25 27
26pub(crate) unsafe fn enable_blocking_write() { 28pub(crate) unsafe fn enable_blocking_write() {
diff --git a/embassy-stm32/src/flash/g0.rs b/embassy-stm32/src/flash/g0.rs
index 3a4576016..19a388970 100644
--- a/embassy-stm32/src/flash/g0.rs
+++ b/embassy-stm32/src/flash/g0.rs
@@ -24,8 +24,10 @@ pub(crate) unsafe fn unlock() {
24 while pac::FLASH.sr().read().bsy() {} 24 while pac::FLASH.sr().read().bsy() {}
25 25
26 // Unlock flash 26 // Unlock flash
27 pac::FLASH.keyr().write(|w| w.set_keyr(0x4567_0123)); 27 if pac::FLASH.cr().read().lock() {
28 pac::FLASH.keyr().write(|w| w.set_keyr(0xCDEF_89AB)); 28 pac::FLASH.keyr().write(|w| w.set_keyr(0x4567_0123));
29 pac::FLASH.keyr().write(|w| w.set_keyr(0xCDEF_89AB));
30 }
29} 31}
30 32
31pub(crate) unsafe fn enable_blocking_write() { 33pub(crate) unsafe fn enable_blocking_write() {
diff --git a/embassy-stm32/src/flash/h7.rs b/embassy-stm32/src/flash/h7.rs
index 625bf13fc..b064fd6ea 100644
--- a/embassy-stm32/src/flash/h7.rs
+++ b/embassy-stm32/src/flash/h7.rs
@@ -26,11 +26,15 @@ pub(crate) unsafe fn lock() {
26} 26}
27 27
28pub(crate) unsafe fn unlock() { 28pub(crate) unsafe fn unlock() {
29 pac::FLASH.bank(0).keyr().write(|w| w.set_keyr(0x4567_0123)); 29 if pac::FLASH.bank(0).cr().read().lock() {
30 pac::FLASH.bank(0).keyr().write(|w| w.set_keyr(0xCDEF_89AB)); 30 pac::FLASH.bank(0).keyr().write(|w| w.set_keyr(0x4567_0123));
31 pac::FLASH.bank(0).keyr().write(|w| w.set_keyr(0xCDEF_89AB));
32 }
31 if is_dual_bank() { 33 if is_dual_bank() {
32 pac::FLASH.bank(1).keyr().write(|w| w.set_keyr(0x4567_0123)); 34 if pac::FLASH.bank(1).cr().read().lock() {
33 pac::FLASH.bank(1).keyr().write(|w| w.set_keyr(0xCDEF_89AB)); 35 pac::FLASH.bank(1).keyr().write(|w| w.set_keyr(0x4567_0123));
36 pac::FLASH.bank(1).keyr().write(|w| w.set_keyr(0xCDEF_89AB));
37 }
34 } 38 }
35} 39}
36 40
diff --git a/embassy-stm32/src/flash/l.rs b/embassy-stm32/src/flash/l.rs
index 24dcf99bc..1db0da923 100644
--- a/embassy-stm32/src/flash/l.rs
+++ b/embassy-stm32/src/flash/l.rs
@@ -28,17 +28,23 @@ pub(crate) unsafe fn lock() {
28pub(crate) unsafe fn unlock() { 28pub(crate) unsafe fn unlock() {
29 #[cfg(any(flash_wl, flash_wb, flash_l4))] 29 #[cfg(any(flash_wl, flash_wb, flash_l4))]
30 { 30 {
31 pac::FLASH.keyr().write(|w| w.set_keyr(0x4567_0123)); 31 if pac::FLASH.cr().read().lock() {
32 pac::FLASH.keyr().write(|w| w.set_keyr(0xCDEF_89AB)); 32 pac::FLASH.keyr().write(|w| w.set_keyr(0x4567_0123));
33 pac::FLASH.keyr().write(|w| w.set_keyr(0xCDEF_89AB));
34 }
33 } 35 }
34 36
35 #[cfg(any(flash_l0, flash_l1))] 37 #[cfg(any(flash_l0, flash_l1))]
36 { 38 {
37 pac::FLASH.pekeyr().write(|w| w.set_pekeyr(0x89ABCDEF)); 39 if pac::FLASH.pecr().read().pelock() {
38 pac::FLASH.pekeyr().write(|w| w.set_pekeyr(0x02030405)); 40 pac::FLASH.pekeyr().write(|w| w.set_pekeyr(0x89ABCDEF));
41 pac::FLASH.pekeyr().write(|w| w.set_pekeyr(0x02030405));
42 }
39 43
40 pac::FLASH.prgkeyr().write(|w| w.set_prgkeyr(0x8C9DAEBF)); 44 if pac::FLASH.pecr().read().prglock() {
41 pac::FLASH.prgkeyr().write(|w| w.set_prgkeyr(0x13141516)); 45 pac::FLASH.prgkeyr().write(|w| w.set_prgkeyr(0x8C9DAEBF));
46 pac::FLASH.prgkeyr().write(|w| w.set_prgkeyr(0x13141516));
47 }
42 } 48 }
43} 49}
44 50