aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2023-04-18 14:05:15 +0000
committerGitHub <[email protected]>2023-04-18 14:05:15 +0000
commita86a10087913c09ff728ddbd80ab61e8eb6b3b00 (patch)
tree019cc5862194f3e35f5f88c65f16447474be7a35
parent46227bec1e948ea89de7d4e8a8dc98df5d7a25f0 (diff)
parentbba8b0ded52383e9a958e11322ac5c75d01e70de (diff)
Merge #1377
1377: (embassy-stm32): implement embedded-storage traits for full flash struct r=MathiasKoch a=MathiasKoch Co-authored-by: Mathias <[email protected]>
-rw-r--r--embassy-stm32/build.rs8
-rw-r--r--embassy-stm32/src/flash/common.rs31
-rw-r--r--embassy-stm32/src/flash/mod.rs1
3 files changed, 39 insertions, 1 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs
index c7d12e13a..a85d3db6e 100644
--- a/embassy-stm32/build.rs
+++ b/embassy-stm32/build.rs
@@ -255,6 +255,14 @@ fn main() {
255 ]; 255 ];
256 }); 256 });
257 257
258 let max_erase_size = flash_memory_regions
259 .iter()
260 .map(|region| region.settings.as_ref().unwrap().erase_size)
261 .max()
262 .unwrap();
263
264 g.extend(quote! { pub const MAX_ERASE_SIZE: usize = #max_erase_size as usize; });
265
258 g.extend(quote! { pub mod flash_regions { #flash_regions } }); 266 g.extend(quote! { pub mod flash_regions { #flash_regions } });
259 267
260 // ======== 268 // ========
diff --git a/embassy-stm32/src/flash/common.rs b/embassy-stm32/src/flash/common.rs
index 1189e447e..6d7f55974 100644
--- a/embassy-stm32/src/flash/common.rs
+++ b/embassy-stm32/src/flash/common.rs
@@ -2,7 +2,7 @@ use atomic_polyfill::{fence, Ordering};
2use embassy_hal_common::drop::OnDrop; 2use embassy_hal_common::drop::OnDrop;
3use embassy_hal_common::{into_ref, PeripheralRef}; 3use embassy_hal_common::{into_ref, PeripheralRef};
4 4
5use super::{family, Error, FlashLayout, FlashRegion, FlashSector, FLASH_BASE, FLASH_SIZE, WRITE_SIZE}; 5use super::{family, Error, FlashLayout, FlashRegion, FlashSector, FLASH_BASE, FLASH_SIZE, MAX_ERASE_SIZE, WRITE_SIZE};
6use crate::flash::FlashBank; 6use crate::flash::FlashBank;
7use crate::Peripheral; 7use crate::Peripheral;
8 8
@@ -162,6 +162,35 @@ impl FlashRegion {
162 } 162 }
163} 163}
164 164
165impl embedded_storage::nor_flash::ErrorType for Flash<'_> {
166 type Error = Error;
167}
168
169impl embedded_storage::nor_flash::ReadNorFlash for Flash<'_> {
170 const READ_SIZE: usize = 1;
171
172 fn read(&mut self, offset: u32, bytes: &mut [u8]) -> Result<(), Self::Error> {
173 self.blocking_read(offset, bytes)
174 }
175
176 fn capacity(&self) -> usize {
177 FLASH_SIZE
178 }
179}
180
181impl embedded_storage::nor_flash::NorFlash for Flash<'_> {
182 const WRITE_SIZE: usize = WRITE_SIZE;
183 const ERASE_SIZE: usize = MAX_ERASE_SIZE;
184
185 fn write(&mut self, offset: u32, bytes: &[u8]) -> Result<(), Self::Error> {
186 self.blocking_write(offset, bytes)
187 }
188
189 fn erase(&mut self, from: u32, to: u32) -> Result<(), Self::Error> {
190 self.blocking_erase(from, to)
191 }
192}
193
165foreach_flash_region! { 194foreach_flash_region! {
166 ($type_name:ident, $write_size:literal, $erase_size:literal) => { 195 ($type_name:ident, $write_size:literal, $erase_size:literal) => {
167 impl crate::_generated::flash_regions::$type_name<'_> { 196 impl crate::_generated::flash_regions::$type_name<'_> {
diff --git a/embassy-stm32/src/flash/mod.rs b/embassy-stm32/src/flash/mod.rs
index 231ff1f9e..7d5596b1f 100644
--- a/embassy-stm32/src/flash/mod.rs
+++ b/embassy-stm32/src/flash/mod.rs
@@ -7,6 +7,7 @@ mod common;
7pub use common::*; 7pub use common::*;
8 8
9pub use crate::_generated::flash_regions::*; 9pub use crate::_generated::flash_regions::*;
10pub use crate::_generated::MAX_ERASE_SIZE;
10pub use crate::pac::{FLASH_BASE, FLASH_SIZE, WRITE_SIZE}; 11pub use crate::pac::{FLASH_BASE, FLASH_SIZE, WRITE_SIZE};
11 12
12#[derive(Debug)] 13#[derive(Debug)]