sdmmc-core 0.5.0

SD/MMC core data structures and algorithms
Documentation
use super::WIDE_BUS_WIDTH;
use crate::data_block;

/// SD memory card data block size: 4096 bytes.
pub const DATA_BLOCK_4096: usize = 4096;
/// SD memory card wide data block size: 1024 * 4 bus bytes.
pub const WIDE_DATA_BLOCK_4096: usize = DATA_BLOCK_4096 / WIDE_BUS_WIDTH;

data_block! {
    /// Represents a SD memory card 4096-byte data block.
    DataBlock4K: DATA_BLOCK_4096,
    /// Represents a 4096-byte wide data bus block.
    WideDataBlock4K: WIDE_DATA_BLOCK_4096,
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_wide_data_block() {
        [
            DataBlock4K::new(),
            DataBlock4K::from_bytes([0xff; DATA_BLOCK_4096]),
        ]
        .into_iter()
        .zip([
            WideDataBlock4K::new(),
            WideDataBlock4K::from_data_lines(
                [0xff; WIDE_DATA_BLOCK_4096],
                [0xff; WIDE_DATA_BLOCK_4096],
                [0xff; WIDE_DATA_BLOCK_4096],
                [0xff; WIDE_DATA_BLOCK_4096],
            ),
        ])
        .for_each(|(data_block, exp_wide_data_block)| {
            assert_eq!(data_block.wide_data(), exp_wide_data_block);
            assert_eq!(exp_wide_data_block.decode(), data_block);
        });
    }
}