Der teuerste Fehler mit Abstand
Wenn eine Schaltung nach dem Anlöten eines Sensors nicht mehr startet, liegt es überdurchschnittlich oft daran: Der Sensor hängt an einer Leitung, über die der Chip sein Programm liest.
Sechs Leitungen verbinden den Chip mit dem Flash-Baustein: ein Takt, eine Chipauswahl und vier Datenleitungen. Über sie holt sich der Chip beim Start den Bootloader, dann dein Programm — und danach jede Codezeile, die gerade nicht im Cache liegt.
Diese Verbindung ruht nie. Auch nicht, während dein Programm läuft. Wer eine dieser Leitungen als GPIO benutzt, unterbricht den Weg zum Programm.
Welche Pins das sind
| Chip | Flash und PSRAM |
|---|---|
| ESP32 | GPIO6, 7, 8, 9, 10, 11 sowie GPIO16 und GPIO17 |
| ESP32-S3 | GPIO26 bis GPIO32 |
| ESP32-S3 mit Octal-Flash oder Octal-PSRAM | zusätzlich GPIO33 bis GPIO37 |
| ESP32-C6 | GPIO24, 25, 26 sowie GPIO28, 29, 30 |
Beim ESP32-C6 fällt GPIO27 aus der Reihe: Das ist VDD_SPI, der Versorgungspin für den Flash ausserhalb des Gehäuses. Als GPIO taugt er nur, wenn der Flash von woanders versorgt wird — für die Planung also ebenfalls belegt.
Beim klassischen ESP32 kommen GPIO16 und GPIO17 nur dann dazu, wenn PSRAM im Modul sitzt. Da man das dem Blechdeckel nicht ansieht und Module mit PSRAM verbreitet sind, behandelt man die beiden am besten grundsätzlich als belegt.
Wie sich der Fehler anfühlt
Er sieht nicht aus wie ein Verdrahtungsfehler, sondern wie ein sporadischer Softwarefehler:
- Das Gerät startet gar nicht mehr, oder
- es startet und stürzt nach ein paar Sekunden ab, oder
- es läuft, solange dein Code klein ist, und stürzt ab, sobald mehr Code nachgeladen werden muss.
Der letzte Fall ist besonders unangenehm: Solange alles im Cache liegt, merkt der Chip nichts von der gestörten Leitung. Erst wenn er nachlädt, kippt es.
Wenn ein Gerät nach einer Hardwareänderung „komisch" wird — zuerst die Flash-Pins prüfen, bevor du im Code suchst.
Die gute Nachricht
Auf einem Modul sind die Flash-Pins meistens gar nicht herausgeführt. Das WROOM-32E zum Beispiel führt die sechs SPI-Leitungen nicht nach aussen — genau deshalb sind es dort 26 statt 34 GPIO.
Das heisst: Wer ein fertiges Modul benutzt, kann diesen Fehler oft gar nicht machen. Gefährlich wird es bei
- Boards mit blanken Chips statt Modulen,
- Modulen, die auch die Flash-Pins auf Pads legen (kommt vor),
- eigenen Leiterplatten mit direkt bestücktem Chip.
Wenn der Pin doch verlockend aussieht
Es gibt eine Ausnahme, und sie ist präzise: Beim ESP32-S3 sind GPIO33 bis GPIO37 nur dann belegt, wenn der Chip Flash oder PSRAM über acht Leitungen anspricht. Bei einer Variante ohne Octal-Speicher sind es gewöhnliche GPIO.
Ob das bei deinem Chip so ist, entscheidet die genaue Typenbezeichnung — nicht der Chipname. Im Zweifel: als belegt behandeln.
Quellen
- ESP32 Series Datasheet v5.2, Abschnitt 2.3.1 „Restrictions for GPIOs and RTC_GPIOs" und Abschnitt 2.6 „Pin Mapping Between Chip and Flash/PSRAM"
- ESP32-S3 Series Datasheet v2.2, Abschnitte 2.3.4 und 2.3.5 — GPIO26–32, Octal-Fall GPIO33–37
- ESP32-C6 Series Datasheet v1.5, Abschnitte 2.3.4 und 2.3.5 — GPIO24–26 und 28–30,
VDD_SPIauf GPIO27 - ESP-IDF Programming Guide, GPIO & RTC GPIO je Chip
- ESP32-WROOM-32E / ESP32-WROOM-32UE Datasheet v2.0 — 26 herausgeführte GPIO
Stand geprüft am 3. August 2026.