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.
Antworten:
Abschnitt 6.1 der CAN-Spezifikation :
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:
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.
quelle
Wenn sich das Nachrichtendatenfeld unterscheidet, wird (hoffentlich!) Aufgrund einer falschen CRC ein Fehlerrahmen auf dem Bus angezeigt.
quelle
In Ihrer Frage stellen Sie diese Hypothese auf:
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.
quelle