diff --git a/micropython/ports/esp32/machine_sdcard.c b/micropython/ports/esp32/machine_sdcard.c
index 5b495f8494e77747a54fb43659f4f8444d57d8b8..12ba96bb89cb95e4f4d6a72912a02aea288d3a00 100644
--- a/micropython/ports/esp32/machine_sdcard.c
+++ b/micropython/ports/esp32/machine_sdcard.c
@@ -125,6 +125,18 @@ STATIC mp_obj_t machine_sdcard_make_new(const mp_obj_type_t *type, size_t n_args
         ARG_sck,
         ARG_cs,
         ARG_freq,
+        #if CONFIG_IDF_TARGET_ESP32S3
+        ARG_clk,
+        ARG_cmd,
+        ARG_d0,
+        ARG_d1,
+        ARG_d2,
+        ARG_d3,
+        ARG_d4,
+        ARG_d5,
+        ARG_d6,
+        ARG_d7,
+        #endif
     };
     STATIC const mp_arg_t allowed_args[] = {
         { MP_QSTR_slot,     MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} },
@@ -138,6 +150,18 @@ STATIC mp_obj_t machine_sdcard_make_new(const mp_obj_type_t *type, size_t n_args
         { MP_QSTR_cs,       MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
         // freq is valid for both SPI and SDMMC interfaces
         { MP_QSTR_freq,     MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 20000000} },
+        #if CONFIG_IDF_TARGET_ESP32S3
+        { MP_QSTR_clk,      MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
+        { MP_QSTR_cmd,      MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
+        { MP_QSTR_d0,       MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
+        { MP_QSTR_d1,       MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
+        { MP_QSTR_d2,       MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
+        { MP_QSTR_d3,       MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
+        { MP_QSTR_d4,       MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
+        { MP_QSTR_d5,       MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
+        { MP_QSTR_d6,       MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
+        { MP_QSTR_d7,       MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
+        #endif
     };
     mp_arg_val_t arg_vals[MP_ARRAY_SIZE(allowed_args)];
     mp_map_t kw_args;
@@ -158,6 +182,17 @@ STATIC mp_obj_t machine_sdcard_make_new(const mp_obj_type_t *type, size_t n_args
         arg_vals[ARG_miso].u_obj, arg_vals[ARG_mosi].u_obj,
         arg_vals[ARG_sck].u_obj, arg_vals[ARG_cs].u_obj);
 
+    #if CONFIG_IDF_TARGET_ESP32S3
+    DEBUG_printf("  clk=%p, cmd=%p",
+        arg_vals[ARG_clk].u_obj, arg_vals[ARG_cmd].u_obj0);
+
+    DEBUG_printf("  d0=%p, d1=%p, d2=%p, d3=%p, d4=%p, d5=%p, d6=%p, d7=%p",
+        arg_vals[ARG_d0].u_obj, arg_vals[ARG_d1].u_obj,
+        arg_vals[ARG_d2].u_obj, arg_vals[ARG_d3].u_obj,
+        arg_vals[ARG_d4].u_obj, arg_vals[ARG_d5].u_obj,
+        arg_vals[ARG_d6].u_obj, arg_vals[ARG_d7].u_obj);
+    #endif
+
     int slot_num = arg_vals[ARG_slot].u_int;
     if (slot_num < 0 || slot_num > 3) {
         mp_raise_ValueError(MP_ERROR_TEXT("slot number must be between 0 and 3 inclusive"));
@@ -253,6 +288,18 @@ STATIC mp_obj_t machine_sdcard_make_new(const mp_obj_type_t *type, size_t n_args
 
         SET_CONFIG_PIN(slot_config, gpio_cd, ARG_cd);
         SET_CONFIG_PIN(slot_config, gpio_wp, ARG_wp);
+        #if CONFIG_IDF_TARGET_ESP32S3
+        SET_CONFIG_PIN(slot_config, clk, ARG_clk);
+        SET_CONFIG_PIN(slot_config, cmd, ARG_cmd);
+        SET_CONFIG_PIN(slot_config, d0, ARG_d0);
+        SET_CONFIG_PIN(slot_config, d1, ARG_d1);
+        SET_CONFIG_PIN(slot_config, d2, ARG_d2);
+        SET_CONFIG_PIN(slot_config, d3, ARG_d3);
+        SET_CONFIG_PIN(slot_config, d4, ARG_d4);
+        SET_CONFIG_PIN(slot_config, d5, ARG_d5);
+        SET_CONFIG_PIN(slot_config, d6, ARG_d6);
+        SET_CONFIG_PIN(slot_config, d7, ARG_d7);
+        #endif
 
         int width = arg_vals[ARG_width].u_int;
         if (width == 1 || width == 4 || (width == 8 && slot_num == 0)) {