Ansteuerung mehrerer RFID-Lesegeräte über SPI

Ich versuche derzeit, mindestens 16 RFID-Lesegeräte (RC522) über die SPI-Kommunikation zu steuern. Die Einrichtung ist wie folgt:

  • 1 Mainboardplatine mit 16 Buchsen für Flachbandkabelstecker
  • 16 Satellitenplatinenplatinen, jeweils mit Flachbandkabelanschluss und einem Header für den RFID-Leser

Auf dem Mainboard treibt ein Partikelelektron die Schaltung an und adressiert jeden RFID-Leser einzeln über ein Schieberegister für die Slave-Select-Pins.

Alles funktioniert gut, bis ich die 7. Satellitenplatine + Lesegerät anschließe. Ich gehe davon aus, dass es etwas mit der Lastkapazität zu tun hat und dort an eine Art Grenze stößt.

Im Moment kann ich zwei Wege gehen: Entweder versuchen, das SPI-Signal mit dem aktuellen Setup irgendwie zu verbessern (wobei ich nicht weiß, wie das geht), oder ein größeres Redesign durchführen.

In Bezug auf die Neugestaltung war meine Idee, auf jeder Satellitenplatine einen ATmega168 oder 328 zu platzieren und diesen die einzelnen RFID-Lesegeräte steuern zu lassen. Das Mainboard könnte dann über I2C mit den Satellitenplatinen kommunizieren, wodurch jede Satellitenplatine zu einem I2C-Slave wird. Um das gleiche Kapazitätsproblem wie zuvor (nur auf den I2C-Leitungen) zu vermeiden, habe ich überlegt, einen Bus-Extender wie den P82B715 zu verwenden. Diese Lösung würde auch viel weniger Verkabelung erfordern, da jede Satellitenplatine in Reihe geschaltet werden könnte, da I2C keine Slave-Select-Leitung verwendet.

Ich hoffe jedoch, dass es eine bessere / einfachere Lösung gibt, als eine Neugestaltung durchzuführen. Das Hinzufügen von ATmegas erhöht die Kosten des Systems (was langfristig wichtig wird) und fügt weitere Schritte in Bezug auf das Flashen der MCU auf jeder Satellitenplatine hinzu.

Grundsätzlich hätte ich gerne einige Kommentare oder Vorschläge, welcher Ansatz für die Zukunft am besten geeignet wäre. Ich bin offen für alles, ich muss nur eine Richtung wählen, die zu einem robusteren System führt, auch wenn es ein Redesign erfordert.

Irgendwelche Vorschläge? :-)

Danke schön!

Wie lang ist jedes einzelne SPI-Kabel? Mit welcher Geschwindigkeit läuft SPI?

Antworten (2)

Ich werde meine Erfahrungen teilen, in denen ich mit einer ähnlichen Situation konfrontiert war. Ich musste ungefähr 24 SPI-Flash-Speicher mit nur einer Master-Karte programmieren. Die Einrichtung war so. Ein riesiges Motherboard. Daran waren mehrere Tochterkarten angeschlossen. Fast alle Tochterkarten hatten zwei FPGA und einen DSP darauf. Und sowohl FPGA als auch DSP hatten dedizierte SPI-Flash-Speicher, die mit ihnen verbunden waren, die zum Speichern des Codes verwendet wurden.

Wie ich es gelöst habe, war die Verwendung von LVDS. Ich habe alle SPI-Leitungen vom Master zum LVDS-Treiber geroutet und der LVDS-Treiber auf der Slave-Seite bringt diese Leitungen dann zu diesem Slave.

Für 24 Slaves hatte ich 24 GPIOs (konfiguriert als Chip select). Und nur eine MOSIZeile, MISOZeile und CLKZeile.

Ich habe alle diese 27 Leitungen durch den Anschluss geführt. Alle Tochterkarten hatten Puffer für eingehende Chipauswahlsignale.

Chip Select ist also aussortiert.

MISO-, CLK- und MOSI-Leitungen wurden mit dem LVDS-Treiber-IC verbunden. Am anderen Ende war es mit LVDS-Knoten verbunden. LVDS unterstützt den Anschluss mehrerer Geräte und ich hatte etwa 7 Boards. Es war okay. Es funktionierte.

Für Ihren Fall können Sie sie gruppieren und puffern. Nur eine SPI-Leitung, manuelle CHIP-Auswahl (GPI0s). CS muss nicht ständig umgeschaltet werden, oder? Deshalb hatte ich sie direkt angeschlossen. Ich hatte es auch auf beiden Seiten gepuffert.

LVDS-Signale sind differentiell. Hilft Ihnen, sie leicht über geringe Entfernungen zu ziehen. Sie benötigen auch keinen Massebezug. Geben Sie hier die Bildbeschreibung einBei großen Entfernungen und langen Kabeln hilft der Wechsel zu Differenzsignalen bei der Datenintegrität (kleine Spannungspegel sind ausreichend).

Auch immun gegen externes Rauschen, da es aufgrund seiner differentiellen Natur ausgelöscht wird.

Ich helfe gerne weiter.

Ich würde die Verwendung digitaler Isolatoren in Betracht ziehen, um das SPI-Signal weiterzuleiten und eine Isolierung bereitzustellen, oder nur einen normalen digitalen Puffer.

Isolator: http://www.analog.com/en/products/interface-isolation/isolation/standard-digital-isolators.html

Puffer: http://www.ti.com/logic-circuit/buffer-driver-transceiver/non-inverting-buffer-driver/products.html