|
1 | 1 | /* |
2 | | - * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD |
| 2 | + * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD |
3 | 3 | * |
4 | 4 | * SPDX-License-Identifier: Apache-2.0 |
5 | 5 | */ |
@@ -375,6 +375,88 @@ static const sdmmc_test_board_info_t s_board_info = { |
375 | 375 | }, |
376 | 376 | }; |
377 | 377 |
|
| 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 | + |
378 | 460 | #elif CONFIG_SDMMC_BOARD_ESP32C5_BREAKOUT |
379 | 461 |
|
380 | 462 | static const sdmmc_test_board_info_t s_board_info = { |
|
0 commit comments