Frage:
Ist das CAN-Bus-Protokoll ein Master- und Slave-Protokoll?
Bertus Kruger
2014-04-16 07:31:29 UTC
view on stackexchange narkive permalink

Ich untersuche, ob der CAN-Bus für die Projekte funktioniert, die ich gerade baue.

Ich möchte eine Reihe von Eingabe- / Ausgabecontrollern erstellen, die dies akzeptieren / buffer Befehle, führen Sie sie aus und melden Sie dann den Fortschritt zurück. Ich habe das Gefühl, dass ein Master- und Slave-Setup für ein Projekt nicht am besten funktioniert, aber ich bin mir nicht sicher, ob der CAN-Bus nach diesem Prinzip funktioniert.

Dies alles wird in der CAN-Protokollspezifikation und sogar in den Datenblättern der meisten Mikrocontroller mit CAN-Peripheriegeräten klar beantwortet. Durch welchen Teil der Spezifikation sind Sie konkret verwirrt?
Drei antworten:
aloishis89
2014-04-16 07:46:18 UTC
view on stackexchange narkive permalink

Ein CAN-Bus ist Multi-Master und automatisch arbitrierungsfrei. Der springende Punkt ist, dass Sie keinen einzigen Master oder Hauptcontroller benötigen, um sich um alles zu kümmern. Jede gesendete Nachricht hat eine Priorität, und Nachrichten mit höherer Priorität haben Vorrang vor Nachrichten mit niedrigerer Priorität (eine Nachricht mit niedrigerer Priorität wartet, bis keine Nachricht mit hoher Priorität gesendet wird). Es gibt also keine Sklaven. Es ähnelt einem Peer-to-Peer-Netzwerk, da es dezentralisiert ist. Der Grund dafür ist die Reduzierung der Fehlerstellen. Wenn ein einzelner Hauptcontroller ausfällt, fällt auch das gesamte Netzwerk aus. Wenn keine zentrale Steuerung vorhanden ist, kann eine einzelne Komponente ausfallen und der Rest des Systems läuft weiter.

Für Ihr Netzwerk sollten Sie jedem gesendeten Befehl Prioritäten zuweisen, je nachdem, was am wichtigsten ist. Der Artikel Wikipedia ist eigentlich ganz gut.

Ich werde erwähnen (da dies nicht intuitiv ist) - aufgrund der Art und Weise, wie die physikalische CAN-Schicht eingerichtet ist - haben niedrig nummerierte Bezeichner * höchste * Priorität.
Lundin
2014-04-17 17:02:49 UTC
view on stackexchange narkive permalink

CAN ist ein Low-Level-Protokoll, das sich irgendwo um die Datenverbindungsschicht des OSI-Modells (Schicht 2) befindet. Es geht also nur um die Übertragung generischer Datenrahmen. CAN gibt weder eine Netzwerktopologie noch die Art und Weise an, wie Daten weitergegeben werden, noch die Art der Daten usw. usw.

CAN ist also aus demselben Grund kein Master / Slave-Protokoll wie UART keines

Zusätzlich zu den Standard-CAN-Protokollrahmen benötigen Sie höhere Schichten, die die Kommunikation definieren. Die am weitesten verbreiteten für CAN sind:

  • CANopen (am häufigsten, generisch)
  • DeviceNet (generisch, hauptsächlich in der Automatisierungsbranche verwendet)
  • J1939 (LKW, Traktoren, schwere Fahrzeuge)

Diese funktionieren auf ganz unterschiedliche Weise.

CANopen definiert beispielsweise keinen Master für den Datenverkehr. Die Datenkommunikation zwischen Knoten auf dem Bus ist nur ein Anliegen der beteiligten Knoten: Es gibt keinen Master, der den Datenverkehr leitet, und jeder Knoten kann so konfiguriert werden, dass er mit jedem anderen Knoten spricht / hört.

CANopen definiert jedoch a "Netzwerkmanager" -Master, der für die Überwachung der Knoten auf dem Bus verantwortlich ist: Stellen Sie sicher, dass sie korrekt starten und am Leben und funktionsfähig bleiben usw.

Martin Thompson
2014-04-16 15:33:41 UTC
view on stackexchange narkive permalink

CAN hat nur Master. Ein Knoten sendet gleichzeitig - wenn mehrere Knoten ungefähr gleichzeitig übertragen werden, kollidieren sie und der Knoten, der die niedrigste ID überträgt, gewinnt ein Schiedsverfahren. Die anderen Knoten hören die Nachricht des gewinnenden Knotens ab und versuchen dann nach einiger Backoff-Zeit erneut, ihre eigenen Übertragungen durchzuführen.

Und natürlich hindert Sie nichts daran, eine Art Master / Slave-Protokoll darauf aufzubauen die Nachrichtenübertragung auf niedriger Ebene, die CAN Ihnen bietet.

Danke für die Klarstellung. Dumme Frage ... Stimmt es, dass jeder Knoten keine eindeutige Adress-ID wie I2C hat? Und dass sie Nachrichten mit einer beliebigen ID senden und auf eine beliebige Nachrichten-ID gemäß der Logik reagieren können, die Sie in dem von Ihnen geschriebenen MCU-Code anwenden?
Ja, das ist genau richtig.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...