ESP32读取sd卡初始化失败
esp32吧
全部回复
仅看楼主
level 1
最近在研究怎么用ESP32读取sd卡的文件,开发板是ESP32c3-DevkitM-1,sd模块和sd卡都是拼多多上买的,sd卡是32g的,已经格式化成exFAT,sdfat应该是支持exFAT的,用vscode+platformio+arduino开发,代码是sdfat里面的例示,让ai给我翻译了一下。
但是一直初始化失败,把电源换成3.3V也还是一样,请大佬帮忙看看。
接线:
ESP32 sd模块
D5 - CS
D18 - SCK
D19 - MISO
D23 - MOSI
代码:
#include "SdFat.h"
#include <Arduino.h>
#include <SPI.h>
// 定义 SD 卡类型支持(FAT16/FAT32 和 exFAT)
#define SD_FAT_TYPE 3
// 选择最佳配置(优先使用 SDIO,否则使用 SPI)
#if defined(HAS_TEENSY_SDIO)
#define SD_CONFIG SdioConfig(FIFO_SDIO)
#elif defined(RP_CLK_GPIO)
#define SD_CONFIG SdioConfig(RP_CLK_GPIO, RP_CMD_GPIO, RP_DAT0_GPIO)
#else
#define SD_CONFIG SdSpiConfig(SS, SHARED_SPI, SD_SCK_MHZ(1))
#endif
SdFs sd; // 使用支持多文件系统的 SdFs
void setup() {
Serial.begin(115200);
while (!Serial) yield();
// 等待插入 SD 卡
Serial.println("请插入空白 SD 卡后输入任意字符开始");
while (!Serial.available()) yield();
if (!sd.begin(SD_CONFIG)) {
sd.initErrorHalt(&Serial);
}
// 创建文件并写入内容
if (!sd.open("Name1.txt", O_WRONLY | O_CREAT)) {
Serial.println("Name1.txt创建失败");
}
sd.println("Name1.txt的测试内容");
sd.close();
// 重命名文件并追加内容
if (!sd.rename("Name1.txt", "Name2.txt")) {
Serial.println("文件重命名失败");
}
if (!sd.open("Name2.txt", O_WRONLY | O_APPEND)) {
Serial.println("Name2.txt打开失败");
}
sd.println("Name2.txt的追加内容");
sd.close();
// 创建目录结构并写入文件
sd.mkdir("dir2");
sd.mkdir("dir2/DIR3");
if (!sd.open("dir2/DIR3/Name3.txt", O_WRONLY | O_CREAT)) {
Serial.println("Name3.txt创建失败");
}
sd.println("dir2/DIR3/Name3.txt的测试内容");
sd.close();
// 列出最终文件结构
Serial.println("最终文件列表:");
sd.ls(LS_R);
}
void loop() {}
2025年07月22日 05点07分 1
1