Obsługa interfejsu CAN w mikrokontrolerach STM32

Standard CAN definiuje cztery rodzaje ramek:

  • danych,
  • przepełnienia,
  • żądania transmisji,
  • sygnalizacji błędu transmisji.

Podstawowa komunikacja może się odbywać na przykład na zasadzie cyklicznego wysyłania ramek danych. Wystarczy, że urządzenia w określonych odstępach czasu będą wysyłać ramki danych, natomiast w identyfikatorze będzie zakodowany adres odbiorcy informacji.

 

 

Rys. 5. Budowa ramki danych w standardzie CAN 2.0B

Rys. 5. Budowa ramki danych w standardzie CAN 2.0B

 

 

Budowę ramki danych standardu CAN 2.0B przedstawiono na rys. 5. Jak wynika z przedstawionego rysunku w jednej ramce można przesłać maksymalnie osiem bajtów danych. Początek ramki danych jest określony przez pole SOF (Start of Frame), które jest zawsze bitem dominującym. Dalej przesyłane jest pole arbitrażu, a w nim 29–bitowy identyfikator. Za polem sterującym znajduje się miejsce na maksymalnie osiem bajtów danych przeznaczonych do wysłania. Następne pola są związane z procesem wykrywania błędów, który jest zazwyczaj przeprowadzany w sposób sprzętowy przez kontrolery CAN. Na etapie wstępnego poznawania magistrali CAN nie ma potrzeby zagłębiania się w ich rolę.
Niekiedy urządzenie podłączone do sieci nie może czekać na informację. W takiej sytuacji należy źródło żądanych danych odpytać za pomocą ramki żądania transmisji. Jest ona podobna w budowie do ramki danych, jednak pozbawiona pola danych, a bit RTR (Remote Transmission Request) jest recesywny, czyli ma wartość logicznej ‘1’. Uproszczoną budowę ramki żądania transmisji przedstawiono na rys. 6.

 

 

Rys. 6. Budowa ramki żądania transmisji

Rys. 6. Budowa ramki żądania transmisji

 

 

Magistrala CAN jest asynchroniczna, więc do poprawnej pracy wymaga ciągłego zsynchronizowania urządzeń prowadzących wymianę danych. Ma to duże znaczenie w sytuacjach, w których wiele następujących po sobie bitów będzie miało takie same wartości. Bez stosowania dodatkowej metody synchronizacji komunikacja asynchroniczna byłaby w takich warunkach znacznie utrudniona. Kontrolery CAN po każdym ciągu pięciu takich samych bitów wprowadzają do ramki bit przeciwny (komplementarny), mechanizm taki nazywa się bit stuffing. Po odebraniu ramki te dodatkowe bity są automatycznie usuwane.
Gdy jedno urządzenie wysyła ramki danych, jedna po drugiej, to może zaistnieć sytuacja, w której odbiorca danych nie nadąży z ich odbieraniem i przetwarzaniem. Wtedy z pomocą przychodzi ramka przepełnienia. Jej celem jest opóźnienie transmisji, zwolnienie przepływu informacji przez magistralę tak, aby przeciążone urządzenia mogły przetworzyć otrzymane dane. Postać ramki jest bardzo prosta, składa się jedynie z sześciu bitów dominujących oraz występujących po nich ośmiu bitach recesywnych. Wyżej umieszczono wzmiankę o mechanizmie umieszczania bitów komplementarnych w ramkach (bit stuffing), który w tym przypadku pośrednio zapewnia poprawną interpretację ramki przepełnienia. W normalnych warunkach nie mogą się pojawić po sobie więcej niż pięć bitów o tej samej wartości. Jeśli zostanie zarejestrowany dłuższy ciąg wiadomo wtedy, że któreś urządzenie wysłało ramkę przepełnienia i nadajnik musi zwolnić wysyłanie danych.
Protokołów zarządzających komunikacją po magistrali CAN jest co najmniej kilka. Są to m. in.: CAN-in-Automation, J1939. Wybór stosownego protokołu zależy przede wszystkim od tego, jakim zadaniom ma sprostać sieć CAN. Generalnie komunikacja może być prowadzona na dwa sposoby: zorientowana na wiadomości lub na obsługę adresów. Komunikacja oparta o wiadomości odbywa się na zasadzie wysyłania przez magistralę komunikatów z jakimś specyficznym identyfikatorem. Stacje podłączone do magistrali same decydują, czy wiadomość jest dla nich, czy nie. Drugi sposób komunikacji polega przydzieleniu każdemu węzłowi sieci adresu, który jest kodowany w identyfikatorze wiadomości wysyłanej przez nadajnik. Takie przekazywane informacji jest wykorzystywane m. in. w protokole transmisji J1939 opracowanym przez organizację SAE (Society of Automotive Engineers) dla pojazdów użytkowych.
Przykład budowy identyfikatora ramki danych w komunikacji zorientowanej na obsługę adresów z wykorzystaniem protokołu J1939 przedstawiono na rys. 7. Jest to identyfikator dla ramki w standardzie CAN 2.0B. Zaznaczono najbardziej interesujące miejsca: kod wiadomości, adres nadawcy oraz adres odbiorcy. Ponieważ długość każdego pola wynosi 8 bitów to liczba dostępnych adresów urządzeń wynosi 255, podobnie jak ilość rodzajów (kodów) wiadomości. W wielu przypadkach takie rozwiązanie może okazać się wystarczające. Prędkość transmisji zależy od odmiany protokołu J1939. W aplikacjach przedstawionych w dalszej części rozdziału wykorzystywana będzie namiastka protokołu w odmianie J1939/11, czyli o prędkości 250 kb/s.

 

 

Rys. 7. Budowa identyfikatora wiadomości J1939

Rys. 7. Budowa identyfikatora wiadomości J1939

 

 

O autorze