diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2023-05-26 08:21:57 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-26 08:21:57 +0000 |
| commit | 31b364b9b0a18a9ebb341747861441b11f621ea0 (patch) | |
| tree | 9b3409b9c19a41ca216cd88533a10d4ce4c984f5 /examples | |
| parent | 524a89cc722d2f01e1edcceb8ed116c5f2e12885 (diff) | |
| parent | 307f2365da9b24fac2a0c312106a5f9986c4b5ea (diff) | |
Merge #1480
1480: stm32: Async flash support for F4 r=rmja a=rmja
This PR depends on https://github.com/embassy-rs/embassy/pull/1478.
It adds async write/erase operations to the F4 series based on the work in https://github.com/embassy-rs/embassy/pull/870 but aligned to the new flash regions.
If one considers the entire `Flash` then nothing has changed other than the async operations have been added.
Co-authored-by: Rasmus Melchior Jacobsen <[email protected]>
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/boot/application/rp/src/bin/a.rs | 2 | ||||
| -rw-r--r-- | examples/boot/application/stm32f3/src/bin/a.rs | 2 | ||||
| -rw-r--r-- | examples/boot/application/stm32f7/src/bin/a.rs | 2 | ||||
| -rw-r--r-- | examples/boot/application/stm32h7/src/bin/a.rs | 2 | ||||
| -rw-r--r-- | examples/boot/application/stm32l0/src/bin/a.rs | 2 | ||||
| -rw-r--r-- | examples/boot/application/stm32l1/src/bin/a.rs | 2 | ||||
| -rw-r--r-- | examples/boot/application/stm32l4/src/bin/a.rs | 2 | ||||
| -rw-r--r-- | examples/boot/application/stm32wl/src/bin/a.rs | 2 | ||||
| -rw-r--r-- | examples/boot/bootloader/stm32/src/main.rs | 3 | ||||
| -rw-r--r-- | examples/stm32f3/src/bin/flash.rs | 13 | ||||
| -rw-r--r-- | examples/stm32f4/src/bin/flash.rs | 12 | ||||
| -rw-r--r-- | examples/stm32f4/src/bin/flash_async.rs | 85 | ||||
| -rw-r--r-- | examples/stm32f7/src/bin/flash.rs | 13 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/flash.rs | 13 | ||||
| -rw-r--r-- | examples/stm32l0/src/bin/flash.rs | 13 | ||||
| -rw-r--r-- | examples/stm32l1/src/bin/flash.rs | 13 | ||||
| -rw-r--r-- | examples/stm32wl/src/bin/flash.rs | 13 |
17 files changed, 136 insertions, 58 deletions
diff --git a/examples/boot/application/rp/src/bin/a.rs b/examples/boot/application/rp/src/bin/a.rs index e3ac634c2..47f1d16d8 100644 --- a/examples/boot/application/rp/src/bin/a.rs +++ b/examples/boot/application/rp/src/bin/a.rs | |||
| @@ -26,7 +26,7 @@ async fn main(_s: Spawner) { | |||
| 26 | let mut watchdog = Watchdog::new(p.WATCHDOG); | 26 | let mut watchdog = Watchdog::new(p.WATCHDOG); |
| 27 | watchdog.start(Duration::from_secs(8)); | 27 | watchdog.start(Duration::from_secs(8)); |
| 28 | 28 | ||
| 29 | let mut flash: Flash<_, FLASH_SIZE> = Flash::new(p.FLASH); | 29 | let mut flash: Flash<_, FLASH_SIZE> = Flash::new_blocking(p.FLASH); |
| 30 | 30 | ||
| 31 | let mut updater = FirmwareUpdater::default(); | 31 | let mut updater = FirmwareUpdater::default(); |
| 32 | 32 | ||
diff --git a/examples/boot/application/stm32f3/src/bin/a.rs b/examples/boot/application/stm32f3/src/bin/a.rs index d92d59b29..5db1dbb57 100644 --- a/examples/boot/application/stm32f3/src/bin/a.rs +++ b/examples/boot/application/stm32f3/src/bin/a.rs | |||
| @@ -17,7 +17,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | |||
| 17 | #[embassy_executor::main] | 17 | #[embassy_executor::main] |
| 18 | async fn main(_spawner: Spawner) { | 18 | async fn main(_spawner: Spawner) { |
| 19 | let p = embassy_stm32::init(Default::default()); | 19 | let p = embassy_stm32::init(Default::default()); |
| 20 | let flash = Flash::new(p.FLASH); | 20 | let flash = Flash::new_blocking(p.FLASH); |
| 21 | let mut flash = BlockingAsync::new(flash); | 21 | let mut flash = BlockingAsync::new(flash); |
| 22 | 22 | ||
| 23 | let button = Input::new(p.PC13, Pull::Up); | 23 | let button = Input::new(p.PC13, Pull::Up); |
diff --git a/examples/boot/application/stm32f7/src/bin/a.rs b/examples/boot/application/stm32f7/src/bin/a.rs index 79ab80e09..5d586445c 100644 --- a/examples/boot/application/stm32f7/src/bin/a.rs +++ b/examples/boot/application/stm32f7/src/bin/a.rs | |||
| @@ -16,7 +16,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | |||
| 16 | #[embassy_executor::main] | 16 | #[embassy_executor::main] |
| 17 | async fn main(_spawner: Spawner) { | 17 | async fn main(_spawner: Spawner) { |
| 18 | let p = embassy_stm32::init(Default::default()); | 18 | let p = embassy_stm32::init(Default::default()); |
| 19 | let mut flash = Flash::new(p.FLASH); | 19 | let mut flash = Flash::new_blocking(p.FLASH); |
| 20 | 20 | ||
| 21 | let button = Input::new(p.PC13, Pull::Down); | 21 | let button = Input::new(p.PC13, Pull::Down); |
| 22 | let mut button = ExtiInput::new(button, p.EXTI13); | 22 | let mut button = ExtiInput::new(button, p.EXTI13); |
diff --git a/examples/boot/application/stm32h7/src/bin/a.rs b/examples/boot/application/stm32h7/src/bin/a.rs index 8b452be34..202220223 100644 --- a/examples/boot/application/stm32h7/src/bin/a.rs +++ b/examples/boot/application/stm32h7/src/bin/a.rs | |||
| @@ -16,7 +16,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | |||
| 16 | #[embassy_executor::main] | 16 | #[embassy_executor::main] |
| 17 | async fn main(_spawner: Spawner) { | 17 | async fn main(_spawner: Spawner) { |
| 18 | let p = embassy_stm32::init(Default::default()); | 18 | let p = embassy_stm32::init(Default::default()); |
| 19 | let mut flash = Flash::new(p.FLASH); | 19 | let mut flash = Flash::new_blocking(p.FLASH); |
| 20 | 20 | ||
| 21 | let button = Input::new(p.PC13, Pull::Down); | 21 | let button = Input::new(p.PC13, Pull::Down); |
| 22 | let mut button = ExtiInput::new(button, p.EXTI13); | 22 | let mut button = ExtiInput::new(button, p.EXTI13); |
diff --git a/examples/boot/application/stm32l0/src/bin/a.rs b/examples/boot/application/stm32l0/src/bin/a.rs index 59ca34386..4033ac590 100644 --- a/examples/boot/application/stm32l0/src/bin/a.rs +++ b/examples/boot/application/stm32l0/src/bin/a.rs | |||
| @@ -18,7 +18,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | |||
| 18 | #[embassy_executor::main] | 18 | #[embassy_executor::main] |
| 19 | async fn main(_spawner: Spawner) { | 19 | async fn main(_spawner: Spawner) { |
| 20 | let p = embassy_stm32::init(Default::default()); | 20 | let p = embassy_stm32::init(Default::default()); |
| 21 | let flash = Flash::new(p.FLASH); | 21 | let flash = Flash::new_blocking(p.FLASH); |
| 22 | let mut flash = BlockingAsync::new(flash); | 22 | let mut flash = BlockingAsync::new(flash); |
| 23 | 23 | ||
| 24 | let button = Input::new(p.PB2, Pull::Up); | 24 | let button = Input::new(p.PB2, Pull::Up); |
diff --git a/examples/boot/application/stm32l1/src/bin/a.rs b/examples/boot/application/stm32l1/src/bin/a.rs index 59ca34386..4033ac590 100644 --- a/examples/boot/application/stm32l1/src/bin/a.rs +++ b/examples/boot/application/stm32l1/src/bin/a.rs | |||
| @@ -18,7 +18,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | |||
| 18 | #[embassy_executor::main] | 18 | #[embassy_executor::main] |
| 19 | async fn main(_spawner: Spawner) { | 19 | async fn main(_spawner: Spawner) { |
| 20 | let p = embassy_stm32::init(Default::default()); | 20 | let p = embassy_stm32::init(Default::default()); |
| 21 | let flash = Flash::new(p.FLASH); | 21 | let flash = Flash::new_blocking(p.FLASH); |
| 22 | let mut flash = BlockingAsync::new(flash); | 22 | let mut flash = BlockingAsync::new(flash); |
| 23 | 23 | ||
| 24 | let button = Input::new(p.PB2, Pull::Up); | 24 | let button = Input::new(p.PB2, Pull::Up); |
diff --git a/examples/boot/application/stm32l4/src/bin/a.rs b/examples/boot/application/stm32l4/src/bin/a.rs index 6cddc6cc8..141d82afd 100644 --- a/examples/boot/application/stm32l4/src/bin/a.rs +++ b/examples/boot/application/stm32l4/src/bin/a.rs | |||
| @@ -17,7 +17,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | |||
| 17 | #[embassy_executor::main] | 17 | #[embassy_executor::main] |
| 18 | async fn main(_spawner: Spawner) { | 18 | async fn main(_spawner: Spawner) { |
| 19 | let p = embassy_stm32::init(Default::default()); | 19 | let p = embassy_stm32::init(Default::default()); |
| 20 | let flash = Flash::new(p.FLASH); | 20 | let flash = Flash::new_blocking(p.FLASH); |
| 21 | let mut flash = BlockingAsync::new(flash); | 21 | let mut flash = BlockingAsync::new(flash); |
| 22 | 22 | ||
| 23 | let button = Input::new(p.PC13, Pull::Up); | 23 | let button = Input::new(p.PC13, Pull::Up); |
diff --git a/examples/boot/application/stm32wl/src/bin/a.rs b/examples/boot/application/stm32wl/src/bin/a.rs index 1ff47eddd..5f48dbe51 100644 --- a/examples/boot/application/stm32wl/src/bin/a.rs +++ b/examples/boot/application/stm32wl/src/bin/a.rs | |||
| @@ -17,7 +17,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | |||
| 17 | #[embassy_executor::main] | 17 | #[embassy_executor::main] |
| 18 | async fn main(_spawner: Spawner) { | 18 | async fn main(_spawner: Spawner) { |
| 19 | let p = embassy_stm32::init(Default::default()); | 19 | let p = embassy_stm32::init(Default::default()); |
| 20 | let flash = Flash::new(p.FLASH); | 20 | let flash = Flash::new_blocking(p.FLASH); |
| 21 | let mut flash = BlockingAsync::new(flash); | 21 | let mut flash = BlockingAsync::new(flash); |
| 22 | 22 | ||
| 23 | let button = Input::new(p.PA0, Pull::Up); | 23 | let button = Input::new(p.PA0, Pull::Up); |
diff --git a/examples/boot/bootloader/stm32/src/main.rs b/examples/boot/bootloader/stm32/src/main.rs index 49c21920b..f81fdbc5f 100644 --- a/examples/boot/bootloader/stm32/src/main.rs +++ b/examples/boot/bootloader/stm32/src/main.rs | |||
| @@ -20,8 +20,7 @@ fn main() -> ! { | |||
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | let mut bl: BootLoader<2048> = BootLoader::default(); | 22 | let mut bl: BootLoader<2048> = BootLoader::default(); |
| 23 | let flash = Flash::new(p.FLASH); | 23 | let layout = Flash::new_blocking(p.FLASH).into_blocking_regions(); |
| 24 | let layout = flash.into_regions(); | ||
| 25 | let mut flash = BootFlash::new(layout.bank1_region); | 24 | let mut flash = BootFlash::new(layout.bank1_region); |
| 26 | let start = bl.prepare(&mut SingleFlashConfig::new(&mut flash)); | 25 | let start = bl.prepare(&mut SingleFlashConfig::new(&mut flash)); |
| 27 | core::mem::drop(flash); | 26 | core::mem::drop(flash); |
diff --git a/examples/stm32f3/src/bin/flash.rs b/examples/stm32f3/src/bin/flash.rs index e40ad4fc0..236fb36c1 100644 --- a/examples/stm32f3/src/bin/flash.rs +++ b/examples/stm32f3/src/bin/flash.rs | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::flash::Flash; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; | ||
| 9 | use {defmt_rtt as _, panic_probe as _}; | 8 | use {defmt_rtt as _, panic_probe as _}; |
| 10 | 9 | ||
| 11 | #[embassy_executor::main] | 10 | #[embassy_executor::main] |
| @@ -15,27 +14,27 @@ async fn main(_spawner: Spawner) { | |||
| 15 | 14 | ||
| 16 | const ADDR: u32 = 0x26000; | 15 | const ADDR: u32 = 0x26000; |
| 17 | 16 | ||
| 18 | let mut f = Flash::new(p.FLASH).into_regions().bank1_region; | 17 | let mut f = Flash::new_blocking(p.FLASH).into_blocking_regions().bank1_region; |
| 19 | 18 | ||
| 20 | info!("Reading..."); | 19 | info!("Reading..."); |
| 21 | let mut buf = [0u8; 8]; | 20 | let mut buf = [0u8; 8]; |
| 22 | unwrap!(f.read(ADDR, &mut buf)); | 21 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 23 | info!("Read: {=[u8]:x}", buf); | 22 | info!("Read: {=[u8]:x}", buf); |
| 24 | 23 | ||
| 25 | info!("Erasing..."); | 24 | info!("Erasing..."); |
| 26 | unwrap!(f.erase(ADDR, ADDR + 2048)); | 25 | unwrap!(f.blocking_erase(ADDR, ADDR + 2048)); |
| 27 | 26 | ||
| 28 | info!("Reading..."); | 27 | info!("Reading..."); |
| 29 | let mut buf = [0u8; 8]; | 28 | let mut buf = [0u8; 8]; |
| 30 | unwrap!(f.read(ADDR, &mut buf)); | 29 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 31 | info!("Read after erase: {=[u8]:x}", buf); | 30 | info!("Read after erase: {=[u8]:x}", buf); |
| 32 | 31 | ||
| 33 | info!("Writing..."); | 32 | info!("Writing..."); |
| 34 | unwrap!(f.write(ADDR, &[1, 2, 3, 4, 5, 6, 7, 8])); | 33 | unwrap!(f.blocking_write(ADDR, &[1, 2, 3, 4, 5, 6, 7, 8])); |
| 35 | 34 | ||
| 36 | info!("Reading..."); | 35 | info!("Reading..."); |
| 37 | let mut buf = [0u8; 8]; | 36 | let mut buf = [0u8; 8]; |
| 38 | unwrap!(f.read(ADDR, &mut buf)); | 37 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 39 | info!("Read: {=[u8]:x}", buf); | 38 | info!("Read: {=[u8]:x}", buf); |
| 40 | assert_eq!(&buf[..], &[1, 2, 3, 4, 5, 6, 7, 8]); | 39 | assert_eq!(&buf[..], &[1, 2, 3, 4, 5, 6, 7, 8]); |
| 41 | } | 40 | } |
diff --git a/examples/stm32f4/src/bin/flash.rs b/examples/stm32f4/src/bin/flash.rs index bd3a7c95e..93c54e943 100644 --- a/examples/stm32f4/src/bin/flash.rs +++ b/examples/stm32f4/src/bin/flash.rs | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::flash::Flash; | 7 | use embassy_stm32::flash::{Blocking, Flash}; |
| 8 | use {defmt_rtt as _, panic_probe as _}; | 8 | use {defmt_rtt as _, panic_probe as _}; |
| 9 | 9 | ||
| 10 | #[embassy_executor::main] | 10 | #[embassy_executor::main] |
| @@ -14,7 +14,7 @@ async fn main(_spawner: Spawner) { | |||
| 14 | 14 | ||
| 15 | // Once can also call `into_regions()` to get access to NorFlash implementations | 15 | // Once can also call `into_regions()` to get access to NorFlash implementations |
| 16 | // for each of the unique characteristics. | 16 | // for each of the unique characteristics. |
| 17 | let mut f = Flash::new(p.FLASH); | 17 | let mut f = Flash::new_blocking(p.FLASH); |
| 18 | 18 | ||
| 19 | // Sector 5 | 19 | // Sector 5 |
| 20 | test_flash(&mut f, 128 * 1024, 128 * 1024); | 20 | test_flash(&mut f, 128 * 1024, 128 * 1024); |
| @@ -26,12 +26,12 @@ async fn main(_spawner: Spawner) { | |||
| 26 | test_flash(&mut f, (2048 - 128) * 1024, 128 * 1024); | 26 | test_flash(&mut f, (2048 - 128) * 1024, 128 * 1024); |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | fn test_flash(f: &mut Flash, offset: u32, size: u32) { | 29 | fn test_flash(f: &mut Flash<'_, Blocking>, offset: u32, size: u32) { |
| 30 | info!("Testing offset: {=u32:#X}, size: {=u32:#X}", offset, size); | 30 | info!("Testing offset: {=u32:#X}, size: {=u32:#X}", offset, size); |
| 31 | 31 | ||
| 32 | info!("Reading..."); | 32 | info!("Reading..."); |
| 33 | let mut buf = [0u8; 32]; | 33 | let mut buf = [0u8; 32]; |
| 34 | unwrap!(f.blocking_read(offset, &mut buf)); | 34 | unwrap!(f.read(offset, &mut buf)); |
| 35 | info!("Read: {=[u8]:x}", buf); | 35 | info!("Read: {=[u8]:x}", buf); |
| 36 | 36 | ||
| 37 | info!("Erasing..."); | 37 | info!("Erasing..."); |
| @@ -39,7 +39,7 @@ fn test_flash(f: &mut Flash, offset: u32, size: u32) { | |||
| 39 | 39 | ||
| 40 | info!("Reading..."); | 40 | info!("Reading..."); |
| 41 | let mut buf = [0u8; 32]; | 41 | let mut buf = [0u8; 32]; |
| 42 | unwrap!(f.blocking_read(offset, &mut buf)); | 42 | unwrap!(f.read(offset, &mut buf)); |
| 43 | info!("Read after erase: {=[u8]:x}", buf); | 43 | info!("Read after erase: {=[u8]:x}", buf); |
| 44 | 44 | ||
| 45 | info!("Writing..."); | 45 | info!("Writing..."); |
| @@ -53,7 +53,7 @@ fn test_flash(f: &mut Flash, offset: u32, size: u32) { | |||
| 53 | 53 | ||
| 54 | info!("Reading..."); | 54 | info!("Reading..."); |
| 55 | let mut buf = [0u8; 32]; | 55 | let mut buf = [0u8; 32]; |
| 56 | unwrap!(f.blocking_read(offset, &mut buf)); | 56 | unwrap!(f.read(offset, &mut buf)); |
| 57 | info!("Read: {=[u8]:x}", buf); | 57 | info!("Read: {=[u8]:x}", buf); |
| 58 | assert_eq!( | 58 | assert_eq!( |
| 59 | &buf[..], | 59 | &buf[..], |
diff --git a/examples/stm32f4/src/bin/flash_async.rs b/examples/stm32f4/src/bin/flash_async.rs new file mode 100644 index 000000000..6c9689d9c --- /dev/null +++ b/examples/stm32f4/src/bin/flash_async.rs | |||
| @@ -0,0 +1,85 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | #![feature(type_alias_impl_trait)] | ||
| 4 | |||
| 5 | use defmt::{info, unwrap}; | ||
| 6 | use embassy_executor::Spawner; | ||
| 7 | use embassy_stm32::bind_interrupts; | ||
| 8 | use embassy_stm32::flash::{Flash, InterruptHandler}; | ||
| 9 | use embassy_stm32::gpio::{AnyPin, Level, Output, Pin, Speed}; | ||
| 10 | use embassy_time::{Duration, Timer}; | ||
| 11 | use {defmt_rtt as _, panic_probe as _}; | ||
| 12 | |||
| 13 | bind_interrupts!(struct Irqs { | ||
| 14 | FLASH => InterruptHandler; | ||
| 15 | }); | ||
| 16 | |||
| 17 | #[embassy_executor::main] | ||
| 18 | async fn main(spawner: Spawner) { | ||
| 19 | let p = embassy_stm32::init(Default::default()); | ||
| 20 | info!("Hello Flash!"); | ||
| 21 | |||
| 22 | let mut f = Flash::new(p.FLASH, Irqs); | ||
| 23 | |||
| 24 | // Led should blink uninterrupted during ~2sec erase operation | ||
| 25 | spawner.spawn(blinky(p.PB7.degrade())).unwrap(); | ||
| 26 | |||
| 27 | // Test on bank 2 in order not to stall CPU. | ||
| 28 | test_flash(&mut f, 1024 * 1024, 128 * 1024).await; | ||
| 29 | } | ||
| 30 | |||
| 31 | #[embassy_executor::task] | ||
| 32 | async fn blinky(p: AnyPin) { | ||
| 33 | let mut led = Output::new(p, Level::High, Speed::Low); | ||
| 34 | |||
| 35 | loop { | ||
| 36 | info!("high"); | ||
| 37 | led.set_high(); | ||
| 38 | Timer::after(Duration::from_millis(300)).await; | ||
| 39 | |||
| 40 | info!("low"); | ||
| 41 | led.set_low(); | ||
| 42 | Timer::after(Duration::from_millis(300)).await; | ||
| 43 | } | ||
| 44 | } | ||
| 45 | |||
| 46 | async fn test_flash<'a>(f: &mut Flash<'a>, offset: u32, size: u32) { | ||
| 47 | info!("Testing offset: {=u32:#X}, size: {=u32:#X}", offset, size); | ||
| 48 | |||
| 49 | info!("Reading..."); | ||
| 50 | let mut buf = [0u8; 32]; | ||
| 51 | unwrap!(f.read(offset, &mut buf)); | ||
| 52 | info!("Read: {=[u8]:x}", buf); | ||
| 53 | |||
| 54 | info!("Erasing..."); | ||
| 55 | unwrap!(f.erase(offset, offset + size).await); | ||
| 56 | |||
| 57 | info!("Reading..."); | ||
| 58 | let mut buf = [0u8; 32]; | ||
| 59 | unwrap!(f.read(offset, &mut buf)); | ||
| 60 | info!("Read after erase: {=[u8]:x}", buf); | ||
| 61 | |||
| 62 | info!("Writing..."); | ||
| 63 | unwrap!( | ||
| 64 | f.write( | ||
| 65 | offset, | ||
| 66 | &[ | ||
| 67 | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, | ||
| 68 | 29, 30, 31, 32 | ||
| 69 | ] | ||
| 70 | ) | ||
| 71 | .await | ||
| 72 | ); | ||
| 73 | |||
| 74 | info!("Reading..."); | ||
| 75 | let mut buf = [0u8; 32]; | ||
| 76 | unwrap!(f.read(offset, &mut buf)); | ||
| 77 | info!("Read: {=[u8]:x}", buf); | ||
| 78 | assert_eq!( | ||
| 79 | &buf[..], | ||
| 80 | &[ | ||
| 81 | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, | ||
| 82 | 30, 31, 32 | ||
| 83 | ] | ||
| 84 | ); | ||
| 85 | } | ||
diff --git a/examples/stm32f7/src/bin/flash.rs b/examples/stm32f7/src/bin/flash.rs index aabfe8557..35d3059be 100644 --- a/examples/stm32f7/src/bin/flash.rs +++ b/examples/stm32f7/src/bin/flash.rs | |||
| @@ -6,7 +6,6 @@ use defmt::{info, unwrap}; | |||
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::flash::Flash; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use embassy_time::{Duration, Timer}; | 8 | use embassy_time::{Duration, Timer}; |
| 9 | use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; | ||
| 10 | use {defmt_rtt as _, panic_probe as _}; | 9 | use {defmt_rtt as _, panic_probe as _}; |
| 11 | 10 | ||
| 12 | #[embassy_executor::main] | 11 | #[embassy_executor::main] |
| @@ -19,23 +18,23 @@ async fn main(_spawner: Spawner) { | |||
| 19 | // wait a bit before accessing the flash | 18 | // wait a bit before accessing the flash |
| 20 | Timer::after(Duration::from_millis(300)).await; | 19 | Timer::after(Duration::from_millis(300)).await; |
| 21 | 20 | ||
| 22 | let mut f = Flash::new(p.FLASH).into_regions().bank1_region3; | 21 | let mut f = Flash::new_blocking(p.FLASH).into_blocking_regions().bank1_region3; |
| 23 | 22 | ||
| 24 | info!("Reading..."); | 23 | info!("Reading..."); |
| 25 | let mut buf = [0u8; 32]; | 24 | let mut buf = [0u8; 32]; |
| 26 | unwrap!(f.read(ADDR, &mut buf)); | 25 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 27 | info!("Read: {=[u8]:x}", buf); | 26 | info!("Read: {=[u8]:x}", buf); |
| 28 | 27 | ||
| 29 | info!("Erasing..."); | 28 | info!("Erasing..."); |
| 30 | unwrap!(f.erase(ADDR, ADDR + 256 * 1024)); | 29 | unwrap!(f.blocking_erase(ADDR, ADDR + 256 * 1024)); |
| 31 | 30 | ||
| 32 | info!("Reading..."); | 31 | info!("Reading..."); |
| 33 | let mut buf = [0u8; 32]; | 32 | let mut buf = [0u8; 32]; |
| 34 | unwrap!(f.read(ADDR, &mut buf)); | 33 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 35 | info!("Read after erase: {=[u8]:x}", buf); | 34 | info!("Read after erase: {=[u8]:x}", buf); |
| 36 | 35 | ||
| 37 | info!("Writing..."); | 36 | info!("Writing..."); |
| 38 | unwrap!(f.write( | 37 | unwrap!(f.blocking_write( |
| 39 | ADDR, | 38 | ADDR, |
| 40 | &[ | 39 | &[ |
| 41 | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, | 40 | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, |
| @@ -45,7 +44,7 @@ async fn main(_spawner: Spawner) { | |||
| 45 | 44 | ||
| 46 | info!("Reading..."); | 45 | info!("Reading..."); |
| 47 | let mut buf = [0u8; 32]; | 46 | let mut buf = [0u8; 32]; |
| 48 | unwrap!(f.read(ADDR, &mut buf)); | 47 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 49 | info!("Read: {=[u8]:x}", buf); | 48 | info!("Read: {=[u8]:x}", buf); |
| 50 | assert_eq!( | 49 | assert_eq!( |
| 51 | &buf[..], | 50 | &buf[..], |
diff --git a/examples/stm32h7/src/bin/flash.rs b/examples/stm32h7/src/bin/flash.rs index 7ee9838c9..f66df770b 100644 --- a/examples/stm32h7/src/bin/flash.rs +++ b/examples/stm32h7/src/bin/flash.rs | |||
| @@ -6,7 +6,6 @@ use defmt::{info, unwrap}; | |||
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::flash::Flash; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use embassy_time::{Duration, Timer}; | 8 | use embassy_time::{Duration, Timer}; |
| 9 | use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; | ||
| 10 | use {defmt_rtt as _, panic_probe as _}; | 9 | use {defmt_rtt as _, panic_probe as _}; |
| 11 | 10 | ||
| 12 | #[embassy_executor::main] | 11 | #[embassy_executor::main] |
| @@ -19,23 +18,23 @@ async fn main(_spawner: Spawner) { | |||
| 19 | // wait a bit before accessing the flash | 18 | // wait a bit before accessing the flash |
| 20 | Timer::after(Duration::from_millis(300)).await; | 19 | Timer::after(Duration::from_millis(300)).await; |
| 21 | 20 | ||
| 22 | let mut f = Flash::new(p.FLASH).into_regions().bank2_region; | 21 | let mut f = Flash::new_blocking(p.FLASH).into_blocking_regions().bank2_region; |
| 23 | 22 | ||
| 24 | info!("Reading..."); | 23 | info!("Reading..."); |
| 25 | let mut buf = [0u8; 32]; | 24 | let mut buf = [0u8; 32]; |
| 26 | unwrap!(f.read(ADDR, &mut buf)); | 25 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 27 | info!("Read: {=[u8]:x}", buf); | 26 | info!("Read: {=[u8]:x}", buf); |
| 28 | 27 | ||
| 29 | info!("Erasing..."); | 28 | info!("Erasing..."); |
| 30 | unwrap!(f.erase(ADDR, ADDR + 128 * 1024)); | 29 | unwrap!(f.blocking_erase(ADDR, ADDR + 128 * 1024)); |
| 31 | 30 | ||
| 32 | info!("Reading..."); | 31 | info!("Reading..."); |
| 33 | let mut buf = [0u8; 32]; | 32 | let mut buf = [0u8; 32]; |
| 34 | unwrap!(f.read(ADDR, &mut buf)); | 33 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 35 | info!("Read after erase: {=[u8]:x}", buf); | 34 | info!("Read after erase: {=[u8]:x}", buf); |
| 36 | 35 | ||
| 37 | info!("Writing..."); | 36 | info!("Writing..."); |
| 38 | unwrap!(f.write( | 37 | unwrap!(f.blocking_write( |
| 39 | ADDR, | 38 | ADDR, |
| 40 | &[ | 39 | &[ |
| 41 | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, | 40 | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, |
| @@ -45,7 +44,7 @@ async fn main(_spawner: Spawner) { | |||
| 45 | 44 | ||
| 46 | info!("Reading..."); | 45 | info!("Reading..."); |
| 47 | let mut buf = [0u8; 32]; | 46 | let mut buf = [0u8; 32]; |
| 48 | unwrap!(f.read(ADDR, &mut buf)); | 47 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 49 | info!("Read: {=[u8]:x}", buf); | 48 | info!("Read: {=[u8]:x}", buf); |
| 50 | assert_eq!( | 49 | assert_eq!( |
| 51 | &buf[..], | 50 | &buf[..], |
diff --git a/examples/stm32l0/src/bin/flash.rs b/examples/stm32l0/src/bin/flash.rs index 337425028..86f6c70b9 100644 --- a/examples/stm32l0/src/bin/flash.rs +++ b/examples/stm32l0/src/bin/flash.rs | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::flash::Flash; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; | ||
| 9 | use {defmt_rtt as _, panic_probe as _}; | 8 | use {defmt_rtt as _, panic_probe as _}; |
| 10 | 9 | ||
| 11 | #[embassy_executor::main] | 10 | #[embassy_executor::main] |
| @@ -15,27 +14,27 @@ async fn main(_spawner: Spawner) { | |||
| 15 | 14 | ||
| 16 | const ADDR: u32 = 0x26000; | 15 | const ADDR: u32 = 0x26000; |
| 17 | 16 | ||
| 18 | let mut f = Flash::new(p.FLASH).into_regions().bank1_region; | 17 | let mut f = Flash::new_blocking(p.FLASH).into_blocking_regions().bank1_region; |
| 19 | 18 | ||
| 20 | info!("Reading..."); | 19 | info!("Reading..."); |
| 21 | let mut buf = [0u8; 8]; | 20 | let mut buf = [0u8; 8]; |
| 22 | unwrap!(f.read(ADDR, &mut buf)); | 21 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 23 | info!("Read: {=[u8]:x}", buf); | 22 | info!("Read: {=[u8]:x}", buf); |
| 24 | 23 | ||
| 25 | info!("Erasing..."); | 24 | info!("Erasing..."); |
| 26 | unwrap!(f.erase(ADDR, ADDR + 128)); | 25 | unwrap!(f.blocking_erase(ADDR, ADDR + 128)); |
| 27 | 26 | ||
| 28 | info!("Reading..."); | 27 | info!("Reading..."); |
| 29 | let mut buf = [0u8; 8]; | 28 | let mut buf = [0u8; 8]; |
| 30 | unwrap!(f.read(ADDR, &mut buf)); | 29 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 31 | info!("Read after erase: {=[u8]:x}", buf); | 30 | info!("Read after erase: {=[u8]:x}", buf); |
| 32 | 31 | ||
| 33 | info!("Writing..."); | 32 | info!("Writing..."); |
| 34 | unwrap!(f.write(ADDR, &[1, 2, 3, 4, 5, 6, 7, 8])); | 33 | unwrap!(f.blocking_write(ADDR, &[1, 2, 3, 4, 5, 6, 7, 8])); |
| 35 | 34 | ||
| 36 | info!("Reading..."); | 35 | info!("Reading..."); |
| 37 | let mut buf = [0u8; 8]; | 36 | let mut buf = [0u8; 8]; |
| 38 | unwrap!(f.read(ADDR, &mut buf)); | 37 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 39 | info!("Read: {=[u8]:x}", buf); | 38 | info!("Read: {=[u8]:x}", buf); |
| 40 | assert_eq!(&buf[..], &[1, 2, 3, 4, 5, 6, 7, 8]); | 39 | assert_eq!(&buf[..], &[1, 2, 3, 4, 5, 6, 7, 8]); |
| 41 | } | 40 | } |
diff --git a/examples/stm32l1/src/bin/flash.rs b/examples/stm32l1/src/bin/flash.rs index 38feb0d76..aeb535cca 100644 --- a/examples/stm32l1/src/bin/flash.rs +++ b/examples/stm32l1/src/bin/flash.rs | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::flash::Flash; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; | ||
| 9 | use {defmt_rtt as _, panic_probe as _}; | 8 | use {defmt_rtt as _, panic_probe as _}; |
| 10 | 9 | ||
| 11 | #[embassy_executor::main] | 10 | #[embassy_executor::main] |
| @@ -15,27 +14,27 @@ async fn main(_spawner: Spawner) { | |||
| 15 | 14 | ||
| 16 | const ADDR: u32 = 0x26000; | 15 | const ADDR: u32 = 0x26000; |
| 17 | 16 | ||
| 18 | let mut f = Flash::new(p.FLASH).into_regions().bank1_region; | 17 | let mut f = Flash::new_blocking(p.FLASH).into_blocking_regions().bank1_region; |
| 19 | 18 | ||
| 20 | info!("Reading..."); | 19 | info!("Reading..."); |
| 21 | let mut buf = [0u8; 8]; | 20 | let mut buf = [0u8; 8]; |
| 22 | unwrap!(f.read(ADDR, &mut buf)); | 21 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 23 | info!("Read: {=[u8]:x}", buf); | 22 | info!("Read: {=[u8]:x}", buf); |
| 24 | 23 | ||
| 25 | info!("Erasing..."); | 24 | info!("Erasing..."); |
| 26 | unwrap!(f.erase(ADDR, ADDR + 256)); | 25 | unwrap!(f.blocking_erase(ADDR, ADDR + 256)); |
| 27 | 26 | ||
| 28 | info!("Reading..."); | 27 | info!("Reading..."); |
| 29 | let mut buf = [0u8; 8]; | 28 | let mut buf = [0u8; 8]; |
| 30 | unwrap!(f.read(ADDR, &mut buf)); | 29 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 31 | info!("Read after erase: {=[u8]:x}", buf); | 30 | info!("Read after erase: {=[u8]:x}", buf); |
| 32 | 31 | ||
| 33 | info!("Writing..."); | 32 | info!("Writing..."); |
| 34 | unwrap!(f.write(ADDR, &[1, 2, 3, 4, 5, 6, 7, 8])); | 33 | unwrap!(f.blocking_write(ADDR, &[1, 2, 3, 4, 5, 6, 7, 8])); |
| 35 | 34 | ||
| 36 | info!("Reading..."); | 35 | info!("Reading..."); |
| 37 | let mut buf = [0u8; 8]; | 36 | let mut buf = [0u8; 8]; |
| 38 | unwrap!(f.read(ADDR, &mut buf)); | 37 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 39 | info!("Read: {=[u8]:x}", buf); | 38 | info!("Read: {=[u8]:x}", buf); |
| 40 | assert_eq!(&buf[..], &[1, 2, 3, 4, 5, 6, 7, 8]); | 39 | assert_eq!(&buf[..], &[1, 2, 3, 4, 5, 6, 7, 8]); |
| 41 | } | 40 | } |
diff --git a/examples/stm32wl/src/bin/flash.rs b/examples/stm32wl/src/bin/flash.rs index e6bc2865c..5e52d49ec 100644 --- a/examples/stm32wl/src/bin/flash.rs +++ b/examples/stm32wl/src/bin/flash.rs | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::flash::Flash; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; | ||
| 9 | use {defmt_rtt as _, panic_probe as _}; | 8 | use {defmt_rtt as _, panic_probe as _}; |
| 10 | 9 | ||
| 11 | #[embassy_executor::main] | 10 | #[embassy_executor::main] |
| @@ -15,27 +14,27 @@ async fn main(_spawner: Spawner) { | |||
| 15 | 14 | ||
| 16 | const ADDR: u32 = 0x36000; | 15 | const ADDR: u32 = 0x36000; |
| 17 | 16 | ||
| 18 | let mut f = Flash::new(p.FLASH).into_regions().bank1_region; | 17 | let mut f = Flash::new_blocking(p.FLASH).into_blocking_regions().bank1_region; |
| 19 | 18 | ||
| 20 | info!("Reading..."); | 19 | info!("Reading..."); |
| 21 | let mut buf = [0u8; 8]; | 20 | let mut buf = [0u8; 8]; |
| 22 | unwrap!(f.read(ADDR, &mut buf)); | 21 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 23 | info!("Read: {=[u8]:x}", buf); | 22 | info!("Read: {=[u8]:x}", buf); |
| 24 | 23 | ||
| 25 | info!("Erasing..."); | 24 | info!("Erasing..."); |
| 26 | unwrap!(f.erase(ADDR, ADDR + 2048)); | 25 | unwrap!(f.blocking_erase(ADDR, ADDR + 2048)); |
| 27 | 26 | ||
| 28 | info!("Reading..."); | 27 | info!("Reading..."); |
| 29 | let mut buf = [0u8; 8]; | 28 | let mut buf = [0u8; 8]; |
| 30 | unwrap!(f.read(ADDR, &mut buf)); | 29 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 31 | info!("Read: {=[u8]:x}", buf); | 30 | info!("Read: {=[u8]:x}", buf); |
| 32 | 31 | ||
| 33 | info!("Writing..."); | 32 | info!("Writing..."); |
| 34 | unwrap!(f.write(ADDR, &[1, 2, 3, 4, 5, 6, 7, 8])); | 33 | unwrap!(f.blocking_write(ADDR, &[1, 2, 3, 4, 5, 6, 7, 8])); |
| 35 | 34 | ||
| 36 | info!("Reading..."); | 35 | info!("Reading..."); |
| 37 | let mut buf = [0u8; 8]; | 36 | let mut buf = [0u8; 8]; |
| 38 | unwrap!(f.read(ADDR, &mut buf)); | 37 | unwrap!(f.blocking_read(ADDR, &mut buf)); |
| 39 | info!("Read: {=[u8]:x}", buf); | 38 | info!("Read: {=[u8]:x}", buf); |
| 40 | assert_eq!(&buf[..], &[1, 2, 3, 4, 5, 6, 7, 8]); | 39 | assert_eq!(&buf[..], &[1, 2, 3, 4, 5, 6, 7, 8]); |
| 41 | } | 40 | } |
