Struktura

Z Ampio Smart Home
Skocz do: nawigacja, szukaj


CAN[edytuj]

Rys historyczny[edytuj]

Standard CAN został stworzony w firmie Bosch w drugiej połowie lat 80–tych, natomiast specyfikacja CAN 2.0 światło dzienne ujrzała w roku 1991. Od tej pory obserwujemy nieprzerwaną ekspansję CAN na nowe obszary zastosowań. Przyczyny powstania nowego standardu komunikacji w pojazdach miały oczywiście silne korzenie ekonomiczne. Ciągle rosnąca liczba mikrokontrolerów w samochodach powodowała lawinowy wzrost przewodów potrzebnych do nawiązania komunikacji. Koniecznym stało się opracowanie sposobu komunikacji opartej o topologię magistrali, która to, przy zwiększeniu szybkości transmisji, pozwoliłaby na zmniejszenie liczby niezbędnych przewodów.

Zasada działania[edytuj]

Magistrala CAN jest zbudowana z dwóch przewodów, oznaczonych symbolami CANH (zazwyczaj czerwony) i CANL. Przesyłana informacja jest kodowana sygnałem różnicowym. Gdy pomiędzy dwoma urządzeniami nie występuje zbyt duża różnica potencjałów mas (mniejsza od 7 V według normy), można wtedy pominąć przewód wspólny, dzięki czemu interfejs fizyczny staje się faktycznie dwuprzewodowy.

Topologia[edytuj]

Topologię magistrali CAN ilustrującą sposób podłączania kolejnych urządzeń (węzłów) przedstawiono na rys. 1. Na końcach magistrali znajdują się zawsze rezystory terminujące, których zadaniem jest minimalizacja zjawiska odbicia sygnału. Najczęściej w roli terminatorów stosuje się rezystory o rezystancji 120 Omów.

Oprzewodowanie[edytuj]

Przez wzgląd maksymalny nacisk w stronę stabilności działania oraz w/w zasadzy działania magistrali CAN (vide sygnał różnicowy), zaleca się stosowanie przewodów: UTP/FTP kategorii 5 i wyższych z naciskiem na używanie do transmisji dwóch żył jednego koloru - pary. Przez wzgląd na standaryzację kolorystyczną najlepiej używać żył pomarańczowej+biało-pomarańczowej lub zielonej+biało-zielonej. Para brązowa +12V, para niebieska GND.


CAN od podszewki[edytuj]

W zasadzie to kosztem wprowadzenia można by przejść od razu do meritum, niemniej wypada słowem wstępu opisać co nieco samą magistralę jak i jej zalety i wady, bowiem dla mnie jest to chleb powszedni, ale wielu z was trochę się może wydać skomplikowane.

Wiec tak magistralę CAN (Controler AREA Network) powołano do życia w latach 80 w firmie Bosch (dzisiejsze O'Bosche):) na potrzeby rynku motoryzacyjnego w celu poprawienia i zwiększenia niezawodności systemów ABS i wielu innych ....

W uproszczeniu zawierającym sedno działania CAN można powiedzieć że jest to asynchroniczna szeregowa magistrala służąca do wymiany danych i tego się tego trzymać rękami, nogami i zębami (sztuczne szczeki są bardzo na miejscu).

CAN posiada wiele ciekawych własności niemniej tutaj wymienię tylko te podstawowe i postaram się je wyjaśnić :)

1. Posiada bardzo dużą odporność na zakłócenia elektromagnetyczne.

-- to zawdzięcza zastosowaniu różnicowej transmisji poszczególnych bitów. -- dodatkowo każda ramka opatrzona jest sumą kontrolną CRC-15.

Cóż to oznacza dla nas... hmmm... matematycznie można obliczyć że jeden przekłamany bit może zostać nie wykryty raz na 1000lat ciągłej pracy magistrali , więc prawdopodobieństwo niewykrycia wynosi 10^-11. Stanowi więc to o dużej niezawodności magistrali, Co zresztą potwierdzają też badania i testy przeprowadzone przez firmę Bosch, z których wynika iż w ciągu 4000h pracy wystąpiło około 3.95*10^(-3) nie wykrytych błędów transmisji.

2. Transmisja na magistrali CAN jest przeprowadzana metodą broadcastową.

Czyli oznacza to że magistrala pracuje w konfiguracji multi-master bez jednostki nadrzędnej. Można więc uprościć powyższe stwierdzenie w taki sposób:

-- wszystkie urządzenia na magistrali są masterami.

3. Dostęp do medium transmisyjnego realizuje CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance)

Jest to sprytny mechanizm zapewniający transmisję wiadomości z uwzględnieniem jej priorytetu. CSMA/CA w odróżnieniu od ETH (Ethernet) jest dużo skuteczniejszy i zapobiega utracie informacji w przypadku kolizji na magistrali.


No dobra na razie wystarczy:) teraz może trochę jaśniej napiszę zamiast suchych faktów :)

Jak już zauważyliście magistrala CAN jest bardzo ciekawa, ale co w niej takiego jest że w ogóle warto sobie nią głowę zawracać, czy potrzeba nam technologi samochodowych w układach, przecież mamy USART, I2C, SPI .....

hmmm no tak niby racja, no ale przyjrzyjmy się zatem prędkości magistrali. Otóż CAN pozwala transmitować dane z prędkością do 1Mbps. Szybko prawda no ale nie jest aż tak kolorowo. 1Mbps jest , ale maksymalnie na odległość do 40m. Czyli wraz ze wzrostem odległości prędkość maleje :( dodatkowo musimy też pamiętać, że rzeczywista prędkość (efektywna) przesyłania danych po uwzględnieniu nagłówka i danych nadmiarowych wynosi aż ~50%. Dotyczy to również danych z 24bitowym identyfikatorem.

W poniższej tabelce widzimy dostępne prędkości dla odpowiedniej długości magistrali:

Obrazek

Standard CAN definiuje nam tez kilka typów ramek, co ciekawe Ramka danych może zawierać tylko do 8 bajtów danych. Z kolei mechanizm wykrywania i obsługi błędów używa ramek błędów (error frames). Dodatkowo istnieje możliwość użycia ramek zdalnych RTR (Remote Transmission Request frames). Nie bez zasadne jest więc stwierdzenie, że magistrala ta wpływa na elastyczność systemu oraz jest tania w implementacji.

No tak , ale co ma CAN do elastyczności UART jest też elastyczny podobnie jak I2C..

hehe zgadzam się z tym , ale wielu początkujących nawet nie zdaje sobie sprawy z ograniczeń w/w magistral. żadna z w/w nie pozwala na dołączanie kolejnych węzłów bez zmian hardwerowych i softwerowych.

Jak napisałem wyżej CAN jest szeregową asynchroniczna magistralą. Bity na magistrali kodowane są metoda NRZ (Non Return to Zero). CAN pozwala też na znaczne zmniejszenie okablowania, np producenci samochodów dzięki CAN zmniejszyli wagę okablowania o kilka kilogramów jak też i ich długość o kilka kilometrów :)

Po dokładnym przyglądnięciu się magistrali CAN nie trudno nie zauważyć, że jest oparta na modelu warstwowym ISO/OSI. Specyfikacja CAN definiuje jedynie warstwę fizyczną oraz łącza danych. Natomiast wybór medium transmisyjnego oraz warstwę aplikacji pozostawia do zdefiniowania projektantom systemu. Myślę że jasno wynika to z Tabelki.

Obrazek

W odniesieniu do wspomnianego modelu warstwowego schemat transmisji wiadomości na magistrali CAN wraz z uwzględnieniem jej postaci w przejściu przez kolejne warstwy.

Obrazek

Oczywiście musimy tez pamiętać iż od strony architektonicznej budowa węzła CAN zależy przede wszystkim od tego w jakich warunkach i do czego będzie ona wykorzystywana. Rozglądnijcie się w około. Szybko zauważycie ze stale poszukuje się rozwiązań bardziej odpornych na niekorzystne warunki w miejscu pracy starając się jednocześnie zmniejszyć koszty całego systemu.

Typowa budowa węzła CAN:

Obrazek

Jak widzicie wyżej na jednej magistrali mamy 2 węzły o architekturach :

-- trójczłonowej , zawierający osobne urządzenia : mikrokontroler, kontroler CAN, oraz Transceiver -- dwuczłonowej , czyli zawierający mikrokontroler z wbudowanym Kontrolerem CAN oraz Transceiver

Istnieje jeszcze oparta na układach FPGA, gdzie układ FPGA realizuję obsługę protokołu CAN, a mikrokontroler może zostać zastąpiony procesorem Picoblaze osadzonym wewnątrz kodu VHDL. Transceiver występuje tutaj także jako osobne urządzenie.


Ufff... Czas na podsumowanie czyli to co powinniście w sumie na tym etapie wiedzieć po przeczytaniu zawartych wyżej informacji :)

CAN to dwuprzewodowa, pół-dupleksowa sieć z szybką komunikacją do 1 Mbit/s. Transmisja odbywa się w czasie rzeczywistym. Magistrala CAN umożliwia wzajemną komunikację pomiędzy modułami elektronicznymi. Jest siecią multi-master, co oznacza, że każdy z podsystemów sieci jest równorzędny przy inicjowaniu transmisji. Magistrala CAN jest bardzo bezpieczna, odporna na błędy, zakłócenia i niezawodna dzięki zastosowaniu sprzętowej obsługi protokołu i kontroli błędów.


I to na razie tyle ... w następnej części/poście zajmiemy się integracja CAN z naszymi AVRkami dlatego proponuje poszperać i zaopatrzyć się w układ MCP2515, który to jest Transceiverem CAN Gdyż zajmiemy się dwoma standardami :

ISO11529-2: CAN o małej szybkości. oczywiście mała szybkość odnosi się do przesyłania danych od 5kb/s do 125kb/s. ISO11898: CAN o dużej szybkości. Ten standard dotyczy szybkości przesyłania danych do 1Mb/s.

A do czego można zastosować CAN poza samochodem ?? ---- a na przykład :)

--- zastosowania w technice cywilnej: inteligentne budynki, przemysł lotniczy, przemysł samochodowy - samochody osobowe i cię żarowe, ciężki sprzęt budowlany, pojazdy specjalne (np. wozy strażackie), przemysłowe układy automatyki i sterowania; --- zastosowania w technice wojskowej: transportery opancerzone - kołowe i gąsienicowe, stacje radiolokacyjne – morskie i lądowe, mosty przewoźne, symulatory, --- inne zastosowania: sworznie pomiarowe, czujniki i przetworniki pomiarowe, sterowniki plc, pulpity i konsole operatorskie, konwertery.

Jak więc widzicie CAN ma szerokie zastosowania i każdy znajdzie coś dla siebie :)

Jak wspomniałem w poprzednim temacie magistrala Controller Area Network (CAN) opracowana przez niemiecką firmę BOSCH na potrzeby komunikacji w przemyśle samochodowym (ABS, sterowanie silnikiem), jest standardem multipleksowanej magistrali szeregowej. Jej niezaprzeczalne cechy użytkowe sprawiły, że z pozycji magistrali przeznaczonej do pojazdów przeszła do technologii popularnej w przemyśle i określonej przez międzynarodowy standard ISO 11 898.

W ostatnich latach wprowadzono do stosowania również standard wojskowy MIL CAN.

Szeroki zakres zastosowań obejmuje między innymi:


zastosowania w technice cywilnej:

- inteligentne budynki, - przemysł lotniczy, - przemysł samochodowy - samochody osobowe i ciężarowe, - ciężki sprzęt budowlany, - pojazdy specjalne (np. wozy strażackie), - przemysłowe układy automatyki i sterowania;


zastosowania w technice wojskowej:

- transportery opancerzone - kołowe i gąsienicowe, - stacje radiolokacyjne – morskie i lądowe, - mosty przewoźne, - symulatory, - inne;


inne zastosowania:

- sworznie pomiarowe, - czujniki i przetworniki pomiarowe, - sterowniki plc, - pulpity i konsole operatorskie, - konwertery.

Z w/w jest kilka którymi zajmuje się na co dzień, ale zakres tego zastosowania jest nieco poza możliwościami tego tematu więc skupmy się na podstawach :P

Jak więc wiemy z poprzedniego tematu Podstawą standardu pracy magistrali CAN jest siedmiowarstwowy model odniesienia ISO/OSI. W przypadku systemów komunikacji m/in w magistrali pojazdów warstwy 3..6 są puste, i tylko warstwy 1,2 i 7 są wyspecyfikowane szczegółowo.

Czym więc są te owe warstwy ?? no cóż prawie jak w torcie :) ciasto/masa/ciasto/masa/

) no dobra obiecałem że się poznęcam nad wami wiec jazda :)

Warstwa 1

Jest to warstwa fizyczna , w tej warstwie znajduje się specyfikacja medium transmisji danych oraz złączy, poziomów przesyłania oraz elementów nadawczo-odbiorczych. Wiąże się ona bezpośrednio z dwoma standardami CAN:

ISO11529-2 - mała szybkość ISO11898 - duża szybkość


Warstwa 2

To warstwa łącza danych. Tu określa się sposób dostępu do medium przesyłania danych w odniesieniu do faktu gdy jakaś cześć systemu chce nadawać, oraz tworzony jest komunikat (adres, sterowanie, dane i zabezpieczenie przed błędami CRC) oraz ustalany jest protokół przesyłania danych. Warstwa 2 była modyfikowana i dziś są 2 jej wersje CAN2.0A i CAN2.0B O właściwościach obu będziemy mówić później :) Przez ostatnie lata opracowano 3 obszerne gałęzie CAN dla róznych aplikacji, są to:

CANopen, DeviceNET i SDS (Smart Distributed System). Specyfikacje ich są zbyt obszerne jak na tak małą prezentację w tym poście że pozwolę sobie jedynie na podsumowanie :) a więc w skrócie ze są one kompatybilne z Warstwami 1 i 2 :)


Dla chcących zgłębić temat i poszerzenie wiedzy o w/w gałęziach proponuję odwiedzenie strony : http://www.can-cia.de

Jak więc zauważyliście w WF jest zawarta cała specyfikacja topologi sieciowej dla magistrali CAN i dołączania do niej kolejnych stacji. Termin topologia sieci - jednoznacznie mówi nam o fizycznej konstrukcji systemu komunikacyjnego i odpowiada na nasuwające się wam pytania.

Czyli gdybyście chcieli mnie teraz zapytać -- Jak stacje/elementy są podłączone do magistrali CAN?? odpowiedzią jednoznaczną z mojej strony było by stwierdzenie : TOPOLOGIA SIECI !


No ale jak na nieopierzonych newbie przystało wcale nie musicie wiedzieć co ja mam na myśli mówiąc TS :) więc już pędzę wyjaśnić i radzę dobrze to zapamiętać gdyż TS odnosi się nie tylko do CAN ale i wielu innych magistral, ale to stanie się jasne już za chwilę:

Wiec CAN jak już wiecie wykorzystuje topologię sieci (czasem nazywaną topologią magistrali) co oznacza że wszystkie bez wyjątków urządzenia i elementy są połączone z pojedynczą skrętką pary przewodów mogącej mieć ekran lub nie zakończoną na obu końcach odpowiednią rezystancją terminującą co widzicie poniżej:


Taka organizacja zapewnia, że każda stacja/element może komunikować się z każdym innym w sieci bez żadnych ograniczeń.

Jak widzicie wyżej układ transceiwera R/TX sieci CAN jest połączony z medium przez 2 sygnały CAN-H (Can High) i CAN-L (CAn Low), uwzględniąc wymagane zabezpieczenie przed błędami, w rzeczywistym przesyle danych zastosowano różnicowe sygnały napięciowe, oznacza to tyle, że różnica napięcia między obydwoma liniami czyli CAN-H i CAN-L jest skwantowana. W standardzie ISO11898 wyspecyfikowane są dwa różne zakresy napięć różnicowych, służących do reprezentacji danych, a więc :

- recesywny i dominujący :) (cokolwiek to znaczy no nie :))

Jest jednak ku temu ważna przyczyna, mianowicie zwykła logika 0 i 1 tu nie jest stosowana. teraz nie będę pisał dlaczego i po co, ale zauważcie że : ( to jest ważne radzę czytać uważnie bo później będzie tylko coraz dziwniej i trudniej)

- gdy napięcie różnicowe pomiędzy CAN-H i CAN-L wynosi 0,5V - to status linii jest -- RECESYWNY, - zaś gdy napięcie różnicowe wynosi 0,9V - to mamy status magistrali -- DOMINUJĄCY

Poziom nominalny magistrali jest wyznaczany w odniesieniu poszczególnych LINI do MASY LOKALNEJ co widać poniżej:



Oczywiście w praktyce nie jest tak fajnie i poziomy te maja swoje tolerancje :) Napięcie różnicowe może nawet osiągać maksymalny dopuszczalny poziom widoczny w ostatnim wierszu tabelki

Specyfikacja CAN-L w ISO11519-2 jest nieco inna, ale jako że ISO11898 może być zastosowane dla małych i dużych prędkości obecnie stosuje się tylko tą specyfikację.

Użytkownik nie musi się w tym przypadku zajmować tak prozaicznymi zajęciami jak konstrukcja łącz TRX, ponieważ wielu producentów oferuje gotowe układy , które zostały zoptymalizowane w szczególności kładąc nacisk na eliminacje zakłóceń elektromagnetycznych (EMC), ale też przeciążeń termicznych występujących w przypadku zwarcia linii CAN-L i H, oraz wyjściowego standardu poziomów sygnałów dla magistrali CAN. Odpada więc wszystko co jest niezbędne do zestawienia łącza CAN i dołączenia go do magistrali. Jedyne czym musimy się zająć to upewnić dla jakiego standardu CAN układ został zbudowany. JA preferuję ISO11898.

Powinniście na tym etapie wiedzieć tez że w praktyce używa się również innych sposobów różnicowego przesyłu danych, które też mogą być użyte do przesyłania sygnałów CAN,

Np ..... i tu was zaskoczę ....

RS485 :)

Co zdziwieni ?? .... w takim razie widać ile jeszcze przed wami tajemnic do odkrycia :)

Ostatecznie na tym etapie są jeszcze 2 sprawy których nie sposób lekceważyć, a dotyczą one

- maksymalnej długości i związanej z tym szybkości magistrali oraz - ilości możliwych do dołączenia na magistrali stacji bądź elementów

Zasadniczo dyktuje nam te zagadnienia tylko i wyłącznie zastosowane medium, wspomniałem już we wprowadzeniu jak to wygląda w tabelce , ale teraz nieco rozszerzymy wiadomości i przypomnimy sobie:)


Widzicie tu korelacje między szybkością przesyłu , a długością i terminatorami na końcach magistrali. Z doświadczeń wynika że najlepszym medium jest skrętka pary przewodów o przekroju 0.34 do 0.6 mm2, z terminatorami o rezystancji 127om, przy czym rezystywność przewodów nie powinna być większa niż 60mOm/m, warunek ten jest spełniony gdy przekrój poprzeczny przewodu jest większy niż 0,30mm2.

Przy dołączaniu stacji bezpośrednio do magistrali CAN długość przewodów linii doprowadzających nie powinna być dłuższa niż 2m jeśli szybkość ma wynosić 250kb/s, natomiast nie więcej niż 30cm jeśli chcecie uzyskać większe szybkości. I tu mała uwaga !!!

Długość "CAŁKOWITA" wszystkich linii doprowadzających nie powinna być większa niż 30m.

Wymiana DANYCH[edytuj]

Wymiana danych w CAN może się odbywać na dwa sposoby, mianowicie możemy: - odwołać się do określonej stacji (orientacja na stację) lub - podanie określonej wiadomości (orientacja na wiadomość)

Wynika z tego ze stacje mogą być adresowane, a powoduje to że "nadawca" adresuje "odbiorcę" podając po prostu adres stacji. Przykładowo Termometr chce wysłać wynik pomiaru do sterownika wentylatora. Niech to będą nasze umowne Stacje 10 i 60. W tym celu najpierw ustalane jest połączenie "rzeczywiste" pomiędzy nadawcą , a odbiorcą. Pakiet danych zawiera w sobie adres zarówno Termometru jak i Sterownika. Jeśli mamy na linii inne urządzenia np Woltomierze, inne termometry , sterowniki oświetlenia itd.. to ignorują one ten pakiet bo nie jest do nich adresowany. Nasz sterownik wentylatora po odebraniu wiadomości zwykle wysyła potwierdzenie, a jeśli wystąpi błąd transmisji lub brak potwierdzenia, termometr będzie powtarzał transmisję.

W drugim przypadku wiadomość ma nadany niepowtarzalny identyfikator i zostaje wysłana magistralą - np. nasz termometr wysyła wynik pomiaru temperatury wody z identyfikatorem 678. Tu nie ma wyspecyfikowanych adresów i nadajnika i odbiornika , czyli wiadomość może być skierowana do kilku odbiorców dołączonych do magistrali. Urządzenia korzystają z niej w zgodzie z zasadą :

Bierz to co jest ci potrzebne !

Czyli wszystkie urządzenie odbierają pakiet , ale muszą zadecydować czy jest im potrzebna czy nie.

Wymiana informacji w magistrali CAN jest realizowana na zasadach rywalizacji kontrolowanej, poprzez opatrzenie wiadomości odpowiednim priorytetem lub nadaniem właściwej ramki. W rzeczywistości jak już wspomniałem transmisja danych nie jest realizowana w postaci tradycyjnych 0 i 1, ale poprzez bity dominujące i recesywne. Co ciekawe stan recesywny na magistrali może być nadpisany przez stan dominujący. Czyli jeśli jedna stacja nadaje stanem recesywnym, a inna dominującym to magistrala automatycznie ustala pierwszeństwo dla bitu dominującego. Reasumując stany logiczne na magistrali są ustalone następująco:

0 - reprezentuje stan dominujący , a 1 stan recesywny

Taki stan w sumie tworzy podstawy specyfikacji CAN i powinniście to zapamiętać i dobrze zrozumieć.

Wymiana danych w CAN jest zasadniczo oparta na 4rech ramkach : danych, zdalnego wywołania, błędu i przepełnienia.

Ramkę danych stosuje się w celu wysłania na linię informacji.

SOF ....

tak nazywa się bit startowy ramki, zawsze jest on bitem dominującym czyli jego poziom = 0 Każde urządzenie na magistrali swoje wewnętrzne stopnie odbiorcze właśnie z nim synchronizują, a dokładnie z jego zboczem narastającym.

Pole arbitrażu ...

ma ono długość 12bitów i zawiera tylko określenie dostępu do magistrali, w uproszczeniu jest to sekwencja decyzyjna :)

Identyfikator ....

zawiera on 11bitów ID ramki. Słowo 11 bitowe, z którego składa się ID umożliwia utworzenie aż 2048 rożnych identyfikatorów. Wprawdzie dostępnych jest tylko 2032 bo pozostałe są zarezerwowane dla funkcji specjalnych. W zasadzie to i tak wiele bowiem jeden sterownik potrafi poradzić sobie z przetworzeniem 2032 różnych wiadomości które mogą zawierać wiele danych jak wyniki pomiarów, pozycje przełączników czy różne sygnalizacje i wiele innych...

Dla nas pewnie to już jest wystarczająca ilość przynajmniej na tym etapie wiedzy , ale warto napomnieć, że okazuje się iż jest to za mało w wielu zastosowaniach. Spowodowało to powstanie ramki EFF (Extended Frame Format), która posiada 29 bitowy ID czyli właśnie wspomniany wcześniej CAN 2.0B. Przy ID 29Bit możliwe jest przetworzenie aż 536 870 912 ramek.

RTR ......

jak wspomniałem jest to bit zdalnego żądania transmisji (Remote Transmision Request), odpowiada on za zaadresowanie i wysłanie wiadomości do określonego urządzenia na magistrali. Zwykle jest on ustawiony na stan 0 czyli jest bitem dominującym. Bit ten jest dosyć ważny gdy jakieś dane są pilnie potrzebne.

Pole sterujące .......

w 6 bitach tego pola zawiera się informacje o budowie ramki danych.

IDE ...

jest to bit rozszerzenia identyfikatora (Identifier Extension). Ustawienie tego bitu informuje nas o standardzie formatu : Gdy IDE = 0 format standardowy ID-11 Gdy IDE = 1 format rozszerzony ID-29


r0 ....

mało istotny zapasowy bit w razie kolejnych mutacji ....

DLC .......

zawiera 4 bity, które wskazują ile bitów jest kolejno transmitowanych, w CAN specyfikacja określa pole danych w rozmiarze od 0 do 8bajtów na ramkę.

Pole danych ......

jak już pewnie się domyślacie ma długość 8bajtów danych do transmisji :)

CRC ....

aż 15 bitów dodatkowych informacji, które mają na celu zabezpieczyć transmitowane dane przed błędami transmisji. nadajnik generuje 15 bitowa sumę kontrolną , na podstawie transmitowanych danych i wysyła je wraz z ramka danych, a odbiornik oblicza na podstawie odebranych danych podobna sumę CRC i porównuje z odebrana jeśli są identyczne transmisja może być kontynuowana, a jeśli nie uruchamiana jest procedura korekcji błędu. CRC jest zakończone bitem ograniczającym zazwyczaj przesyłanym w stanie 1.

Potwierdzenie ...

2 bity tego pola służą do wysłania potwierdzenia poprawności transmisji danych.

ACK .....

zawiera tylko 1bit zwykle recesywny czyli w stanie 1 i może zostać nadpisane bitem w stanie 0, który wysyła inne urządzenie na magistrali. Daje to możliwość odbiorcom potwierdzenia poprawnego odbioru danych. Czyli ACK to bit okienka przerwy, podczas którego mozliwe jest przez nadajnik debranie potwierdzenia od odbiorników. ACK jest zamykane transmisja 1 w tym bicie (ACK delimiter)

EOF .....

nie no panowie toż wiadomo że to End of FRAME czyli koniec RAMKI :), ale składa się on aż z 7 bitów w stanie 1 czyli recesywnych zamykających kompletna ramke.

Zanim zaczniemy nadawanie kolejnej ramki musimy chwilkę poczekać aż odbiorniki na naszej magistrali przetworzą lub przynajmniej zapamiętają odebrane dane. Ta przerwa a właściwie jej długość określona jest przez 3 bitowe pole przerwy kończące każdą ramkę, które są wystawione w stan recesywny.

UFF... przebrnęliśmy przez ramkę teoretycznie więc jesteśmy w stanie ja skompletować i mam nadzieje że ja rozumiecie :) jak nie to czytać jeszcze raz :P bo zacznie się problematyka użytkowania magistrali CAN mianowicie występowanie konfliktów, które mogą się przytrafić w przypadku jednoczesnego nadawania 2ch lub więcej urządzeń. Wypadało by jednak jakoś kontrolować i decydować które urządzenie może nadawać, a które musi poczekać.

Ale to omówimy trochę później. nadmienię teraz tylko iż istnieje specjalna procedura dostępu do magistrali, która pozwala kontrolować gadatliwość urządzeń i ważna role odgrywa tutaj pole decyzyjne (Arbitration Field), a właściwie bity recesywne lub dominujące zawarte w tym polu. Każde urządzenie na magistrali CAN MUSI !!! przestrzegać tej procedury.

Każdy układ na magistrali CAN który nadaje .... odbiera swoje dane (echo jak na terminalu) czyli każdy jeśli np termometr wyśle jakiś bit , odbierze go z powrotem, wtedy następuje porównanie go z wysłanym , jeśli są one identyczne oznacza to, że może nadawać, a jak nie to jest problem bo nie wolno nadawać :) to właśnie zawarte w polu decyzyjnym bity recesyjne mogą zostać nadpisane przez inne urządzenie bitem dominującym.


Arbitraż ..... trochę zawiłości technicznych

To co teraz napiszę odnosi się do uproszczenia napisanego wyżej , celem moim w tym wywodzie nie jest teraz mieszanie wam w głowach ..... aczkolwiek zupka ze świeżych umysłów .... dosyć kuszące :) niemniej musimy choć w minimalnym stopniu poznać budowę stopni wejściowych urządzeń dołączonych do magistrali CAN by zrozumieć zjawisko Arbitrażu -- czyli pola decyzyjnego, które odpowiada za wagę wiadomości i pozwala uniknąć wielu przykrych sytuacji podczas przesyłu danych.

Do dzieła ......

Obrazek

powyższy obrazek stanowi dosyć duże uproszczenie obwodów dołączających , urządzenia do magistrali CAN. Zasadniczo " stopnie wejściowe " są w konfiguracji otwartego kolektora co tworzy tzw. iloczyn galwaniczny - można powiedzieć takie "zwarte AND". Jeśli odniesiemy się w naszym przypadku do układu 1 (ten po lewej) to nadawany recesywnie bit 1 zagwarantuje że tranzystor w stopniu wejściowym nie będzie przewodził. Cała magistrala zostanie wiec ustawiona wstępnie na stan recesywny (1) po czym urządzenie odczytuje stan magistrali, i jeżeli teraz zostanie wysłany bit dominujący (0) to nasz tranzystor zostanie włączony a co za tym idzie linia magistrali będzie zwarta do masy. Czyli znajdzie się w stanie dominującym (0), a nasze urządzenie 1 ponownie odczyta otrzymany z powrotem wysłany bit.

W przypadku naszego przykładu jeśli tylko jedno z naszych urządzeń nada bit dominujący to spowoduje to zmianę stanu na linii magistrali na 0 w efekcie czego oba urządzenia odczytają ten stan.

Wynika z tego właśnie realizacja procedury dostępu do magistrali. Jak to ??? -- teraz pewnie chcecie spytać :)

Przecież jest to oczywiste. Załóżmy że oba nasze urządzenia są gotowe do wysłania własnych ramek z różnymi identyfikatorami np. U1 - ID361, a U2 232 ... hmmm oba rozpoczynają uzgadnianie dostępu tak zwaną fazą arbitrażową czyli nadają bit SOF, jest on bitem dominującym, co powoduje że obydwa doczyta zwrotnie swój własny wysłany ... no tak ale się okazuje że oba są poprawne więc oba mogą nadawać ! Spoglądnijmy więc na mały rysuneczek pozwalający zrozumieć co się będzie działo i dlaczego:)

Obrazek

Tak to prawda ale oba zaczynają nadawanie identyfikatorów, następnie podczas "b" wysyłają bit dominujący i wszystko jest tak jak powinno, podczas "c" dalej nic się nie zmienia, ale podczas "d" 1 wysyła bit recesywny podczas gdy 2 dalej nadaje dominujący. Wiec co się stanie ??

1 połapie się po odebraniu zwrotnym że wysłany stan 1 został zmieniony na 0 co oznacza że właśnie straciła dostęp do magistrali na rzecz 2jki. W takiej sytuacji nasze U1 przechodzi na tryb odbiorczy (mimo że uparcie próbuje dalej nadawać swoje dane) natomiast U2 kontynuuje transmisje. Jak widać U2 wygrała i może wysłać swoje dane bez przeszkód.  :)

Zapewne zauważyliście że jako pierwsza w tym wypadku dostało zgodę na transmisję to urządzenie które nadawało najmniejszy ID -- oznacza to że uzyskało najwyższy priorytet wysyłki. Jak więc się domyślacie ---- przynajmniej powinniście -- no chyba, że nieuważnie czytaliście ten trochę nudny opis -- w ID zawarte jest również automatyczne pierwszeństwo w transmisji wiadomości.

Pamiętajcie więc że dane z ID = 0 będą zawsze przesłane PIERWSZE !!!, a np z ID 2000 ... trochę sobie poczeka bo ma najniższy priorytet ....

W sieci CAN - RTR spełnia jedna z najważniejszych funkcji. Dlaczego ... popatrzmy na taki przykład...

Urządzenie C transmituje co 5 min dane o temperaturze z 3ch czujników z ID np 598, oznacza to, że dane w ramce danych zawierają 3 bajty, które są odbierane i przetwarzane przez kilka innych urządzeń na magistrali. Ale urządzenie I potrzebuje pilnie wartości pomiaru temperatury i sprawa jest na tyle pilna że nie może ona czekać 5min na następną transmisję. I tu właśnie pojawia się RTR :) Mianowicie nasze urządzenie I może zażądać wyników bezpośrednio od urządzenia C. W celu realizacji takiego "obejścia" normalnego cyklu transmitowania danych nadaje ramkę RRF, jest ona podobna w budowie do ramki danych DF jednak jest z kilkoma różnicami , a oto one :

-- ID Urządzenia, do którego wysyłane jest żądanie (nasze 598) zostaje podane w polu Identyfikatora. -- Liczna przydatnych bajtów w wywoływanej wiadomości (3) jest podana w polu DLC, -- Bit RTR, jest to bit dominujący (0) jest transmitowany jako recesywny (1). -- W RRF nie występuje pole danych , a pole DLC znajduje się bezpośrednio przed CRC

Jak więc widać RRF ma konstrukcje podobna do DF tylko liczba bajtów danych wynosi 0.

Realizacja funkcji zdalnego żądania transmisji jest realizowana następująco: Wszystkie urządzenia na magistrali odbierają RRF i po ustawieniu bitów RTR rozpoznają, że jakieś tam urządzenie żąda określonych danych od innego. Nasze urządzenie C też odebrało RRF i co ...?? a właśnie ustaliło sobie że ID zawarte w ramce jest takie jak JEGO własne ID , w związku z czym natychmiast przesyła swoja odpowiedź w postaci ramki DF zawierającej żądane dane. Urządzenie I odbiera i ma frajdę :)

W CAN najbardziej ciekawą, wręcz zjawiskową formą jest niesamowita zdolność do wykrywania wielu błędów występujących w trakcie transmisji danych i sposoby reagowania na nie. Zastosowano tu odstęp Haminga, nazywany czasem - nie bezpodstawnie z resztą - odstępem sygnałowym - równy (=) 6.

Cóż to jest ?? zaś wymyślił jakieś dziadostwo !! Tak brzmi strasznie ale to banalnie prosta sprawa :)

Odstęp sygnałowy występujący między 2ma słowami dwójkowymi o tej samej długości jest po prostu liczbą bitów na odpowiadających sobie pozycjach w szeregu, muszą one mieć różne wartości. Dla przykładu bo brzmi to jak bezsensowny bełkot - odstęp sygnałowy między słowami dwójkowymi 11011010 oraz 10000110 = 4 Dlaczego skoro pisałeś że 6 ??

No przecież to proste popatrzcie na bity : 3; 4; 5 i 7 (liczymy od prawej żeby potem nie było :P) różnią się wartościami prawda :) i tych różnic jest tylko 4 :P

Co za bydle ze mnie co :) No ale luzik, wiecie już że CAN może przesyłać dane z dużą szybkością nawet 500kbitów/s. To dużo, ale teraz sobie wyobraźcie że na każde 0,7s pojawia się jeden zbłąkany błędny bit - zapomniany przez Boga i ludzi niechciany zwykle biedaczek ten jest spowodowany przez zakłócenia zewnętrzne. Co to ma do rzeczy ?? Wyobraźcie sobie więc, że cała nasza sieć będzie pracować 8h/dobę przez 365 dni w roku. Wbudowany system zabezpieczeń przed błędami gwarantuje nam iż przez 1000 lat pracy tylko 1 bit nie będzie wykryty. Daje do myślenia co nie :) Oczywiście błędy mogą występować i będą taka ich uroda :) ale skoro są rozpoznawane to można je naprawić prawda ?? Dokładnie TAK JEST !! Tylko nierozpoznane błędy mogą zafałszować wyniki pomiarów, aby zminimalizować ryzyko błędu zastosowano tu równocześnie kilka różnych sposobów ich wykrywania:

Detekcja błędnego bitu - jak wiemy każde urządzenie podłączone do CAN zawsze odbiera zwrotnie swoją własną transmisję, Dlatego by po arbitrażu jeśli znajdzie się choć tylko jedno ustrojstwo na magistrali, które otrzymało zwrotnie inny różniący się od wysłanego bit - to jest oczywiste, że wystąpił błąd. W takiej sytuacji urządzenie przechodzi w tryb korekcji błędu.

Błędne bity dodatkowe - CAN w swojej specyfikacji ma określone wyraźnie, że gdy w ramce danych transmitowane jest kolejno więcej niż 5 bitów o tej samej wartości (np 8 razy 0 w jakimś polu), to każda grupa pięciu bitów jest poprzedzana przez bit komplementarny (w tym przypadku 1). Ten bit, nie zawiera oczywiście żadnej informacji, jest bitem dodatkowym, a po zakończeniu transmisji jest usuwany z danych i tylko pierwotna wiadomość jest przetwarzana. Bity dodatkowe mogą więc być użyte do kontroli błędów bowiem jeśli odbiorca wiadomości wykryje w ramce więcej niż 5 bitów o takiej samej wartości (za wyjątkiem EOF), to oczywistym jest że nie jest to poprawny odczyt, i że pojawił się błąd podczas transmisji czyli wystąpił dodatkowy bit lub jego wartość została odwrócona lub też więcej takich bitów) w odpowiedzi na takie coś odbiorca zawiesza działanie i uruchamia procedurę poprawiania błędów.

Błędy CRC - to teraz będzie bardzo prosto bowiem proces ten polega na oszacowaniu sumy kontrolnej w urządzeniu odbiorczym, a gdy odebrana i obliczona są różne od siebie odbiorca co robi ?? - TAK uruchamia procedurę korekcji błędów :)

Błąd potwierdzenia - kiedyś tam wspomniałem o czymś takim jak Bit ACK - czyli bicie przerwy na potwierdzenie - ta zaraza jest wysyłana przez urządzenie jako bit recesywny. Każde urządzenie, które odebrało poprawnie poprzednią ramkę nadpisują ten bit bitem dominującym. Urządzenie nadające wykrywa to i można powiedzieć, że "wie" iż przynajmniej jedno urządzenie odebrało dane poprawnie. Jeśli jednak nadawca stwierdzi, że jej bit w czasie ACK nie został nadpisany, to jest to jasna informacja, że nikt nie odebrał wiadomości poprawnie i w takim razie ..... co robi ?? No oczywiście co innego by mogła zrobić -- zawiesza działanie i przechodzi do procedury korekcji błędów. :P

Błąd formatu -- tu stosuje się fakt, że w ramce jest kilka miejsc, które muszą mieć ZAWSZE określoną zawartość, a są to: bit końca CRC, ogranicznik potwierdzenia i EOF wartości te zawsze są recesywne. Jeśli w tych polach zostaną wykryte bity dominujące, to takie coś może być tylko i wyłącznie spowodowane przez błąd transmisji i co robi nasze urządzenie ....... ?? znów to samo - uruchamia procedurę korekcji błędów .... jakie to monotonne ....

To skoro już tak przy nudziłeś to może wreszcie powiesz co to za dziadostwo ta korekcja błędów ..

No owszem powiem, proszę bardzo ...

Więc procedura korekcji błędów to procedura zajmująca się korekcją błędów :P - macie co chcieliście hehehe

Dobra żartowałem .... a jest to tak :

W przypadku błędu transmisji jest realizowana nasza "ukochana procedura" w dwóch wariantach.

1. Ramki, w których stwierdzono jakiś błąd są natychmiast odrzucone przez odpowiednie urządzenie i nie są przetwarzane. 2. Jeśli któreś z urządzeń w systemie wykryje błąd, to natychmiast wysyła ramkę informującą o błędzie, która składa się z 6 bitów dominujących (tzw: sygnalizacja błędu) i ogranicznika ramki błędu zawierającego 8 bitów recesywnych.

W skutek czego bity recesywne na magistrali zostają nadpisane, tak że występuje na niej tylko 6 bitów dominujących, ale .... jest to naruszenie zasady, że nie więcej niż 5 bitów może mieć tą sama wartość. Wszystkie urządzenia na magistrali wykrywają ten stan i uznają właśnie odebraną ramkę jako błędną i odrzucają ją oraz wysyłają ramkę sygnalizacji błędu. Można powiedzieć że urządzenie, które wykryło błąd celowo wykłada całą transmisję w taki sposób że wszystkie urządzenia odbierają ja jako błędną. Czyli jak widzicie o błędzie lokalnym jednego urządzenia natychmiast wiedzą wszystkie pozostałe. Wszystko to dlatego, że głównym założeniem i celem sieci jest aby każde urządzenie odbierało poprawne dane, które są mu potrzebne lub by wszystkie urządzenia dostawały błędne dane i je odrzucały. Faktem jest też to że urządzenie które nadało taką wiadomość tez stwierdzi, że zawiera ona błąd, poprawi ją i wyśle ponownie.

A gdy wystąpi błąd wewnątrz urządzenia - samo stwierdzi, że jest uszkodzone ??, czy będzie wysyłać dane z nieodpowiednią szybkością lub odbierać tylko błędne dane ?? TAK to przypadek można można powiedzieć śmiertelny, takie urządzenie wysyłające ramkę błędu mogłaby spowodować blokadę całej sieci. ........

ale na szczęście CAN jest odpowiednio zabezpieczony przed takim przypadkiem i nie musimy się nim przejmować po szczegóły odsyłam do specyfikacji CAN. :)

Na tą chwile wystarczy, wieczorem pójdzie mam nadzieje koniec gdzie już otrę się o wspomniane na początku walory i aspekty użytkowe.

Autorem ostatniego akapitu jest SunRiver http://forum.atnel.pl/topic1183.html http://forum.atnel.pl/topic1178.html