10个版本 (重大更新)

0.8.0 2024年7月12日
0.7.0 2024年2月9日
0.6.0 2023年10月20日
0.5.0 2023年5月22日
0.1.1 2018年12月23日

#27 in 嵌入式开发

Download history 349/week @ 2024-05-05 341/week @ 2024-05-12 349/week @ 2024-05-19 301/week @ 2024-05-26 458/week @ 2024-06-02 212/week @ 2024-06-09 204/week @ 2024-06-16 718/week @ 2024-06-23 1045/week @ 2024-06-30 263/week @ 2024-07-07 975/week @ 2024-07-14 489/week @ 2024-07-21 425/week @ 2024-07-28 692/week @ 2024-08-04 461/week @ 2024-08-11 1622/week @ 2024-08-18

3,252 每月下载量
用于 18 个包

MIT/Apache

265KB
5K SLoC

嵌入式SD/MMC crates.io 文档

此包旨在允许您在Rust嵌入式设备上像使用SdFat Arduino库一样轻松地读取/写入FAT格式SD卡上的文件。它是用纯Rust编写的,是#![no_std],并且不使用alloccollections来保持内存占用低。首先,它是为了可读性和简单性而不是性能而设计的。

使用此包

您需要某种实现BlockDevice特质的东西,它可以读取和写入来自您的卡的512字节块(或扇区)。如果您想在USB大容量存储上实现此功能,就没有理由这个包不能与USB闪存驱动器一起工作,但我们只提供了一个适用于通过SPI读取SD和SDHC卡的BlockDevice

// Build an SD Card interface out of an SPI device, a chip-select pin and the delay object
let sdcard = embedded_sdmmc::SdCard::new(sdmmc_spi, delay);
// Get the card size (this also triggers card initialisation because it's not been done yet)
println!("Card size is {} bytes", sdcard.num_bytes()?);
// Now let's look for volumes (also known as partitions) on our block device.
// To do this we need a Volume Manager. It will take ownership of the block device.
let mut volume_mgr = embedded_sdmmc::VolumeManager::new(sdcard, time_source);
// Try and access Volume 0 (i.e. the first partition).
// The volume object holds information about the filesystem on that volume.
let mut volume0 = volume_mgr.open_volume(embedded_sdmmc::VolumeIdx(0))?;
println!("Volume 0: {:?}", volume0);
// Open the root directory (mutably borrows from the volume).
let mut root_dir = volume0.open_root_dir()?;
// Open a file called "MY_FILE.TXT" in the root directory
// This mutably borrows the directory.
let mut my_file = root_dir.open_file_in_dir("MY_FILE.TXT", embedded_sdmmc::Mode::ReadOnly)?;
// Print the contents of the file, assuming it's in ISO-8859-1 encoding
while !my_file.is_eof() {
    let mut buffer = [0u8; 32];
    let num_read = my_file.read(&mut buffer)?;
    for b in &buffer[0..num_read] {
        print!("{}", *b as char);
    }
}

打开目录和文件

默认情况下,VolumeManager将初始化为最大4个打开目录、文件和卷。这可以通过指定MAX_DIRMAX_FILESMAX_VOLUMES泛型常量来自定义VolumeManager

// Create a volume manager with a maximum of 6 open directories, 12 open files, and 4 volumes (or partitions)
let mut cont: VolumeManager<_, _, 6, 12, 4> = VolumeManager::new_with_limits(block, time_source);

支持的功能

  • 从打开的目录以所有支持的方法打开文件
  • 打开任意数量的目录和文件
  • 从打开的文件中读取数据
  • 向打开的文件写入数据
  • 关闭文件
  • 删除文件
  • 迭代根目录
  • 迭代子目录
  • 通过defmt或通用日志接口记录(功能标志)。

无std使用

本存储库没有包含无标准使用示例,但是您可以查看以下示例

待办事项列表(欢迎提交PR!)

  • 创建新目录
  • 删除(空)目录
  • 处理MS-DOS /path/foo/bar.txt 风格的路径。

变更日志

变更日志已移至 CHANGELOG.md

许可证

根据您的选择,许可如下

版权声明存储在 NOTICE 文件中。

贡献

除非您明确声明,否则您根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,应按上述方式双重许可,不附加任何额外条款或条件。

依赖项

~550–780KB
~16K SLoC