In case anyone could do with a working config, this is the right way to get PSRAM to work (for e.g. displaying an image) in ESPHome for the W32-SC01:
esp32:
board: esp32-s3-devkitc-1
flash_size: 16MB
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: "y"
CONFIG_ESP32S3_DATA_CACHE_64KB: "y"
CONFIG_ESPTOOLPY_FLASHMODE_QIO: y
CONFIG_SPIRAM_FETCH_INSTRUCTIONS: y
CONFIG_SPIRAM_RODATA: y
CONFIG_ESP_TASK_WDT_TIMEOUT_S: "10"
COMPILER_OPTIMIZATION_SIZE: y
CONFIG_SPIRAM_USE_CAPS_ALLOC: y
psram:
mode: quad
speed: 80MHz
# --- Display (ST7796 via mipi_spi octal SPI / 8-bit parallel) ---
spi:
- type: octal
id: octal_spi
clk_pin: 47
data_pins:
- 9
- ignore_strapping_warning: true
number: 46
- ignore_strapping_warning: true
number: 3
- 8
- 18
- 17
- 16
- 15
display:
- platform: mipi_spi
id: lcd
model: WT32-SC01-PLUS
rotation: 90
auto_clear_enabled: false
update_interval: never
# --- Backlight ---
power_supply:
- id: backlight
enable_on_boot: true
pin:
ignore_strapping_warning: true
number: GPIO45
# --- Touchscreen (FT5x06 via I2C) ---
i2c:
frequency: 400kHz
sda: 6
scl: 5
touchscreen:
- platform: ft63x6
id: touch
interrupt_pin: 7
And this is my simple image display snippet (not complete, but you get the idea) that works with it (without PSRAM, you can’t download images)
online_image:
- id: image
url: "http://placeholder.local/image.jpg"
format: PNG
type: RGB565
resize: 480x320
update_interval: never
on_download_finished:
- lvgl.image.update:
id: img_widget
src: image
on_error:
- logger.log: "Failed to download image"
lvgl:
pages:
- id: image_page
skip: true
bg_color: 0x000000
bg_opa: COVER
widgets:
- image:
id: img_widget
src: image
align: CENTER