Here is the ESP-IDF code. I'm using the latest master branch.
Code: Select all
#define SDCARD_MOUNT_CONFIG_DEFAULT() {\
.format_if_mount_failed = false,\
.max_files = 10,\
.allocation_unit_size = SDCARD_ALLOCATION_UNIT_SIZE\
}
static void sdcard_mount_finish(esp_err_t err) {
if (err == ESP_OK) {
ESP_LOGI(TAG, "SD card mounted at %s", sdcard_mount_point);
sdmmc_card_print_info(stdout, m_card);
/* Print free memory size info */
printf("Free: %lluMB\n", sdcard_get_free_bytes() / (1 << 20));
} else {
ESP_LOGW(TAG, "sdcard_mount failed (%s)",
esp_err_to_name(err));
}
}
esp_err_t sdcard_mount_spi(int miso_gpio, int mosi_gpio, int clk_gpio, int cs_gpio) {
ESP_LOGI(TAG, "Mounting SD SPI: MISO %d, MOSI %d, CLK %d, CS %d", miso_gpio, mosi_gpio, clk_gpio, cs_gpio);
esp_vfs_fat_sdmmc_mount_config_t mount_config = SDCARD_MOUNT_CONFIG_DEFAULT();
sdmmc_host_t host = SDSPI_HOST_DEFAULT();
host.slot = (spi_host_device_t) host.slot;
spi_bus_config_t bus_cfg = {
.mosi_io_num = mosi_gpio,
.miso_io_num = miso_gpio,
.sclk_io_num = clk_gpio,
.quadwp_io_num = -1,
.quadhd_io_num = -1,
.max_transfer_sz = 4092,
};
ESP_ERROR_CHECK(spi_bus_initialize(host.slot, &bus_cfg, SPI_DMA_CH_AUTO));
// This initializes the slot without card detect (CD) and write protect (WP) signals.
// Modify slot_config.gpio_cd and slot_config.gpio_wp if your board has these signals.
sdspi_device_config_t slot_config = SDSPI_DEVICE_CONFIG_DEFAULT();
slot_config.gpio_cs = (gpio_num_t) cs_gpio;
slot_config.host_id = host.slot;
esp_err_t err = esp_vfs_fat_sdspi_mount(sdcard_mount_point, &host,
&slot_config, &mount_config, &m_card);
sdcard_mount_finish(err);
return err;
}
- Embedded SD slot. Works fine
Code: Select all
I (00:00:00.624) sdcard: Mounting SD SPI: MISO 2, MOSI 15, CLK 14, CS 13 D (00:00:00.629) spi: SPI2 use gpio matrix. D (00:00:00.633) sdspi_host: sdspi_host_init_device: SPI2 cs=13 cd=-1 wp=-1 D (912) intr_alloc: Connected src 30 to int 13 (cpu 0) D (00:00:00.645) spi_hal: eff: 400, limit: 26666k(/2), 0 dummy, -1 delay D (00:00:00.652) spi_master: SPI2: New device added to CS5, effective clock: 400kHz I (00:00:00.660) gpio: GPIO[13]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 D (00:00:00.670) spi_master: device5 locked the bus D (00:00:00.715) sdspi_host: poll_busy: timeout D (00:00:00.715) spi_master: device5 release bus D (00:00:00.716) spi_master: device5 locked the bus D (00:00:00.758) sdspi_host: poll_busy: timeout D (00:00:00.759) spi_master: device5 release bus D (00:00:00.776) spi_master: device5 locked the bus D (00:00:00.816) sdspi_host: poll_busy: timeout D (00:00:00.816) spi_master: device5 release bus D (00:00:00.836) spi_master: device5 locked the bus D (00:00:00.876) sdspi_host: poll_busy: timeout D (00:00:00.876) spi_master: device5 release bus D (00:00:00.877) sdmmc_sd: SDHC/SDXC card D (00:00:00.878) spi_master: device5 locked the bus D (00:00:00.923) sdspi_host: poll_busy: timeout D (00:00:00.924) spi_master: device5 release bus I (00:00:00.924) sdspi_transaction: cmd=5, R1 response: command not supported D (00:00:00.929) sdmmc_cmd: cmd=5, sdmmc_req_run returned 0x106 D (00:00:00.935) sdmmc_io: sdmmc_init_io: io_send_op_cond (1) returned 0x106; not IO card D (00:00:00.943) spi_master: device5 locked the bus D (00:00:00.988) sdspi_host: poll_busy: timeout D (00:00:00.989) spi_master: device5 release bus D (00:00:00.989) sdspi_host: data CRC set=1 D (00:00:00.991) spi_master: device5 locked the bus D (00:00:01.036) sdspi_host: poll_busy: timeout D (00:00:01.036) spi_master: device5 release bus D (00:00:01.036) spi_master: device5 locked the bus D (00:00:01.079) sdspi_host: poll_busy: timeout D (00:00:01.079) spi_master: device5 release bus D (00:00:01.086) spi_master: device5 locked the bus D (00:00:01.126) sdspi_host: poll_busy: timeout D (00:00:01.126) spi_master: device5 release bus D (00:00:01.126) spi_master: device5 locked the bus D (00:00:01.169) sdspi_host: poll_busy: timeout D (00:00:01.169) spi_master: device5 release bus D (00:00:01.170) spi_master: device5 locked the bus D (00:00:01.212) sdspi_host: poll_busy: timeout D (00:00:01.213) spi_master: device5 release bus D (00:00:01.213) sdmmc_common: host_ocr=0x40ff8000 card_ocr=0xc0ff8000 D (00:00:01.217) sdmmc_common: sdmmc_card_init: host_ocr=40ff8000, card_ocr=c0ff8000 D (00:00:01.225) sdmmc_init: sdmmc_card_init: card type is SD D (00:00:01.231) spi_master: device5 locked the bus D (00:00:01.276) sdspi_host: poll_busy: timeout D (00:00:01.277) spi_master: device5 release bus D (00:00:01.277) spi_master: device5 locked the bus D (00:00:01.319) sdspi_host: poll_busy: timeout D (00:00:01.320) spi_master: device5 release bus D (00:00:01.320) spi_master: device5 locked the bus D (00:00:01.362) sdspi_host: poll_busy: timeout D (00:00:01.363) spi_master: device5 release bus D (00:00:01.363) spi_master: device5 locked the bus D (00:00:01.405) sdspi_host: poll_busy: timeout D (00:00:01.406) spi_master: device5 release bus D (00:00:01.406) spi_master: device5 locked the bus D (00:00:01.448) sdspi_host: poll_busy: timeout D (00:00:01.449) spi_master: device5 release bus D (00:00:01.449) spi_master: device5 locked the bus D (00:00:01.492) sdspi_host: poll_busy: timeout D (00:00:01.494) spi_master: device5 release bus D (00:00:01.494) sdspi_host: Setting card clock to 20000 kHz D (00:00:01.496) spi_hal: eff: 20000, limit: 26666k(/2), 0 dummy, 0 delay D (00:00:01.502) spi_master: SPI2: New device added to CS5, effective clock: 20000kHz D (00:00:01.510) spi_master: device5 locked the bus D (00:00:01.555) sdspi_host: poll_busy: timeout D (00:00:01.555) spi_master: device5 release bus D (00:00:01.556) spi_master: device5 locked the bus D (00:00:01.599) sdspi_host: poll_busy: timeout D (00:00:01.599) spi_master: device5 release bus D (00:00:01.599) vfs_fat_sdmmc: using pdrv=0 D (00:00:01.601) spi_master: device5 locked the bus D (00:00:01.646) sdspi_host: poll_busy: timeout D (00:00:01.646) spi_master: device5 release bus D (00:00:01.646) spi_master: device5 locked the bus D (00:00:01.689) sdspi_host: poll_busy: timeout D (00:00:01.691) spi_master: device5 release bus D (00:00:01.691) spi_master: device5 locked the bus D (00:00:01.732) sdspi_host: poll_busy: timeout D (00:00:01.734) spi_master: device5 release bus D (00:00:01.734) spi_master: device5 locked the bus D (00:00:01.776) sdspi_host: poll_busy: timeout D (00:00:01.777) spi_master: device5 release bus I (00:00:01.777) sdcard: SD card mounted at /sd Name: SD16G Type: SDHC/SDXC Speed: 20000.00 MHz (limit: 20.00 MHz) Size: 7680MB CSD: ver=2, sector_size=512, capacity=15728640 read_bl_len=9 SSR: bus_width=1 Free: 7504MB
- External SD slot HW-125 only (the internal is not used). Does not work.
Code: Select all
I (00:00:00.624) sdcard: Mounting SD SPI: MISO 18, MOSI 19, CLK 25, CS 22 D (00:00:00.629) spi: SPI2 use gpio matrix. D (00:00:00.633) sdspi_host: sdspi_host_init_device: SPI2 cs=22 cd=-1 wp=-1 D (912) intr_alloc: Connected src 30 to int 13 (cpu 0) D (00:00:00.645) spi_hal: eff: 400, limit: 26666k(/2), 0 dummy, -1 delay D (00:00:00.652) spi_master: SPI2: New device added to CS5, effective clock: 400kHz I (00:00:00.660) gpio: GPIO[22]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 D (00:00:00.670) spi_master: device5 locked the bus D (00:00:00.675) spi_master: device5 release bus D (00:00:00.679) sdspi_host: sdspi_host_start_command: cmd=52 error=0x107 D (00:00:00.686) sdmmc_cmd: cmd=52, sdmmc_req_run returned 0x107 D (00:00:00.692) spi_master: device5 locked the bus D (00:00:00.698) spi_master: device5 release bus D (00:00:00.716) spi_master: device5 locked the bus D (00:00:00.717) spi_master: device5 release bus D (00:00:00.736) spi_master: device5 locked the bus D (00:00:00.736) spi_master: device5 release bus D (00:00:00.737) sdmmc_sd: SDHC/SDXC card D (00:00:00.738) spi_master: device5 locked the bus D (00:00:00.744) spi_master: device5 release bus I (00:00:00.748) sdspi_transaction: cmd=5, R1 response: command not supported D (00:00:00.756) sdmmc_cmd: cmd=5, sdmmc_req_run returned 0x106 D (00:00:00.762) sdmmc_io: sdmmc_init_io: io_send_op_cond (1) returned 0x106; not IO card D (00:00:00.770) spi_master: device5 locked the bus D (00:00:00.775) spi_master: device5 release bus D (00:00:00.780) sdspi_host: data CRC set=1 D (00:00:00.784) spi_master: device5 locked the bus D (00:00:00.789) spi_master: device5 release bus D (00:00:00.794) spi_master: device5 locked the bus D (00:00:00.799) spi_master: device5 release bus D (00:00:00.806) spi_master: device5 locked the bus D (00:00:00.809) spi_master: device5 release bus D (00:00:00.813) spi_master: device5 locked the bus D (00:00:00.818) spi_master: device5 release bus D (00:00:00.823) spi_master: device5 locked the bus D (00:00:00.828) spi_master: device5 release bus D (00:00:00.832) sdmmc_common: host_ocr=0x40ff8000 card_ocr=0xc0ff8000 D (00:00:00.839) sdmmc_common: sdmmc_card_init: host_ocr=40ff8000, card_ocr=c0ff8000 D (00:00:00.847) sdmmc_init: sdmmc_card_init: card type is SD D (00:00:00.852) spi_master: device5 locked the bus D (00:00:00.858) spi_master: device5 release bus D (00:00:00.862) spi_master: device5 locked the bus D (00:00:00.868) spi_master: device5 release bus D (00:00:00.872) spi_master: device5 locked the bus D (00:00:00.877) spi_master: device5 release bus D (00:00:00.881) spi_master: device5 locked the bus D (00:00:00.887) spi_master: device5 release bus D (00:00:00.891) spi_master: device5 locked the bus D (00:00:00.896) spi_master: device5 release bus D (00:00:00.901) spi_master: device5 locked the bus D (00:00:00.908) spi_master: device5 release bus D (00:00:00.910) sdspi_host: Setting card clock to 20000 kHz D (00:00:00.916) spi_hal: eff: 20000, limit: 26666k(/2), 0 dummy, 0 delay D (00:00:00.923) spi_master: SPI2: New device added to CS5, effective clock: 20000kHz D (00:00:00.931) spi_master: device5 locked the bus D (00:00:00.936) spi_master: device5 release bus D (00:00:00.940) sdspi_transaction: cmd=55, R1 response: command CRC error D (00:00:00.947) sdmmc_cmd: cmd=55, sdmmc_req_run returned 0x109 E (00:00:00.953) sdmmc_sd: sdmmc_check_scr: send_scr returned 0x109 D (00:00:00.960) sdmmc_init: sdmmc_card_init: sdmmc_check_scr returned 0x109 E (00:00:00.967) vfs_fat_sdmmc: sdmmc_card_init failed (0x109). I (00:00:00.974) gpio: GPIO[22]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 W (00:00:00.984) sdcard: sdcard_mount failed (ESP_ERR_INVALID_CRC)
Code: Select all
// clk, miso, mosi, cs
SPI.begin(25, 18, 19, 22);
Serial.begin(115200);
if (!SD.begin(22)) {
Serial.println("Card Mount Failed");
return;
}