Lolin D32 pro mit RC522 (SPI-Pins? Interrupt?)

Liebe Alle,

zunächst „Danke!“ für dieses tolle Projekt und die unzähligen wertvollen Tipps hier! Dies hat mich motiviert, auch einen ESPuino für meinen in 8 Wochen erwarteten Zwerg zu bauen (bzw. zu beginnen). Ich habe einen Lolin D32 pro, einen RFID-RC522 und einen MAX98357A. Dazu habe ich zwei Fragen an die Profis hier:

  1. Die Standard-Einstellung für den RC522 (SCK = 14, MOSI = 13, MISO = 15, CS = 21) laut entsprechender Konfigurations-Datei bringe ich trotz viel Probieren nicht zum Laufen. Es wird das Modul einfach nicht erkannt. Wenn ich die jedoch SPI-Konfiguration auf SCK = 18, MOSI = 23, MISO = 19 ändere - also gleich wie die interne SD-Karte - und CS auf 15 (statt auf 4 wie bei der SD-Karte) lege, funktioniert es. Nachdem ich annehme, daß hier auch schon einige mit einem Lolin D32 pro erfolgreich waren: habt ihr die Standard-Konfiguration genommen? Ich habe auch im Internet keine verläßlichen Informationen zu einem weiteren SPI-Bus gefunden außer dem auf 18/23/19. Übrigens habe ich beim letztendlich funktionierenden SPI-Bus eine bessere Musikqualität, wenn ich den SPI-Takt statt auf 1000000 nur auf 400000 setze.

  2. Der RC522 hat einen Interrupt-Pin und ich wollte probieren, diesen zu verwenden, statt zyklisch auf „PICC_IsNewCardPresent“ zu testen. Hierzu findet man im Internet auch kaum Informationen und ich war auch nicht erfolgreich. Deshalb meine Frage: warum wird bei diesem Projekt der Interrupt nicht verwendet? Schlicht und einfach, weil’s nicht geht? Oder hat das andere Gründe?

Danke und viele Grüße aus Mödling (Österreich),
Christian

Hi Christian,

im Prinzip kann man beide Devices am gleichen SPI-Bus laufen lassen wenn man eigene CS spendiert. Wirklich zum Laufen bekommen habe ich das jedoch nie. Ich habe dann immer mit zwei Instanzen gearbeitet. Und zB diese Kombination funktioniert: ESPuino/settings-lolin_d32_pro.h at 0476fb05f85c67feeaf7e4d9e320b7233866b766 · biologist79/ESPuino · GitHub.

Bevor du jedoch weiterhin Arbeit investierst an dieser Stelle ein Hinweis: SPI ist beim d32 pro zwar toll, weil man den Reader gleich dabei hat, jedoch ist SD via spi höchstens halb so schnell wie sdmmc. Und zudem gibt es auch noch einen Bug, der dazu führt, dass Uploads abbrechen. Und zwar ohne, dass man das merkt. D.h. die Dateien werden unvollständig geschrieben und beim Abspielen wundert man sich, warum der Abspielvorgang plötzlich mitten im Titel stoppt. Ist natürlich kein Problem, wenn man zum Filetransfer immer die SD Karte ausbaut, aber ansonsten halt schon super nervig. Weil es passiert auch nicht immer sondern nur manchmal.

Es gibt daher seit einer Weile diesen PCB: Lolin D32 pro mit SD_MMC, PN5180, max. fünf Buttons und Port-Expander (SMD). Braucht halt, da man sdmmc von den GPIOs leider nicht verschieben kann, einen externen Reader.

Zur zweiten Frage: Die „Kosten“, den Reader alle paar hundert ms zu pollen erschienen mir weniger hoch, als einen zusätzlichen GPIO zu belegen. Was man jedoch machen könnte: Per Lötbrücke auf dem o.g. PCB kann man irq auf den Port-Expander legen. Der Code müsste dann halt erweitert werden, aber dann sollte man den irq des rc522 nutzen können. Eigentlich gedacht ist irq hier dir den Reader pn5180, da dieser den ESP32 auch aufwecken kann, aber das hindert einen ja nicht, das für den rc522 zu nutzen.

Hi Torsten,

danke für Deine schnelle Antwort!

Wirklich zum Laufen bekommen habe ich das jedoch nie. Ich habe dann immer mit zwei Instanzen gearbeitet. Und zB diese Kombination funktioniert: ESPuino/settings-lolin_d32_pro.h

Hmm, seltsam, denn bei mir ist es genau umgekehrt. Die Variante mit den zwei unterschiedlichen CS, aber dem gleichen SPI-Bus ist die einzige, die bei mir funktioniert. Die Version mit den von Dir zitierten zwei komplett unterschiedlichen SPI-Pins endet immer damit, daß ich zum RC522 keine Verbindung bekomme.

Danke füe den Hinweis mit dem Bug. Mir war bewußt, daß die Übertragungsrate bei der internen SD-Karte deutlich schlechter ist (das habe ich hier im Forum gelesen), aber den Bug habe ich irgenwie überlesen. Das ist natürlich echt zach, wenn man sich nicht drauf verlassen kann, daß Übertragungen trotz scheinbarem Erfolg dann doch nicht funktioniert haben.

Stimmt mit dem Hinweis auf den eingesparten GPIO, ich habe mittlerweile ein wenig getestet und es reicht völlig, den RC522 alle 500 ms abzufragen, denn eine Reaktion in einer halben Sekunde nach dem Auflagen einer Karte ist mehr als genug.

Die von Dir erwähnte Platine schaut gut aus. Hmm, ich werde mal überlegen, ob die nicht eine Alternative zu meinem Aufbau wäre …

Viele Grüße,
Christian

Der SPI-Bus kann mit beliebig vielen Geräten betrieben werden, jedes Gerät braucht halt einen eigenen Chip-Select. In der Praxis läuft das (vor allem bei 10MHz und mehr) oft anders ab. Daher auch die 2 SPI-Instanzen bei ESPuino.

Ich selbst betreibe zwar eine ähnliche Hardware, verwende aber eine andere Software (ESP-IDF als Basis). Da funktionieren SD-Card und RC522 an einem SPI-Bus mit 20MHz einwandfrei.

Den Interrupt-Pin kann man sicher auch beim RC522 nutzen und so Strom bzw. auch Rechenzeit sparen. Aber da IOs knapp sind, ist hier der Nutzen vermutlich den Aufwand nicht wert.

Ist möglich, dass hier demnächst ein PR reinkommt: