diff --git a/components/esp_driver_sdmmc/src/sdmmc_host.c b/components/esp_driver_sdmmc/src/sdmmc_host.c index 04c906e21d..062b51a71a 100644 --- a/components/esp_driver_sdmmc/src/sdmmc_host.c +++ b/components/esp_driver_sdmmc/src/sdmmc_host.c @@ -608,14 +608,21 @@ esp_err_t sdmmc_host_init_slot(int slot, const sdmmc_slot_config_t *slot_config) if (slot == 0) { #if !SDMMC_LL_SLOT_SUPPORT_GPIO_MATRIX(0) - if (use_gpio_matrix && - SDMMC_SLOT0_IOMUX_PIN_NUM_CLK == slot_config->clk && - SDMMC_SLOT0_IOMUX_PIN_NUM_CMD == slot_config->cmd && - SDMMC_SLOT0_IOMUX_PIN_NUM_D0 == slot_config->d0 && - SDMMC_SLOT0_IOMUX_PIN_NUM_D1 == slot_config->d1 && - SDMMC_SLOT0_IOMUX_PIN_NUM_D2 == slot_config->d2 && - SDMMC_SLOT0_IOMUX_PIN_NUM_D3 == slot_config->d3) { - use_gpio_matrix = false; + if (use_gpio_matrix) { + if (slot_width >= 1) { + if (SDMMC_SLOT0_IOMUX_PIN_NUM_CLK == slot_config->clk && SDMMC_SLOT0_IOMUX_PIN_NUM_CMD == slot_config->cmd && SDMMC_SLOT0_IOMUX_PIN_NUM_D0 == slot_config->d0) { + use_gpio_matrix = false; + } else { + use_gpio_matrix = true; + } + } + if (slot_width >= 4) { + if (SDMMC_SLOT0_IOMUX_PIN_NUM_D1 == slot_config->d1 && SDMMC_SLOT0_IOMUX_PIN_NUM_D2 == slot_config->d2 && SDMMC_SLOT0_IOMUX_PIN_NUM_D3 == slot_config->d3) { + use_gpio_matrix = false; + } else { + use_gpio_matrix = true; + } + } } else { ESP_RETURN_ON_FALSE(!use_gpio_matrix, ESP_ERR_INVALID_ARG, TAG, "doesn't support routing from GPIO matrix, driver uses dedicated IOs"); } diff --git a/examples/storage/sd_card/sdmmc/main/Kconfig.projbuild b/examples/storage/sd_card/sdmmc/main/Kconfig.projbuild index 10f6837bf5..a8f570e05b 100644 --- a/examples/storage/sd_card/sdmmc/main/Kconfig.projbuild +++ b/examples/storage/sd_card/sdmmc/main/Kconfig.projbuild @@ -28,84 +28,58 @@ menu "SD/MMC Example Configuration" bool "1 line (D0)" endchoice - if SOC_SDMMC_USE_GPIO_MATRIX + config EXAMPLE_PIN_CMD + int + prompt "CMD GPIO number" if SOC_SDMMC_USE_GPIO_MATRIX + default 35 if IDF_TARGET_ESP32S3 + default 44 if IDF_TARGET_ESP32P4 + default 15 if IDF_TARGET_ESP32 - config EXAMPLE_PIN_CMD - int "CMD GPIO number" - default 35 if IDF_TARGET_ESP32S3 - default 44 if IDF_TARGET_ESP32P4 + config EXAMPLE_PIN_CLK + int + prompt "CLK GPIO number" if SOC_SDMMC_USE_GPIO_MATRIX + default 36 if IDF_TARGET_ESP32S3 + default 43 if IDF_TARGET_ESP32P4 + default 14 if IDF_TARGET_ESP32 - config EXAMPLE_PIN_CLK - int "CLK GPIO number" - default 36 if IDF_TARGET_ESP32S3 - default 43 if IDF_TARGET_ESP32P4 + config EXAMPLE_PIN_D0 + int + prompt "D0 GPIO number" if SOC_SDMMC_USE_GPIO_MATRIX + default 37 if IDF_TARGET_ESP32S3 + default 39 if IDF_TARGET_ESP32P4 + default 2 if IDF_TARGET_ESP32 - config EXAMPLE_PIN_D0 - int "D0 GPIO number" - default 37 if IDF_TARGET_ESP32S3 - default 39 if IDF_TARGET_ESP32P4 + if EXAMPLE_SDMMC_BUS_WIDTH_4 - if EXAMPLE_SDMMC_BUS_WIDTH_4 + config EXAMPLE_PIN_D1 + int + prompt "D1 GPIO number" if SOC_SDMMC_USE_GPIO_MATRIX + default 38 if IDF_TARGET_ESP32S3 + default 40 if IDF_TARGET_ESP32P4 + default 4 if IDF_TARGET_ESP32 - config EXAMPLE_PIN_D1 - int "D1 GPIO number" - default 38 if IDF_TARGET_ESP32S3 - default 40 if IDF_TARGET_ESP32P4 - config EXAMPLE_PIN_D2 - int "D2 GPIO number" - default 33 if IDF_TARGET_ESP32S3 - default 41 if IDF_TARGET_ESP32P4 + config EXAMPLE_PIN_D2 + int + prompt "D2 GPIO number" if SOC_SDMMC_USE_GPIO_MATRIX + default 33 if IDF_TARGET_ESP32S3 + default 41 if IDF_TARGET_ESP32P4 + default 12 if IDF_TARGET_ESP32 - config EXAMPLE_PIN_D3 - int "D3 GPIO number" - default 34 if IDF_TARGET_ESP32S3 - default 42 if IDF_TARGET_ESP32P4 - endif # EXAMPLE_SDMMC_BUS_WIDTH_4 + config EXAMPLE_PIN_D3 + int + prompt "D3 GPIO number" if SOC_SDMMC_USE_GPIO_MATRIX + default 34 if IDF_TARGET_ESP32S3 + default 42 if IDF_TARGET_ESP32P4 + default 13 if IDF_TARGET_ESP32 - endif # SOC_SDMMC_USE_GPIO_MATRIX + endif # EXAMPLE_SDMMC_BUS_WIDTH_4 config EXAMPLE_DEBUG_PIN_CONNECTIONS bool "Debug sd pin connections and pullup strength" default n - if !SOC_SDMMC_USE_GPIO_MATRIX - config EXAMPLE_PIN_CMD - int - depends on EXAMPLE_DEBUG_PIN_CONNECTIONS - default 15 if IDF_TARGET_ESP32 - - config EXAMPLE_PIN_CLK - int - depends on EXAMPLE_DEBUG_PIN_CONNECTIONS - default 14 if IDF_TARGET_ESP32 - - config EXAMPLE_PIN_D0 - int - depends on EXAMPLE_DEBUG_PIN_CONNECTIONS - default 2 if IDF_TARGET_ESP32 - - if EXAMPLE_SDMMC_BUS_WIDTH_4 - - config EXAMPLE_PIN_D1 - int - depends on EXAMPLE_DEBUG_PIN_CONNECTIONS - default 4 if IDF_TARGET_ESP32 - - config EXAMPLE_PIN_D2 - int - depends on EXAMPLE_DEBUG_PIN_CONNECTIONS - default 12 if IDF_TARGET_ESP32 - - config EXAMPLE_PIN_D3 - int - depends on EXAMPLE_DEBUG_PIN_CONNECTIONS - default 13 if IDF_TARGET_ESP32 - - endif # EXAMPLE_SDMMC_BUS_WIDTH_4 - endif - config EXAMPLE_ENABLE_ADC_FEATURE bool "Enable ADC feature" depends on EXAMPLE_DEBUG_PIN_CONNECTIONS