[psram] Support ESP32-S31/H4 (#17192)

This commit is contained in:
Jonathan Swoboda
2026-06-24 20:38:55 -04:00
committed by GitHub
parent e96717f6cd
commit 538f554bdb
2 changed files with 17 additions and 5 deletions
+8 -4
View File
@@ -10,9 +10,11 @@ from esphome.components.esp32 import (
VARIANT_ESP32,
VARIANT_ESP32C5,
VARIANT_ESP32C61,
VARIANT_ESP32H4,
VARIANT_ESP32P4,
VARIANT_ESP32S2,
VARIANT_ESP32S3,
VARIANT_ESP32S31,
add_idf_sdkconfig_option,
get_esp32_variant,
idf_version,
@@ -57,8 +59,10 @@ SPIRAM_MODES = {
VARIANT_ESP32: (TYPE_QUAD,),
VARIANT_ESP32C5: (TYPE_QUAD,),
VARIANT_ESP32C61: (TYPE_QUAD,),
VARIANT_ESP32H4: (TYPE_QUAD,),
VARIANT_ESP32S2: (TYPE_QUAD,),
VARIANT_ESP32S3: (TYPE_QUAD, TYPE_OCTAL),
VARIANT_ESP32S31: (TYPE_OCTAL,),
VARIANT_ESP32P4: (TYPE_HEX,),
}
@@ -67,8 +71,10 @@ SPIRAM_SPEEDS = {
VARIANT_ESP32: (40, 80, 120),
VARIANT_ESP32C5: (40, 80, 120),
VARIANT_ESP32C61: (40, 80),
VARIANT_ESP32H4: (32, 64),
VARIANT_ESP32S2: (40, 80, 120),
VARIANT_ESP32S3: (40, 80, 120),
VARIANT_ESP32S31: (40, 100, 200, 250),
VARIANT_ESP32P4: (20, 100, 200),
}
@@ -145,10 +151,8 @@ def validate_psram_mode(config):
raise cv.Invalid("ECC is only available in octal mode.")
if config[CONF_MODE] == TYPE_OCTAL:
variant = get_esp32_variant()
if variant != VARIANT_ESP32S3:
raise cv.Invalid(
f"Octal PSRAM is only supported on ESP32-S3, not {variant}"
)
if TYPE_OCTAL not in SPIRAM_MODES.get(variant, ()):
raise cv.Invalid(f"Octal PSRAM is not supported on {variant}")
return config
+9 -1
View File
@@ -12,9 +12,12 @@ from esphome.components.esp32 import (
VARIANT_ESP32C5,
VARIANT_ESP32C6,
VARIANT_ESP32H2,
VARIANT_ESP32H4,
VARIANT_ESP32H21,
VARIANT_ESP32P4,
VARIANT_ESP32S2,
VARIANT_ESP32S3,
VARIANT_ESP32S31,
)
import esphome.config_validation as cv
from esphome.const import CONF_ESPHOME, PlatformFramework
@@ -25,21 +28,26 @@ UNSUPPORTED_PSRAM_VARIANTS = [
VARIANT_ESP32C3,
VARIANT_ESP32C6,
VARIANT_ESP32H2,
VARIANT_ESP32H21,
]
SUPPORTED_PSRAM_VARIANTS = [
VARIANT_ESP32,
VARIANT_ESP32C5,
VARIANT_ESP32H4,
VARIANT_ESP32P4,
VARIANT_ESP32S2,
VARIANT_ESP32S3,
VARIANT_ESP32S31,
]
SUPPORTED_PSRAM_MODES = {
VARIANT_ESP32: ["quad"],
VARIANT_ESP32C5: ["quad"],
VARIANT_ESP32H4: ["quad"],
VARIANT_ESP32P4: ["hex"],
VARIANT_ESP32S2: ["quad"],
VARIANT_ESP32S3: ["quad", "octal"],
VARIANT_ESP32S31: ["octal"],
}
@@ -187,7 +195,7 @@ def _setup_psram_final_validation_test(
{"mode": "octal"},
{"variant": "ESP32"},
True,
r"Octal PSRAM is only supported on ESP32-S3",
r"Octal PSRAM is not supported on ESP32",
id="octal_mode_only_esp32s3",
),
pytest.param(