Skip to main content

Crate sdmmc_protocol

Crate sdmmc_protocol 

Source
Expand description

no_std SD/MMC protocol building blocks for embedded systems.

This crate provides protocol-level types and driver skeletons for SD, MMC and SDIO cards. It is transport-agnostic at the trait level and brings its own SPI-mode driver plus an SDIO host-controller abstraction.

§What you get

§Cargo features

FeatureDefaultPurpose
spiyesEnables spi::SpiTransport and spi::SpiSdmmc.
sdionoEnables the host trait and submit/poll data-command contract.

Diagnostic output goes through the log crate; configure a logger in your application to capture it.

§Example

use embedded_hal::delay::DelayNs;
use sdmmc_protocol::{
    Error,
    spi::{SpiSdmmc, SpiTransport},
};

struct MySpi;

impl SpiTransport for MySpi {
    fn transfer_byte(&mut self, byte: u8) -> Result<u8, Error> {
    }
}

fn boot<D: DelayNs>(spi: MySpi, delay: D) -> Result<(), Error> {
    let mut card = SpiSdmmc::new(spi, delay);
    let _info = card.init()?;
    let mut block = [0u8; 512];
    card.read_block(0, &mut block)?;
    Ok(())
}

§Maturity

The SPI path has protocol-level unit tests and basic block read/write support. The SDIO path has been validated end-to-end against several host controller / SoC combinations through the dedicated host backends in this workspace:

Host crateSoC / controllerModeStatus
sdhci-hostRK3568 (dwcmshc)eMMC HS@52, FIFO/DMAOK
sdhci-hostRK3588 (dwcmshc)eMMC HS@52, FIFO/DMAOK
dwmmc-hostRK3568 SD (dw_mshc)SD HS, DMAOK
phytium-mci-hostPhytium MCISD HS, DMAOK

UHS-I / HS200 / HS400 paths exist in the state machine but have not yet been signed off on a real card + IO regulator combination. See drivers/blk/sdmmc-protocol/docs/REVIEW.md for the remaining roadmap.

§MSRV

Rust 1.85 (the first stable to ship edition 2024).

Re-exports§

pub use block::BlockBufferConfig;
pub use block::BlockPoll;
pub use block::BlockRequestId;
pub use block::BlockTransferDirection;
pub use block::BlockTransferMode;
pub use block::BlockTransferState;
pub use block::CommandPoll;
pub use block::CommandResponsePoll;
pub use block::DataCommandDirection;
pub use block::DataCommandPoll;
pub use block::DataCommandState;
pub use block::OperationPoll;
pub use cmd::Command;
pub use cmd::DataDirection;
pub use error::Error;
pub use error::ErrorContext;
pub use error::Phase;
pub use response::CidResponse;
pub use response::CsdResponse;
pub use response::Response;
pub use response::SwitchStatus;

Modules§

block
Block request state shared by SD/MMC host controller backends.
cmd
error
Error and diagnostic context types returned by drivers and parsers.
ext_csd
Extended CSD (EXT_CSD) register parsing for eMMC / MMC cards.
response
spi
SPI mode transport layer for SD/MMC cards