前言
在之前的 Flash 篇中介绍了使用 DFS 文件系统管理外置 Flash 芯片的存储空间,除此之外还有一种常见的外置存储设备即 SD 卡。本文基于 DFS 文件系统来管理 SD 卡。以 STM32F4 探索板为例,使用的 RT-Thread 驱动版本为 5.2.2。 关于 DFS 文件系统的详细介绍可参考相关文档,本文不再重复。
一、SD 卡概述
SD 卡(Secure Digital Memory Card)是一种基于闪存技术的便携式存储设备。主要分为以下两种规格:
- 标准 SD 卡:尺寸为 32mm×24mm×2.1mm,多用于相机等设备。
- microSD 卡:尺寸为 15mm×11mm×1mm,常用于手机、无人机等小型设备。
容量分类
- SDSC(标准容量):最大支持 2GB,使用 FAT16 文件系统。
- SDHC(高容量):容量范围为 4GB~32GB,使用 FAT32 文件系统。
- SDXC(扩展容量):容量范围为 64GB~2TB,使用 exFAT 文件系统。

SD 卡的接口主要有 SDIO 模式和 SPI 模式。下图是标准 SD 卡的两种模式的引脚定义。microSD 卡相比下少一个 VSS 引脚。

因为我们使用的是操作系统,可以不用太关注底层硬件架构。简单说明一下 SDIO 模式的通讯。
SDIO 模式使用 SD 总线协议,支持 4 位数据线(DAT0-DAT3)和 1 位命令线(CMD),理论传输速率更高(UHS-I 可达 104MB/s)。SPI 模式仅使用 1 位数据线(MOSI/MISO)和 1 位时钟线(SCK),协议更简单但速率较低(通常低于 25MB/s)。
SDIO 模式需要两个时钟:
- 卡时钟(SDIO_CK):每个时钟周期在命令和数据线上传输一位命令和数据。对于 SD 卡,这个频率可以在 0-25MHz 之间。
- SDIO 适配时钟(SDIOCLK):该时钟用于驱动 SDIO 适配器,来自 PLL48CK,一般是 48MHz,并分频后产生卡时钟(SDIO_CK)。
SDIO_CK 与 SDIOCLK 关系为:
其中 CLKDIV 是分频系数。
二、工程创建
2.1 CubeMX 配置
STM32F4 系列芯片具有 SDIO 模式的驱动引脚。
总共有五种模式:
- SD 1 bit:只使用 D0 这一根数据线,兼容性最好,速度最慢。
- SD 4 bits Wide bus:使用 D0~D3 共 4 根数据线并行传输,理论速度是 1 位模式的 4 倍,最常用的高速模式。
- MMC 1 bit:仅使用 D0 数据线,针对 MMC 卡。
- :使用 D0~D3 共 4 根数据线,适用于支持 4 位总线的 MMC 卡。







