Interfejs komunikacyjny CAN: podstawy
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.
Model komunikacji
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 I2C.
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 odpytaniami 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.
Dostęp do medium
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 transmisji, 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. Metoda ta zatem 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ż jako 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ę, natomiast 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 11. 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.
Rys. 11. Przykładowy scenariusz uzyskiwania dostępu do medium przez węzły, które rozpoczęły transmisję w tym samym momencie [4]
Wykrywanie błędów
W interfejsie CAN zastosowano szereg mechanizmów odpowiedzialnych za wykrywanie błędów. Są to:
- Sprawdzanie wartości bitów wysyłanych na magistralę
- Każdy węzeł monitoruje magistralę CAN w celu odbierania wiadomości nadanych przez inne węzły, jak również w celu wykrywania kolizji podczas nadawania przez siebie wiadomości. Mechanizm ten może posłużyć również do sprawdzania poprawności kodowania wysyłanej wiadomości. Gdy węzeł wystawia na magistrali bit dominujący, a odczytuje bit recesywny (lub odwrotnie – wystawia bit recesywny, a odczytuje dominujący), generowany jest błąd.
- Sprawdzanie poprawności formatu wiadomości
Każda ramka ma określony format, co oznacza, że wewnątrz niej muszą występować określone w specyfikacji pola. Wartość niektórych pól również jest z góry ustalona. Jeśli format ramki będzie niezgodny ze specyfikacją, wygenerowany zostanie błąd. - Suma kontrolna (CRC)
Węzeł przed wysłaniem wiadomości oblicza dla niej sumę kontrolną, której wartość umieszczana jest w dedykowanym polu ramki. Węzeł odbierają ponownie oblicza sumę kontrolną i sprawdza czy jej wartość zgadza się z wartością odczytaną z pola CRC wiadomości. Jeśli wartości są różne, generowany jest błąd. - Potwierdzenie otrzymania wiadomości
Węzeł wysyłający wiadomość może oczekiwać na potwierdzenie otrzymania wiadomości od co najmniej jednego węzła, który wiadomość odebrał. Jeśli odpowiedź nie nadejdzie, wygenerowany zostanie błąd. - Błąd wielokrotności tej samej wartości bitu
Jeśli w ramce wykryte zostanie występowanie więcej niż pięciu kolejnych bitów o tej same wartości, wygenerowany zostanie błąd.
CAN – warstwa aplikacji
Brak zdefiniowanej warstwy siódmej stwarza możliwość jej implementacji zgodnie z indywidualnymi zapotrzebowaniami i konkretnymi zastosowaniami danej sieci. Istnieje obecnie wiele gotowych protokołów wykorzystujących warstwę aplikacyjną standardu CAN. Główne z nich wymieniono w tabeli 2. Znajdują one zastosowanie w różnorodnych dziedzinach przemysłu.
Tab. 2. Protokoły warstwy 7 oparte na standardzie CAN
Nazwa protokołu |
Główne obszary wykorzystania |
NMEA 2000 | Statki |
J1939 | Pojazdy kołowe |
DeviceNet | Zastosowanie przemysłowe np. fabryki |
CANopen | Systemy wbudowane |
ISOBUS | Maszyny rolnicze |
MILCAN | Zastosowania wojskowe |
Metody budowy węzłów CAN
Na przestrzeni lat wykształciły się trzy różne koncepcje budowy autonomicznego węzła transmisyjnego sieci CAN. Każda koncepcja wymaga zastosowania co najmniej trzech podstawowych modułów funkcjonalnych: układu mikrokontrolera, kontrolera CAN i transceivera (układu nadawczo-odbiorczego) CAN. Jednocześnie każda z tych koncepcji różni się liczbą wymaganych układów scalonych. Poniżej przedstawiono podstawową konstrukcję węzła CAN według każdej z koncepcji:
- Koncepcja nr 1 (trzy układy scalone): mikrokontroler z zewnętrznym kontrolerem CAN i zewnętrznym transceiverem CAN,
- Koncepcja nr 2 (dwa układy scalone): mikrokontroler z wbudowanym kontrolerem CAN i zewnętrznym transceiverem CAN,
- Koncepcja nr 3 (jeden układ scalony): mikrokontroler z wbudowanym kontrolerem CAN i wbudowanym transceiverem CAN.