Skip to content

Commit e2954eb

Browse files
committed
Merge branch 'fix/sdio_init_for_io_card_only' into 'master'
fix(sdmmc): Allow disabling SDIO specific steps in sdmmc card init See merge request espressif/esp-idf!40735
2 parents 92b90af + 4d91eac commit e2954eb

File tree

14 files changed

+160
-6
lines changed

14 files changed

+160
-6
lines changed

components/esp_driver_sdmmc/test_apps/sdmmc/components/sdmmc_tests/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ if(CONFIG_SOC_SDMMC_HOST_SUPPORTED)
1010
"sdmmc_test_trim_sd.c"
1111
"sdmmc_test_discard_sd.c"
1212
"sdmmc_test_sanitize_sd.c"
13-
"sdmmc_test_various_cmds.c")
13+
"sdmmc_test_various_cmds.c"
14+
"sdmmc_test_card_init.c")
1415
endif()
1516

1617
set(priv_requires "sdmmc"
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <stdio.h>
8+
#include <string.h>
9+
#include <sys/unistd.h>
10+
#include <sys/stat.h>
11+
#include "sdmmc_cmd.h"
12+
#include "driver/sdmmc_host.h"
13+
#include "unity.h"
14+
#include "sdmmc_test_begin_end_sd.h"
15+
#if SOC_SDMMC_IO_POWER_EXTERNAL
16+
#include "sd_pwr_ctrl_by_on_chip_ldo.h"
17+
#endif
18+
19+
#if SOC_SDMMC_HOST_SUPPORTED
20+
TEST_CASE("sdmmc_card_init with SDIO configuration test", "[sdmmc]")
21+
{
22+
sdmmc_card_t card;
23+
24+
// Test with slot 1, 1-bit width, default frequency
25+
sdmmc_test_sd_skip_if_board_incompatible(SLOT_1, 1, SDMMC_FREQ_DEFAULT, NO_DDR, NO_EMMC);
26+
27+
// Print current SDIO configuration for verification
28+
#ifdef CONFIG_SD_ENABLE_SDIO_SUPPORT
29+
printf("\n[CONFIG] SDIO support is ENABLED\n");
30+
#else
31+
printf("\n[CONFIG] SDIO support is DISABLED\n");
32+
#endif
33+
34+
// Initialize using the test framework
35+
sdmmc_test_sd_begin(SLOT_1, 1, SDMMC_FREQ_DEFAULT, NO_DDR, &card);
36+
37+
// Print card information to verify card was initialized correctly
38+
sdmmc_card_print_info(stdout, &card);
39+
40+
// Verify basic card properties are initialized
41+
TEST_ASSERT_NOT_EQUAL(0, card.csd.capacity);
42+
TEST_ASSERT_NOT_EQUAL(0, card.csd.sector_size);
43+
44+
// Clean up
45+
sdmmc_test_sd_end(&card);
46+
}
47+
#endif

components/esp_driver_sdmmc/test_apps/sdmmc/pytest_sdmmc.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@
66

77

88
@pytest.mark.sdcard
9+
@pytest.mark.parametrize(
10+
'config',
11+
[
12+
'default',
13+
'nosdio',
14+
],
15+
indirect=True,
16+
)
917
@idf_parametrize('target', ['esp32', 'esp32s3', 'esp32p4'], indirect=['target'])
1018
def test_sdmmc(dut: IdfDut) -> None:
1119
# SDMMC driver can't be reinitialized if the test fails,
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# SDMMC Configuration
2+
CONFIG_SD_ENABLE_SDIO_SUPPORT=n

components/esp_driver_sdspi/test_apps/sdspi/components/sdspi_tests/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ if(CONFIG_SOC_GPSPI_SUPPORTED)
66
"sdmmc_test_probe_spi.c"
77
"sdmmc_test_rw_spi.c"
88
"sdmmc_test_erase_spi.c"
9-
"sdmmc_test_erase_common_spi.c")
9+
"sdmmc_test_erase_common_spi.c"
10+
"sdmmc_test_card_init_spi.c")
1011
endif()
1112

1213
set(priv_requires "sdmmc"
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <stdio.h>
8+
#include <string.h>
9+
#include <sys/unistd.h>
10+
#include <sys/stat.h>
11+
#include "sdmmc_cmd.h"
12+
#include "driver/sdspi_host.h"
13+
#include "unity.h"
14+
#include "sdmmc_test_begin_end_spi.h"
15+
16+
#if CONFIG_SOC_GPSPI_SUPPORTED
17+
TEST_CASE("sdspi_card_init with SDIO configuration test", "[sdspi]")
18+
{
19+
sdmmc_card_t card;
20+
21+
// Test with slot 1, default frequency for SPI mode
22+
sdmmc_test_spi_skip_if_board_incompatible(SLOT_1, SDMMC_FREQ_DEFAULT);
23+
24+
// Print current SDIO configuration for verification
25+
#ifdef CONFIG_SD_ENABLE_SDIO_SUPPORT
26+
printf("\n[CONFIG] SDIO support is ENABLED\n");
27+
#else
28+
printf("\n[CONFIG] SDIO support is DISABLED\n");
29+
#endif
30+
31+
// Initialize using the SPI test framework
32+
sdmmc_test_spi_begin(SLOT_1, SDMMC_FREQ_DEFAULT, &card, NULL, NULL, NULL);
33+
34+
// Print card information to verify card was initialized correctly
35+
sdmmc_card_print_info(stdout, &card);
36+
37+
// Verify basic card properties are initialized
38+
TEST_ASSERT_NOT_EQUAL(0, card.csd.capacity);
39+
TEST_ASSERT_NOT_EQUAL(0, card.csd.sector_size);
40+
41+
// Clean up
42+
sdmmc_test_spi_end(SLOT_1, &card);
43+
}
44+
#endif

components/esp_driver_sdspi/test_apps/sdspi/pytest_sdspi.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77

88
@pytest.mark.temp_skip_ci(targets=['esp32c61'], reason='C5 C61 GPSPI same, so testing on C5 is enough')
99
@pytest.mark.sdcard_spimode
10+
@pytest.mark.parametrize(
11+
'config',
12+
[
13+
'default',
14+
'nosdio',
15+
],
16+
indirect=True,
17+
)
1018
@idf_parametrize('target', ['esp32', 'esp32s3', 'esp32c3', 'esp32p4', 'esp32c5'], indirect=['target'])
1119
def test_sdspi(dut: IdfDut) -> None:
1220
dut.run_all_single_board_cases(reset=True)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# SDMMC Configuration
2+
CONFIG_SD_ENABLE_SDIO_SUPPORT=n

components/sdmmc/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@ endif()
77
set(srcs "sdmmc_cmd.c"
88
"sdmmc_common.c"
99
"sdmmc_init.c"
10-
"sdmmc_io.c"
1110
"sdmmc_mmc.c"
1211
"sdmmc_sd.c"
1312
"sd_pwr_ctrl/sd_pwr_ctrl.c")
1413

14+
if(CONFIG_SD_ENABLE_SDIO_SUPPORT)
15+
list(APPEND srcs "sdmmc_io.c")
16+
endif()
17+
1518
if(CONFIG_SOC_GP_LDO_SUPPORTED)
1619
list(APPEND srcs "sd_pwr_ctrl/sd_pwr_ctrl_by_on_chip_ldo.c")
1720
endif()

components/sdmmc/Kconfig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
menu "SD Protocol Layer Configuration"
2+
config SD_ENABLE_SDIO_SUPPORT
3+
bool "Enable SDIO support"
4+
default y
5+
help
6+
Enable SDIO support.
7+
Disabling this will skip SDIO-specific initialization steps
8+
endmenu

0 commit comments

Comments
 (0)