aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2023-05-26 08:21:57 +0000
committerGitHub <[email protected]>2023-05-26 08:21:57 +0000
commit31b364b9b0a18a9ebb341747861441b11f621ea0 (patch)
tree9b3409b9c19a41ca216cd88533a10d4ce4c984f5 /examples
parent524a89cc722d2f01e1edcceb8ed116c5f2e12885 (diff)
parent307f2365da9b24fac2a0c312106a5f9986c4b5ea (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.rs2
-rw-r--r--examples/boot/application/stm32f3/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32f7/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32h7/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32l0/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32l1/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32l4/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32wl/src/bin/a.rs2
-rw-r--r--examples/boot/bootloader/stm32/src/main.rs3
-rw-r--r--examples/stm32f3/src/bin/flash.rs13
-rw-r--r--examples/stm32f4/src/bin/flash.rs12
-rw-r--r--examples/stm32f4/src/bin/flash_async.rs85
-rw-r--r--examples/stm32f7/src/bin/flash.rs13
-rw-r--r--examples/stm32h7/src/bin/flash.rs13
-rw-r--r--examples/stm32l0/src/bin/flash.rs13
-rw-r--r--examples/stm32l1/src/bin/flash.rs13
-rw-r--r--examples/stm32wl/src/bin/flash.rs13
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]
18async fn main(_spawner: Spawner) { 18async 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]
17async fn main(_spawner: Spawner) { 17async 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]
17async fn main(_spawner: Spawner) { 17async 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]
19async fn main(_spawner: Spawner) { 19async 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]
19async fn main(_spawner: Spawner) { 19async 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]
18async fn main(_spawner: Spawner) { 18async 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]
18async fn main(_spawner: Spawner) { 18async 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 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
9use {defmt_rtt as _, panic_probe as _}; 8use {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
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::{Blocking, Flash};
8use {defmt_rtt as _, panic_probe as _}; 8use {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
29fn test_flash(f: &mut Flash, offset: u32, size: u32) { 29fn 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
5use defmt::{info, unwrap};
6use embassy_executor::Spawner;
7use embassy_stm32::bind_interrupts;
8use embassy_stm32::flash::{Flash, InterruptHandler};
9use embassy_stm32::gpio::{AnyPin, Level, Output, Pin, Speed};
10use embassy_time::{Duration, Timer};
11use {defmt_rtt as _, panic_probe as _};
12
13bind_interrupts!(struct Irqs {
14 FLASH => InterruptHandler;
15});
16
17#[embassy_executor::main]
18async 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]
32async 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
46async 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};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embassy_time::{Duration, Timer}; 8use embassy_time::{Duration, Timer};
9use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
10use {defmt_rtt as _, panic_probe as _}; 9use {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};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embassy_time::{Duration, Timer}; 8use embassy_time::{Duration, Timer};
9use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
10use {defmt_rtt as _, panic_probe as _}; 9use {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 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
9use {defmt_rtt as _, panic_probe as _}; 8use {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 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
9use {defmt_rtt as _, panic_probe as _}; 8use {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 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
9use {defmt_rtt as _, panic_probe as _}; 8use {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}