diff options
| author | Badr Bouslikhin <[email protected]> | 2024-02-06 12:30:04 +0100 |
|---|---|---|
| committer | Badr Bouslikhin <[email protected]> | 2024-02-06 12:30:04 +0100 |
| commit | aab5da1d3bfe10966bef88217492870b4148b28f (patch) | |
| tree | 6fa8bd24f0ee7de9934713ba865b711a66a4afc8 | |
| parent | ad7d4494fad12f98c7e8e2b776bc12453a66be9a (diff) | |
fix(stm32h7/flash): enhance resilience to program sequence errors (pgserr)
| -rw-r--r-- | embassy-stm32/src/flash/h7.rs | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/embassy-stm32/src/flash/h7.rs b/embassy-stm32/src/flash/h7.rs index ae395d568..743925e17 100644 --- a/embassy-stm32/src/flash/h7.rs +++ b/embassy-stm32/src/flash/h7.rs | |||
| @@ -77,12 +77,12 @@ pub(crate) unsafe fn blocking_write(start_address: u32, buf: &[u8; WRITE_SIZE]) | |||
| 77 | } | 77 | } |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | bank.cr().write(|w| w.set_pg(false)); | ||
| 81 | |||
| 82 | cortex_m::asm::isb(); | 80 | cortex_m::asm::isb(); |
| 83 | cortex_m::asm::dsb(); | 81 | cortex_m::asm::dsb(); |
| 84 | fence(Ordering::SeqCst); | 82 | fence(Ordering::SeqCst); |
| 85 | 83 | ||
| 84 | bank.cr().write(|w| w.set_pg(false)); | ||
| 85 | |||
| 86 | res.unwrap() | 86 | res.unwrap() |
| 87 | } | 87 | } |
| 88 | 88 | ||
| @@ -100,6 +100,10 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E | |||
| 100 | w.set_start(true); | 100 | w.set_start(true); |
| 101 | }); | 101 | }); |
| 102 | 102 | ||
| 103 | cortex_m::asm::isb(); | ||
| 104 | cortex_m::asm::dsb(); | ||
| 105 | fence(Ordering::SeqCst); | ||
| 106 | |||
| 103 | let ret: Result<(), Error> = blocking_wait_ready(bank); | 107 | let ret: Result<(), Error> = blocking_wait_ready(bank); |
| 104 | bank.cr().modify(|w| w.set_ser(false)); | 108 | bank.cr().modify(|w| w.set_ser(false)); |
| 105 | bank_clear_all_err(bank); | 109 | bank_clear_all_err(bank); |
