diff options
| author | xoviat <[email protected]> | 2025-12-10 01:39:17 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-10 01:39:17 +0000 |
| commit | b1798e14d202a28ade6b9f2e985d4aaa0ad7c758 (patch) | |
| tree | ef69a8d6fc5bd1be2acca11f70b355e0d5d5a854 /examples | |
| parent | cf069b3e4e6a02660893ef8014e4ab69df6d46e0 (diff) | |
| parent | c5c7a2143b15530b0c8f08d1dd6e24a6985318f9 (diff) | |
Merge pull request #5018 from xoviat/sdio
stm32: refactor sdmmc module
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/stm32f4/src/bin/sdmmc.rs | 35 | ||||
| -rw-r--r-- | examples/stm32f7/src/bin/sdmmc.rs | 12 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/sdmmc.rs | 14 |
3 files changed, 30 insertions, 31 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 | ||
| 4 | use defmt::*; | 4 | use defmt::*; |
| 5 | use embassy_executor::Spawner; | 5 | use embassy_executor::Spawner; |
| 6 | use embassy_stm32::sdmmc::{DataBlock, Sdmmc}; | 6 | use embassy_stm32::sdmmc::{CmdBlock, DataBlock, Sdmmc, StorageDevice}; |
| 7 | use embassy_stm32::time::{Hertz, mhz}; | 7 | use embassy_stm32::time::{Hertz, mhz}; |
| 8 | use embassy_stm32::{Config, bind_interrupts, peripherals, sdmmc}; | 8 | use embassy_stm32::{Config, bind_interrupts, peripherals, sdmmc}; |
| 9 | use {defmt_rtt as _, panic_probe as _}; | 9 | use {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 | } |
diff --git a/examples/stm32f7/src/bin/sdmmc.rs b/examples/stm32f7/src/bin/sdmmc.rs index 8809b5d0c..0dd4dd6f3 100644 --- a/examples/stm32f7/src/bin/sdmmc.rs +++ b/examples/stm32f7/src/bin/sdmmc.rs | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | use defmt::*; | 4 | use defmt::*; |
| 5 | use embassy_executor::Spawner; | 5 | use embassy_executor::Spawner; |
| 6 | use embassy_stm32::sdmmc::Sdmmc; | 6 | use embassy_stm32::sdmmc::{CmdBlock, Sdmmc, StorageDevice}; |
| 7 | use embassy_stm32::time::{Hertz, mhz}; | 7 | use embassy_stm32::time::{Hertz, mhz}; |
| 8 | use embassy_stm32::{Config, bind_interrupts, peripherals, sdmmc}; | 8 | use embassy_stm32::{Config, bind_interrupts, peripherals, sdmmc}; |
| 9 | use {defmt_rtt as _, panic_probe as _}; | 9 | use {defmt_rtt as _, panic_probe as _}; |
| @@ -54,9 +54,13 @@ async fn main(_spawner: Spawner) { | |||
| 54 | // Should print 400kHz for initialization | 54 | // Should print 400kHz for initialization |
| 55 | info!("Configured clock: {}", sdmmc.clock().0); | 55 | info!("Configured clock: {}", sdmmc.clock().0); |
| 56 | 56 | ||
| 57 | unwrap!(sdmmc.init_sd_card(mhz(25)).await); | 57 | let mut cmd_block = CmdBlock::new(); |
| 58 | 58 | ||
| 59 | let card = unwrap!(sdmmc.card()); | 59 | let storage = StorageDevice::new_sd_card(&mut sdmmc, &mut cmd_block, mhz(25)) |
| 60 | .await | ||
| 61 | .unwrap(); | ||
| 60 | 62 | ||
| 61 | info!("Card: {:#?}", Debug2Format(card)); | 63 | let card = storage.card(); |
| 64 | |||
| 65 | info!("Card: {:#?}", Debug2Format(&card)); | ||
| 62 | } | 66 | } |
diff --git a/examples/stm32h7/src/bin/sdmmc.rs b/examples/stm32h7/src/bin/sdmmc.rs index 4977fec79..548d0bd09 100644 --- a/examples/stm32h7/src/bin/sdmmc.rs +++ b/examples/stm32h7/src/bin/sdmmc.rs | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | use defmt::*; | 4 | use defmt::*; |
| 5 | use embassy_executor::Spawner; | 5 | use embassy_executor::Spawner; |
| 6 | use embassy_stm32::sdmmc::Sdmmc; | 6 | use embassy_stm32::sdmmc::{CmdBlock, Sdmmc, StorageDevice}; |
| 7 | use embassy_stm32::time::mhz; | 7 | use embassy_stm32::time::mhz; |
| 8 | use embassy_stm32::{Config, bind_interrupts, peripherals, sdmmc}; | 8 | use embassy_stm32::{Config, bind_interrupts, peripherals, sdmmc}; |
| 9 | use {defmt_rtt as _, panic_probe as _}; | 9 | use {defmt_rtt as _, panic_probe as _}; |
| @@ -13,7 +13,7 @@ bind_interrupts!(struct Irqs { | |||
| 13 | }); | 13 | }); |
| 14 | 14 | ||
| 15 | #[embassy_executor::main] | 15 | #[embassy_executor::main] |
| 16 | async fn main(_spawner: Spawner) -> ! { | 16 | async fn main(_spawner: Spawner) { |
| 17 | let mut config = Config::default(); | 17 | let mut config = Config::default(); |
| 18 | { | 18 | { |
| 19 | use embassy_stm32::rcc::*; | 19 | use embassy_stm32::rcc::*; |
| @@ -53,11 +53,13 @@ async fn main(_spawner: Spawner) -> ! { | |||
| 53 | // Should print 400kHz for initialization | 53 | // Should print 400kHz for initialization |
| 54 | info!("Configured clock: {}", sdmmc.clock().0); | 54 | info!("Configured clock: {}", sdmmc.clock().0); |
| 55 | 55 | ||
| 56 | unwrap!(sdmmc.init_sd_card(mhz(25)).await); | 56 | let mut cmd_block = CmdBlock::new(); |
| 57 | 57 | ||
| 58 | let card = unwrap!(sdmmc.card()); | 58 | let storage = StorageDevice::new_sd_card(&mut sdmmc, &mut cmd_block, mhz(25)) |
| 59 | .await | ||
| 60 | .unwrap(); | ||
| 59 | 61 | ||
| 60 | info!("Card: {:#?}", Debug2Format(card)); | 62 | let card = storage.card(); |
| 61 | 63 | ||
| 62 | loop {} | 64 | info!("Card: {:#?}", Debug2Format(&card)); |
| 63 | } | 65 | } |
