diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2023-04-18 14:05:15 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-04-18 14:05:15 +0000 |
| commit | a86a10087913c09ff728ddbd80ab61e8eb6b3b00 (patch) | |
| tree | 019cc5862194f3e35f5f88c65f16447474be7a35 | |
| parent | 46227bec1e948ea89de7d4e8a8dc98df5d7a25f0 (diff) | |
| parent | bba8b0ded52383e9a958e11322ac5c75d01e70de (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.rs | 8 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/common.rs | 31 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/mod.rs | 1 |
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}; | |||
| 2 | use embassy_hal_common::drop::OnDrop; | 2 | use embassy_hal_common::drop::OnDrop; |
| 3 | use embassy_hal_common::{into_ref, PeripheralRef}; | 3 | use embassy_hal_common::{into_ref, PeripheralRef}; |
| 4 | 4 | ||
| 5 | use super::{family, Error, FlashLayout, FlashRegion, FlashSector, FLASH_BASE, FLASH_SIZE, WRITE_SIZE}; | 5 | use super::{family, Error, FlashLayout, FlashRegion, FlashSector, FLASH_BASE, FLASH_SIZE, MAX_ERASE_SIZE, WRITE_SIZE}; |
| 6 | use crate::flash::FlashBank; | 6 | use crate::flash::FlashBank; |
| 7 | use crate::Peripheral; | 7 | use crate::Peripheral; |
| 8 | 8 | ||
| @@ -162,6 +162,35 @@ impl FlashRegion { | |||
| 162 | } | 162 | } |
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | impl embedded_storage::nor_flash::ErrorType for Flash<'_> { | ||
| 166 | type Error = Error; | ||
| 167 | } | ||
| 168 | |||
| 169 | impl 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 | |||
| 181 | impl 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 | |||
| 165 | foreach_flash_region! { | 194 | foreach_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; | |||
| 7 | pub use common::*; | 7 | pub use common::*; |
| 8 | 8 | ||
| 9 | pub use crate::_generated::flash_regions::*; | 9 | pub use crate::_generated::flash_regions::*; |
| 10 | pub use crate::_generated::MAX_ERASE_SIZE; | ||
| 10 | pub use crate::pac::{FLASH_BASE, FLASH_SIZE, WRITE_SIZE}; | 11 | pub use crate::pac::{FLASH_BASE, FLASH_SIZE, WRITE_SIZE}; |
| 11 | 12 | ||
| 12 | #[derive(Debug)] | 13 | #[derive(Debug)] |
