#driver #sdmmc #async #spi #system #std #transfer

无 std async-embedded-sdmmc

支持异步的嵌入式 sdmmc 驱动

3 个版本

0.1.3 2023 年 2 月 12 日
0.1.2 2023 年 1 月 25 日
0.1.1 2023 年 1 月 20 日
0.1.0 2021 年 12 月 15 日

嵌入式开发 中排名 736

每月下载量 22

MIT/Apache

34KB
947 代码行

sdmmc

一个主要关注嵌入式系统,支持 no_stdasync 的 sdmmc 实现

使用此 crate

假设您已经有一个实现 sdmmc::spi::TransferSPI 结构

let mut bus = sdmmc::bus::linux::spi(&args.spi, args.cs).map_err(|e| format!("{:?}", e))?;
let card = bus.init(Delay).await.map_err(|e| format!("{:?}", e))?;
debug!("Card: {:?}", card);
let mut sd = SD::init(bus, card).await.map_err(|e| format!("{:?}", e))?;
let size = Size::from_bytes(sd.num_blocks() as u64 * sd.block_size() as u64);
debug!("Size {}", size);

let options = SpidevOptions { max_speed_hz: Some(2_000_000), ..Default::default() };
sd.bus(|bus| bus.spi(|spi| spi.0.configure(&options))).unwrap();

let mut buffer = [0u8; 512];
sd.read(0, slice::from_mut(&mut buffer).iter_mut()).await.map_err(|e| format!("{:?}", e))?;
let mbr = MasterBootRecord::from_bytes(&buffer).map_err(|e| format!("{:?}", e))?;
for partition in mbr.partition_table_entries().iter() {
    println!("{:?}", partition);
}
Ok(())

功能

  • async

    启用异步支持

  • async-trait

    使用 async-trait,否则将启用夜间不稳定 async_fn_in_trait 功能

  • embedded-hal-async

    启用 embedded-hal-async 支持

  • std

    使用 std 库

  • linux-spi

    启用 linux SPI 支持

  • log-max-level-off

    编译时禁用日志记录

依赖项

~1.3–2MB
~44K SLoC