Ich baue ein System auf, bei dem ich genau die gleichen Daten auf Dutzende von Geräten übertragen muss, aber ich muss individuelle Antworten erhalten. Ich muss auch die Anzahl der benötigten Pins begrenzen und eine möglichst schnelle Übertragung haben.
Meine aktuelle Idee ist folgende: Verwenden Sie SPI, um mit allen Slaves zu kommunizieren, indem Sie alle Slaves an denselben SS-Kanal binden. Auf diese Weise erhalten alle Slaves gleichzeitig die gleichen Informationen. Wenn es um den Empfang von Daten geht, würde ich Daten von jedem Slave über I2C anfordern. Auf diese Weise habe ich nur 6 Pins, um mit einer Rate von 10 Mbit / s zu senden und Daten mit 400 Kbit / s zu empfangen. Würde diese Idee funktionieren oder gibt es eine bessere Lösung?
Ich brauche eine schnelle Master-zu-Slave-Übertragungsrate, da die Daten in Echtzeit sein müssen, während die Daten von den Slaves etwas langsamer sein können, weshalb ich mich für I2C entschieden habe.
Gedanken?
Zusätzliche Daten:
Der Abstand vom Slave zum Master darf maximal 2 Meter nicht überschreiten. Ab einer Entfernung von mehreren Zentimetern wird es normalerweise viel kürzer sein.
Die Anzahl der Sklaven wird nicht auf 25 ansteigen
Die empfangenen Daten vom Slave zum Master variieren. Könnte jeweils 10 Bytes oder 100 Bytes gleichzeitig sein.
Übertragene Daten an Slaves müssen mit etwa 1 Mbit auf einmal schnell sein. Es gibt eine gewisse Flexibilität.
Danke!
Bei 10 Slaves, die 1 Mbit / s empfangen müssen: Ich würde argumentieren, dass Sie den Bereich der Dinge betreten, die mit einem dedizierten Bus mit mehreren Knoten gelöst werden sollten, anstatt zusammengeschustert zu werden.
Im Allgemeinen ist jedoch die Idee, SPI (mit entsprechender Fan-Out-Pufferung, es wird nicht gesagt, dass jeder SPI-Master einen Bus mit 10 Slaves in unterschiedlichen Entfernungen treiben kann) für die Übertragung und I²C als Rückkanal zu verwenden, ist solide.
Auf diese Weise erhalten Sie jedoch einen Hochgeschwindigkeits-Einweg-Rückkanal mit niedriger Geschwindigkeit ohne Unterbrechung, und das könnte kompliziert werden. Wie Brian Drummond empfohlen hat, würde ein Mux, der MISO nur einem einzelnen Slave zuweist, es Ihnen ermöglichen, den "normalen" bidirektionalen Modus zu verwenden, wobei TX als "Nebeneffekt" "ausgestrahlt" wird, und das würde die Buslogik immens vereinfachen.
Ich würde argumentieren, dass für SPI bei diesen Raten 2m eigentlich ziemlich viel sind . Es funktioniert definitiv, wenn Sie Leiterbahnen und Drähte puffern und sorgfältig entwerfen, aber es ist eine zerbrechliche Sache, die viel Abstimmung erfordern wird.
Alles in allem: Ich denke, Sie könnten mit etwas wie Ethernet besser dran sein. 10 × 1 Mb / s klingt sowieso nicht wirklich so, als würden Sie Arduinos anschließen.
Sehen Sie sich bestehende Busse an:
Würde diese Idee funktionieren...
Das sollte es, sofern die Schnittstellenvoraussetzungen erfüllt sind (SPI-Fanout?) und die Geräte die Datenraten bewältigen können.
...oder ist ihr eine bessere Lösung?
Möglich, aber warum sollte es dich interessieren? Wichtig ist, eine Lösung zu entwickeln, die zufriedenstellend funktioniert . Ein Vorteil Ihrer Idee ist, dass sie einfach und leicht zu debuggen ist, während eine "bessere" Lösung, die z. Das Multiplexen der SPI-Slave-Antworten erfordert möglicherweise zusätzliche Hardware und komplexere Software, die möglicherweise schwer richtig zu machen sind.
Das Photon
Baumeister
Das Photon
user_1818839
Baumeister
Nick Alexejew
Baumeister
Cort Ammon
user_1818839
Baumeister
Das Photon