[CAN i LIN] Analiza protokołów szeregowych oscyloskopami Rohde&Schwarz, część 3

Badanie protokołów komunikacyjnych jest już obowiązkową funkcją oscyloskopów cyfrowych co najmniej średniej klasy. Nadal jednak jest ona udostępniana najczęściej jako opcjonalne rozszerzenie oprogramowania firmowego. Zwykle w cenie oscyloskopu mieści się tylko kilka najbardziej popularnych protokołów, np. SPI i UART. W cyklu artykułów przedstawiono rozwiązania dotyczące analizy protokołów zastosowane w oscyloskopach Rohde&Schwarz. W tej części omówiono badanie interfejsów CAN i LIN, w dwóch poprzednich częściach omówiliśmy badanie protokołów interfejsów SPI i I2C oraz analizy protokołów transmisyjnych bazujących na RS232.

Omawiane w poprzedniej części artykułu interfejsy SPI i I2C pracują według modelu komunikacji Master – Slave. W tak zorganizowanym systemie jakąkolwiek transmisję między dowolnymi urządzeniami zawsze inicjuje urządzenie nadrzędne – Master, natomiast urządzenia podrzędne (Slave) odpowiadają tylko na pytania i same nie mogą porozumiewać się ze sobą bezpośrednio. W wielu aplikacjach przedstawione rozwiązania są jednak nie do przyjęcia. Przykładem jest elektronika motoryzacyjna, w której komunikacja musi być w wielu przypadkach natychmiastowa, bez metody pytań i odpowiedzi.

Między innymi na potrzeby motoryzacji w latach 80. XX w. opracowano specjalny interfejs komunikacyjny CAN, który co prawda po kilku ulepszeniach i modyfikacjach, ale nadal z powodzeniem jest stosowany do dziś. Obecnie zakres zastosowań wykroczył zresztą poza motoryzację. Na dokładny opis warstwy fizycznej i protokołu nie ma miejsca w tym artykule, odsyłamy do bogatej dokumentacji papierowej i internetowej, poniżej przedstawiono jedynie najważniejsze zagadnienia niezbędne do zapoznania się z pomiarami wykonywanymi oscyloskopami Rohde&Schwarz.

Protokół CAN

Zasadniczą różnicą między interfejsem CAN a omawianymi wcześniej SPI i I2C jest przyjęcie odmiennego modelu komunikacji, tzw. Multi-master. Wszystkie węzły mogą w nim komunikować się ze sobą wzajemnie bez stosowania dodatkowych linii sterujących, tylko korzystając z podstawowego medium, jakim jest dwuprzewodowa skrętka. Jest ona terminowana na obu końcach rezystorami ok. 120 W w celu minimalizacji odbić sygnału. Węzły są łączone w konfiguracji liniowej, gwiaździstej lub pierścieniowej. Sygnał logiczny jest tworzony różnicowo przez odjęcie napięcia CAN_L od CAN_H (CAN_L i CAN_H to nazwy linii interfejsu CAN). Przykładowe relacje między napięciami na liniach CAN_H i CAN_L przedstawiono na rys. 1a, relacje czasowe są natomiast widoczne na rys. 1b. Analizator protokołów odczytuje stan magistrali na podstawie tylko jednej linii. Sygnał z linii CAN_L jest interpretowany wprost, z linii CAN_H natomiast po zanegowaniu. Oba sygnały są jednak potrzebne do realizacji transmisji różnicowej umożliwiającej przesyłanie danych na duże odległości. Przy prędkości transmisji 5 kb/s możliwe jest uzyskanie zasięgu nawet do 10 km.

Założenia dotyczące sieci komunikacyjnej z zastosowaniem interfejsu CAN narzuciły budowę ramki transmisyjnej. Z uwagi na możliwość zgłaszania jednoczesnego dostępu do medium przez kilka węzłów warstwa fizyczna i protokół komunikacyjny musi uwzględniać rozstrzyganie konfliktów, sygnalizację błędów, przesyłanie potwierdzeń itp. Dobry analizator protokołu powinien uwzględniać wszystkie zdarzenia występujące na magistrali, niezależnie od wersji badanego interfejsu – pamiętamy, że ulegał on modyfikacjom.

 

Rys. 1. Oscylogramy napięć na magistrali CAN, a) zależności napięciowe, b) zależności czasowe

Ramkę protokołu CAN przedstawiono na rys. 2. Składa się ona z kilku pól pełniących określone role w interpretacji zdarzeń występujących na magistrali. W wyniku prac nad interfejsem powstały dwie funkcjonujące dziś wersje protokołu: CAN 2.0A (tzw. standard – rys. 2b) i CAN 2.0B (extended – rys. 2a). Zasadniczą różnicą z punktu widzenia protokołu są inne długości bloku identyfikacyjnego, zwanego tez polem arbitrażowym. Dla użytkownika bardziej istotna jest większa prędkość transmisji w interfejsie CAN 2.0B dochodząca do 1 Mb/s, podczas gdy w wersji CAN 2.0A można uzyskać tylko 125 kb/s. W protokole przewidziano transmisję czterech rodzajów ramek, są to: ramka danych, ramka zdalnego wywołania, ramka błędów i ramka przepełnienia. Transmisja jest w zasadzie asynchroniczna, w interfejsie nie ma linii zegarowej. Lokalne zegary po stronie odbiorczej są synchronizowane z nadawczymi zawsze na początku ramki. Transmisję inicjuje dowolny węzeł, a ewentualne konflikty są rozstrzygane poprzez przemyślany system arbitrażowy. Wykrycie ewentualnych błędów przez dowolny węzeł skutkuje natychmiastowym generowaniem ramki błędów, co jest informacją do nadawcy, że powinien powtórzyć ostatnią transmisję. Błędy mogą wynikać nie tylko z konfliktów na magistrali, ale też ze zwykłych przekłamań sygnału elektrycznego. Dlatego w każdej transmisji jest obliczana 15-bitowa suma kontrola (CRC), którą teoretycznie można by było wykorzystać do korekcji pewnych błędów, jednak służy ona tylko do informowania o błędach. Co ciekawe, węzeł nadający może sam wykrywać swoje błędy dzięki równoczesnemu nasłuchowi magistrali podczas nadawania. Ramki nie mogą być nadawane bezpośrednio jedna po drugiej. Minimalny odstęp między kolejno nadawanymi ramkami powinien być nie mniejszy niż 3 bity. Koncepcja protokołu CAN zakłada, że o wszystkim co dzieje się na magistrali wiedzą wszystkie węzły. Szczególnym rodzajem ramki protokołu CAN jest tzw. ramka zdalna, w której nie występuje w ogóle pole danych.

Rys. 2. Ramka protokołu CAN a) wersja z 29-bitowym identyfikatorem, b) wersja z 11-bitowym identyfikatorem

Konieczne jest jeszcze wyjaśnienie trochę odmiennego nazewnictwa bitów od ogólnie stosowanego. Ze względu na różnicową transmisję sygnału cyfrowego, w interfejsie CAN, zasadniczo nie stosuje się określeń „niski poziom” lub „wysoki poziom”, a zamiast nich wprowadzono pojęcie bitu dominującego i recesywnego. Sygnały cyfrowe są generowane przez wyjścia typu Open Drain, w jakie są wyposażone drivery linii. Stan niski jest utożsamiany z napięciem występującym na wyjściu, w którym został uaktywniony tranzystor wyjściowy – jest to stan dominujący, gdyż wystarczy aby tylko jedno wyjście zostało uaktywnione, aby linia znalazła się w tym stanie. Przy wyłączonych wyjściach linia pozostaje w stanie recesywnym (odpowiednikiem stanu wysokiego). Zauważmy że, z elektrycznego punktu widzenia nie ma konfliktu jeśli wyjścia kilku węzłów jednocześnie zostaną wysterowane, natomiast przyjęta metoda generacji stanów logicznych na liniach interfejsu CAN jest wykorzystywana do rozstrzygania przypadków próby jednoczesnego dostępu do linii przez kilka węzłów. Szczegółów należy szukać w specyfikacji interfejsu CAN.

Pomiary interfejsu CAN

Zakładkę konfiguracyjną protokołu CAN przedstawiono na rys. 3. Do odczytania informacji przesyłanych interfejsem CAN wystarczy analiza jednej z jego linii: CAN_L lub CAN_H. Do interpretacji danych cyfrowych na podstawie linii CAN_H konieczna będzie inwersja poziomów. W tym przypadku wyższe napięcie będzie odpowiadało stanowi logicznemu „0”, niższe natomiast będzie odpowiadało „1”. Oczywiście analizator wykonuje taką operację automatycznie podczas pracy, jednak bardziej oczywista dla użytkownika będzie częściej stosowana konwencja, w której wyższe napięcie odpowiada „1”, niższe „0”. Z tego względu do analizy wygodniej jest brać linię CAN_L. Zawsze bardzo istotne jest prawidłowe ustawienie napięcia progowego (pole „Threshold”). Należy pamiętać, że po każdej zmianie linii CAN_L na CAN_H lub odwrotnie konieczna będzie korekcja napięcia progowego. Wyboru napięcia progowego można dokonać na podstawie określenia technologii wykonania interfejsu. Po naciśnięciu przycisku „Technology” zmieniana jest nastawa z ręcznej na jedną z kilku predefiniowanych (rys. 3).


Rys. 3. Zakładka konfiguracyjna dla protokołu CAN

Kolejnym parametrem decydującym o prawidłowym przebiegu analizy protokołu jest zastosowana w badanym układzie prędkość transmisji. Parametr ten może być wpisywany ręcznie w polu „Bit rate” lub wybierany z listy.

Jak już było powiedziane, transmisja realizowana interfejsem CAN jest asynchroniczna, ale synchronizowana na początku każdej ramki. Bardzo groźne są długie sekwencje jednakowych bitów, gdyż nie występują wówczas momenty znamienne i może wówczas dochodzić do rozsynchronizowania się odbiornika. W protokole CAN uwzględniono więc zabezpieczenie mające wykluczyć podobne przypadki. Jeśli w transmisji pojawia się pięć jednakowych impulsów, to generowany jest dodatkowy impuls o przeciwnym znaku. Może to prowadzić do wydłużania poszczególnych pól ramki, np. danej do 9 bitów.

O autorze