aboutsummaryrefslogtreecommitdiff
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
parentcdb14475696484d08d717194074c4d85cff5eb63 (diff)
Fix unused get_sector and ensure_sector_aligned
-rw-r--r--embassy-stm32/src/flash/common.rs49
-rw-r--r--embassy-stm32/src/flash/mod.rs44
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;
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}
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
96pub(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
121pub(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}