Przesyłanie różnych komunikatów za pomocą SAMEGO ID na magistrali CAN

12

Arbitraż CAN odbywa się za pomocą identyfikatorów, a każdy węzeł na magistrali może przesyłać z dowolnym identyfikatorem (najlepiej nie powinien, ale może to zrobić nieprzyjemny węzeł).

Co jeśli dwa różne węzły podłączone do tej samej magistrali CAN przesyłają wiadomości o tych samych identyfikatorach, ale różnych bajtach danych?

Moje myślenie: generuje śmieci w autobusie. Ktokolwiek ma dominujące bity, tylko oni zostaną przekazani.

Swanand
źródło
1
Nie jestem pewien, dlaczego to zrobili w ten sposób. Pomyślałbym, że bardziej uzasadnione byłoby zastosowanie arbitrażu do całego przesłania.
Rocketmagnet

Odpowiedzi:

12

Sekcja 6.1 specyfikacji CAN :

BIT ERROR: Jednostka, która wysyła trochę do magistrali, monitoruje również magistralę. BIT ERROR musi zostać wykryty w tym czasie, gdy monitorowana wartość bitu różni się od wysyłanej wartości bitu. Wyjątkiem jest wysłanie bitu „recesywnego” podczas wypchanego strumienia bitów pola ARBITRATION FIELD lub podczas SLOTA ACK.

Tak więc węzeł, który jako pierwszy przesyła „1”, gdy drugi przesyła „0”, odnotuje błąd bitowy, a następnie zasygnalizuje błąd w normalny sposób - przesyłając flagę błędu (patrz sekcja 3.1.3), jak opisano formalnie w sekcji 6.2.

Nieformalnie, jeśli ten węzeł jest aktywny (co powinno być zwykłym przypadkiem), wyśle ​​flagę błędu 6 dominujących bitów, którą wszystkie inne węzły również wykryją (jako błąd rzeczy). Powoduje to całkowite zniszczenie tego komunikatu:

  • nikt tego nie otrzyma
  • żaden z nadajników nie będzie myślał, że z powodzeniem cokolwiek przesłał.

Każdy nadajnik będzie następnie próbował retransmitować - w zależności od dokładnego czasu retransmisji, jeden może wystartować wystarczająco wcześniej, a drugi kontrolę wzmocnienia magistrali. W przeciwnym razie ta sama sekwencja może się powtórzyć. (Lub inny komunikat o wyższym priorytecie może zniechęcić ich na chwilę!)


Rozszerzona odpowiedź inspirowana odpowiedzią @ clabbacchio poniżej.

Wspominasz o „paskudnych węzłach”, a clabbacchio słusznie wskazuje, że jeśli dwa węzły transmitują w różnych momentach, każdy odbiornik musi zdecydować, co zrobić z wieloma odbiornikami.

Zostało to wykazane przez włamanie w zeszłym roku . Artykuł omawia, w sekcji „Specyfika PSCM”, w jaki sposób atakujący może zsynchronizować się ze zwykłymi komunikatami w autobusie i odtworzyć swoją złą wiadomość tuż przed tą, którą „dobry” ECU ma zamiar wysłać. Odbierający ECU akceptuje wcześniejszy komunikat, aktualizuje swój licznik wiadomości, a następnie odrzuca „dobre” wiadomości jako błędne, ponieważ jego licznik wiadomości nie zwiększył się.

Martin Thompson
źródło
1

W swoim pytaniu stawiasz hipotezę:

Ktokolwiek ma dominujące bity, tylko oni zostaną przekazani.

Który zakłada, że ​​dwa komunikaty są przesyłane dokładnie w tym samym czasie, co jest szczególnym przypadkiem bardziej ogólnego problemu. Prawidłowa odpowiedź Martina obejmuje ten konkretny problem, ale ignoruje (bardziej ogólny) przypadek, w którym dwa węzły transmitują w różnych momentach.

W takim przypadku na szynie będą krążyć dwie wiadomości o tym samym identyfikatorze, ale o różnej ładowności, i logika odbiorników zależy od rozróżnienia między tymi dwiema wiadomościami i podjęcia decyzji, czy jest to treść, którą należy odebrać. Jeśli nie rozróżnią dwóch komunikatów, mogą źle zinterpretować dane i powodować poważniejsze problemy niż tylko ramki błędów.

Powiedzmy na przykład, że jedna wiadomość zawiera odczyt czujnika temperatury, a druga zawiera pozycję docelową siłownika na tym samym bajcie (NIGDY NIE POWINIEN SIĘ STAĆ W PRAWDZIWYM ŻYCIU), może być tak, że siłownik dostanie to jako cel, nawet o tym nie wiedząc.

clabacchio
źródło
Tak, należy wprowadzić logikę rozróżniającą dwa komunikaty. Ale moje pytanie dotyczyło tego, czy arbitraż odbywa się na podstawie identyfikatora, co się stanie, jeśli identyfikator wiadomości będzie taki sam, a dane inne.
Swanand
@Swanand to tylko hipoteza jednoczesnej transmisji? Zauważ, że jest to przypadek narożny, przeciwnie jest bardziej prawdopodobne
clabacchio
0

Jeśli pole danych komunikatów jest inne, (miejmy nadzieję!) Otrzymasz ramkę błędu na magistrali z powodu niewłaściwego CRC.

Axeman
źródło