基于实际调试经验整理,适用于 ESP32-S3(如 ESP32-S3-WROOM-1)+ SPI 模式 SD 卡
一、软件(程序)要点
1. 使用 FSPI(推荐)
ESP32-S3 推荐使用 FSPI:
SPIClass spi(FSPI);
spi.begin(SCLK, MISO, MOSI, CS);2. 显式指定 SPI 引脚
不要使用默认 SPI:
spi.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS);3. 控制 SPI 频率(非常关键)
初始化阶段建议低速:
SD.begin(SD_CS, spi, 100000); // 100kHz稳定后可提高:
SD.begin(SD_CS, spi, 4000000); // 4MHzSD卡的不能一味追求过低SPI,比如真实录音有 32 KB/s(16kHz16bit1ch),则当需要获得音频数据时,初始化速率最好在1MHz~4MHz(SD的SPI最大不要超过4MHz)
4. CS 引脚初始化
pinMode(SD_CS, OUTPUT);
digitalWrite(SD_CS, HIGH);
delay(10);避免启动阶段误触发 SD 卡
二、硬件设计要点
1. SPI 引脚连接关系
2. 上拉电阻(关键)
必须加:
CMD(MOSI) → 10K 上拉
DAT0(MISO) → 10K 上拉
DAT3(CS) → 10K 上拉
DAT1、DAT2 → 建议加 10K 上拉(即使不用)
❌ 不建议:
CLK 加上拉(会影响边沿)
3. 电源要求
使用 3.3V 供电
电源稳定(建议加 10uF + 0.1uF)
4. 常见硬件错误
SD 卡座方向看反(顶视图 / 底视图)
CS 没接到 DAT3
MOSI/MISO 接反
DAT1/DAT2 悬空
三、SD 卡格式(最重要)
❗ 必须满足:
MBR 分区表
FAT32 文件系统
❌ 不支持:
GPT 分区(会报:No valid FAT volume)
exFAT
NTFS
正确格式化步骤(Windows)
diskpart
list disk
select disk X
clean
convert mbr
create partition primary
format fs=fat32 unit=32768 quick
assign
exit关键点:
必须
clean必须
convert mbr推荐
unit=32768
四、典型错误与对应原因
五、调试方法
1. 逻辑分析仪判断
正常流程:
CMD0 → 返回 0x01
CMD8 → 返回 0x01 + 数据
ACMD41 → 最终返回 0x00
CMD17 → 成功读扇区
2. 判断 SPI 是否正常
六、最终总结
ESP32 读取 SD 卡成功的三大核心:
1️⃣ 软件
使用 FSPI
正确 SPI 初始化
控制频率(要符合使用频率,不能过低或过高)
2️⃣ 硬件
正确接线
正确上拉(尤其 DAT1/DAT2)
CLK 不要上拉
3️⃣ SD 卡(最关键)
必须是:MBR + FAT32
七、一句话结论
SPI 正常 ≠ 能读文件,真正决定成败的是 SD 卡的分区结构。