📗 Was ist LPCD und wie funktioniert es?

Einleitung

Wird der RFID-Reader PN5180 verwendet, so kann über settings.h das Feature PN5180_ENABLE_LPCD aktiviert werden. Zwingend notwendig ist dafür, dass die Firmware-Version des PN5180 mindestens auf dem Stand 4.1 ist (ESPuino zeigt die Version an). Üblicherweise ist sie nach dem Kauf älter, so dass man ein Update durchführen muss. Wie man FW4.1 auf den PN5180 kriegt steht hier und hier. Spoiler: Ist schon ein bisschen Arbeit :slight_smile: Falls Probleme auftreten: LPCD funktioniert nicht.
Hinweis: ESPuino zeigt beim Startvorgang die FW-Version des PN5180 an. Hier kannst du also sehen, ob bereits 4.1 aufgespielt ist.

Wie funktioniert LPCD?

Um im Deepsleep des ESP32 Strom zu sparen, wird der RFID-Reader normalerweise spannungslos geschaltet. Dies darf hier natürlich nicht passieren. Daher bietet beispielsweise die mini4L die Möglichkeit, LPCD auf der Rückseite per Lötjumper zu aktivieren. Ist es aktiviert, so wird der RFID-Reader von der Spannungsabschaltung ausgenommen.
Hinweis: Die Aktivierung von LPCD sorgt für einen leicht erhöhten Stromverbrauch im Deepsleep.

Normalerweise wird der ESP32 mit einem Tastendruck aufgeweckt, so dass ESPuino startet. Das funktioniert so, dass der Spannungslevel an einem Tasteneingang „in Ruhe“ 3.3 V ist und das Drücken eines Tasters gewissermaßen ein „Kurzschluss“ nach GND ist, so dass sich das Spannungslevel auf 0 V ändert. Das wird entweder direkt vom ESP32 registriert (wenn der Taster direkt an einem GPIO hängt) oder über einen Port-Expander, der seinerseits an einem GPIO des ESP32 hängt und dort einen Interrupt wirft. Ein Interrupt ist im Prinzip nichts Anderes als ein Tastendruck: Das Spannungslevel wird kurzzeitig auf 0 V gezogen.
Mittels LPCD kann das Ganze derart erweitert werden, dass das Aufwecken auch über das Auflegen einer Karte funktioniert. Der PN5180 hat hierfür einen IRQ-Pin, den man entweder direkt an einen GPIO des ESP32 hängt oder an einen Eingang des Port-Expanders. Der PN5180 wirft im Normalbetrieb zahlreiche Interrupts (etwa alle 0,3 s), diese werden jedoch nicht ausgewertet.

Was passiert nach dem Aufwecken per LPCD?

Das hängt davon ab, ob der IRQ-Pin des PN5180 an einem Pin des Port-Expanders hängt oder direkt am ESP32.

Port-Expander: ESPuino kann nicht unterscheiden, ob der IRQ durch einen Taster oder den PN5180 ausgelöst wurde, da der Port-Expander immer den gleichen Interrupt wirft. D.h. der ESP32 wird einfach wie gewohnt eingeschaltet. Nachteil: Gab es einen „Fehlalarm“, so schaltet sich ESPuino erst wieder ab, wenn das Abschaltintervall abgelaufen ist (normalerweise zehn Minuten). Vorteil: Es wird kein zusätzlicher GPIO benötigt.

GPIO: Für LPCD wird ein separater/zusätzlicher GPIO verwendet, für den ESPuino eine eigene Aufweck-Routine besitzt. D.h. ESPuino kann dieses Event von einem normalen Tastendruck unterscheiden. Es wird nun geprüft, ob die Kartenerkennung ein Fehlalarm war oder ob die Karte noch vorhanden ist. Im Falle eines Fehlalarms geht der ESP32 sofort wieder schlafen. Man sieht den Vorgang auf dem Neopixel auch nicht: Die periphere Hardware, die für den Deepsleep spannungslos geschaltet wurde, bleibt spannungslos. Vorteil: Erweiterte Erkennung, die mit „Fehlalarm“ besser umgeht. Nachteil: Ein zusätzlicher GPIO notwendig und es kann nicht jeder beliebige verwendet werden, da dieser RTC-fähig sein muss. Das ist nur bei Folgenden der Fall: 0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39.

Einschätzung: Es hat sich (leider) gezeigt, dass das Anbinden von PN5180.IRQ an den Port-Expander zu vermehrten Fehlalarmen führt, weswegen ich inzwischen ausschließlich die Anbindung an einen GPIO empfehle, zumal sie dort einfach auch weniger Auswirkungen hat (Behandlung Fehlalarm). Die von mir entworfene mini4L setzt dies entsprechend um.

Was ist nötig, um LPCD an’s Laufen zu bringen?

Die nachfolgende Beschreibung setzt (zumindest teilweise) voraus, dass eine mini-Platine verwendet wird.

  • Firmware >= 4.1 (siehe oben).
  • PN5180 wird auch im ESP32-Deepsleep mit Spannung versorgt (siehe oben). Mini/Mini4L: Bei JP1 muss 2+3 gebrückt werden.
  • Interrupts des PN5180 müssen ankommen. Mini/Mini4L: JP4 muss gebrückt werden.
  • In settings.h muss PN5180_ENABLE_LPCD aktiviert werden.
  • In z.B. settings-lolin_d32_pro_sdmmc_pe.h bzw. settings-lolin_d32_sdmmc_pe.h muss ggf. RFID_IRQ angepasst werden. Ist der IRQ-Pin am Port-Expander angebunden, so spielt der Wert keine Rolle. Wird ein GPIO verwendet, so muss dieser dort eingetragen werden.

Kann LPCD auch mit dem RFID-Reader RC522 verwendet werden?

Nein, das geht nicht.

2 „Gefällt mir“

Vielen Dank dir für diese Zusammenfassung!
Zwei kleine Anmerkungen:

1 „Gefällt mir“

Danke @Joe91, ich habe die Punkte aufgenommen.