Informationen über PSRAM bei ESP32-S3-N16R8

Hallo,

ich habe mir zwei ESP32-S3-N16R8 aus China kommen lassen und bekomme mit allen Beispielen, die ich finden konnte, das PSRAM nicht zum laufen.

Sobald ich

psram:
  mode: octal
  speed: 80MHz

in den Code einfüge, blinkt die grüne LED nur noch im 0,5 Sekunden Takt. Der ESP stürzt im 0,5 Sekunden Takt ab. Ich habe dem Hersteller geschieben und der ist fest davon überzeugt, dass die 8MB PSRAM vorhanden sind und hat diverses Material mit Screenshots etc geschickt.

Kenn jemand einen Weg das installierte PSRAM zu überprüfen (am besten mit Espressif Tools und Anleitung für Dummys…)?

Ich mach das immer gleich nach dem Auspacken mit dem esptool, also z.B. für mein ESP32-S3 Dev-Board (16MB Flash und 8MB PSRAM, mit zwei USB Ports) war der Aufruf wie folgt:

venv ❯ esptool --port /dev/ttyACM0 flash-id 
esptool v5.0.2 
Connected to ESP32-S3 on /dev/ttyACM0: 
Chip type:          ESP32-S3 (QFN56) (revision v0.2) 
Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded PSRAM 8MB (AP_3v3) 
Crystal frequency:  40MHz 
MAC:                c0:4e:30:3a:15:00 Stub flasher running. 
Flash Memory Information:
========================= 
Manufacturer: 5e 
Device: 4018 
Detected flash size: 16MB Flash type set in eFuse: quad (4 data lines) 
Flash voltage set by eFuse: 3.3V Hard resetting via RTS pin... 

Unter Windows wird für --port eben der COM port angegeben der beim Einstecken im devicemanger aufpoppt.

Was purzelt denn auf der seriellen Schnittstelle raus, da müssten doch in den Ausgaben irgendwelche Hinweise und Fehlermeldungen sichtbar sein.

Deine Konfiguration für das PSRAM sieht erstmal OK aus. Für mein Modul hatte ich allerdings verschiedene Einstellungen machen müssen, weil damals die Partitionen usw. nicht vorgegeben waren, es also in platformio noch kein passendes Board gab. Das grobe YAML sieht so aus:


esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  flash_size: 16MB
  partitions: "common/default_16MB.csv"
  cpu_frequency: 240MHz
  framework:
    type: esp-idf

esphome:
  platformio_options:
    board_build.arduino.memory_type: qio_opi
    board_build.flash_mode: dio
    board_upload.maximum_ram_size: 524288


psram:
  mode: octal
  speed: 80MHz

logger:
  hardware_uart: UART0
  baud_rate: 115200
  level: VERBOSE

sensor:
  - platform: debug
    psram:
      name: "Free PSRAM"

1 „Gefällt mir“

Super, danke.

Es wird mir folgendes angezeigt:

esptool v5.1.0
Connected to ESP32-S3 on COM14:
Chip type:          ESP32-S3 (QFN56) (revision v0.2)
Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded PSRAM 8MB (AP_3v3)
Crystal frequency:  40MHz
MAC:                80:b5:4e:c6:e0:6c

Stub flasher running.

Flash Memory Information:
=========================
Manufacturer: c2
Device: 2018
Detected flash size: 16MB
Flash type set in eFuse: quad (4 data lines)
Flash voltage set by eFuse: 3.3V

Hard resetting via RTS pin...

Funktionieren tut der ESP leider trotzdem nicht, obwohl genau das Gleiche angezeigt wird (bis auf die MAC Adresse, Manufacturer und Device 2018 anstelle von 4018), wie bei einem ESP32-S3-N16R8 Board das funktioniert. Bei dem funktionierenden Board wird Device 4018 angezeigt.

Irgendetwas muss ich bei diesem Board anders einstellen.

Wo hast du die “default_16MB.csv“ Datei her (ich nehme eine von “ESP32-S3-N16R8/default_16MB.csv at main · shpegun60/ESP32-S3-N16R8 · GitHub“)? Könnte ich dort etwas einstellen müssen?

Ich musste etwas graben, ich denke ich hab mir die Infos z.B. vom diversen Foren, z.B.
hier und hier und dort zusammen getragen.

Der Inhalt des csv-Files sieht so aus:

# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x5000,
otadata,  data, ota,     0xe000,  0x2000,
app0,     app,  ota_0,   0x10000, 0x640000,
app1,     app,  ota_1,   0x650000,0x640000,
spiffs,   data, spiffs,  0xc90000,0x360000,
coredump, data, coredump,0xFF0000,0x10000,

Aber das bezieht sich auf die Aufteilung des Flash-Speichers, und hat meines Wissens nicht mit dem PSRAM zu tun. Vielleicht kannst du eine andere Einstellung von den oben genannten Links versuchen.

Wie schaut denn die Fehlermeldung in den Debug-Ausgaben aus?

Die Einstellungen von dem Link entsprechen deinen Einstellungen. Das Log zeigt:

[19:57:12]Rebooting...
[19:57:12]ESP-ROM:esp32s3-20210327
[19:57:12]Build:Mar 27 2021
[19:57:12]rst:0xc (RTC_SW_CPU_RST),boot:0x8 (SPI_FAST_FLASH_BOOT)
[19:57:12]Saved PC:0x4037a9e9
[19:57:12]SPIWP:0xee
[19:57:12]mode:DIO, clock div:1
[19:57:12]load:0x3fce2820,len:0x158c
[19:57:12]load:0x403c8700,len:0xd24
[19:57:12]load:0x403cb700,len:0x2f34
[19:57:12]entry 0x403c891c
[19:57:12]I (29) boot: ESP-IDF 5.5.1 2nd stage bootloader
[19:57:12]I (29) boot: compile time Nov 24 2025 19:55:51
[19:57:12]I (29) boot: Multicore bootloader
[19:57:12]I (29) boot: chip revision: v0.2
[19:57:12]I (32) boot: efuse block revision: v1.3
[19:57:12]I (36) boot.esp32s3: Boot SPI Speed : 80MHz
[19:57:12]I (39) boot.esp32s3: SPI Mode       : DIO
[19:57:12]I (43) boot.esp32s3: SPI Flash Size : 16MB
[19:57:12]I (47) boot: Enabling RNG early entropy source...
[19:57:12]I (52) boot: Partition Table:
[19:57:12]I (54) boot: ## Label            Usage          Type ST Offset   Length
[19:57:12]I (60) boot:  0 nvs              WiFi data        01 02 00009000 00005000
[19:57:12]I (67) boot:  1 otadata          OTA data         01 00 0000e000 00002000
[19:57:12]I (73) boot:  2 app0             OTA app          00 10 00010000 00640000
[19:57:12]I (80) boot:  3 app1             OTA app          00 11 00650000 00640000
[19:57:12]I (87) boot:  4 spiffs           Unknown data     01 82 00c90000 00360000
[19:57:12]I (93) boot:  5 coredump         Unknown data     01 03 00ff0000 00010000
[19:57:12]I (100) boot: End of partition table
[19:57:12]I (103) esp_image: segment 0: paddr=00010020 vaddr=3c030020 size=0c5a8h ( 50600) map
[19:57:12]I (119) esp_image: segment 1: paddr=0001c5d0 vaddr=3fc93400 size=02e5ch ( 11868) load
[19:57:12]I (122) esp_image: segment 2: paddr=0001f434 vaddr=40374000 size=00be4h (  3044) load
[19:57:12]I (126) esp_image: segment 3: paddr=00020020 vaddr=42000020 size=248e8h (149736) map
[19:57:12]I (159) esp_image: segment 4: paddr=00044910 vaddr=40374be4 size=0e7b0h ( 59312) load
[19:57:12]I (172) esp_image: segment 5: paddr=000530c8 vaddr=50000000 size=00020h (    32) load
[19:57:12]I (179) boot: Loaded app from partition at offset 0x10000
[19:57:12]I (179) boot: Disabling RNG early entropy source...
[19:57:12]Guru Meditation Error: Core  0 panic'ed (IllegalInstruction). Exception was unhandled.
[19:57:12]Memory dump at 0x4200c55c: fb7cd242 ffffffff ffffffff
[19:57:12]Core  0 register dump:
[19:57:12]PC      : 0x4200c560  PS      : 0x00060730  A0      : 0x8200a1f2  A1      : 0x3fceb240  
[19:57:12]A2      : 0x3fceb26c  A3      : 0x3c040000  A4      : 0x3c840000  A5      : 0x3fc96900  
[19:57:12]A6      : 0x3fc936b4  A7      : 0x3fc97624  A8      : 0x8200c55b  A9      : 0x3fceb220  
[19:57:12]A10     : 0x00000000  A11     : 0xffffffff  A12     : 0x0000000c  A13     : 0x3fc97630  
[19:57:12]A14     : 0x00100006  A15     : 0x00000000  SAR     : 0x00000001  EXCCAUSE: 0x00000000  
[19:57:12]EXCVADDR: 0x00000000  LBEG    : 0x40056f5c  LEND    : 0x40056f72  LCOUNT  : 0xffffffff  
[19:57:12]
[19:57:12]
[19:57:12]Backtrace: 0x4200c55d:0x3fceb240 0x4200a1ef:0x3fceb260 0x4200a237:0x3fceb2a0 0x4200bc3f:0x3fceb2c0 0x4200bc7a:0x3fceb2e0 0x40375d6a:0x3fceb310 0x403ccac4:0x3fceb340 0x403ccf09:0x3fceb380 0x403c8985:0x3fceb4b0 0x40045c01:0x3fceb570 0x40043ab6:0x3fceb6f0 0x40034c45:0x3fceb710
[19:57:12]
[19:57:12]
[19:57:12]
[19:57:12]
[19:57:12]ELF file SHA256: 5c15e97e8
[19:57:12]

in einer Dauerschleife.

Das sieht nicht gut aus. Ich denke es müsste eine Möglichkeit geben, den Backtrace: auszuwerten. Unter Platformio war das möglich, es müsste also auch irgenwie unter esphome gehen. Dann wäre es einfacher herauszufinden wo es kracht.

Was passiert wenn du das PSRAM auskonfigurierst? Läuft die FW dann? In meinen Links hat irgendjemand auch noch einen build_flags Eintrag unter platformio_options gemacht, könnte ja helfen.

esphome:
  platformio_options:
    build_flags: "-DBOARD_HAS_PSRAM"
    board_build.arduino.memory_type: qio_opi

Ohne PSRAM läuft das Board. Ich habe es leider nur wegen des PSRAMS für das Micro-Wake-Word gekauft…

Mit dem Backtrace werde ich mich heute nicht mehr befassen. Da müsste ich mich erst in die Espressif Tools einarbeiten.

Ich hab mal hier PSRAM - ESPHome - Smart Home Made Simple nachgelesen, bei den ESP32-S3 sind die modes quad ocatal oder hex. Vielleicht kannst du da mal rumprobieren. Es ist unwahrscheinlich, aber vielleicht hilft es ja.

Wegen dem backtrace schau mal hier: Troubleshooting - ESPHome - Smart Home Made Simple

ESP Stack Trace Decoder:

 0x4200c55d: xPortEnterCriticalTimeoutSafe at C:\Users\LutzHB\.platformio\packages\framework-espidf\components\freertos\FreeRTOS-Kernel\portable\xtensa\include\freertos\portmacro.h:579
    0x4200c55d: vPortEnterCriticalSafe at C:\Users\LutzHB\.platformio\packages\framework-espidf\components\freertos\FreeRTOS-Kernel\portable\xtensa\include\freertos\portmacro.h:588
    0x4200c55d: heap_caps_add_region_with_caps at C:\Users\LutzHB\.platformio\packages\framework-espidf\components\heap\heap_caps_init.c:321
    0x4200c55d: heap_caps_add_region_with_caps at C:\Users\LutzHB\.platformio\packages\framework-espidf\components\heap\heap_caps_init.c:274
    0x4200a1ef: esp_psram_extram_add_to_heap_allocator at C:\Users\LutzHB\.platformio\packages\framework-espidf\components\esp_psram\system_layer\esp_psram.c:418
    0x4200a237: __esp_system_init_fn_add_psram_to_heap at C:\Users\LutzHB\.platformio\packages\framework-espidf\components\esp_psram\system_layer\esp_psram.c:123
    0x4200bc3f: do_system_init_fn at C:\Users\LutzHB\.platformio\packages\framework-espidf\components\esp_system\startup.c:132
    0x4200bc7a: do_core_init at C:\Users\LutzHB\.platformio\packages\framework-espidf\components\esp_system\startup.c:170
    0x4200bc7a: start_cpu0_default at C:\Users\LutzHB\.platformio\packages\framework-espidf\components\esp_system\startup.c:204
    0x40375d6a: call_start_cpu0 at C:\Users\LutzHB\.platformio\packages\framework-espidf\components\esp_system\port\cpu_start.c:935

Fehler innerhalb von

static inline BaseType_t __attribute__((always_inline)) xPortEnterCriticalTimeoutSafe(portMUX_TYPE *mux, BaseType_t timeout)
{
    BaseType_t ret;
    if (xPortInIsrContext()) {
        ret = portTRY_ENTER_CRITICAL_ISR(mux, timeout);
    } else {
        ret = portTRY_ENTER_CRITICAL(mux, timeout);
    }
    return ret;
}

…so jetzt gebe ich für heute wirklich auf…

(Hab auch schon alle Kombinationen von Modes und Speed durchprobiert. Bei 40MHz ist die Absturzgeschwindigkeit langsamer. Einmal pro Sekunde anstelle von alle 0,5 Sekunden)

Vielen Dank für die Hilfe!!

Hmm, es ist sehr seltsam. Vielleicht kannst Du dir von den Experten auf dem ESPHome discord channel Discord noch Rat holen, ich meine es gab irgendwas mit PSRAM neulich, ich weiß nur nicht mehr was.

Hi, ich habe genau das gleiche Problem.. Konntest du schon eine Lösung finden?

Ich habe die beiden Boards an Aliexpress zurückgeschickt und das Geld zurück erhalten.

Ich hatte mit Leuten in drei verschiedenen Foren gesprochen, alles erdenkliche mit ESPHome, PlatformIO und Espressif Tools probiert. Das Ergebnis war immer, dass der Zugriff auf das PSRAM nicht funktioniert hat, obwohl das Espressif-Tool angezeigt hat, dass 8MB PSRAM vorhanden sind (wahscheinlich nur konfiguriert aber nicht lauffähig).

Habe auch alles mögliche ausprobiert und bin immer wieder in dem Boot loop gekommen, sobald ich “psram:” hinzugefügt habe.. Werde meine Boards auch zurückschicken und andere bestellen.