8MB psram requires octal mode, you need to specify that in your config.
I got this working on the Xiao ESP32 S3.
I had to specify each detail of the board for the PSRAM to be recognised.
Not sure why some boards need this and some do not.
Here are the relevant parts of my config, this is partially copied ffrom sample projects online, I have not tested to see if all of it is actually needed.
esphome:
name: $node_name
friendly_name: $verbose_name
comment: $comment
platformio_options:
board_build.arduino.memory_type: qio_opi
board_build.flash_mode: qio
build_flags:
- "-DCONFIG_SPIRAM_CACHE_WORKAROUND"
- "-mfix-esp32-psram-cache-issue"
esp32:
board: esp32-s3-devkitc-1
variant: esp32s3
flash_size: 8MB
framework:
type: arduino
psram:
mode: octal
speed: 80MHz
I am able to use the version of the driver that can do partial updates and it seems to work.
BTW. The ESP32 S2 above died … USB stopped working, the second one I have had that did this … buyer beware :-/
Thanks
I started looking at which parts of the config I posted below were redundant.
To start, I commented out the platformio_options section and the S3’s PSRAM was no longer recognised.
I did not carry on :-/
I am starting with an ESP32 S3 480 x480.
I finished my building and OTA-upload with this:
......
Copied firmware to /data/build/esp-display/.pioenvs/esp-display/firmware.ota.bin
======================== [SUCCESS] Took 180.40 seconds ========================
INFO Build Info: config_hash=0xd1dd60ed build_time_str=2026-02-15 14:42:20 +0100
INFO Successfully compiled program.
INFO Connecting to 192.168.178.65 port 3232...
INFO Connected to 192.168.178.65
INFO Uploading /data/build/esp-display/.pioenvs/esp-display/firmware.bin (1078112 bytes)
Uploading: [============================================================] 100% Done...
INFO Upload took 2.97 seconds, waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.178.65 using esphome API
INFO Successfully resolved esp-display @ 192.168.178.65 in 0.000s
WARNING Can't connect to ESPHome API for esp-display @ 192.168.178.65: Error connecting to [AddrInfo(family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, proto=6, sockaddr=IPv4Sockaddr(address='192.168.178.65', port=6053))]: [Errno 113] Connect call failed ('192.168.178.65', 6053) (SocketAPIError)
INFO Trying to connect to esp-display @ 192.168.178.65 in the background
I only see a black screen.
When I push the reset-button I get the old application.
These are my relevant configs:
esphome:
name: "esp-display"
friendly_name: "esp-display"
comment: "Guition ESP32-S3-4848S040 480px * 480px Smart Screen"
platformio_options:
build_flags: "-DBOARD_HAS_PSRAM"
board_build.arduino.memory_type: qio_opi
board_build.flash_mode: qio
# on_boot:
# - priority: 400
# then:
# - script.execute: update_loading_page
esp32:
board: esp32s3box
flash_size: 16MB
# board_build.flash_mode: dio
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: "y"
CONFIG_ESP32S3_DATA_CACHE_64KB: "y"
CONFIG_ESP32S3_DATA_CACHE_LINE_64B: "y"
CONFIG_PM_ENABLE: "y" # Enable power management
CONFIG_PM_DFS_INIT_AUTO: "y" # Enable automatic dynamic frequency scaling
psram:
mode: octal
speed: 80MHz
preferences:
flash_write_interval: 5min
#-------------------------------------------
# LCD Back light
#-------------------------------------------
output:
- platform: ledc
pin: GPIO47
id: display_backlight_output
light:
- platform: monochromatic
id: display_backlight
name: LCD Backlight
entity_category: config
output: display_backlight_output
restore_mode: ALWAYS_ON
default_transition_length: 250ms
#-------------------------------------------
# Touchscreen gt911
#-------------------------------------------
i2c:
- id: bus_a
sda: GPIO08
scl: GPIO18
scan: true
sda_pullup_enabled: true
scl_pullup_enabled: true
frequency: 100kHz
- sda: GPIO41
scl: GPIO40
scan: true
sda_pullup_enabled: true
scl_pullup_enabled: true
frequency: 50kHz
id: bus_b
spi:
clk_pin: 7
mosi_pin: 6
touchscreen:
- platform: gt911
i2c_id: bus_a
address: 0x5D
id: my_touchscreen
display: my_display
interrupt_pin:
number: GPIO3
ignore_strapping_warning: true
# on_touch:
# - script.execute: track_activity
# - logger.log:
# format: Touch at (%d, %d)
# args: [touch.x, touch.y]
#-------------------------------------------
# Display
#-------------------------------------------
display:
- platform: ili9xxx
id: my_display
model: S3BOX
data_rate: 40MHz
dimensions:
width: 320
height: 240
cs_pin: 5
dc_pin: 4
reset_pin:
number: 48
inverted: true
update_interval: never
auto_clear_enabled: false
invert_colors: false
Can someone point me what I am doing wrong?