diff options
| author | Matous Hybl <[email protected]> | 2022-09-06 17:44:20 +0200 |
|---|---|---|
| committer | Matous Hybl <[email protected]> | 2022-11-28 21:15:24 +0100 |
| commit | 2a35a0944420ecf3d33e9684b9bb5756500cb851 (patch) | |
| tree | 2351c3c32b28cca861a75c1786375a667ccb8829 | |
| parent | cea29d7de3169cf2212128e0386e5d57053cc12d (diff) | |
stm32: Fix H7 unaligned erase
| -rw-r--r-- | embassy-stm32/src/flash/h7.rs | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/embassy-stm32/src/flash/h7.rs b/embassy-stm32/src/flash/h7.rs index 3f2129de8..3178b3be9 100644 --- a/embassy-stm32/src/flash/h7.rs +++ b/embassy-stm32/src/flash/h7.rs | |||
| @@ -79,24 +79,19 @@ pub(crate) unsafe fn blocking_erase(from: u32, to: u32) -> Result<(), Error> { | |||
| 79 | let from = from - super::FLASH_BASE as u32; | 79 | let from = from - super::FLASH_BASE as u32; |
| 80 | let to = to - super::FLASH_BASE as u32; | 80 | let to = to - super::FLASH_BASE as u32; |
| 81 | 81 | ||
| 82 | let bank_size = (super::FLASH_SIZE / 2) as u32; | 82 | let (start, end) = if to <= super::FLASH_SIZE as u32 { |
| 83 | |||
| 84 | let (bank, start, end) = if to <= bank_size { | ||
| 85 | let start_sector = from / super::ERASE_SIZE as u32; | 83 | let start_sector = from / super::ERASE_SIZE as u32; |
| 86 | let end_sector = to / super::ERASE_SIZE as u32; | 84 | let end_sector = to / super::ERASE_SIZE as u32; |
| 87 | (0, start_sector, end_sector) | 85 | (start_sector, end_sector) |
| 88 | } else if from >= SECOND_BANK_OFFSET as u32 && to <= (SECOND_BANK_OFFSET as u32 + bank_size) { | ||
| 89 | let start_sector = (from - SECOND_BANK_OFFSET as u32) / super::ERASE_SIZE as u32; | ||
| 90 | let end_sector = (to - SECOND_BANK_OFFSET as u32) / super::ERASE_SIZE as u32; | ||
| 91 | (1, start_sector, end_sector) | ||
| 92 | } else { | 86 | } else { |
| 93 | error!("Attempting to write outside of defined sectors"); | 87 | error!("Attempting to write outside of defined sectors {:x} {:x}", from, to); |
| 94 | return Err(Error::Unaligned); | 88 | return Err(Error::Unaligned); |
| 95 | }; | 89 | }; |
| 96 | 90 | ||
| 97 | trace!("Erasing bank {}, sectors from {} to {}", bank, start, end); | 91 | trace!("Erasing sectors from {} to {}", start, end); |
| 98 | for sector in start..end { | 92 | for sector in start..end { |
| 99 | let ret = erase_sector(pac::FLASH.bank(bank), sector as u8); | 93 | let bank = if sector >= 8 { 1 } else { 0 }; |
| 94 | let ret = erase_sector(pac::FLASH.bank(bank), (sector % 8) as u8); | ||
| 100 | if ret.is_err() { | 95 | if ret.is_err() { |
| 101 | return ret; | 96 | return ret; |
| 102 | } | 97 | } |
