aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32/src/flash/common.rs
diff options
context:
space:
mode:
authorRasmus Melchior Jacobsen <[email protected]>2023-05-24 12:45:59 +0200
committerRasmus Melchior Jacobsen <[email protected]>2023-05-25 20:07:41 +0200
commit34a2804b544206920b6e960e3443a2b2f6e41f2b (patch)
tree153723a7d2a68ce047498c70653cc745ea68b3d2 /embassy-stm32/src/flash/common.rs
parentcdb14475696484d08d717194074c4d85cff5eb63 (diff)
Fix unused get_sector and ensure_sector_aligned
Diffstat (limited to 'embassy-stm32/src/flash/common.rs')
-rw-r--r--embassy-stm32/src/flash/common.rs49
1 files changed, 47 insertions, 2 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;
8use stm32_metapac::FLASH_BASE; 8use stm32_metapac::FLASH_BASE;
9 9
10use super::{ 10use 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};
14use crate::peripherals::FLASH; 14use crate::peripherals::FLASH;
15use crate::Peripheral; 15use 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
121pub(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
146pub(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
121impl embedded_storage::nor_flash::ErrorType for Flash<'_> { 166impl embedded_storage::nor_flash::ErrorType for Flash<'_> {
122 type Error = Error; 167 type Error = Error;
123} 168}