From a74197c5527b6be7588e2c79a0e525b3f688fb2d Mon Sep 17 00:00:00 2001 From: armando Date: Wed, 21 May 2025 11:09:03 +0800 Subject: [PATCH] fix(sd): fixed slot0 requires all pins to be set when using 1bit iomux mode on p4 --- components/esp_driver_sdmmc/src/sdmmc_host.c | 23 ++++++++++++------- .../common_test_flows/sdmmc_test_rw_common.c | 1 + 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/components/esp_driver_sdmmc/src/sdmmc_host.c b/components/esp_driver_sdmmc/src/sdmmc_host.c index ddd3ea4bcb..c33479cb1c 100644 --- a/components/esp_driver_sdmmc/src/sdmmc_host.c +++ b/components/esp_driver_sdmmc/src/sdmmc_host.c @@ -671,14 +671,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/components/esp_driver_sdmmc/test_apps/sd_test_utils/components/common_test_flows/sdmmc_test_rw_common.c b/components/esp_driver_sdmmc/test_apps/sd_test_utils/components/common_test_flows/sdmmc_test_rw_common.c index 3cf716ef5f..ac45e15def 100644 --- a/components/esp_driver_sdmmc/test_apps/sd_test_utils/components/common_test_flows/sdmmc_test_rw_common.c +++ b/components/esp_driver_sdmmc/test_apps/sd_test_utils/components/common_test_flows/sdmmc_test_rw_common.c @@ -216,6 +216,7 @@ void sdmmc_test_rw_highprio_task(sdmmc_card_t* card) xSemaphoreGive(args.stop); xSemaphoreTake(args.done, portMAX_DELAY); + vTaskDelay(1); vSemaphoreDelete(args.stop); vSemaphoreDelete(args.done); }