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.
microcontroller
bus
sharedbus
Imbrondir
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Es gibt ein "Daisy-Chain-SPI-Protokoll" ("JTAG-ähnliches Protokoll"), das insgesamt 4 Pins am Busmaster benötigt, unabhängig davon, wie viele Slaves sich in der Kette befinden. Das Daisy-Chain-SPI hat niemals Konflikte auf dem Bus, da an jedes Kabelbit nur ein Treiber angeschlossen ist. Siehe Wikipedia: Daisy-Chain-SPI und Hilfe bei der Geräteidentifikation in einer Kette .
quelle