Skip to content

Commit 7154cd3

Browse files
committed
feat(sdmmc): Add ESP32-P4 eMMC test board definition
1 parent 1ab7235 commit 7154cd3

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

components/esp_driver_sdmmc/test_apps/sd_test_utils/components/sdmmc_test_boards/Kconfig.projbuild

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ menu "SDMMC Test Board Configuration"
3737
bool "ESP32-P4 Function EV Board with SDSPI breakout"
3838
depends on IDF_TARGET_ESP32P4
3939

40+
config SDMMC_BOARD_ESP32P4_EMMC_TEST
41+
bool "ESP32-P4 eMMC Test Board v1"
42+
depends on IDF_TARGET_ESP32P4
43+
4044
config SDMMC_BOARD_ESP32C5_BREAKOUT
4145
bool "ESP32-C5 breakout board"
4246
depends on IDF_TARGET_ESP32C5

components/esp_driver_sdmmc/test_apps/sd_test_utils/components/sdmmc_test_boards/sdmmc_test_board_defs.c

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -375,6 +375,88 @@ static const sdmmc_test_board_info_t s_board_info = {
375375
},
376376
};
377377

378+
#elif CONFIG_SDMMC_BOARD_ESP32P4_EMMC_TEST
379+
380+
#define SD_TEST_BOARD_EN_GPIO 23
381+
#define SD_TEST_BOARD_EN_LEVEL 0
382+
// Pin pulled down to discharge VDD_SDIO capacitors. CMD pin used here.
383+
#define SD_TEST_BOARD_DISCHARGE_GPIO 19
384+
#define SD_TEST_BOARD_PWR_RST_DELAY_MS 100
385+
#define SD_TEST_BOARD_PWR_ON_DELAY_MS 100
386+
387+
static void card_power_set_esp32p4_emmc(bool en)
388+
{
389+
if (en) {
390+
/* power off to make sure the card is reset */
391+
gpio_reset_pin(SD_TEST_BOARD_EN_GPIO);
392+
gpio_set_direction(SD_TEST_BOARD_EN_GPIO, GPIO_MODE_OUTPUT);
393+
gpio_set_level(SD_TEST_BOARD_EN_GPIO, !SD_TEST_BOARD_EN_LEVEL);
394+
/* discharge capacitors on VDD_SDIO */
395+
gpio_reset_pin(SD_TEST_BOARD_DISCHARGE_GPIO);
396+
gpio_set_direction(SD_TEST_BOARD_DISCHARGE_GPIO, GPIO_MODE_OUTPUT);
397+
gpio_set_level(SD_TEST_BOARD_DISCHARGE_GPIO, 0);
398+
usleep(SD_TEST_BOARD_PWR_RST_DELAY_MS * 1000);
399+
/* power on */
400+
gpio_reset_pin(SD_TEST_BOARD_DISCHARGE_GPIO);
401+
gpio_set_level(SD_TEST_BOARD_EN_GPIO, SD_TEST_BOARD_EN_LEVEL);
402+
usleep(SD_TEST_BOARD_PWR_ON_DELAY_MS * 1000);
403+
} else {
404+
/* power off the card */
405+
gpio_set_level(SD_TEST_BOARD_EN_GPIO, !SD_TEST_BOARD_EN_LEVEL);
406+
gpio_set_direction(SD_TEST_BOARD_EN_GPIO, GPIO_MODE_INPUT);
407+
/* discharge capacitors on VDD_SDIO */
408+
gpio_reset_pin(SD_TEST_BOARD_DISCHARGE_GPIO);
409+
gpio_set_direction(SD_TEST_BOARD_DISCHARGE_GPIO, GPIO_MODE_OUTPUT);
410+
gpio_set_level(SD_TEST_BOARD_DISCHARGE_GPIO, 0);
411+
usleep(SD_TEST_BOARD_PWR_RST_DELAY_MS * 1000);
412+
/* reset the pin but leaving it floating so that VDD_SDIO won't be charged again */
413+
gpio_reset_pin(SD_TEST_BOARD_DISCHARGE_GPIO);
414+
gpio_pullup_dis(SD_TEST_BOARD_DISCHARGE_GPIO);
415+
}
416+
}
417+
418+
static const sdmmc_test_board_info_t s_board_info = {
419+
.name = "ESP32-P4 eMMC test board v1",
420+
.slot = {
421+
{
422+
.slot_exists = true,
423+
.is_emmc = true,
424+
.bus_width = 8,
425+
.clk = 43,
426+
.cmd_mosi = 44,
427+
.d0_miso = 39,
428+
.d1 = 40,
429+
.d2 = 41,
430+
.d3_cs = 42,
431+
.d4 = 45,
432+
.d5 = 46,
433+
.d6 = 47,
434+
.d7 = 48,
435+
.cd = GPIO_NUM_NC,
436+
.wp = GPIO_NUM_NC,
437+
.unused_pin = 54,
438+
},
439+
{
440+
.slot_exists = true,
441+
.bus_width = 4,
442+
.clk = 18,
443+
.cmd_mosi = 19,
444+
.d0_miso = 14,
445+
.d1 = 15,
446+
.d2 = 16,
447+
.d3_cs = 17,
448+
.d4 = GPIO_NUM_NC,
449+
.d5 = GPIO_NUM_NC,
450+
.d6 = GPIO_NUM_NC,
451+
.d7 = GPIO_NUM_NC,
452+
.cd = 22,
453+
.wp = GPIO_NUM_NC,
454+
.unused_pin = 54,
455+
}
456+
},
457+
.card_power_set = card_power_set_esp32p4_emmc
458+
};
459+
378460
#elif CONFIG_SDMMC_BOARD_ESP32C5_BREAKOUT
379461

380462
static const sdmmc_test_board_info_t s_board_info = {

0 commit comments

Comments
 (0)