[−][src]Crate sdio_sdhc
sdio_sdhc
You can drive sdhc card in your stm32f407 board, other stm32f4xx boards have no test. if you want to test other boards, you can edit library and feature:
stm32fxxx-hal = { version = "xxx", features = ["xxx"] }
first you need to init some GPIO, like this:
fn gpio_init( rcc: &mut stm32::RCC, gpioc: &mut stm32::GPIOC, gpiod: &mut stm32::GPIOD, ) { // gpioc gpiod enable rcc.ahb1enr.modify(|_r, w| w.gpiocen().set_bit().gpioden().set_bit()); gpioc.afrh.modify(|_r, w| w.afrh8().af12() .afrh9().af12() .afrh10().af12() .afrh11().af12() .afrh12().af12()); gpiod.afrl.modify(|_r, w| w.afrl2().af12()); gpioc.moder.modify(|_r, w| w.moder8().alternate() .moder9().alternate() .moder10().alternate() .moder11().alternate() .moder12().alternate()); gpiod.moder.modify(|_r, w| w.moder2().alternate()); gpioc.ospeedr.modify(|_r, w| w.ospeedr8().high_speed() .ospeedr9().high_speed() .ospeedr10().high_speed() .ospeedr11().high_speed() .ospeedr12().high_speed()); gpiod.ospeedr.modify(|_r, w| w.ospeedr2().high_speed()); gpioc.otyper.modify(|_r, w| w.ot8().push_pull() .ot9().push_pull() .ot10().push_pull() .ot11().push_pull() .ot12().push_pull()); gpiod.otyper.modify(|_r, w| w.ot2().push_pull()); gpioc.pupdr.modify(|_r, w| w.pupdr8().pull_up() .pupdr9().pull_up() .pupdr10().pull_up() .pupdr11().pull_up() .pupdr12().pull_up()); gpiod.pupdr.modify(|_r, w| w.pupdr2().pull_up()); }
then you can drive your sdhc card, and do some tests
let card = Card::init().unwrap(); writeln!(USART1, "{:#?}", card).unwrap(); card.erase(0, card.capacity).unwrap(); let buf = [1; 512 * 2]; card.write_multi_blocks(&buf, 0, 2).unwrap(); let mut buf = [0; 512 * 2]; card.read_multi_blocks(&mut buf, 0, 2).unwrap(); writeln!(USART1, "{:?}", &buf[0..buf.len()]).unwrap(); let buf = [2; 512]; card.write_block(&buf, 512).unwrap(); let mut buf = [0; 512]; card.read_block(&mut buf, 512).unwrap(); writeln!(USART1, "{:?}", &buf[0..buf.len()]).unwrap();
will print in your ttl like this:
Card { capacity: 3963617280, block_size: 512, rca: 1, } [1, 1, 1, .......] [2, 2, 2, .......]
How to support fat32 filesystem
You can add feature like this. Visit fat32 to check out usages for details
sdio_sdhc = { version = "0.2", features = ["filesystem"] }
Modules
sdcard | |
sdio_dma |