少走弯路,ESP32 使用Micro SD(TF)的经验说明

看了无数资料,各种折腾了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
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值