diff --git a/components/esp_driver_sdmmc/include/driver/sdmmc_default_configs.h b/components/esp_driver_sdmmc/include/driver/sdmmc_default_configs.h index add6c4c859..1f6fbee7d0 100644 --- a/components/esp_driver_sdmmc/include/driver/sdmmc_default_configs.h +++ b/components/esp_driver_sdmmc/include/driver/sdmmc_default_configs.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -53,23 +53,28 @@ extern "C" { #define SDMMC_SLOT_NO_WP GPIO_NUM_NC ///< indicates that write protect line is not used #define SDMMC_SLOT_WIDTH_DEFAULT 0 ///< use the maximum possible width for the slot -#if SOC_SDMMC_USE_IOMUX && !SOC_SDMMC_USE_GPIO_MATRIX /** * Macro defining default configuration of SDMMC host slot */ +#if CONFIG_IDF_TARGET_ESP32 #define SDMMC_SLOT_CONFIG_DEFAULT() {\ + .clk = GPIO_NUM_6, \ + .cmd = GPIO_NUM_11, \ + .d0 = GPIO_NUM_7, \ + .d1 = GPIO_NUM_8, \ + .d2 = GPIO_NUM_9, \ + .d3 = GPIO_NUM_10, \ + .d4 = GPIO_NUM_16, \ + .d5 = GPIO_NUM_17, \ + .d6 = GPIO_NUM_5, \ + .d7 = GPIO_NUM_18, \ .cd = SDMMC_SLOT_NO_CD, \ .wp = SDMMC_SLOT_NO_WP, \ .width = SDMMC_SLOT_WIDTH_DEFAULT, \ .flags = 0, \ } -#else - -/** - * Macro defining default configuration of SDMMC host slot - */ -#if CONFIG_IDF_TARGET_ESP32P4 +#elif CONFIG_IDF_TARGET_ESP32P4 #define SDMMC_SLOT_CONFIG_DEFAULT() {\ .clk = GPIO_NUM_43, \ .cmd = GPIO_NUM_44, \ @@ -106,8 +111,6 @@ extern "C" { } #endif // GPIO Matrix chips -#endif - #ifdef __cplusplus } #endif diff --git a/components/esp_driver_sdmmc/include/driver/sdmmc_host.h b/components/esp_driver_sdmmc/include/driver/sdmmc_host.h index e596835005..2b6059d023 100644 --- a/components/esp_driver_sdmmc/include/driver/sdmmc_host.h +++ b/components/esp_driver_sdmmc/include/driver/sdmmc_host.h @@ -24,7 +24,6 @@ extern "C" { * Extra configuration for SDMMC peripheral slot */ typedef struct { -#ifdef SOC_SDMMC_USE_GPIO_MATRIX gpio_num_t clk; ///< GPIO number of CLK signal. gpio_num_t cmd; ///< GPIO number of CMD signal. gpio_num_t d0; ///< GPIO number of D0 signal. @@ -35,7 +34,6 @@ typedef struct { gpio_num_t d5; ///< GPIO number of D5 signal. Ignored in 1- or 4- line mode. gpio_num_t d6; ///< GPIO number of D6 signal. Ignored in 1- or 4- line mode. gpio_num_t d7; ///< GPIO number of D7 signal. Ignored in 1- or 4- line mode. -#endif // SOC_SDMMC_USE_GPIO_MATRIX union { gpio_num_t gpio_cd; ///< GPIO number of card detect signal gpio_num_t cd; ///< GPIO number of card detect signal; shorter name. diff --git a/components/esp_driver_sdmmc/src/sdmmc_host.c b/components/esp_driver_sdmmc/src/sdmmc_host.c index 2362e03028..848d7c1d35 100644 --- a/components/esp_driver_sdmmc/src/sdmmc_host.c +++ b/components/esp_driver_sdmmc/src/sdmmc_host.c @@ -544,7 +544,17 @@ 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) - ESP_RETURN_ON_FALSE(!use_gpio_matrix, ESP_ERR_INVALID_ARG, TAG, "doesn't support routing from GPIO matrix, driver uses dedicated IOs"); + 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; + } else { + ESP_RETURN_ON_FALSE(!use_gpio_matrix, ESP_ERR_INVALID_ARG, TAG, "doesn't support routing from GPIO matrix, driver uses dedicated IOs"); + } #endif } else { #if !SDMMC_LL_SLOT_SUPPORT_GPIO_MATRIX(1) diff --git a/components/esp_driver_sdmmc/test_apps/sd_test_utils/components/sdmmc_test_boards/sdmmc_test_board_defs.c b/components/esp_driver_sdmmc/test_apps/sd_test_utils/components/sdmmc_test_boards/sdmmc_test_board_defs.c index 8cd43b7c51..c4b34a0518 100644 --- a/components/esp_driver_sdmmc/test_apps/sd_test_utils/components/sdmmc_test_boards/sdmmc_test_board_defs.c +++ b/components/esp_driver_sdmmc/test_apps/sd_test_utils/components/sdmmc_test_boards/sdmmc_test_board_defs.c @@ -323,9 +323,6 @@ static const sdmmc_test_board_info_t s_board_info = { static const sdmmc_test_board_info_t s_board_info = { .name = "ESP32-P4 Function EV Board", .slot = { - { - .slot_exists = false - }, { .slot_exists = true, .bus_width = 4, @@ -342,6 +339,9 @@ static const sdmmc_test_board_info_t s_board_info = { .cd = GPIO_NUM_NC, .wp = GPIO_NUM_NC, .unused_pin = 54, + }, + { + .slot_exists = false, } }, }; diff --git a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_begin_end_sd.c b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_begin_end_sd.c index 804bd203b0..387cf811bc 100644 --- a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_begin_end_sd.c +++ b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_begin_end_sd.c @@ -18,7 +18,7 @@ #include "sd_pwr_ctrl.h" #include "sd_pwr_ctrl_by_on_chip_ldo.h" -void sdmmc_test_sd_skip_if_board_incompatible(int slot, int width, int freq_khz, int ddr) +void sdmmc_test_sd_skip_if_board_incompatible(int slot, int width, int freq_khz, int ddr, int is_emmc) { sdmmc_host_t config = SDMMC_HOST_DEFAULT(); sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); @@ -26,6 +26,13 @@ void sdmmc_test_sd_skip_if_board_incompatible(int slot, int width, int freq_khz, if (!sdmmc_test_board_has_slot(slot)) { TEST_IGNORE_MESSAGE("Board doesn't have the required slot"); } + + if (is_emmc) { + if (!sdmmc_test_board_slot_is_emmc(slot)) { + TEST_IGNORE_MESSAGE("Board doesn't have the emmc card inserted"); + } + } + sdmmc_test_board_get_config_sdmmc(slot, &config, &slot_config); int board_max_freq_khz = sdmmc_test_board_get_slot_info(slot)->max_freq_khz; diff --git a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_begin_end_sd.h b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_begin_end_sd.h index 1120781185..42d02494af 100644 --- a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_begin_end_sd.h +++ b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_begin_end_sd.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -16,6 +16,8 @@ extern "C" { #define SLOT_1 1 #define NO_DDR 0 #define WITH_DDR 1 +#define NO_EMMC 0 +#define IS_EMMC 1 /* Helper functions to initialize/deinintalize the host (SDMMC/SDSPI) inside the test */ @@ -28,8 +30,9 @@ extern "C" { * @param width Slot width (1, 4 or 8) * @param freq_khz Bus frequency in kHz * @param ddr Whether to use DDR mode (NO_DDR or WITH_DDR) + * @param is_emmc Is emmc or not */ -void sdmmc_test_sd_skip_if_board_incompatible(int slot, int width, int freq_khz, int ddr); +void sdmmc_test_sd_skip_if_board_incompatible(int slot, int width, int freq_khz, int ddr, int is_emmc); /** * @brief Helper function to initialize the SDMMC host and slot for the test using the given settings diff --git a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_cd_wp_sd.c b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_cd_wp_sd.c index 80e9e01730..fcd1dcb788 100644 --- a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_cd_wp_sd.c +++ b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_cd_wp_sd.c @@ -8,6 +8,7 @@ #include "sdmmc_cmd.h" #include "driver/sdmmc_host.h" #include "sdmmc_test_cd_wp_common.h" +#include "sdmmc_test_begin_end_sd.h" #include "sdmmc_test_board.h" #include "sd_pwr_ctrl.h" #include "sd_pwr_ctrl_by_on_chip_ldo.h" @@ -16,6 +17,7 @@ TEST_CASE("CD input works in SD mode", "[sdmmc]") { sdmmc_host_t config = SDMMC_HOST_DEFAULT(); sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); + sdmmc_test_sd_skip_if_board_incompatible(SDMMC_HOST_SLOT_1, 0, SDMMC_FREQ_PROBING, NO_DDR, NO_EMMC); sdmmc_test_board_get_config_sdmmc(SDMMC_HOST_SLOT_1, &config, &slot_config); const int test_gpio = sdmmc_test_board_get_slot_info(SDMMC_HOST_SLOT_1)->unused_pin; slot_config.gpio_cd = test_gpio; @@ -48,6 +50,7 @@ TEST_CASE("WP input works in SD mode", "[sdmmc]") sdmmc_test_board_card_power_set(true); sdmmc_host_t config = SDMMC_HOST_DEFAULT(); sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); + sdmmc_test_sd_skip_if_board_incompatible(SDMMC_HOST_SLOT_1, 0, SDMMC_FREQ_PROBING, NO_DDR, NO_EMMC); sdmmc_test_board_get_config_sdmmc(SDMMC_HOST_SLOT_1, &config, &slot_config); const int test_gpio = sdmmc_test_board_get_slot_info(SDMMC_HOST_SLOT_1)->unused_pin; slot_config.gpio_wp = test_gpio; diff --git a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_discard_sd.c b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_discard_sd.c index b0211b73d9..392c8cec04 100644 --- a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_discard_sd.c +++ b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_discard_sd.c @@ -43,7 +43,7 @@ static void test_discard_blocks(sdmmc_card_t* card, int slot) static void do_one_mmc_discard_test(int slot, int width, int freq_khz, int ddr) { sdmmc_card_t card; - sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr); + sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr, IS_EMMC); sdmmc_test_sd_begin(slot, width, freq_khz, ddr, &card); sdmmc_card_print_info(stdout, &card); test_discard_blocks(&card, slot); diff --git a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_erase_sd.c b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_erase_sd.c index 9212c61a8c..9a40351d82 100644 --- a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_erase_sd.c +++ b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_erase_sd.c @@ -15,7 +15,7 @@ static void do_one_sdmmc_erase_test(int slot, int width, int freq_khz, int ddr) { sdmmc_card_t card; - sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr); + sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr, NO_EMMC); sdmmc_test_sd_begin(slot, width, freq_khz, ddr, &card); sdmmc_card_print_info(stdout, &card); sdmmc_test_sd_erase_blocks(&card); diff --git a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_probe_sd.c b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_probe_sd.c index ce4ab53fc4..f10d8d68a4 100644 --- a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_probe_sd.c +++ b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_probe_sd.c @@ -13,7 +13,7 @@ static void do_one_sdmmc_probe_test(int slot, int width, int freq_khz, int ddr) { sdmmc_card_t card; - sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr); + sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr, NO_EMMC); sdmmc_test_sd_begin(slot, width, freq_khz, ddr, &card); sdmmc_card_print_info(stdout, &card); uint8_t* buffer = heap_caps_calloc(512, 1, MALLOC_CAP_DMA); diff --git a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_rw_sd.c b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_rw_sd.c index 942bae84b7..3a07056213 100644 --- a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_rw_sd.c +++ b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_rw_sd.c @@ -15,7 +15,7 @@ static void do_one_sdmmc_perf_test(int slot, int width, int freq_khz, int ddr, FILE* perf_log) { sdmmc_card_t card; - sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr); + sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr, NO_EMMC); sdmmc_test_sd_begin(slot, width, freq_khz, ddr, &card); sdmmc_card_print_info(stdout, &card); sdmmc_test_rw_performance(&card, perf_log); @@ -68,7 +68,7 @@ TEST_CASE("sdmmc read/write performance, slot 1, 4-bit DDR", "[sdmmc]") static void do_one_sdmmc_rw_test_with_offset(int slot, int width, int freq_khz, int ddr) { sdmmc_card_t card; - sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr); + sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr, NO_EMMC); sdmmc_test_sd_begin(slot, width, freq_khz, ddr, &card); sdmmc_card_print_info(stdout, &card); sdmmc_test_rw_with_offset(&card); @@ -90,7 +90,7 @@ TEST_CASE("sdmmc read/write performance with offset, slot 1, 4-bit", "[sdmmc]") static void do_one_sdmmc_rw_test_unaligned_buffer(int slot, int width, int freq_khz, int ddr) { sdmmc_card_t card; - sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr); + sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr, NO_EMMC); sdmmc_test_sd_begin(slot, width, freq_khz, ddr, &card); sdmmc_card_print_info(stdout, &card); sdmmc_test_rw_unaligned_buffer(&card); diff --git a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_sanitize_sd.c b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_sanitize_sd.c index 4fc434fbb5..45492e76b7 100644 --- a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_sanitize_sd.c +++ b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_sanitize_sd.c @@ -35,7 +35,7 @@ static void test_mmc_sanitize_blocks(sdmmc_card_t* card) static void do_one_mmc_sanitize_test(int slot, int width, int freq_khz, int ddr) { sdmmc_card_t card; - sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr); + sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr, IS_EMMC); sdmmc_test_sd_begin(slot, width, freq_khz, ddr, &card); sdmmc_card_print_info(stdout, &card); test_mmc_sanitize_blocks(&card); diff --git a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_trim_sd.c b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_trim_sd.c index 8f277b8066..6a02d8bc63 100644 --- a/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_trim_sd.c +++ b/components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/sdmmc_test_trim_sd.c @@ -33,7 +33,7 @@ static void test_mmc_trim_blocks(sdmmc_card_t* card) static void do_one_mmc_trim_test(int slot, int width, int freq_khz, int ddr) { sdmmc_card_t card; - sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr); + sdmmc_test_sd_skip_if_board_incompatible(slot, width, freq_khz, ddr, IS_EMMC); sdmmc_test_sd_begin(slot, width, freq_khz, ddr, &card); sdmmc_card_print_info(stdout, &card); test_mmc_trim_blocks(&card); diff --git a/components/esp_driver_sdmmc/test_apps/sdmmc/sdkconfig.defaults.esp32p4 b/components/esp_driver_sdmmc/test_apps/sdmmc/sdkconfig.defaults.esp32p4 index bae8235e8d..7b8ca4566c 100644 --- a/components/esp_driver_sdmmc/test_apps/sdmmc/sdkconfig.defaults.esp32p4 +++ b/components/esp_driver_sdmmc/test_apps/sdmmc/sdkconfig.defaults.esp32p4 @@ -3,4 +3,3 @@ CONFIG_SDMMC_BOARD_ESP32P4_EV_BOARD=y CONFIG_SPIRAM=y CONFIG_IDF_EXPERIMENTAL_FEATURES=y CONFIG_SPIRAM_SPEED_200M=y -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y diff --git a/components/esp_driver_sdspi/test_apps/sdspi/sdkconfig.defaults.esp32p4 b/components/esp_driver_sdspi/test_apps/sdspi/sdkconfig.defaults.esp32p4 index 74592300eb..4363f63715 100644 --- a/components/esp_driver_sdspi/test_apps/sdspi/sdkconfig.defaults.esp32p4 +++ b/components/esp_driver_sdspi/test_apps/sdspi/sdkconfig.defaults.esp32p4 @@ -1,2 +1 @@ CONFIG_SDMMC_BOARD_ESP32P4_EV_BOARD_WITH_SDSPI=y -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y diff --git a/examples/storage/sd_card/sdspi/sdkconfig.defaults.esp32p4 b/examples/storage/sd_card/sdspi/sdkconfig.defaults.esp32p4 deleted file mode 100644 index 5e9f8e25bd..0000000000 --- a/examples/storage/sd_card/sdspi/sdkconfig.defaults.esp32p4 +++ /dev/null @@ -1 +0,0 @@ -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y