Crash nach Aufwachen aus Sleep

Mein neuer ESPuino funktioniert vor einem Sleep genau wie erwartet. Karten lassen sich abspielen, Buttons funktionieren, alles gut.

Dann mach ich einen Sleep, indem ich die Encoder-Taste lang halte. Er geht auch korrekt in den Schlafmodus.

Beim Aufwachen geht’s dann schief.

Hier gibt es zwei Varianten, ich kann nicht ganz nachvollziehen, wann welche passiert, aber die 2. ist mir nicht passiert wenn ich USB anstecke, kann da also kein Log dazu schreiben.

Variante 1:

N [553243] RFID-Karte erkannt: 1c-cf-41-06 
N [553243] Card type: ISO-14443
I [553248] RFID-Karte empfangen: 028207065006
N [553251] Modus: Webstream
N [553257] Neue Playlist mit 1 Titel(n) empfangen
D [553257] Free heap: 131408
N [553652] 'https://orf-live.ors-shoutcast.at/oe3-q2a?cb=1765405775702&player=sound_v1&referer=sound.orf.at&userid=4e6af5d8-759c-4984-9808-6036b3ff7da4' wird abgespielt (1 von 1)
N [559924] Gehe jetzt in Deep Sleep!
N [559925] shutdown audioplayer..
N [559928] shutdown amplifier..
N [559928] Lautsprecher ausgeschaltet
N [559929] shutdown LED..
N [559930] shutdown SD card (SD_MMC)..
D [560402] PN5180 firmware version=4.0
N [560402] prepare low power card detection...
D [560541] PN5180 IRQ PIN (32) state: 0
N [560550] switch to low power card detection: success
N [560553] deep-sleep, good night.......
E (40) esp_core_dump_flash: No core dump partition found!
E (40) esp_core_dump_flash: No core dump partition found!
*** FATAL: Reading more than 508 bytes is not supported!
I [7219] Kartenerkennung via 'low power' erfolgreich durchgeführt
E [7219] ESP32 wurde vom Kartenleser aus dem Deepsleep aufgeweckt. Allerdings wurde keine bekannte Karte gefunden. Gehe zurück in den Deepsleep...
E (40) esp_core_dump_flash: No core dump partition found!
E (40) esp_core_dump_flash: No core dump partition found!

Beide Male habe ich die gleiche Karte verwendet. Vor dem Deep Sleep spielt sie sauber das Webradio ab, nach dem Deepsleep gibt es das “Reading more than 508 bytes is not supported” und mit Ausnahme von dem Output reagiert der ESPUino gar nicht.

Edit: Der Teil ab dem *** FATAL: wiederholt sich alle paar Sekunden von allein, selbst wenn keine Karte mehr am Card Reader ist.

Er funktioniert erst wieder, wenn ich den Strom komplett abstecke oder den Reset-Knopf betätige. SD-Karte im laufenden Betrieb entfernen und neu einsetzen macht hier gar nichts.

Variante 2:

Das ist mir nur ohne USB untergekommen, also hab ich da keinen Log.

Was hier passiert ist, dass der Neopixel-Ring beim Neustart erst gelb blinked dreht, und dann rot leuchtet. Keine weitere Reaktion.

Er funktioniert wieder normal wenn ich entweder den Strom entferne, die Reset-Taste drücke oder die SD-Karte im ansonsten laufenden Betrieb entferne und wieder einsetze.

Das klingt ähnlich zu diesem Fehler: Neustart schlägt fehl, abhängig von SD-Karte - #40 von SZenglein

Allerdings sollte der ja, wenn ich den Thread richtig lese, schon behoben sein.

Hat wer vielleicht eine Idee was bei mir los ist?

Mein Setup:

  • ESPuino Complete 5.1, grünes Board
  • LFP-Batterie
  • PN5180
  • Software vom neuesten Commit am Master-Branch (Commit Hash 7a878c3518c2885699e44fc7304db5405275cef0)
  • settings.h ist als Attachment angehängt

settings.h.txt (18,7 KB)

Ein bisschen weiteres Troubleshooting zu Variante 1:

Wenn ich #define PN5180_ENABLE_LPCD ausschalte, dann funktioniert das Aufwachen über Tasten korrekt. Der ESPuino wacht korrekt auf und kann Karten lesen und abspielen.

Mit #define PN5180_ENABLE_LPCD aktiv funktioniert Aufwecken über Tasten gar nicht. Die nachstehende Fehlermeldung kommt rund alle 5 Sekunden, egal ob eine Karte aufliegt oder nicht:

*** FATAL: Reading more than 508 bytes is not supported!
I [6217] Kartenerkennung via 'low power' erfolgreich durchgeführt
E [6217] ESP32 wurde vom Kartenleser aus dem Deepsleep aufgeweckt. Allerdings wurde keine bekannte Karte gefunden. Gehe zurück in den Deepsleep...
E (40) esp_core_dump_flash: No core dump partition found!
E (40) esp_core_dump_flash: No core dump partition found!

Ich muss zugeben, dass ich LPCD schon seit Jahren nicht mehr getestet/verwendet habe - vielleicht kann @tueddy dazu was sagen.

Wenn man die Tasten aktiviertem LPCD nicht zum Aufwecken benutzen kann, dann ist das auf jeden Fall ein Bug. Meine Erwartungshaltung wäre auch, dass das funktionieren müsste. Also die Funktionsweise ist so, dass der Port-Expander und auch der PN5180 einen Interrupt werfen, um den ESP32 aufzuwecken. Das passiert auf unterschiedlichen GPIOs. Insofern muss der ESP32 vor dem Deepsleep so konfiguriert werden, dass er mit meinen GPIOs aufweckbar ist.

Vielleicht ist das aktuell (müsste ich im Code schauen) nicht korrekt implementiert und es wird nur auf einen der beiden GPIOs geschaut.

Das mit dem zyklischen Aufwachen ist schwer zu greifen. Auch im Modus PAUSE_WHEN_RFID_REMOVED haben wir da Probleme und es gab schon diverse Versuche, das zu beheben. Aber es werden immer wieder mal falsche Events detektiert. Im Grunde baut halt mehr oder weniger jeder ein anderes Gehäuse und insofern haben wir keine Bedingungen, die überall gleich wären.

PS: Vorbildliche Analyse/Beschreibung des Problems. Ich wünschte das wäre hier immer so :smiley:.

Gut zu wissen, dass LPCD nicht die Standardvariante ist. Ich bin davon ausgegangen, dass das die Norm ist.

Bin ich irgendwo bei meiner Config weit weg von der Norm-Config auf Weisen die mir Probleme machen könnten?

Vielleicht ist das aktuell (müsste ich im Code schauen) nicht korrekt implementiert und es wird nur auf einen der beiden GPIOs geschaut.

Wenn ich Zeit hab schau ich mal rein. Akzeptiert ihr PRs auf Github?

Das mit dem zyklischen Aufwachen ist schwer zu greifen. Auch im Modus PAUSE_WHEN_RFID_REMOVED haben wir da Probleme und es gab schon diverse Versuche, das zu beheben. Aber es werden immer wieder mal falsche Events detektiert. Im Grunde baut halt mehr oder weniger jeder ein anderes Gehäuse und insofern haben wir keine Bedingungen, die überall gleich wären.

PAUSE_WHEN_RFID_REMOVED hab ich deaktiviert. Das zyklische Aufwachen hab ich nur wenn ich LPCD an hab.

Der ESPuino unterstützt ja extrem viel unterschiedliche Hardware. Das macht’s sicher nicht einfach mit den ganzen Kombinationen.

PS: Vorbildliche Analyse/Beschreibung des Problems. Ich wünschte das wäre hier immer so :smiley:.

Danke! Bin Software-Entwickler :slight_smile:

1 „Gefällt mir“

Noch ein Detail, welches eventuell mit der Thematik zusammenhängt:

Wenn ich eine Karte auf dem ESPuino liegen lasse, dann startet das Lied alle ~5 Sekunden neu. Irgendwas scheint dafür zu sorgen, dass der RFID-Leser ständig so tut als würde die Karte neu aufgelegt werden. Kann das mit dem Fehler von oben zusammenhängen?

das könnte darauf hindeuten das der Empfang grenzwertig/zu schlecht ist.

Geht es besser wenn die Karte nähre dran ist?

(Ich habe LPCD bei mir wieder deaktiviert, machte zuviele Pseudo Lesungen)

Ein Lesefehler in der PN5180 Bibliothek, das deutet stark auf Hardware/Verkabelung oder RESET Timing Problem. Ebenso wie die schlechte RFID Erkennung.
Wenn möglich tausche den PN5180 Leser.

Akzeptiert ihr PRs auf Github?

Immer gern, Bugfixes werden meist sofort übernommen. Neue Features bitte zunächst hier im Forum vorstellen.

Hab mal den PN5180 aus dem Gehäuse geholt und die Karte direkt aufgelegt.

Das Problem mit dem Neuerkennen bleibt bestehen, die Karte wird nach unterschiedlichen Intervallen (zwischen 0.5 und 10 Sekunden) als neu aufgelegt erkannt. Hier ist der Log von zwei Erkennungen:

N [51649] RFID-Karte erkannt: b7-82-20-2d 
N [51650] Card type: ISO-14443
I [51658] RFID-Karte empfangen: 183130032045
D [51663] Freier Speicher: 66992 Bytes
N [51664] Playlist-Generierung mit Rekursionstiefe: 0
N [51685] Anzahl gültiger Files/Webstreams: 23
D [51685] Hidden files: 0
N [51690] Modus: Spiele alle Tracks (sortiert) des Ordners '/1,2,3 im Sauseschritt'
I [51690] Sorting files using case-insensitive natural sorting
N [51719] Neue Playlist mit 23 Titel(n) empfangen
D [51720] Free heap: 134872
N [51742] '/1,2,3 im Sauseschritt/01 Jetzt geht es los.mp3' wird abgespielt (1 von 23)
D [60009] RSSI: -68 dBm
N [69240] RFID-Karte erkannt: b7-82-20-2d 
N [69240] Card type: ISO-14443
I [69244] RFID-Karte empfangen: 183130032045
D [69249] Freier Speicher: 109924 Bytes
N [69249] Playlist-Generierung mit Rekursionstiefe: 0
N [69268] Anzahl gültiger Files/Webstreams: 23
D [69268] Hidden files: 0
N [69269] Modus: Spiele alle Tracks (sortiert) des Ordners '/1,2,3 im Sauseschritt'
I [69284] Sorting files using case-insensitive natural sorting
N [69300] Neue Playlist mit 23 Titel(n) empfangen
D [69300] Free heap: 134900
N [69324] '/1,2,3 im Sauseschritt/01 Jetzt geht es los.mp3' wird abgespielt (1 von 23)

Die Verkabelung habe ich überprüft, auch mit einem Multimeter nachgemessen. Schaut alles sauber aus, bis hin zur Verlötung vom Connector am Complete.

Ich werde, bei Zeiten mal den PN5180 tauschen. Das ist der, der bei der Bestellung vom Complete dabei war, hab keinen Weiteren herumliegen.

Wenn ich nicht LPCD verwende, dann passiert das mit dem *** FATAL: Reading more than 508 bytes is not supported! nie.

Ich habe übrigens unterschiedliche RFID-Karten probiert (ich hab einen alten Tonuino gehabt und migriere grad rüber auf den ESPuino). Das Verhalten ist identisch sowohl bei alten Karten vom Tonuino (hab mehrere Batches bestellt damals, alle verhalten sich gleich am ESPuino) als auch bei der Karte, die bei der Bestellung vom ESPuino mit darbei war. Bin mir also ziemlich sicher, dass es nicht an den Karten liegt.

Abgesehen von einem potentiell defekten PN5180, kann es irgendwie an der Konfig liegen? Gibt es eine Option, mit der man Wiedererkennen der gleichen Karte ausschließen kann?

Ich weiß nicht, ob das nur ein Problem bei PAUSE_WHEN_RFID_REMOVED ist, oder ob das ein Lead ist?

Schlussendlich kaufe ich diese bei AliExpress auch nur ein und leite die 1:1 durch. Wir hatten in der Vergangenheit auch schon das Problem, dass manche Karten nicht erkannt wurden, das Problem hat sich in der Zwischenzeit erledigt. Also kurzum: Ich kann da in keiner Form eine Qualitätskontrolle irgendwie drauf machen. Ich hätte das am liebsten ja mit einem JST-Konnektor, so dass man das einfach nur stecken muss. Traue mich jedoch ein Antennendesign diesbzgl. zu. Sowas von JLC löten zu lassen ist indes kein Problem.

Auf jeden Fall, um die Frage von weiter oben aufzugreifen: LPCD ist definitiv nicht Standardkonfiguration. Ein genaues Feedback habe ich da nicht, würde aber erwarten, dass die meisten Leute das nicht verwenden. Hast du den PN5180 eigentlich dafür flashen müssen oder ist da inzwischen eine FW drauf, die ab Werk neu genug ist?

Nee, da gibt’s im Grunde diesbzgl. ja nix falsch zu machen.

Klar, ist hier. beschrieben.

Kannst ja mal einen Blick in die PN5180.cpp werfen. Während der RC522 ne reichlich krude Api hat, die irgendwie niemand so richtig versteht, haben wir hier ne ordentliche State Machine. Da sind schon durchaus Anpassungen für Debouncing drin. Das kannst dir gemäß deinen Anforderungen anpassen.

Mein persönlicher Use Case, den ich hier auch immer wieder propagiere: Karte kurz auflegen und dann wieder zurück in die Mappe. Dann gibt’s da keine Probleme.

Schlussendlich kaufe ich diese bei AliExpress auch nur ein und leite die 1:1 durch. Wir hatten in der Vergangenheit auch schon das Problem, dass manche Karten nicht erkannt wurden, das Problem hat sich in der Zwischenzeit erledigt. Also kurzum: Ich kann da in keiner Form eine Qualitätskontrolle irgendwie drauf machen. Ich hätte das am liebsten ja mit einem JST-Konnektor, so dass man das einfach nur stecken muss. Traue mich jedoch ein Antennendesign diesbzgl. zu. Sowas von JLC löten zu lassen ist indes kein Problem.

Macht Sinn. Ja, ich wollt damit auch nichts besonderes sagen und ich reklamier auch nichts, ich wollt nur sagen dass ich da nichts Seltsames selbst gesourced hab.

Das mit dem Antennendesign kann ich komplett nachvollziehen.

Ich hab auch zwei OSH Projekte, eines davon fange ich gerade an zu verkaufen, und das mit der Qualitätskontrolle von Aliexpressteilen, das macht mir auch schon Bauchweh beim nur dran denken.

Auf jeden Fall, um die Frage von weiter oben aufzugreifen: LPCD ist definitiv nicht Standardkonfiguration. Ein genaues Feedback habe ich da nicht, würde aber erwarten, dass die meisten Leute das nicht verwenden. Hast du den PN5180 eigentlich dafür flashen müssen oder ist da inzwischen eine FW drauf, die ab Werk neu genug ist?

Ich hab nicht gewusst, dass man den PN5180 flashen kann/muss. Gute Info, vielleicht liegt’s daran, werd mich noch einlesen. Hab gedacht, dass ist ein Fixed-function-Teil.

Klar, ist hier. beschrieben.

Perfekt! Das sollte mal als Workaround für den Anfang funktionieren, bis ich an einen anderen PN5180 komm.

Kannst ja mal einen Blick in die PN5180.cpp werfen. Während der RC522 ne reichlich krude Api hat, die irgendwie niemand so richtig versteht, haben wir hier ne ordentliche State Machine. Da sind schon durchaus Anpassungen für Debouncing drin. Das kannst dir gemäß deinen Anforderungen anpassen.

Werde ich machen!

Mein persönlicher Use Case, den ich hier auch immer wieder propagiere: Karte kurz auflegen und dann wieder zurück in die Mappe. Dann gibt’s da keine Probleme.

Das ist gut zu wissen, danke! Ja, hätte ich ähnlich gemacht, aber die Hauptanwenderin ist 2, also nicht ganz so einfach :slight_smile:

Ja, passt :slight_smile:

Eigentlich wollte ich ja schreiben, dass ich mir ein Antennendesign NICHT zutraue :rofl:

Ich kaufe nach wie vor ja einiges da (alle JST-Konnektoren, Drehencoder, USB-T-Anschlussterminals und PN5180). Früher war’s ja auch sowas wie ESP32, Widerstände, Spulen etc pp… das ist schon wild, wenn da immer wieder Links verschwinden und du immer wieder neu austesten musst, ob du da gescheiten Kram kriegst. Das ist mit JLCPCB einfach viel viel besser. Da gibt’s auch mal Ausschuss (2 bis 3 % bei der Complete), aber ansonsten funktioniert der Kram halt einfach.

Ist hier beschrieben: 📗 Was ist LPCD und wie funktioniert es?.