Was ist das allgemeine Protokoll zum Senden von Informationen von einem System zu einem anderen? Nehmen wir beispielsweise an, wir haben über einen bestimmten Zeitraum einige Informationen vom Mikrocontroller gesammelt, die wir an einen anderen Mikrocontroller senden möchten. Ich habe von SPI- und I2C-Schnittstellen gehört, aber es ist unklar, wann Sie eine Methode über eine andere anwenden und wie Sie sie implementieren. Gibt es neben SPI und I2C noch andere gängige Methoden? Ist der Implementierungsprozess für verschiedene Mikrocontroller ähnlich? Analysiere ich eigentlich Datenbytes, die ich auf dem empfangenden Mikrocontroller mache?
18
Antworten:
SPI und I2C ähneln sich insofern, als sie eher zum Anschließen von Peripheriegeräten an einen Controller oder eine CPU als zum eigentlichen Übertragen von Daten zwischen Systemen verwendet werden. USB ist eine weitere Schnittstelle, die von den Menschen als Kommunikationssystem behandelt werden soll, bei dem es sich in Wirklichkeit um einen Peripheriebus handelt.
Die Kommunikation zwischen Systemen ist nicht mit dem Anschließen eines Geräts an einen Bus vergleichbar. Über den Busanschluss kann der Prozessor direkt auf die Register in einem Gerät zugreifen, während über eine Kommunikationsschnittstelle Datenströme gesendet und empfangen werden können. Ein an einen Bus angeschlossenes Gerät benötigt in der Regel einen Gerätetreiber, wohingegen es bei der Kommunikation für den Host-Computer eigentlich nicht darauf ankommt, was am anderen Ende angeschlossen ist.
Natürlich wird dies die ganze Zeit eine trübe Grenze. Dinge wie PCI und ISA sind unbestreitbar Busse; I2C, SPI, USB sind wohl Busse; Während RS232, RS485 und Ethernet definitiv Kommunikationsschnittstellen sind. Aber dann gibt es Dinge wie CAN-Bus und 1553, bei denen es definitiv darum geht, Daten zu verschieben, aber auf eine sehr komplizierte Art und Weise.
quelle
Es gibt keine einzige Möglichkeit zum Senden von Daten, es gibt viele verschiedene Möglichkeiten zur Kommunikation, abhängig von der Entfernung, der Datenrate, der Umgebung, der Anwendung ...
Die unterste Schicht ist die physikalische Schicht , die die Bits tatsächlich bewegt.
SPI und I²C sind für kurze Entfernungen innerhalb eines Geräts vorgesehen, bei denen es nicht zu starken Störgeräuschen kommt, die die Übertragung stören könnten.
Für eine nicht allzu schnelle Kommunikation über Entfernungen von bis zu einigen zehn Metern ist die serielle Kommunikation über RS-232 eine gute Wahl.
Bei stärkerem Rauschen oder größerem Abstand werden Differenzsignale verwendet, z. B. in RS-485. Für eine schnellere Datenübertragung gibt es Ethernet, das immer beliebter wird.
Dann gibt es auch verschiedene Funkstandards.
Auf der physischen Ebene befinden sich weitere Ebenen, die das Senden der Daten organisieren, um Übertragungsfehler, das Routing in einem Netzwerk und vieles mehr zu erkennen und zu korrigieren. Zum Beispiel ist das Internetprotokoll ein ziemlich komplexer Stapel von mehreren Schichten, typischerweise über dem Ethernet-Protokoll.
quelle
Ein einfacher serieller UART kann verwendet werden (eine Tx- und eine Rx-Leitung ohne diskreten Takt) und kann mit Optoisolatoren oder magnetischen Isolatoren leicht an den Übergang zwischen verschiedenen Potentialen (sogar Primär- und Sekundärkreisen) angepasst werden .
Was die Protokolle betrifft, funktioniert alles mit definierten Befehlsbytes und einer Art Prüfsummenschema gut. Es gibt wirklich kein Standardprotokoll, das für alle Arten von Kommunikation geeignet ist. I2C verfügt über Signalisierungsstandards (Definition von Adressierung, Stopps, Starts usw.), aber das Protokoll darüber, was tatsächlich kommuniziert wird, liegt ausschließlich beim Entwickler.
PMBus ist beispielsweise ein Kommunikationsprotokoll für die Stromversorgung, das I2C als physikalisches Medium verwendet.
quelle
Es gibt wirklich kein "allgemeines" Protokoll. Was Sie letztendlich verwenden, hängt stark von der Anwendung ab. Damit wir Ihnen eine bessere Antwort geben können, müssen wir Ihre Anforderungen ein wenig besser verstehen. Sie erwähnen, dass Sie separate Mikrocontroller wünschen, die als Subsysteme miteinander kommunizieren.
Einige Fragen zu dieser Anwendung:
Wenn Sie Frage 1 mit NEIN beantwortet haben:
Wenn in diesem Projekt nur 2 Mikrocontroller vorhanden sind, können Sie auf jeden Fall UART zwischen ihnen verwenden. Wenn beide die Kommunikation einleiten müssen, verwenden Sie die Flusskontrolle. Andernfalls sollte es trivial sein, Daten in eine Richtung zu senden. Zum größten Teil sollte es "schnell genug" sein, vorausgesetzt, Sie wählen eine der höheren Baudraten. I2C und SPI eignen sich normalerweise nur für die Master / Slave-Architektur.
Wenn Sie Frage 1 mit JA beantwortet haben (mehr als 2 Controller):
Jetzt brauchen Sie etwas Skalierbareres, mit dem Sie adressierbare Geräte auf einen gemeinsamen Bus legen können. Die Antwort auf diese Anschlussfragen hilft Ihnen bei der Entscheidung zwischen I2C und SPI (Master-Slave) oder etwas wie CAN (Multi-Master).
Ihr Mikrocontroller verfügt höchstwahrscheinlich über ein UART-Peripheriegerät, die anderen (insbesondere CAN) sind möglicherweise nur auf höherwertigen Chips verfügbar. In beiden Fällen sollte ausreichend Dokumentation vorhanden sein, wie diese Peripheriegeräte zum Verschieben von Bytes verwendet werden können.
quelle
Wie @Jon feststellte, ist ein Problem bei der Auswahl einer Kommunikationsschnittstelle, ob immer eine Entität für die Initiierung der Kommunikation verantwortlich ist oder ob möglicherweise mehr als eine Entität dafür verantwortlich ist. Eine verwandte Frage ist, ob ein Unternehmen immer bereit ist, unerwünschte Mitteilungen zu erhalten. SPI wird häufig in Anwendungen verwendet, in denen eine Seite immer für den Empfang von Kommunikation bereit ist. So etwas wie ein 74HC595-Schieberegister ist beispielsweise nie "beschäftigt". Während SPI für die Kommunikation zwischen einem Mikrocontroller und Hardware, die das Mikro steuern soll, gut ist, ist es für die Kommunikation zwischen zwei Mikrocontrollern nicht gut. Wenn zwei Prozessoren mit I2C-Hardware für die Kommunikation verwendet werden, kann die Software (innerhalb sehr großzügiger Einschränkungen) so lange dauern, bis sie mit den Vorgängen fertig ist. ohne Datenverlust zu verursachen. Wenn ein Prozessor 100 Mikrosekunden benötigt, um jedes eingehende Byte zu verarbeiten, würde dies den Durchsatz erheblich einschränken, aber der Absender würde langsam genug sein, damit der Empfänger mithalten kann. Der einzige Weg, der im Allgemeinen mit SPI passieren kann, ist, wenn man eine separate Leitung für das Handshaking hat.
I2C ist wirklich ein wunderbares Protokoll. Die größten Einschränkungen, die es daran hindern, das perfekteste Protokoll zu sein, das man sich vorstellen kann, sind:
Persönlich würde ich gerne sehen, dass Controller-Hersteller eine Drei-Draht-Variante von SPI unterstützen, die Handshaking beinhaltet. Mir ist jedoch kein Controller bekannt, der dies tut.
quelle
In keiner bestimmten Reihenfolge scheinen die beliebtesten Physical-Layer-Instanzen für 2 CPUs in derselben Box zu sein:
Diese Physical-Layer-Instanzen (sowie andere Physical-Layer-Instanzen für 2 CPUs in separaten Boxen) stellen der Software, die die höheren Ebenen des Kommunikationssystems implementiert, in der Regel einen Bytestrom bereit.
Intelligente Programmierer schreiben die Software so, dass sie, wenn der Hardwaretechniker eine Instanz der physischen Schicht herausnimmt und diese durch eine vollständig andere Instanz der physischen Schicht ersetzt, nur einige Funktionen neu schreiben müssen, um ihren Ausgabestrom von Bytes zu speisen auf die Hardware und lesen Sie einen Strom von Bytes von der Hardware zurück, und das gesamte Protokollmaterial auf höherer Ebene funktioniert unverändert weiter.
Das Protokoll zum Senden von Informationen von einer CPU an eine andere beinhaltet fast immer die Interpretation des Bytestroms als eine Reihe von Paketen:
Einige Leute scheinen es zu genießen, völlig neue, benutzerdefinierte, inkompatible Protokolle zu erfinden, indem sie (2) eine von vielen Arten von Header-Strukturen mit (3a) einer von vielen Arten von Serialisierungsdaten mit (3b) einer von vielen Arten von kombinieren Flucht vor diesen serialisierten Daten mit (4) einer von vielen Arten von Anhängern.
Einige der einfachsten Protokolle zum Einkapseln von Daten in ein Paket umfassen:
Etwas kompliziertere Protokolle zum Einkapseln von Daten in ein Paket umfassen:
Es gibt eine lange Liste von Protokollen bei
Vielleicht lesen Sie gerne "Protocol Design Folklore" von Radia Perlman, in dem beschrieben wird, wie das Protokolldesign schief gehen kann.
quelle
Kein einziges "allgemeines" Protokoll. Die Wahl kann (zum Beispiel) von Folgendem abhängen:
In vielen Fällen müssen Sie die physikalische Schicht (Signalpegel) von der Datenverbindungsschicht (+/- die Art und Weise, wie Daten codiert werden) trennen (siehe OSI-Modell, untere 2-4 Schichten). Mögliche phyiscal Schichten sind zum Beispiel:
Sie können eine Zeile verwenden, um Daten- und Uhrzeitinformationen zu übertragen, oder diese in mehrere Zeilen aufteilen. Letztere waren früher beliebt, aber heutzutage verwenden die meisten neuen / schnellen Protokolle in der Regel eine Leitung (oder ein Leitungspaar, das als eine Leitung fungiert).
Es gibt viele Möglichkeiten, Daten und Takt in einer Zeile zu codieren. RS232 verwendet traditionell NRZ, es gibt Machester-Codierung und die verschiedenen Formate, die auf Festplatten mit merkwürdigen Namen verwendet werden, Zeile 2.7 RLL.
Um es zusammenzufassen: Es gibt unzählige Möglichkeiten, Kommunikation zwischen Systemen herzustellen. Und ich habe noch nicht einmal Konnektoren oder übergeordnete Aspekte wie Fehlererkennung und -wiederherstellung, Datenkodierung, Komprimierung und Verschlüsselung erwähnt ...
quelle