Na rozgrzewkę:
W gałęzi przemysłu, w której obecnie pracuję, czyli w motoryzacji najpopularniejszymi protokołami komunikacyjnymi pomiędzy elementami systemu samochodowego są CAN i LIN. Protokół CAN opisałem w jednym z poprzednich wpisów. W tym wpisie przybliżę Ci protokół LIN (Local Interconnect Network). Protokół LIN stosowany jest w miejscach gdzie prędkość, oraz bezawaryjny przesył nie jest parametrem krytycznym. LIN nie jest tak pewny/odporny jak CAN, lecz jest dużo tańszy, dlatego jest często używaną alternatywą. Przykładami miejsc zastosowań protokołu LIN w samochodzie są: sterowniki szyb elektrycznych, sterowniki wycieraczek, czy lusterek.
Zakres wpisu:
- Charakterystyka
- Warstwa fizyczna
- Transmisja danych
Charakterystyka:
- LIN jest szeregowym protokołem, który powstał na bazie UART. LIN został zaprojektowany jako protokół jednomasterowy.
- W protokole LIN występują dwa rodzaje bitów: dominujący i recesywny. Bit dominujący jest logicznym “0”, zaś recesywny logiczna “1”.
- Prędkość protokołu LIN 1-20kbit/s na dystansie do 40 metrów. Prędkość LIN jest ograniczona do 20kbit/s z powodu zakłóceń EMC, generowanych przez magistralę.
- Stała czasowa powinna wynosić od 1 do 5µs. Należy odpowiednio dobierać pojemności węzłów, aby wartość stałej czasowej została spełniona.
Warstwa fizyczna:
Magistrala LIN jest w zasadzie jednoprzewodowa, drugim przewodem jest przewód masy. Procesory zreguły wyposażone są w protokół komunikacyjny LIN, niezbędny jest tylko tranceiver do zamiany poziomów napięć. Rozwiązaniem alternatywnym jest komunikacja procesora z tranceiverem po UART. Tranceivery mają wyjście typu open-drain, część z nich jest wyposażona w wewnętrzną diodę i rezystor. Jeśli tranceiver pracuję jako master zalecane jest zastosowanie zewnętrznej diody i rezystora (typowo 1kΩ).
Napięcie w instalacji samochodowej waha się pomiedzy 7-18V, także te wartości napięć wykorzystywane są w magistrali LIN. Poziomy napięć stanów logicznych w zależności od rodzaju urządzenia nadajnik czy odbiornik przedstawia poniższy rysunek:
Transmisja danych:
Urządzenie typu master wysyła wiadomość do konkretnego urządzenia typu slave, aby uzyskać od niego informację. Każde urządzenie typu slave ma przyporządkowany unikatowy adres w danej sieci. Na wiadomość od mastera odpowiada konkretny slave co zabezpiecza przed jednoczesnym dostępem do medium transmisyjnego więcej niż jednego urządzenia.
LIN używa następujących plików konfiguracyjnych, które ustalają parametry transmisji:
- Plik LDF (LIN Description File) zawiera informację dotyczące sieci komunikacyjnej tj. ramek i sygnałów, używany w urządzeniach master i slave.
- Plik LCF (LIN Configuration File) umieszczony tylko w urządzeniu master zawiera informację na temat interwałów czasowych, okresów oraz zapewnia każdej ramce odpowiedni czas transmisji.
Ramka składa się z Nagłówka, Czasu odpowiedzi, oraz Odpowiedzi. Wiadomość zostaje stworzona kiedy urządzenie typu master wyślę ramkę zawierającą Nagłówek. Urządzenia typu Slave wypełniają ramkę danymi w zależności od zawartości Nagłówka. Każda wysyłana ramka zajmuje odpowiedni czas transmisji, w zależności od konfiguracji w pliku LCF.
Budzenie składa się z przynajmniej 13 bitów dominujących w tym bitu startu. Pole budzenia zakończone jest przynajmniej jednym bitem recesywnym. Czas budzenia trwa od 250µs do 5ms.
Synchronizacja wysyłana w celu pomiaru czasu przez urządzenia slave pomiędzy opadającymi zboczami (Baud Rate). Wysyłana jest ramka 0x55 (01010101). Na podstawie pomiarów urządzenia typu slave ustawiają odpowiedni Baud Rate. Poprzez pole synchronizacji urządzenia typu slave nie potrzebują rezonatorów.
Identyfikator jest ośmiobitowy, zawiera adres slave, do którego kierowane jest rządanie informacji, oraz dwa bity parzystości P0 i P1. Bit P0 jest wynikiem funkcji XOR z bitów B0, B1, B2, B4, zaś bit P1 jest wynikiem zanegowanej funkcji XOR z bitów B1, B3, B4, B5.
Pole danych zbudowane jest od 1 do 8 bajtów w zależności od ramki wysłanej od mastera.
W celu ograniczenia poboru prądu (np. podczas postosju samochodu) urządzenia typu slave przechodzą do stanu uśpienia kiedy na magistrali nie pojawia się komunikacja przez 4s. Drugim sposobem przejścia urządzeń do stanu uśpienia jest wysłanie odpowiedniej ramki przez master.
Rodzaje ramek:
- bezwarunkowe (unconditional frames) normalne ramki wysyłane od mastera do odpowiedniego slave. Slave ma za zadanie uzupełnić ramkę w dane.
- wyzwalane zdarzeniem (event triggered frames) urządzenia typu slave uzupełniają ramkę tylko w momencie kiedy dane ulegną zmianie. Jeśli dane nie ulegną zmianie ramki nie są uzupełniane. Ten rodzaj ramek zmniejsza obciążenie magistrali komunikacyjnej.
- sporadyczne (sporadic frames) wysyłana przez master kiedy dowie się o zmianie wartości w slave. Zwykle master uzupełnia ramkę, a urządzenie slave otrzymuję informację.