看了无数资料,各种折腾了4-5天后还是没有折腾通ESP32 通过1bit sdmmc方式访问TF卡,经常报错如下:
E (6054) sdmmc_periph: sdmmc_host_clock_update_command(200): sdmmc_host_start_command returned 0x107
E (7055) sdmmc_periph: sdmmc_host_clock_update_command(200): sdmmc_host_start_command returned 0x107
E (7055) sdmmc_req: handle_idle_state_events unhandled: 00001000 00000000
E (7059) sdmmc_req: handle_idle_state_events unhandled: 00001000 00000000
E (11065) sdmmc_periph: sdmmc_host_clock_update_command(200): sdmmc_host_start_command returned 0x107
E (11066) sdmmc_common: sdmmc_init_ocr: send_op_cond (1) returned 0x107
E (11070) vfs_fat_sdmmc: sdmmc_card_init failed (0x107).
通过关键信息:
sdmmc_periph: sdmmc_host_clock_update_command(200): sdmmc_host_start_command returned 0x107
去各种搜索,各种尝试始终没有答案。
如果你看到这里,别急,后面会有答案
我是为了使用TF卡,自己打了一块pcb板
最初看网上的资料说D0,D1,D2,D3,CMD 这些都需要接上拉10K的电阻, CLK不需要接
出于保险,CLK设计了电阻位,最初没有放上电阻
esp32 对于tf卡的访问有三种模式:
4线SDMMC
1线SDMMC
SPI访问
4线访问由于端口冲突需要Setup中delay后再接入数据线
void setup()
{
Serial.begin(115200);
Serial.printf("\r\n开始SDMMC读取.");
delay(7000);
if (!SD_MMC.begin())
{
Serial.printf("\n SDMMC模式失败");
return;
}
Serial.printf("\n启动成功");
uint8_t cardType = SD_MMC.cardType();
if (cardType == CARD_NONE) {
Serial.println("No SD_MMC card attached");
return;
}
Serial.print("SD_MMC Card Type: ");
if (cardType == CARD_MMC) {
Serial.println("MMC");
} else if (cardType == CARD_SD) {
Serial.println("SDSC");
} else if (cardType == CARD_SDHC) {
Serial.println("SDHC");
} else {
Serial.println("UNKNOWN");
}
Serial.printf("Total space: %lluMB\n", SD_MMC.totalBytes() / (1024 * 1024));
Serial.printf("Used space: %lluMB\n", SD_MMC.usedBytes() / (1024 * 1024));
SD_MMC.end();
}
除开D1,D2,D3不用接外1线SDMMC的访问大不同就是中间那句:
if (!SD_MMC.begin("/sdcard",true))
代码就是这么简单,但是无论怎么都是报错:
E (6054) sdmmc_periph: sdmmc_host_clock_update_command(200): sdmmc_host_start_command returned 0x107
E (7055) sdmmc_periph: sdmmc_host_clock_update_command(200): sdmmc_host_start_command returned 0x107
E (7055) sdmmc_req: handle_idle_state_events unhandled: 00001000 00000000
E (7059) sdmmc_req: handle_idle_state_events unhandled: 00001000 00000000
E (11065) sdmmc_periph: sdmmc_host_clock_upda