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: 512 bytes.
pub const DATA_BLOCK_512: usize = 512;
/// SD memory card wide data block size: 128 * 4 bus bytes.
pub const WIDE_DATA_BLOCK_512: usize = DATA_BLOCK_512 / WIDE_BUS_WIDTH;

data_block! {
    /// Represents a SD memory card 512-byte data block.
    DataBlock512: DATA_BLOCK_512,
    /// Represents a 512-byte wide data bus block.
    WideDataBlock512: WIDE_DATA_BLOCK_512,
}

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

    #[test]
    fn test_wide_data_block() {
        [DataBlock512::new(), DataBlock512::from_bytes([0xff; 512])]
            .into_iter()
            .zip([
                WideDataBlock512::new(),
                WideDataBlock512::from_data_lines(
                    [0xff; WIDE_DATA_BLOCK_512],
                    [0xff; WIDE_DATA_BLOCK_512],
                    [0xff; WIDE_DATA_BLOCK_512],
                    [0xff; WIDE_DATA_BLOCK_512],
                ),
            ])
            .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);
            });
    }
}