diff options
| author | Ulf Lilleengen <[email protected]> | 2025-10-16 07:10:48 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-10-16 07:10:48 +0000 |
| commit | 2a79c55d4d38e95f90a8efcf93a3e28f4d6ad35f (patch) | |
| tree | 9a95cce6e1676dd7d306842a85a743b466b59b01 | |
| parent | c80d8b21ddd2910f5a8c6b4b524291a24ee797eb (diff) | |
| parent | 6ba2611430e824a5d19d4d116640c8ba86c6850d (diff) | |
Merge pull request #4767 from blueskycoco/stm32-l-flash
stm32: flash: fix flash erase on stm32l4xx, stm32l5xx series
| -rw-r--r-- | embassy-stm32/CHANGELOG.md | 1 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/l.rs | 12 |
2 files changed, 10 insertions, 3 deletions
diff --git a/embassy-stm32/CHANGELOG.md b/embassy-stm32/CHANGELOG.md index 7675567ff..9848daf49 100644 --- a/embassy-stm32/CHANGELOG.md +++ b/embassy-stm32/CHANGELOG.md | |||
| @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |||
| 11 | * **Fix(stm32h5):** Prevent a HardFault crash on STM32H5 devices by changing `uid()` to return `[u8; 12]` by value instead of a reference. (Fixes #2696) | 11 | * **Fix(stm32h5):** Prevent a HardFault crash on STM32H5 devices by changing `uid()` to return `[u8; 12]` by value instead of a reference. (Fixes #2696) |
| 12 | ## Unreleased - ReleaseDate | 12 | ## Unreleased - ReleaseDate |
| 13 | 13 | ||
| 14 | - fix flash erase on L4 & L5 | ||
| 14 | - fix: Fixed STM32H5 builds requiring time feature | 15 | - fix: Fixed STM32H5 builds requiring time feature |
| 15 | - feat: Derive Clone, Copy for QSPI Config | 16 | - feat: Derive Clone, Copy for QSPI Config |
| 16 | - fix: stm32/i2c in master mode (blocking): subsequent transmissions failed after a NACK was received | 17 | - fix: stm32/i2c in master mode (blocking): subsequent transmissions failed after a NACK was received |
diff --git a/embassy-stm32/src/flash/l.rs b/embassy-stm32/src/flash/l.rs index cd23cda5c..b3281f2d5 100644 --- a/embassy-stm32/src/flash/l.rs +++ b/embassy-stm32/src/flash/l.rs | |||
| @@ -96,14 +96,20 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E | |||
| 96 | #[cfg(any(flash_wl, flash_wb, flash_l4, flash_l5))] | 96 | #[cfg(any(flash_wl, flash_wb, flash_l4, flash_l5))] |
| 97 | { | 97 | { |
| 98 | let idx = (sector.start - super::FLASH_BASE as u32) / super::BANK1_REGION.erase_size as u32; | 98 | let idx = (sector.start - super::FLASH_BASE as u32) / super::BANK1_REGION.erase_size as u32; |
| 99 | #[cfg(any(flash_l4, flash_l5))] | ||
| 100 | let pgn = super::BANK1_REGION.size as u32 / super::BANK1_REGION.erase_size as u32; | ||
| 99 | 101 | ||
| 100 | #[cfg(flash_l4)] | 102 | #[cfg(flash_l4)] |
| 101 | let (idx, bank) = if idx > 255 { (idx - 256, true) } else { (idx, false) }; | 103 | let (idx, bank) = if idx > (pgn - 1) { |
| 104 | (idx - pgn, true) | ||
| 105 | } else { | ||
| 106 | (idx, false) | ||
| 107 | }; | ||
| 102 | 108 | ||
| 103 | #[cfg(flash_l5)] | 109 | #[cfg(flash_l5)] |
| 104 | let (idx, bank) = if pac::FLASH.optr().read().dbank() { | 110 | let (idx, bank) = if pac::FLASH.optr().read().dbank() { |
| 105 | if idx > 255 { | 111 | if idx > (pgn - 1) { |
| 106 | (idx - 256, Some(true)) | 112 | (idx - pgn, Some(true)) |
| 107 | } else { | 113 | } else { |
| 108 | (idx, Some(false)) | 114 | (idx, Some(false)) |
| 109 | } | 115 | } |
