Übertragung verschiedener Nachrichten mit der gleichen ID auf einem CAN-Bus


12

Die CAN-Arbitrierung erfolgt mit IDs, und jeder Knoten am Bus kann mit jeder ID senden (im Idealfall sollte dies nicht der Fall sein, aber ein unangenehmer Knoten kann dies).

Was ist, wenn zwei verschiedene Knoten, die am selben CAN-Bus angeschlossen sind, Nachrichten mit denselben IDs, aber unterschiedlichen Datenbytes senden?

Mein Gedanke: Es wird Müll im Bus erzeugen. Wer die dominanten Bits hat, die nur übertragen werden.


1
Ich bin mir nicht sicher, warum sie das so gemacht haben. Ich hätte gedacht, dass es sinnvoller wäre, ein Schiedsverfahren auf die gesamte Botschaft anzuwenden.
Rocketmagnet

Antworten:


11

Abschnitt 6.1 der CAN-Spezifikation :

BIT ERROR: Ein Gerät, das ein Bit auf dem Bus sendet, überwacht auch den Bus. Ein BIT-FEHLER muss zu diesem Zeitpunkt erkannt werden, wenn der überwachte Bitwert vom gesendeten Bitwert abweicht. Eine Ausnahme ist das Senden eines "rezessiven" Bits während des gefüllten Bitstroms des ARBITRATION FIELD oder während des ACK SLOT.

Der Knoten, der zuerst eine '1' sendet, wenn der andere eine '0' sendet, wird einen Bitfehler feststellen und dann einen Fehler als normal signalisieren - indem ein Fehlerflag (siehe Abschnitt 3.1.3) gesendet wird, wie dies formal beschrieben wurde in Abschnitt 6.2.

Informell wird, wenn dieser Knoten fehleraktiv ist (was der übliche Fall sein sollte), ein Fehlerflag von 6 dominanten Bits gesendet, das auch alle anderen Knoten erkennen (als Stopfehler). Dies hat den Effekt, dass diese Nachricht vollständig zerstört wird:

  • Niemand wird es erhalten
  • Keiner der Sender wird glauben, dass er etwas erfolgreich gesendet hat.

Jeder Sender wird dann versuchen, erneut zu senden - je nach dem genauen Zeitpunkt der erneuten Übertragungen kann einer die Verstärkungsregelung des Busses ausreichend vor dem anderen starten. Andernfalls kann dieselbe Sequenz erneut auftreten. (Oder eine andere Nachricht mit höherer Priorität kann sie beide für eine Weile abschrecken!)


Erweiterte Antwort, inspiriert von der Antwort von @ clabbacchio unten.

Sie erwähnen "böse Knoten", und clabbacchio macht den gültigen Punkt, dass, wenn zwei Knoten zu unterschiedlichen Zeiten senden, jeder Empfänger entscheiden muss, was mit seinen mehreren Empfängen zu tun ist.

Dies wurde durch einen Hack im letzten Jahr demonstriert . In dem Artikel wird im Abschnitt "PSCM-Besonderheiten" erläutert, wie ein Angreifer mit den normalen Nachrichten auf dem Bus synchronisieren und seine böse Nachricht kurz vor der Nachricht wiedergeben kann, die das "gute" Steuergerät senden soll. Die empfangende ECU akzeptiert die frühere Nachricht, aktualisiert ihren Nachrichtenzähler und verwirft dann die "guten" Nachrichten als fehlerhaft, da ihr Nachrichtenzähler nicht inkrementiert wurde.


1

Wenn sich das Nachrichtendatenfeld unterscheidet, wird (hoffentlich!) Aufgrund einer falschen CRC ein Fehlerrahmen auf dem Bus angezeigt.


1

In Ihrer Frage stellen Sie diese Hypothese auf:

Wer die dominanten Bits hat, die nur übertragen werden.

Dies setzt voraus, dass die beiden Nachrichten genau zur gleichen Zeit übertragen werden, was ein spezifischer Fall eines allgemeineren Problems ist. Martins gültige Antwort behandelt dieses spezielle Problem, ignoriert jedoch den (allgemeineren) Fall, in dem die beiden Knoten zu unterschiedlichen Zeiten senden.

In diesem Fall gibt es zwei Nachrichten mit derselben ID, aber unterschiedlicher Nutzlast, die auf dem Bus zirkulieren, und es liegt an der Logik der Empfänger, zwischen den beiden Nachrichten zu unterscheiden und zu entscheiden, ob es sich um den Inhalt handelt, den sie empfangen müssen. Wenn sie die beiden Meldungen nicht unterscheiden können, interpretieren sie die Daten möglicherweise falsch und verursachen schwerwiegendere Probleme als nur Fehlerrahmen.

Angenommen, eine Meldung enthält den Messwert eines Temperatursensors, die andere die Zielposition eines Stellglieds auf demselben Byte (SOLLTE NIEMALS IM ECHTEN LEBEN PASSIEREN). Möglicherweise hat das Stellglied diesen Messwert als Ziel, ohne es zu wissen.


Ja, es sollte eine Logik implementiert werden, um zwischen zwei Nachrichten zu unterscheiden. Aber meine Frage war, ob die Schlichtung auf der Basis der ID erfolgt, was passiert, wenn die Nachrichten-ID identisch ist und die Daten unterschiedlich sind.
Swanand

@Swanand nur auf der Hypothese der gleichzeitigen Übertragung dann?
Beachten
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.