embassy-stm32

Crates

git

Versions

stm32l462re

Flavors

embassy_stm32::sdmmc

Struct Sdmmc

Source
pub struct Sdmmc<'d, T: Instance, Dma: SdmmcDma<T> = NoDma> { /* private fields */ }
Expand description

Sdmmc device

Implementations§

Source§

impl<'d, T: Instance, Dma: SdmmcDma<T>> Sdmmc<'d, T, Dma>

Source

pub fn new_1bit( sdmmc: impl Peripheral<P = T> + 'd, _irq: impl Binding<T::Interrupt, InterruptHandler<T>> + 'd, dma: impl Peripheral<P = Dma> + 'd, clk: impl Peripheral<P = impl CkPin<T>> + 'd, cmd: impl Peripheral<P = impl CmdPin<T>> + 'd, d0: impl Peripheral<P = impl D0Pin<T>> + 'd, config: Config, ) -> Self

Create a new SDMMC driver, with 1 data lane.

Source

pub fn new_4bit( sdmmc: impl Peripheral<P = T> + 'd, _irq: impl Binding<T::Interrupt, InterruptHandler<T>> + 'd, dma: impl Peripheral<P = Dma> + 'd, clk: impl Peripheral<P = impl CkPin<T>> + 'd, cmd: impl Peripheral<P = impl CmdPin<T>> + 'd, d0: impl Peripheral<P = impl D0Pin<T>> + 'd, d1: impl Peripheral<P = impl D1Pin<T>> + 'd, d2: impl Peripheral<P = impl D2Pin<T>> + 'd, d3: impl Peripheral<P = impl D3Pin<T>> + 'd, config: Config, ) -> Self

Create a new SDMMC driver, with 4 data lanes.

Source§

impl<'d, T: Instance, Dma: SdmmcDma<T> + 'd> Sdmmc<'d, T, Dma>

Source

pub async fn init_card(&mut self, freq: Hertz) -> Result<(), Error>

Initializes card (if present) and sets the bus at the specified frequency.

Source

pub async fn read_block( &mut self, block_idx: u32, buffer: &mut DataBlock, ) -> Result<(), Error>

Read a data block.

Source

pub async fn write_block( &mut self, block_idx: u32, buffer: &DataBlock, ) -> Result<(), Error>

Write a data block.

Source

pub fn card(&self) -> Result<&Card, Error>

Get a reference to the initialized card

§Errors

Returns Error::NoCard if init_card has not previously succeeded

Source

pub fn clock(&self) -> Hertz

Get the current SDMMC bus clock

Source

pub fn set_cmd_block(&mut self, cmd_block: &'d mut CmdBlock)

Set a specific cmd buffer rather than using the default stack allocated one. This is required if stack RAM cannot be used with DMA and usually manifests itself as an indefinite wait on a dma transfer because the dma peripheral cannot access the memory.

Trait Implementations§

Source§

impl<'d, T: Instance, Dma: SdmmcDma<T> + 'd> BlockDevice<512> for Sdmmc<'d, T, Dma>

Source§

type Error = Error

The error type for the BlockDevice implementation.
Source§

type Align = A4

The alignment requirements of the block buffers.
Source§

async fn read( &mut self, block_address: u32, buf: &mut [Aligned<Self::Align, [u8; 512]>], ) -> Result<(), Self::Error>

Read one or more blocks at the given block address.
Source§

async fn write( &mut self, block_address: u32, buf: &[Aligned<Self::Align, [u8; 512]>], ) -> Result<(), Self::Error>

Write one or more blocks at the given block address.
Source§

async fn size(&mut self) -> Result<u64, Self::Error>

Report the size of the block device in bytes.
Source§

impl<'d, T: Instance, Dma: SdmmcDma<T> + 'd> Drop for Sdmmc<'d, T, Dma>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'d, T, Dma> Freeze for Sdmmc<'d, T, Dma>
where T: Freeze, Dma: Freeze,

§

impl<'d, T, Dma> RefUnwindSafe for Sdmmc<'d, T, Dma>

§

impl<'d, T, Dma> Send for Sdmmc<'d, T, Dma>
where T: Send, Dma: Send,

§

impl<'d, T, Dma> Sync for Sdmmc<'d, T, Dma>
where T: Sync, Dma: Sync,

§

impl<'d, T, Dma> Unpin for Sdmmc<'d, T, Dma>
where T: Unpin, Dma: Unpin,

§

impl<'d, T, Dma = NoDma> !UnwindSafe for Sdmmc<'d, T, Dma>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.