Mikroprozessoren für mehrere (~40) SPI-Geräte?

Ich möchte ein Produkt bauen, das über 40 LCD-Drucktastenschalter kombiniert (Beispiel hier , die über SPI kommunizieren). Ich habe nach Mikroprozessoren gesucht, um damit umzugehen, aber ich habe Probleme, welche zu finden. Das Höchste, das Atmel anbietet, sind 12 Geräte ( wie hier zu finden ), und ARM sieht nicht besser aus.

Was ist der beste Weg, um so viele SPI-Geräte zu steuern? Muss ich mehrere Prozessoren zu einem Master verbinden?

Ist Ihnen klar, dass Sie nicht gezwungen sind, einen dedizierten Slave-Select-Pin zu verwenden? Sie können tatsächlich jedes beliebige GPIO oder Schema verwenden, um sie zu generieren, solange Sie sicherstellen, dass sie rechtzeitig gültig sind. Ihre Grenze sind also wirklich die elektrischen Lasten im Bus. Es gibt Möglichkeiten, wie Sie damit umgehen könnten, aber Sie könnten einen Fan-in von Slave-Mikros in Betracht ziehen, die Daten für einen Master stapeln. Oder möglicherweise ein FPGA, das mehrere Busse gleichzeitig betreibt und Batch-Daten mit der Host-MCU verarbeitet.
Sie erkennen, dass die XMEGA-Geräte, auf die sich Ihr Link bezieht, bis zu 12 SPI-Busse als Master verarbeiten können, nicht nur 12 SPI-Clients? Man könnte die 40 Geräte zB auf 10 Busse aufteilen und sollte noch genügend GPIOs für Slave-Select-Leitungen frei haben. Aber vielleicht verfehle ich das Wesentliche.
@ChrisStratton Das war mir nicht klar, danke. Ich bin ein Programmierer, der versucht, in Embedded einzusteigen, also gibt es viel zu lernen.
@Rev1.0 Wahrscheinlich verfehle ich den Punkt nicht, ich bin nur neu darin. Bietet die „Aufteilung von 40 Geräten auf 10 Busse“ also eine Lösung für das Problem der Eingangskapazität, das Majenko unten angesprochen hat?
Können Sie ein Datenblatt bereitstellen, das typische Verbindungen und das SPI-Protokoll zeigt, das der LCD-Switch verwendet?
@kfriede: Sie haben keine Informationen über die erwartete Bus-Trace-Länge und die Anforderungen an die SPI-Taktgeschwindigkeit angegeben. Wenn Sie also die Anzahl der Clients pro Bus nicht niedrig halten müssen, ist dies schwer zu sagen. Je nach physischem Tastenlayout vielleicht die 40 Geräte in 4 Busse aufteilen und den Controller in der "Mitte" platzieren, um die Spuren so kurz wie möglich zu halten. Wenn Sie etwa 10 Clients pro Bus haben und die Leiterbahnlängen unter 10 cm halten können, sollten Sie in der Lage sein, eine Taktgeschwindigkeit von mindestens 1 MHz zum Laufen zu bringen. Aber das ist nur eine schnelle persönliche Einschätzung.
@ user2943160 der Link mit dem Titel "hier" oben hat es, der zu nkkswitches.com/pdf/IS15EBFP4RGB09YN_Wide64x32ShrtTrvl.pdf führt
@kfriede Dieses Datenblatt enthält weder das SPI-Protokoll noch ein typisches Verbindungsdiagramm. Deshalb habe ich gefragt. Das Daisy-Chaining der Geräte könnte sehr nützlich sein.

Antworten (3)

Verwenden Sie entweder Demultiplexer wie den 74HC138 für die Slave-Auswahl oder verwenden Sie Dioden-ODER mit einer Matrixauswahl.

Oder wenn das Protokoll dies zulässt, können Sie alle Tasten miteinander verketten und eine lange SPI-Übertragung für alle verwenden.

Jetzt, wo Sie das sagen, macht der Demultiplexer absolut Sinn. Kam mir gar nicht in den Sinn. Danke dir.
Wie die Antwort von Majenko zeigt, sollten Sie auch die MISO-Pins (Master in Slave Out) multiplexen und die MOSI-Pins (Master Out Slave In) demuxen.
Nein, Sie demultiplexen den Slave, wählen und bus die MISO- und MOSI-Leitungen. Der springende Punkt bei SS ist, dass Sie alle MOSI zusammenbinden können und mit den richtigen Slave-Geräten alle MISO-Leitungen zusammenbinden können.

Ein Wort der Vorsicht, wenn Sie so viele SPI-Geräte an einem einzigen Bus verwenden:

  • Eingangskapazität.

Diese Anzahl von Geräten wird eine enorme Menge an Kapazität auf den Bus bringen. Wenn Sie keine Vorkehrungen treffen, wird Ihre maximale Busfrequenz und damit die Geschwindigkeit, mit der Sie Anzeigeinhalte usw. aktualisieren können, stark eingeschränkt (im Grunde bildet die Eingangskapazität in Verbindung mit der Ausgangsimpedanz der IO-Pins der MCU einen Tiefpassfilter, der eine höhere Frequenz dreht Rechteckwellen in eher Sinuswellen, was SPI nicht mag - es bringt das Timing durcheinander).

Wenn Sie gerne niedrigere Kommunikationsgeschwindigkeiten verwenden, ist das in Ordnung. Ich würde jedoch empfehlen, den Bus in eine Reihe kleinerer Segmente aufzuteilen und jedes SCK- und MOSI-Signal zu puffern, um die Kapazität in jedem Segment auf einem vernünftigen Niveau zu halten. Eine Alternative besteht darin, einen einzigen Treiberpuffer für hohen Strom zu verwenden, um die Ausgangsimpedanz der SCK- und MOSI-Pins zu reduzieren.

Ganz guter Hinweis. Ich würde es stark vorziehen, Busse aufzuteilen, anstatt zu puffern. Dadurch werden die Spitzenströme viel niedriger gehalten (nur ein Bus muss gleichzeitig geschaltet werden) und Rauschen und Entkopplungsprobleme werden reduziert.

Es gibt KEINE Begrenzung für die Anzahl der SPI-Geräte, die an einem einzigen SPI angeschlossen werden können, vorausgesetzt, dass genügend IOs für die Auswahl des richtigen Geräts vorhanden sind.

In der Praxis kann es jedoch zu Schwierigkeiten kommen, wenn die Anzahl bei höheren Geschwindigkeiten größer ist. Aber das ist selten.

Sie können MISO MOSI und SCK parallel an alle Geräte anschließen. Sie sollten jedoch den GPIO des Controllers eins zu eins mit dem SS-Pin (Slave Select) verbinden.

Entscheiden Sie sich für GPIO-Expander oder Multiplexer nur, wenn die Anzahl der GPIOs auf dem Controller begrenzt ist