TF卡(SD卡)操作 - SPI方式¶
介绍¶
SD卡介绍
本很多单片机系统都需要大容量存储设备,以存储数据。目前常用的有U盘,FLASH芯片,SD卡等。他们各有优点,综合比较,最适合单片机系统的莫过于SD卡了,它不仅容量可以做到很大(32GB以上),支持SPI/SDIO驱动,而且有多种体积的尺寸可供选择(标准的SD卡尺寸及Micro SD卡尺寸等),能满足不同应用的要求。
只需要少数几个IO口即可外扩一个高达32GB或以上的外部存储器,容量从几十M到几十G选择范围很大,更换也很方便,编程也简单,是单片机大容量外部存储器的首选。
正点原子ESP32-S3最小系统板使用的接口是Micro SD卡接口,卡座带自锁功能,SD SPI主机驱动程序基于SPI Master Driver实现。借助SPI主控驱动程序,SD卡及其他SPI设备可以共享同一SPI总线。SPI主机驱动程序将处理来自不同任务的独占访问。
Info
一个完整的 SD卡操作过程是:主机(单片机等)发起“命令”,SD卡根据命令的内容决定是否发送响应信息及数据等,如果是数据读/写操作,主机还需要发送停止读/写数据的命令来结束本次操作,这意味着主机发起命令指令后,SD 卡可以没有响应、数据等过程,这取决于命令的含义。
卡模式
SD卡有两种有效操作模式:“卡识别模式”和“数据传输模式”。根据操作方式不同,分为SD模式和SPI模式。正点原子ESP32-S3最小系统板使用的是SPI模式。
关键步骤¶
- SD卡初始化 (SPI模式/SDIO模式)
- SD卡读写数据
Warning
ESP32的SDIO驱动模式和SPI驱动模式不兼容,只能选择一种驱动模式。
用例¶
本章实验功能简介:经过一系列初始化之后,通过一个 while 循环以 SD 卡初始化为条件,以检测 SD 卡是否初始化成功,若初始化 SD 卡成功,则会通过串口或者 VSCode 终端输出 SD卡的相关参数,并在 LCD 上显示 SD 卡的总容量以及剩余容量。此时 LED 闪烁,表示程序正在运行。
涉及资源¶
- LED 灯 LED -IO0
- 0.96 寸 LCD
- SD CS-IO2 SCK-IO12 MOSI-IO11 MISO-IO13
接线图¶
本章实验使用 SPI 接口与 SD 卡进行连接,DNESP32S3M 最小系统板板载了一个 Micro SD卡座用于连接 SD 卡,SD 卡与 ESP32-S3 的连接原理图,如下图所示。

ESP-IDF API¶
要使用SD卡相关功能,首先要导入需要的文件。
#include "driver/sdspi_host.h"
#include "driver/spi_common.h"
#include "sdmmc_cmd.h"
#include "driver/sdmmc_host.h"
#include "spi.h"
关键函数¶
挂载SD卡¶
esp_err_t esp_vfs_fat_sdspi_mount(const char* base_path,
const sdmmc_host_t* host_config_input,
const sdspi_device_config_t* slot_config,
const esp_vfs_fat_mount_config_t*mount_config,
sdmmc_card_t** out_card);
参数说明:
| 参数 | 说明 |
|---|---|
| base_path | 挂载点,应该注册分区的路径(例如“/sdcard”) |
| host_config_input | SDMMC主机配置,指向描述 SDMMC 主机的结构的指针。此结构可以使用 |
| SDSPI_HOST_DEFAULT 宏初始化。 | |
| slot_config | SD卡配置,指向具有插槽配置的结构的指针,对于 SPI 外设,将指针传递到使用 sdspi_device_config_DEFAULT 初始化的sdspi_device_config_t 结构。 |
| mount_config | 挂载配置,指向 esp_vfs_fat_mount_config_t 结构的指针,用于配置 FAT 文件系统的挂载选项。 |
| out_card | 如果不是 NULL,指向卡片信息结构的指针将通过此参数 |
| 返回。 |
返回值说明:
| 返回值 | 说明 |
|---|---|
| ESP_OK | 成功 |
| ESP_ERR_INVALID_STATE | 无效状态,如果已经调用了 esp_vfs_fat_sdmmc_mount |
| ESP_ERR_NO_MEM | 如果无法分配内存 |
| ESP_FAIL | 如果分区无法安装,则来自 SDMMC 或 SPI 驱动程序、SDMMC 协议或 FATFS 驱动程序的其他错误代码 |
取消挂载SD卡¶
参数说明:
| 参数 | 说明 |
|---|---|
| base_path | 挂载点,应该注册分区的路径(例如“/sdcard”) |
| card | SD / MMC 卡结构 |
返回值说明:
| 返回值 | 说明 |
|---|---|
| ESP_OK | 成功 |
| ESP_ERR_INVALID_ARG | 如果 card 参数未注册 |
| ESP_ERR_INVALID_STATE | 如果尚未调用 esp_vfs_fat_sdmmc_mount |
依赖关系¶
