From 4f12e578138e5c1b9b958083c711d34d3d10748d Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 4 Jun 2026 10:30:34 +1000 Subject: [PATCH 1/4] esp32: Remove ESP32-S2 & S3-specific default spiram config items. These are already the ESP-IDF defaults. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton --- ports/esp32/boards/sdkconfig.spiram_sx | 3 --- 1 file changed, 3 deletions(-) diff --git a/ports/esp32/boards/sdkconfig.spiram_sx b/ports/esp32/boards/sdkconfig.spiram_sx index efe53ada41625..27afc05961825 100644 --- a/ports/esp32/boards/sdkconfig.spiram_sx +++ b/ports/esp32/boards/sdkconfig.spiram_sx @@ -1,8 +1,5 @@ # MicroPython on ESP32-S2 and ESP32-PAD1_subscript_3, ESP IDF configuration with SPIRAM support CONFIG_SPIRAM_MODE_QUAD=y -CONFIG_SPIRAM_TYPE_AUTO=y -CONFIG_SPIRAM_CLK_IO=30 -CONFIG_SPIRAM_CS_IO=26 CONFIG_SPIRAM_SPEED_80M=y CONFIG_SPIRAM=y CONFIG_SPIRAM_BOOT_INIT=y From b721ee4e9b9b70061744dcb9e87601856dfe3efe Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 4 Jun 2026 10:31:28 +1000 Subject: [PATCH 2/4] esp32: Don't enable the free_ram config for ESP32_GENERIC_C5. This was added with C5 support in 30c74fc3b49, but probably unnecessary for C5 which has closer total internal RAM to C3 and C6, compared to C2 which is the chip this was added for. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton --- ports/esp32/boards/mpconfigboard_esp32c5_common.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake b/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake index 326bc4e75d188..a2133fa97fc0d 100644 --- a/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake +++ b/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake @@ -5,5 +5,4 @@ set(SDKCONFIG_DEFAULTS boards/sdkconfig.riscv boards/sdkconfig.ble boards/sdkconfig.240mhz - boards/sdkconfig.free_ram ) From 9b0344f1cb4ad4f532b8c76fbe1e195278cc408f Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 4 Jun 2026 10:34:03 +1000 Subject: [PATCH 3/4] esp32: Enable PSRAM support on ESP32_GENERIC_C5. Similar to S2 & S3, it should be OK to detect at boot if present or not. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton --- ports/esp32/boards/ESP32_GENERIC_C5/board.md | 6 +++++- .../boards/SPARKFUN_THINGPLUS_ESP32C5/mpconfigboard.cmake | 3 +-- ports/esp32/boards/mpconfigboard_esp32c5_common.cmake | 1 + ports/esp32/boards/sdkconfig.spiram_sx | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ports/esp32/boards/ESP32_GENERIC_C5/board.md b/ports/esp32/boards/ESP32_GENERIC_C5/board.md index 82bac44b96fd7..dc9365deafc56 100644 --- a/ports/esp32/boards/ESP32_GENERIC_C5/board.md +++ b/ports/esp32/boards/ESP32_GENERIC_C5/board.md @@ -1,2 +1,6 @@ The following files are firmware images that should work on most ESP32-C5-based -boards with at least 4MiB of flash and 40MHz/48MHz crystal frequency. +boards with at least 4MiB of flash and 40MHz/48MHz crystal frequency. + +This firmware supports configurations with and without SPIRAM (also known as +PSRAM) and will auto-detect a connected SPIRAM chip at startup and allocate +the MicroPython heap accordingly. diff --git a/ports/esp32/boards/SPARKFUN_THINGPLUS_ESP32C5/mpconfigboard.cmake b/ports/esp32/boards/SPARKFUN_THINGPLUS_ESP32C5/mpconfigboard.cmake index 8ce60b1b24fe2..0d4b56e98d385 100644 --- a/ports/esp32/boards/SPARKFUN_THINGPLUS_ESP32C5/mpconfigboard.cmake +++ b/ports/esp32/boards/SPARKFUN_THINGPLUS_ESP32C5/mpconfigboard.cmake @@ -1,7 +1,6 @@ include(boards/mpconfigboard_esp32c5_common.cmake) list(APPEND SDKCONFIG_DEFAULTS - boards/sdkconfig.flash_qio_80m - boards/sdkconfig.spiram) + boards/sdkconfig.flash_qio_80m) set(MICROPY_FROZEN_MANIFEST ${MICROPY_BOARD_DIR}/manifest.py) diff --git a/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake b/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake index a2133fa97fc0d..1102500a9b46c 100644 --- a/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake +++ b/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake @@ -5,4 +5,5 @@ set(SDKCONFIG_DEFAULTS boards/sdkconfig.riscv boards/sdkconfig.ble boards/sdkconfig.240mhz + boards/sdkconfig.spiram_sx ) diff --git a/ports/esp32/boards/sdkconfig.spiram_sx b/ports/esp32/boards/sdkconfig.spiram_sx index 27afc05961825..af0ee3e9a005e 100644 --- a/ports/esp32/boards/sdkconfig.spiram_sx +++ b/ports/esp32/boards/sdkconfig.spiram_sx @@ -1,4 +1,4 @@ -# MicroPython on ESP32-S2 and ESP32-PAD1_subscript_3, ESP IDF configuration with SPIRAM support +# Extra ESP-IDF config for quad mode PSRAM (SPIRAM) support on ESP32-C5, ESP32-S2 & ESP32-S3 CONFIG_SPIRAM_MODE_QUAD=y CONFIG_SPIRAM_SPEED_80M=y CONFIG_SPIRAM=y From 3f5247a5c933a75660fe72e7bdbc35339d2a9640 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 4 Jun 2026 11:06:37 +1000 Subject: [PATCH 4/4] esp32: Rename the sdkconfig.spiram_xxx config snippets. They now more correctly describe what they each do. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton --- ports/esp32/boards/ESP32_GENERIC/mpconfigvariant_SPIRAM.cmake | 2 +- ports/esp32/boards/LILYGO_T3_S3/mpconfigboard.cmake | 2 +- ports/esp32/boards/M5STACK_ATOMS3_LITE/mpconfigboard.cmake | 2 +- ports/esp32/boards/SIL_MANT1S/mpconfigboard.cmake | 2 +- ports/esp32/boards/UM_TINYPICO/mpconfigboard.cmake | 2 +- ports/esp32/boards/mpconfigboard_esp32c5_common.cmake | 2 +- ports/esp32/boards/mpconfigboard_esp32s2_common.cmake | 2 +- ports/esp32/boards/mpconfigboard_esp32s3_common.cmake | 2 +- .../esp32/boards/{sdkconfig.spiram => sdkconfig.spiram_esp32} | 3 ++- ports/esp32/boards/sdkconfig.spiram_oct | 2 +- .../boards/{sdkconfig.spiram_sx => sdkconfig.spiram_quad} | 2 +- 11 files changed, 12 insertions(+), 11 deletions(-) rename ports/esp32/boards/{sdkconfig.spiram => sdkconfig.spiram_esp32} (83%) rename ports/esp32/boards/{sdkconfig.spiram_sx => sdkconfig.spiram_quad} (84%) diff --git a/ports/esp32/boards/ESP32_GENERIC/mpconfigvariant_SPIRAM.cmake b/ports/esp32/boards/ESP32_GENERIC/mpconfigvariant_SPIRAM.cmake index 6b467d562ee0c..55463ecf93b80 100644 --- a/ports/esp32/boards/ESP32_GENERIC/mpconfigvariant_SPIRAM.cmake +++ b/ports/esp32/boards/ESP32_GENERIC/mpconfigvariant_SPIRAM.cmake @@ -1,5 +1,5 @@ list(APPEND SDKCONFIG_DEFAULTS - boards/sdkconfig.spiram + boards/sdkconfig.spiram_esp32 ) list(APPEND MICROPY_DEF_BOARD diff --git a/ports/esp32/boards/LILYGO_T3_S3/mpconfigboard.cmake b/ports/esp32/boards/LILYGO_T3_S3/mpconfigboard.cmake index 4c1c2821dd43d..66428a8c2698c 100644 --- a/ports/esp32/boards/LILYGO_T3_S3/mpconfigboard.cmake +++ b/ports/esp32/boards/LILYGO_T3_S3/mpconfigboard.cmake @@ -4,7 +4,7 @@ set(SDKCONFIG_DEFAULTS boards/sdkconfig.base boards/sdkconfig.ble boards/sdkconfig.240mhz - boards/sdkconfig.spiram_sx + boards/sdkconfig.spiram_quad boards/sdkconfig.flash_qio_80m ${MICROPY_BOARD_DIR}/sdkconfig.board ) diff --git a/ports/esp32/boards/M5STACK_ATOMS3_LITE/mpconfigboard.cmake b/ports/esp32/boards/M5STACK_ATOMS3_LITE/mpconfigboard.cmake index 2eb83f4bf17a3..2cd46827750ad 100644 --- a/ports/esp32/boards/M5STACK_ATOMS3_LITE/mpconfigboard.cmake +++ b/ports/esp32/boards/M5STACK_ATOMS3_LITE/mpconfigboard.cmake @@ -3,4 +3,4 @@ include(boards/mpconfigboard_esp32s3_common.cmake) list(APPEND SDKCONFIG_DEFAULTS boards/sdkconfig.flash_qio_80m) # This board has no PSRAM -list(REMOVE_ITEM SDKCONFIG_DEFAULTS boards/sdkconfig.spiram_sx) +list(REMOVE_ITEM SDKCONFIG_DEFAULTS boards/sdkconfig.spiram_quad) diff --git a/ports/esp32/boards/SIL_MANT1S/mpconfigboard.cmake b/ports/esp32/boards/SIL_MANT1S/mpconfigboard.cmake index 3b85060b5c8f9..7c2bc27f78ad7 100644 --- a/ports/esp32/boards/SIL_MANT1S/mpconfigboard.cmake +++ b/ports/esp32/boards/SIL_MANT1S/mpconfigboard.cmake @@ -1,7 +1,7 @@ include(boards/mpconfigboard_esp32_common.cmake) list(APPEND SDKCONFIG_DEFAULTS - boards/sdkconfig.spiram + boards/sdkconfig.spiram_esp32 boards/sdkconfig.240mhz boards/sdkconfig.flash_qio_80m boards/SIL_MANT1S/sdkconfig.board diff --git a/ports/esp32/boards/UM_TINYPICO/mpconfigboard.cmake b/ports/esp32/boards/UM_TINYPICO/mpconfigboard.cmake index 5c9645d19bcd5..e25d285d9b78b 100644 --- a/ports/esp32/boards/UM_TINYPICO/mpconfigboard.cmake +++ b/ports/esp32/boards/UM_TINYPICO/mpconfigboard.cmake @@ -2,7 +2,7 @@ include(boards/mpconfigboard_esp32_common.cmake) list(APPEND SDKCONFIG_DEFAULTS boards/sdkconfig.240mhz - boards/sdkconfig.spiram + boards/sdkconfig.spiram_esp32 boards/sdkconfig.flash_qio_80m boards/UM_TINYPICO/sdkconfig.board ) diff --git a/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake b/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake index 1102500a9b46c..490f12571df5d 100644 --- a/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake +++ b/ports/esp32/boards/mpconfigboard_esp32c5_common.cmake @@ -5,5 +5,5 @@ set(SDKCONFIG_DEFAULTS boards/sdkconfig.riscv boards/sdkconfig.ble boards/sdkconfig.240mhz - boards/sdkconfig.spiram_sx + boards/sdkconfig.spiram_quad ) diff --git a/ports/esp32/boards/mpconfigboard_esp32s2_common.cmake b/ports/esp32/boards/mpconfigboard_esp32s2_common.cmake index 6907adb81926a..ea97ad0d5c501 100644 --- a/ports/esp32/boards/mpconfigboard_esp32s2_common.cmake +++ b/ports/esp32/boards/mpconfigboard_esp32s2_common.cmake @@ -2,5 +2,5 @@ set(IDF_TARGET esp32s2) set(SDKCONFIG_DEFAULTS boards/sdkconfig.base - boards/sdkconfig.spiram_sx + boards/sdkconfig.spiram_quad ) diff --git a/ports/esp32/boards/mpconfigboard_esp32s3_common.cmake b/ports/esp32/boards/mpconfigboard_esp32s3_common.cmake index 96c251abd66e0..15eaf60167ec7 100644 --- a/ports/esp32/boards/mpconfigboard_esp32s3_common.cmake +++ b/ports/esp32/boards/mpconfigboard_esp32s3_common.cmake @@ -3,5 +3,5 @@ set(IDF_TARGET esp32s3) set(SDKCONFIG_DEFAULTS boards/sdkconfig.base boards/sdkconfig.ble - boards/sdkconfig.spiram_sx + boards/sdkconfig.spiram_quad ) diff --git a/ports/esp32/boards/sdkconfig.spiram b/ports/esp32/boards/sdkconfig.spiram_esp32 similarity index 83% rename from ports/esp32/boards/sdkconfig.spiram rename to ports/esp32/boards/sdkconfig.spiram_esp32 index 79c7510b5380d..db0d5380c9262 100644 --- a/ports/esp32/boards/sdkconfig.spiram +++ b/ports/esp32/boards/sdkconfig.spiram_esp32 @@ -1,4 +1,5 @@ -# MicroPython on ESP32, ESP IDF configuration with SPIRAM support +# Extra ESP-IDF config for PSRAM (SPIRAM) support on original ESP32 +# (includes workarounds not needed on other chips, which should use sdkconfig.spiram_quad.) CONFIG_SPIRAM=y CONFIG_SPIRAM_CACHE_WORKAROUND=y diff --git a/ports/esp32/boards/sdkconfig.spiram_oct b/ports/esp32/boards/sdkconfig.spiram_oct index aaea64fcd5c08..25af2a395cf46 100644 --- a/ports/esp32/boards/sdkconfig.spiram_oct +++ b/ports/esp32/boards/sdkconfig.spiram_oct @@ -1,3 +1,3 @@ -# MicroPython on ESP32-S2 and ESP32-PAD1_subscript_3, ESP IDF configuration with SPIRAM support in Octal mode +# Extra ESP-IDF config for Octal mode PSRAM (SPIRAM) support on ESP32-S3 CONFIG_SPIRAM_MODE_QUAD= CONFIG_SPIRAM_MODE_OCT=y diff --git a/ports/esp32/boards/sdkconfig.spiram_sx b/ports/esp32/boards/sdkconfig.spiram_quad similarity index 84% rename from ports/esp32/boards/sdkconfig.spiram_sx rename to ports/esp32/boards/sdkconfig.spiram_quad index af0ee3e9a005e..b3b60bf9c2dbf 100644 --- a/ports/esp32/boards/sdkconfig.spiram_sx +++ b/ports/esp32/boards/sdkconfig.spiram_quad @@ -1,4 +1,4 @@ -# Extra ESP-IDF config for quad mode PSRAM (SPIRAM) support on ESP32-C5, ESP32-S2 & ESP32-S3 +# Extra ESP-IDF config for Quad mode PSRAM (SPIRAM) support on ESP32-C5, ESP32-S2 & ESP32-S3 CONFIG_SPIRAM_MODE_QUAD=y CONFIG_SPIRAM_SPEED_80M=y CONFIG_SPIRAM=y