diff options
| author | Rasmus Melchior Jacobsen <[email protected]> | 2023-05-24 12:45:59 +0200 |
|---|---|---|
| committer | Rasmus Melchior Jacobsen <[email protected]> | 2023-05-25 20:07:41 +0200 |
| commit | 34a2804b544206920b6e960e3443a2b2f6e41f2b (patch) | |
| tree | 153723a7d2a68ce047498c70653cc745ea68b3d2 | |
| parent | cdb14475696484d08d717194074c4d85cff5eb63 (diff) | |
Fix unused get_sector and ensure_sector_aligned
| -rw-r--r-- | embassy-stm32/src/flash/common.rs | 49 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/mod.rs | 44 |
2 files changed, 47 insertions, 46 deletions
diff --git a/embassy-stm32/src/flash/common.rs b/embassy-stm32/src/flash/common.rs index 990104a38..7cec5a3c9 100644 --- a/embassy-stm32/src/flash/common.rs +++ b/embassy-stm32/src/flash/common.rs | |||
| @@ -8,8 +8,8 @@ use embassy_sync::mutex::Mutex; | |||
| 8 | use stm32_metapac::FLASH_BASE; | 8 | use stm32_metapac::FLASH_BASE; |
| 9 | 9 | ||
| 10 | use super::{ | 10 | use super::{ |
| 11 | ensure_sector_aligned, family, get_sector, Error, FlashLayout, FlashRegion, FLASH_SIZE, MAX_ERASE_SIZE, READ_SIZE, | 11 | family, Error, FlashLayout, FlashRegion, FLASH_SIZE, MAX_ERASE_SIZE, READ_SIZE, |
| 12 | WRITE_SIZE, | 12 | WRITE_SIZE, FlashSector, FlashBank, |
| 13 | }; | 13 | }; |
| 14 | use crate::peripherals::FLASH; | 14 | use crate::peripherals::FLASH; |
| 15 | use crate::Peripheral; | 15 | use crate::Peripheral; |
| @@ -118,6 +118,51 @@ pub(super) unsafe fn erase_sectored_blocking(base: u32, from: u32, to: u32) -> R | |||
| 118 | Ok(()) | 118 | Ok(()) |
| 119 | } | 119 | } |
| 120 | 120 | ||
| 121 | pub(crate) fn get_sector(address: u32, regions: &[&FlashRegion]) -> FlashSector { | ||
| 122 | let mut current_bank = FlashBank::Bank1; | ||
| 123 | let mut bank_offset = 0; | ||
| 124 | for region in regions { | ||
| 125 | if region.bank != current_bank { | ||
| 126 | current_bank = region.bank; | ||
| 127 | bank_offset = 0; | ||
| 128 | } | ||
| 129 | |||
| 130 | if address < region.end() { | ||
| 131 | let index_in_region = (address - region.base) / region.erase_size; | ||
| 132 | return FlashSector { | ||
| 133 | bank: region.bank, | ||
| 134 | index_in_bank: bank_offset + index_in_region as u8, | ||
| 135 | start: region.base + index_in_region * region.erase_size, | ||
| 136 | size: region.erase_size, | ||
| 137 | }; | ||
| 138 | } | ||
| 139 | |||
| 140 | bank_offset += region.sectors(); | ||
| 141 | } | ||
| 142 | |||
| 143 | panic!("Flash sector not found"); | ||
| 144 | } | ||
| 145 | |||
| 146 | pub(crate) fn ensure_sector_aligned( | ||
| 147 | start_address: u32, | ||
| 148 | end_address: u32, | ||
| 149 | regions: &[&FlashRegion], | ||
| 150 | ) -> Result<(), Error> { | ||
| 151 | let mut address = start_address; | ||
| 152 | while address < end_address { | ||
| 153 | let sector = get_sector(address, regions); | ||
| 154 | if sector.start != address { | ||
| 155 | return Err(Error::Unaligned); | ||
| 156 | } | ||
| 157 | address += sector.size; | ||
| 158 | } | ||
| 159 | if address != end_address { | ||
| 160 | return Err(Error::Unaligned); | ||
| 161 | } | ||
| 162 | Ok(()) | ||
| 163 | } | ||
| 164 | |||
| 165 | |||
| 121 | impl embedded_storage::nor_flash::ErrorType for Flash<'_> { | 166 | impl embedded_storage::nor_flash::ErrorType for Flash<'_> { |
| 122 | type Error = Error; | 167 | type Error = Error; |
| 123 | } | 168 | } |
diff --git a/embassy-stm32/src/flash/mod.rs b/embassy-stm32/src/flash/mod.rs index e781f1b86..1ef04e56f 100644 --- a/embassy-stm32/src/flash/mod.rs +++ b/embassy-stm32/src/flash/mod.rs | |||
| @@ -92,47 +92,3 @@ impl NorFlashError for Error { | |||
| 92 | } | 92 | } |
| 93 | } | 93 | } |
| 94 | } | 94 | } |
| 95 | |||
| 96 | pub(crate) fn get_sector(address: u32, regions: &[&FlashRegion]) -> FlashSector { | ||
| 97 | let mut current_bank = FlashBank::Bank1; | ||
| 98 | let mut bank_offset = 0; | ||
| 99 | for region in regions { | ||
| 100 | if region.bank != current_bank { | ||
| 101 | current_bank = region.bank; | ||
| 102 | bank_offset = 0; | ||
| 103 | } | ||
| 104 | |||
| 105 | if address < region.end() { | ||
| 106 | let index_in_region = (address - region.base) / region.erase_size; | ||
| 107 | return FlashSector { | ||
| 108 | bank: region.bank, | ||
| 109 | index_in_bank: bank_offset + index_in_region as u8, | ||
| 110 | start: region.base + index_in_region * region.erase_size, | ||
| 111 | size: region.erase_size, | ||
| 112 | }; | ||
| 113 | } | ||
| 114 | |||
| 115 | bank_offset += region.sectors(); | ||
| 116 | } | ||
| 117 | |||
| 118 | panic!("Flash sector not found"); | ||
| 119 | } | ||
| 120 | |||
| 121 | pub(crate) fn ensure_sector_aligned( | ||
| 122 | start_address: u32, | ||
| 123 | end_address: u32, | ||
| 124 | regions: &[&FlashRegion], | ||
| 125 | ) -> Result<(), Error> { | ||
| 126 | let mut address = start_address; | ||
| 127 | while address < end_address { | ||
| 128 | let sector = get_sector(address, regions); | ||
| 129 | if sector.start != address { | ||
| 130 | return Err(Error::Unaligned); | ||
| 131 | } | ||
| 132 | address += sector.size; | ||
| 133 | } | ||
| 134 | if address != end_address { | ||
| 135 | return Err(Error::Unaligned); | ||
| 136 | } | ||
| 137 | Ok(()) | ||
| 138 | } | ||
