aboutsummaryrefslogtreecommitdiff
path: root/examples/stm32f4
diff options
context:
space:
mode:
Diffstat (limited to 'examples/stm32f4')
-rw-r--r--examples/stm32f4/src/bin/sdmmc.rs35
1 files changed, 14 insertions, 21 deletions
diff --git a/examples/stm32f4/src/bin/sdmmc.rs b/examples/stm32f4/src/bin/sdmmc.rs
index fe0f887bf..897b0e05e 100644
--- a/examples/stm32f4/src/bin/sdmmc.rs
+++ b/examples/stm32f4/src/bin/sdmmc.rs
@@ -3,7 +3,7 @@
3 3
4use defmt::*; 4use defmt::*;
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_stm32::sdmmc::{DataBlock, Sdmmc}; 6use embassy_stm32::sdmmc::{CmdBlock, DataBlock, Sdmmc, StorageDevice};
7use embassy_stm32::time::{Hertz, mhz}; 7use embassy_stm32::time::{Hertz, mhz};
8use embassy_stm32::{Config, bind_interrupts, peripherals, sdmmc}; 8use embassy_stm32::{Config, bind_interrupts, peripherals, sdmmc};
9use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
@@ -57,23 +57,16 @@ async fn main(_spawner: Spawner) {
57 // Should print 400kHz for initialization 57 // Should print 400kHz for initialization
58 info!("Configured clock: {}", sdmmc.clock().0); 58 info!("Configured clock: {}", sdmmc.clock().0);
59 59
60 let mut err = None; 60 let mut cmd_block = CmdBlock::new();
61 loop { 61
62 match sdmmc.init_sd_card(mhz(24)).await { 62 let mut storage = StorageDevice::new_sd_card(&mut sdmmc, &mut cmd_block, mhz(24))
63 Ok(_) => break, 63 .await
64 Err(e) => { 64 .unwrap();
65 if err != Some(e) {
66 info!("waiting for card error, retrying: {:?}", e);
67 err = Some(e);
68 }
69 }
70 }
71 }
72 65
73 let card = unwrap!(sdmmc.card()); 66 let card = storage.card();
74 67
75 info!("Card: {:#?}", Debug2Format(card)); 68 info!("Card: {:#?}", Debug2Format(&card));
76 info!("Clock: {}", sdmmc.clock()); 69 info!("Clock: {}", storage.sdmmc.clock());
77 70
78 // Arbitrary block index 71 // Arbitrary block index
79 let block_idx = 16; 72 let block_idx = 16;
@@ -81,7 +74,7 @@ async fn main(_spawner: Spawner) {
81 // SDMMC uses `DataBlock` instead of `&[u8]` to ensure 4 byte alignment required by the hardware. 74 // SDMMC uses `DataBlock` instead of `&[u8]` to ensure 4 byte alignment required by the hardware.
82 let mut block = DataBlock([0u8; 512]); 75 let mut block = DataBlock([0u8; 512]);
83 76
84 sdmmc.read_block(block_idx, &mut block).await.unwrap(); 77 storage.read_block(block_idx, &mut block).await.unwrap();
85 info!("Read: {=[u8]:X}...{=[u8]:X}", block[..8], block[512 - 8..]); 78 info!("Read: {=[u8]:X}...{=[u8]:X}", block[..8], block[512 - 8..]);
86 79
87 if !ALLOW_WRITES { 80 if !ALLOW_WRITES {
@@ -91,17 +84,17 @@ async fn main(_spawner: Spawner) {
91 84
92 info!("Filling block with 0x55"); 85 info!("Filling block with 0x55");
93 block.fill(0x55); 86 block.fill(0x55);
94 sdmmc.write_block(block_idx, &block).await.unwrap(); 87 storage.write_block(block_idx, &block).await.unwrap();
95 info!("Write done"); 88 info!("Write done");
96 89
97 sdmmc.read_block(block_idx, &mut block).await.unwrap(); 90 storage.read_block(block_idx, &mut block).await.unwrap();
98 info!("Read: {=[u8]:X}...{=[u8]:X}", block[..8], block[512 - 8..]); 91 info!("Read: {=[u8]:X}...{=[u8]:X}", block[..8], block[512 - 8..]);
99 92
100 info!("Filling block with 0xAA"); 93 info!("Filling block with 0xAA");
101 block.fill(0xAA); 94 block.fill(0xAA);
102 sdmmc.write_block(block_idx, &block).await.unwrap(); 95 storage.write_block(block_idx, &block).await.unwrap();
103 info!("Write done"); 96 info!("Write done");
104 97
105 sdmmc.read_block(block_idx, &mut block).await.unwrap(); 98 storage.read_block(block_idx, &mut block).await.unwrap();
106 info!("Read: {=[u8]:X}...{=[u8]:X}", block[..8], block[512 - 8..]); 99 info!("Read: {=[u8]:X}...{=[u8]:X}", block[..8], block[512 - 8..]);
107} 100}