J1939 – interesujący protokół do ciężkiego sprzętu

systemywbudowane.pl 8 miesięcy temu
Zdjęcie: j1939


Wstęp

j1939 – historykom ta liczba kojarzy się z datą rozpoczęcia drugiej wojny światowej. Jednak dla samochodziarzy ta liczba budzi zupełnie inne skojarzenie.

Zdjęcie: George Kroeker on Unsplash

O protokole j1939

Występowanie

j1939 można spotkać najczęściej w ciężkich pojazdach takich jak śmieciarki, tiry, kombajny i inne maszyny rolnicze, ratraki, pojazdy wojskowe, maszyny górnicze i wozy strażackie.
Protokół bazujący na j1939 o nazwie NMEA2000 jest używany w łodziach i jachtach.

Zdjęcie: Ivan Ragozin on Unsplash


Co łączy te pojazdy poza tym, iż pracują w trudnych warunkach? To, iż mnóśtwo w nich różnych szpejów, osprzętu, napędów czujników i elementów wykonawczych.

Różnica pomiędzy j1939 a CAN

Czym j1939 różni się od CANa? Nie jest to do końca dobrze postawione pytanie. To tak jakby zapytać czym się różni Counter-Strike od Half Life’a. j1939 jest bowiem tzw. protokołem wyższego poziomu (higher level protocol). Do komunikacji wykorzystuje wprost protokół CAN.

Nagłówek j1939 w ramce CAN

Jeśli więc podłączylibyśmy się do magistrali j1939 z oscyloskopem lub innym analizatorem logicznym zobaczylibyśmy normalne ramki CAN z rozszerzonym, czyli 29-bitowym identyfikatorem. Cały myk polega na tym jakie wartości umieszczone są na poszczególnych pozycjach w polu ID. Zaszywany jest w nich bowiem szereg ważnych informacji.

Adresacja węzłów

W j1939 (w przeciwieństwie do klasycznego CANa) mamy do czynienia z adresacją węzłów.
Każde z urządzeń na magistrali posiada swój unikatowy numer, nazywany Source Address.

Każda ramka j1939 musi zawierać w identyfikatorze między innymi właśnie Source Adres (SA), czyli adres węzła, który nadaje wiadomość i Destination Address (DA), czyli adres węzła, do którego nadawana jest wiadomość.

Wiadomości mogą być nadawane w dwóch trybach:

od węzła do węzła

W tym przypadku węzeł o adresie 03 wysyła wiadomość do węzła o adresie 55.

Naturalnie, komunikacja przebiega przez wspólną magistralę, wiec wszystkie węzły “słyszą” tą ramkę – po prostu ją ignorują.

od węzła na broadcast

czyli do wszystkich słuchających. Nadawanie na broadcast równoznaczne jest z nadawaniem na adres 0xFF (czyli decymalnie 255).


Dzięki temu, iż w każdej ramce mamy informacje na temat Source adres i Destination adres, debugowanie i analiza komunikacji na j1939 jest na prawdę przyjemna.

Patrząc na dowolną ramkę od razu widać kto ją wysłał do kogo.

PGN – Parameter Group Number

Poza tym w polu ID znajduje się również numer PGN, czyli Parameter Group Number. Na razie przyjmij, iż PGN to numer ID wiadomości podobnie jak ID na klasycznym CANie. Nie jest to jednak do końca zgodne z prawdą, ponieważ jeden PGN może być wysyłany przez różne węzły. Co więcej – w zależności od tego kto nadaje danego PGNa, może on zmieniać swoją strukturę.

SPN – Suspected Parameter Number

SPN oznacza Suspected Parameter Number i ma się mniej więcej tak jak sygnał w ramce CAN. Są to więc już konkretne dane, konkretne wartości parametrów pojazdu zaszyte razem w sekcji DATA.

Normalizacja vs. dowolność producentów

W j1939 PGNy, producent może ustalić samodzielnie dla danego projektu czy danego modelu pojazdu a następnie dowolnie zdefiniować sobie strukturę tych ramek i używać w nich dowolnych sygnałów, czyli właśnie SPNów.
Jest jednak cała pula wiadomości zarezerwowanych i opisanych przez standard.

Rozwinięcie tematu

Więcej na temat protokołu j1939 omawiam w poniższym nagraniu:

Idź do oryginalnego materiału