Warstwa łącza danych w CAN
Wiadomości wysyłane w sieci CAN nazywane są ramkami komunikacyjnymi. W warstwie łącza danych określono cztery rodzaje ramek komunikacyjnych CAN. Są to:
- data frame – ramka służąca do przesyłania danych,
- remote frame – ramka zdalnego wywołania (wysyłana do węzła w celu odesłania przez niego odpowiedzi z danymi),
- error frame – ramka sygnalizacji błędu,
- overload frame – ramka przepełnienia.
Specyfikacja CAN wyróżnia dwa rodzaje ramek do wysyłania danych: standardową (wersja CAN 2.0A) oraz rozszerzoną (CAN 2.0B). Te dwa warianty głównie różnią się długością identyfikatora (adresu). Standard CAN 2.0A cechuje się adresem ramki o długości 11 bitów (rysunek 6), natomiast w standardzie CAN 2.0B adres zawiera 29 bitów (rysunek 7). Dostępne są następujące pola ramek CAN:
- SOF (Start Of Frame) – początek ramki,
- RTR (Remote Transmission Request Bit) – rodzaj ramki,
- IDE (Identifier Extension) – format ramki danych (podstawowy lub rozszerzony),
- r0 – zarezerwowany bit,
- DLC (Data Length Code) – ilość wykorzystywanych bajtów danych,
- CRC (Cyclic Redundancy Check) – suma kontrolna,
- ACK (Acknowledgement) – potwierdzenie wysłania/odebrania danych,
- EOF (End of Frame) – zakończenie ramki,
- IFS (Intermission) – przerwa przed następną ramką.
W tym miejscu warto zastanowić się czym tak naprawdę jest identyfikator wiadomości. Zazwyczaj w systemach komunikacyjnych identyfikator jest unikatowym adresem węzła. Oznacza to, że wiadomości z danym identyfikatorem zawsze są adresowane tylko do jednego, konkretnego węzła. W sieci CAN zastosowano inne podejście. CAN jest rozwiązaniem zorientowanym nie na węzły, a na wiadomości. Rozumieć przez to należy, że identyfikator wskazuje czego dotyczą dane w wiadomości. Każda wysłana wiadomość jest odbierana przez wszystkie węzły w sieci.
Zasady, według jakich mogą komunikować się urządzenia w sieci określa tak zwany model komunikacji. W CAN użytym modelem komunikacji jest multi-master. Aby lepiej zrozumieć ideę jego działania i dostrzec zalety jego stosowania, warto najpierw przyjrzeć się innemu rozwiązaniu – popularnie wykorzystywanemu modelowi master-slave, który obowiązuje między innymi w sieciach o topologii magistrali wykorzystujących interfejs RS-485, SPI lub I²C.
Koncepcja modelu master-slave przewiduje powierzenie jednemu z węzłów sieci roli węzła nadrzędnego (master), podczas gdy wszystkie pozostałe węzły są węzłami podrzędnymi (slaves). Węzeł nadrzędny organizuje komunikację, co oznacza, że tylko on może zdecydować, który węzeł podrzędny i kiedy może realizować transmisję danych. W praktyce komunikacja zgodna z modelem master-slave odbywa się w następujący sposób: węzeł nadrzędny chcąc uzyskać informację od jednego z węzłów podrzędnych wysyła do niego wiadomość, na którą węzeł podrzędny odpowiada. Model taki sprawdza się, gdy węzeł nadrzędny wie, kiedy istnieje potrzeba uzyskania informacji od węzła podrzędnego. Sytuacja komplikuje się, gdy węzły podrzędne mają potrzebę wysłania danych w losowych momentach czasu, a do tego wiadomość ma trafić nie do węzła nadrzędnego, a do innego węzła podrzędnego. W tym przypadku węzeł nadrzędny może cyklicznie po kolei wysyłać wiadomość do każdego z węzłów podrzędnych z zapytaniem czy węzeł podrzędny ma jakieś dane do wysłania. Jeśli węzeł podrzędny odeśle wiadomość z odpowiedzią twierdzącą, węzeł nadrzędny pozwala węzłowi podrzędnemu na nadanie wiadomości do innego węzła podrzędnego, bądź sam odbiera i przekazuje mu tą wiadomość.
W przedstawionym powyżej scenariuszu model master-slave ma liczne wady. Aby węzeł podrzędny mógł przekazać informację, musi odczekać na moment, gdy węzeł master wyśle do niego wiadomość z zapytaniem o potrzebę wysłania wiadomości. W efekcie model ten jest mało wydajny, gdyż w przypadku dużej liczby węzłów podrzędnych czas pomiędzy kolejnymi zapytaniami kierowanymi do tego samego węzła podrzędnego jest długi. Jednocześnie czas ten nie jest przez system efektywnie wykorzystywany, gdyż zazwyczaj tylko mała liczba z odpytywanych węzłów ma potrzebę wysłania wiadomości. Dodatkowo komunikacja między węzłami podrzędnymi jest utrudniona, gdyż wymaga udziału węzła nadrzędnego. Kolejną wadą modelu master- -slave jest jego potencjalnie wysoka zawodność, gdyż w przypadku uszkodzenia węzła nadrzędnego komunikacja w sieci nie może być dalej realizowana.
Z powodu tych ograniczeń, w interfejsie CAN zastosowano model o nazwie multi-master. Jak sama nazwa wskazuje, w systemie komunikacyjnym używającym tego modelu, w przeciwieństwie do systemów z modelem master-slave, może być więcej niż jeden węzeł nadrzędny, a dokładniej każdy z węzłów może pełnić tą rolę. W praktyce oznacza to, że węzeł sieci CAN decyduje się na wysłanie wiadomości w momencie, gdy wystąpi taka potrzeba. W efekcie nie występują tu wady modelu master-slave: nie ma potrzeby odpytywania węzłów o potrzebę wysłania wiadomości, wiadomość jest wysyłana przez węzeł bez zwłoki, a uszkodzenie któregokolwiek węzła nie powoduje zatrzymania działania systemu.
W sieci o topologii magistrali wszystkie węzły dołączone są do jednego, wspólnego medium transmisyjnego. Przez medium to może w danej chwili być przesyłana tylko jedna wiadomość. Oznacza to, że tylko jeden z węzłów może mieć w danej chwili prawo do motransmisji, gdyż w przypadku próby wysłania wiadomości przez więcej niż jeden węzeł wystąpi kolizja i utrata informacji. Aby zapobiec próbie wysłania wiadomości przez więcej niż jeden węzeł w danym momencie, konieczne jest stosowanie mechanizmu nadającego i odbierającego węzłom prawo do transmisji, zwanego inaczej dostępem do medium.
W sieci wykorzystującej model master-slave sposób udzielania węzłom dostępu do medium wynika z zasady działania samego modelu. Węzły podrzędne mogą wysyłać informacje przez medium transmisyjne magistrali tylko w odpowiedzi na zapytanie od węzła nadrzędnego. Zapytanie węzła nadrzędnego kierowane jest zawsze tylko do jednego, konkretnego węzła podrzędnego, zatem tylko ten węzeł w danym momencie odpowiada, co wyklucza próbę wysłania wiadomości przez więcej niż jeden węzeł i wystąpienie kolizji.
W sieciach używających modelu multi-master nie ma możliwości zastosowania analogicznego rozwiązania. Węzły podejmują próbę wysłania wiadomości od razu, gdy zachodzi taka potrzeba, nie czekając na pozwolenie z zewnątrz. Jest to tak zwany losowy dostęp do medium, gdyż nie ma możliwości przewidzenia, kiedy dany węzeł będzie próbował przesłać przez medium transmisyjne informację. Algorytmem odpowiednim do kontrolowania dostępu do medium w sieciach wykorzystujących model multi-master jest CSMA (Carrier Sense Multiple Access).
Metoda ta opiera się na śledzeniu stanu dostępności medium transmisyjnego. Każdy węzeł cyklicznie odczytuje wartość sygnału na magistrali sprawdzając czy transmisja jest realizowana. Węzeł może podjąć próbę wysłania wiadomości tylko w momencie, gdy na magistrali nie trwa wymiana informacji. Metoda dostępu do medium transmisyjnego CSMA rozwiązuje problem kolizji, które wystąpić mogą na skutek wysłania przez węzły wiadomości w momencie, gdy transmisja na magistrali już trwa. Nie jest jednak w stanie rozwiązać problemu kolizji, które powodowane są jednoczesnym rozpoczęciem transmisji przez więcej niż jeden węzeł. W tym celu opracowane zostały metody rozszerzające funkcjonalność CSMA. Dwie najpopularniejsze z nich to CSMA/CA (Collision Avoidance) oraz CSMA/CD (Collision Detect).
Metoda dostępu do medium transmisyjnego CSMA/CA zakłada, że węzeł chcący rozpocząć transmisję wiadomości najpierw wysyła na magistralę krótką wiadomość, którą informuje pozostałe węzły, że zaraz nastąpi transmisja. Zatem ta metoda zapobiega kolizjom wynikającym z próby równoczesnego wysyłania wiadomości przez pewną grupę węzłów. Inne podejście zastosowano w drugiej metodzie – CSMA/CD, która dopuszcza wystąpienie kolizji. Każdy z węzłów nie tylko monitoruje stan magistrali przed wysłaniem przez siebie wiadomości, ale również w trakcie jej wysyłania. Jeśli w procesie wysyłania wiadomości węzeł stwierdzi, że stan magistrali różni się od aktualnie wysyłanego bitu, jest to dla niego informacja, że równocześnie na magistralę próbuje wysłać wiadomość inny węzeł. Węzeł zaprzestaje w tym momencie transmisji i wysyła na magistralę sekwencję informującą o kolizji. Ponowna próba wysłania wiadomości nastąpi po upłynięciu losowo wybranego czasu.
W interfejsie CAN zastosowano zmodyfikowaną metodę CSMA/CD o nazwie CSMA/ CR (Collision Resolution), zwaną też Non-Destructive Bit Wise Arbitration. Metoda ta dopuszcza występowanie kolizji, tak jak CSMA/ CD. W odróżnieniu jednak od CSMA/CD, w metodzie CSMA/CR w wyniku kolizji jedna z ramek zostaje wysłana przez magistralę. Jest to ramka o najwyższym priorytecie. Priorytet określany jest na podstawie adresu ramki – im niższa wartość liczbowa w adresie, tym wyższy priorytet. W praktyce, w przypadku próby wysłania na magistralę kilku wiadomości, CSMA/CR działa według następującego algorytmu: porównywane są bity na tych samych pozycjach adresu (począwszy od najbardziej znaczącego bitu adresu, a skończywszy na najmniej znaczącym) i jeśli wartość bitu na danej pozycji jest w każdym adresie taka sama, bit ten jest wysyłany na magistralę. Jeśli występuje niezgodność (część bitów ma wartość 0, a część 1), wybierany jest bit dominujący 0 i to on jest wysyłany na magistralę. Wiadomości z bitem 1 nie biorą dalszego udziału w procesie wysyłania. W efekcie na magistralę wysłany zostaje adres o najniższej wartości, a więc najwyższym priorytecie. Po adresie wysyłane są kolejne pola wybranej ramki.
Aby zobrazować jak działa mechanizm CSMA/CR, warto rozważyć przykładowy scenariusz, zilustrowany na rysunku 8. Trzy węzły (oznaczone kolejno numerem 1, 2 i 3) chcą wysłać wiadomość na magistralę. Po upewnieniu się, że dotychczas trwająca na magistrali transmisja została zakończona, rozpoczynają nadawanie w tym samym momencie czasu. Pierwszym wysłanym bitem jest bit początku wiadomości (SOF). Po nim wysyłane są bity adresu. Każdy z węzłów po nadaniu kolejnego bitu adresu sprawdza poziom sygnału ustawiony na magistrali. Dopóki wszystkie węzły wysyłają bity o takiej samej wartości, odczytują adekwatny do nich poziom sygnału magistrali. Dzieje się tak dla bitów adresu o indeksie od 10 do 6 włącznie. Bit numer 5 nie jest już taki sam dla wszystkich węzłów. Węzły 1 i 3 nadają bit 0 (dominujący), natomiast węzeł 2 wysyła bit 1 (recesywny). Na magistrali ustawiony zostaje bit dominujący, który zawsze wygrywa arbitraż z bitem recesywnym. Węzeł 2 odczytuje inny stan na magistrali niż stan wynikający z wysłanego bitu. Jest to dla niego informacja, że inny węzeł jednocześnie wysyła wiadomość i ma ona wyższy priorytet. W wyniku tego faktu węzeł 2 nie kontynuuje wysyłania wiadomości. Wysyłanie wiadomości kontynuują natomiast węzły 1 i 3. Nadane zostają kolejne bity o indeksie od 5 do 3 włącznie. Bit numer 2 ponownie nie ma takiej samej wartości w przypadku obu węzłów. Węzeł numer 3 wysyła bit 0, natomiast węzeł 1 bit 1. Na magistrali ustawiony zostaje bit dominujący 0. Węzeł 1 zauważa różnicę wartości wysłanego bitu i stanu magistrali, więc zaprzestaje dalszej transmisji. Węzeł 3 kontynuuje wysyłanie adresu. Po zakończeniu wysyłania adresu wysyłany jest bit RTR ramki, suma kontrolna ramki i pole danych ramki.
Szymon Panecki, EP
Literatura:
[1] https://auobd2.com/service/controllerarea-network-can-bus-diagnostics-456.html
[2] An Overview of Controller Area Network (CAN) Technology, Machine Bus Corporation, 2003
[3] Introduction to the Controller Area Network (CAN), Texas Instruments, 2008
[4] http://www.technologyuk.net/telecommunications/industrial_networks/can.shtml