Busoptionen mit mehreren Knoten


7

Ich möchte einen Masterknoten, der aus einem TI Stellaris Cortex M3-Kern besteht, der mit bis zu 32 Slave-Knoten von TI MSP430 (oder möglicherweise mehr Stellaris-Slave-Knoten) verbunden sein kann. Diese betragen maximal 0,5 Meter zwischen Master und am weitesten entferntem Slave. Bitraten von ca. 0,5-1 MBit / s werden benötigt. Welche Optionen stehen für die interne Kommunikation zur Verfügung?

Aus den Dokumenten geht hervor, dass beide SPI, UART und I2C unterstützen.

  • SPI wird von dem, was ich finde, 1 Auswahldraht-Pr-Knoten benötigen. Viel zu viele Drähte.
  • I2C scheint einfach zu sein, aber aus Dokumenten geht hervor, dass die maximale Geschwindigkeit 400 kHz beträgt. Zu langsam, ohne die Qualität oder die maximale Anzahl von Knoten zu beeinträchtigen.
  • UART scheint die Geschwindigkeit zu erreichen, aber kann es außerhalb der Kommunikation von A nach B verwendet werden?
  • Habe ich etwas vergessen?

Update: Wie in den Kommentaren erwähnt, wurde die I2C-Geschwindigkeit für msp430 auf 400 kHz aktualisiert. Immer noch zu langsam. Auch das Netzwerk besteht nur aus einem Master und n Slaves.


Wenn Sie sagen, dass Sie mehr Stellaris-Knoten haben könnten, meinen Sie damit, dass Sie mehrere Master haben würden? Dies ist viel einfacher (siehe Antwort von AngryEE), wenn Sie nur einen Master haben.
Kevin Vermeer

CAN arbeitet mit 1 Mbit / s auf über 20 Metern. Ich bin mir nicht sicher, ob einer der anderen es tun wird. Die Stellaris-Mikrocontroller haben auch eine sehr gute Unterstützung. Stellen Sie sicher, dass Sie die Errata überprüfen, da es einige Knackpunkte gibt. Ihre Treiberbibliothek ist ziemlich gut darin, die vielen Errata zu umgehen!
Tim

Nur ein Meister. Aktualisierte Frage
Imbrondir

Antworten:


7

Ich würde entweder RS485 oder CAN vorschlagen; RS485 hat den Vorteil einer nahezu universellen Verfügbarkeit (wenn Sie einen UART haben, können Sie RS485 haben; wenn Ihr UART über eine automatische RTS-Steuerung verfügt, haben Sie eine perfekte RS485-Lösung). Sie können billige, kleine Geräte finden, die auch bis zu mehreren Megabaud reichen.

CAN ist etwas robuster, aber wenn Ihr Mikrocontroller nicht über das Peripheriegerät verfügt, kann dies zusätzliche Kosten verursachen, die Sie dem Projekt nicht hinzufügen möchten. Der Hauptvorteil von CAN gegenüber RS485 (IMO) besteht darin, dass bei Buskonflikten immer noch eine vollständige Nachricht eingeht. Wenn zwei Geräte in einem RS485-Netzwerk miteinander kommunizieren, wird nichts Verständliches empfangen und es gibt keine integrierten Mittel zur Busverwaltung. Daher müssen Sie dies in der Software berücksichtigen.

Für Ihre gegebene Geschwindigkeit und da ich nicht glaube, dass die von Ihnen erwähnten Mikrocontroller integrierte CAN-Controller haben, würde ich ein tokenbasiertes RS485-Netzwerk vorschlagen. Im Wesentlichen spricht keiner der Knoten, bis er an der Reihe ist, zu sprechen, und dies erfolgt durch Weitergabe eines "Tokens" (einer kurzen Netzwerknachricht, die die Verwendung des Busses gewährt) an jeden der Knoten. Es ist relativ einfach einzurichten, weitaus zuverlässiger als CSMA / CD und ich denke, Sie könnten innerhalb eines Tages etwas zum Laufen bringen.


2

RS485 könnte gut passen. Es verwendet den UART für den seriellen Stream, benötigt jedoch einen Richtungsstift, um zu bestimmen, welcher Knoten den Bus steuert.

Der Master sendet eine Nachricht und wartet dann auf eine Antwort.

Die Slaves dekodieren alle Nachrichten und antworten auf die an sie adressierten Nachrichten.


2

FWIW, ich bin mir ziemlich sicher, dass der I2C-Bus mit höheren Geschwindigkeiten als 100 kHz betrieben werden kann. Ich glaube, MSP430 kann mindestens 400-kHz-Betrieb unterstützen.


I2C hat auch einen 3,4-MHz-Hochgeschwindigkeitsmodus, aber ich kenne keine Mikrocontroller in den Marktsegmenten MSP430 oder Cortex-M3, die dies unterstützen.
Mark

Ich stehe korrigiert. Ich habe es mit der Spezifikation eines anderen Mikros verwechselt, das ich evaluierte. Der msp430 kann bis zu 400MH erreichen. Immer noch etwas zu niedrig.
Imbrondir

2

Sie können die Auswahlzeile für SPI ignorieren und als allgemeinere synchrone serielle Schnittstelle behandeln. Ich glaube, mit dem Stellaris können Sie das SPI als SSI konfigurieren, aber ich bin mir bei den MSP430 nicht sicher. Unabhängig davon können Sie sie einfach den Bus überwachen lassen und nur dann antworten, wenn ihre Slave-Adresse angezeigt wird. Sie müssen die Software dafür schreiben, aber es wird funktionieren.


Wie würden Sie mit Konflikten im Bus umgehen, wenn beispielsweise zwei Geräte gleichzeitig zu sprechen beginnen?
Kevin Vermeer

Interessant. Ich muss das auch untersuchen.
Imbrondir

@ Kevin Vermeer: ​​Ein Ansatz besteht darin, es auf die gleiche Weise zu lösen, wie wir das gleiche Problem auf RS-485 lösen: Ein einzelner Master, eindeutige Knotennummern und alle anderen Knoten senden nur, wenn der Master dem jeweiligen Befehl zum Senden befiehlt.
Davidcary

0

I2C läuft mit den meisten Teilen mindestens 400 kHz. Dies wäre die einfachste Lösung für einen Kurzstrecken-Kommunikationsbus. Wenn Sie etwas Robusteres wünschen, würde ich CAN oder RS-485 empfehlen, aber beide würden zusätzliche externe Chips erfordern.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.