BIBLIOTEKI FUNKCJI KOMUNIKACYJNYCH CAN ANALIZA PORÓWNAWCZA



Podobne dokumenty
Paweł MOROZ Politechnika Śląska, Instytut Informatyki

TEMPERATURE CONTROL SYSTEM BY THE CAN BUS UKŁAD REGULACJI TEMPERATURY POPRZEZ MAGISTRALĘ CAN

Systemy wbudowane - wykład 8. Dla zabicia czasu Notes. I 2 C aka IIC aka TWI. Notes. Notes. Notes. Przemek Błaśkiewicz.

Komunikacja w mikrokontrolerach Laboratorium

Wbudowane układy komunikacyjne cz. 1 Wykład 10

Rozdział ten zawiera informacje na temat zarządzania Modułem Modbus TCP oraz jego konfiguracji.

Spis treści. 1 Moduł Modbus TCP 4

Materiały dodatkowe Krótka charakterystyka protokołu MODBUS

Problematyka sieci miejscowej LIN

Wykład 3. Interfejsy CAN, USB

Rozproszony system zbierania danych.

PRZEDSTAWIENIE WYNIKÓW ANALIZY STRUKTURY NAGŁÓWKA RAMKI CAN POD KĄTEM WPŁYWU POSZCZEGÓLNYCH PÓL NA LICZBĘ WSTAWEK BITOWYCH

1 Moduł Modbus ASCII/RTU 3

Magistrala LIN

Mikroprocesor Operacje wejścia / wyjścia

Przesyłania danych przez protokół TCP/IP

1 Moduł Modbus ASCII/RTU

Zastosowania mikrokontrolerów w przemyśle

MAGISTRALE MIKROKONTROLERÓW (BSS) Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Expandery wejść MCP23S17 oraz MCP23017

Mikroprocesory i Mikrosterowniki Magistrala szeregowa I2C / TWI Inter-Integrated Circuit Two Wire Interface

Obługa czujników do robota śledzącego linie. Michał Wendland czerwca 2011

Protokoły sieciowe model ISO-OSI Opracował: Andrzej Nowak

ARP Address Resolution Protocol (RFC 826)

Interfejsy. w systemach pomiarowych. Ryszard J. Barczyński, 2016 Materiały dydaktyczne do użytku wewnętrznego

Podstawy Projektowania Przyrządów Wirtualnych. Wykład 9. Wprowadzenie do standardu magistrali VMEbus. mgr inż. Paweł Kogut

Konfiguracja parametrów pozycjonowania GPS /5

Na początku lat dziewięćdziesiątych międzynarodowy przemysł samochodowy stanął przed dwoma problemami dotyczącymi rozwoju samochodów: jak poprawić kom

Uproszczony opis obsługi ruchu w węźle IP. Trasa routingu. Warunek:

TECHNIKA MIKROPROCESOROWA

1. Cel ćwiczenia. Celem ćwiczenia jest zestawienie połączenia pomiędzy dwoma sterownikami PLC za pomocą protokołu Modbus RTU.

TECHNIKA MIKROPROCESOROWA

MAGISTRALA CAN STRUKTURA RAMKI CAN

Logiczny model komputera i działanie procesora. Część 1.

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Komunikacja w mikrokontrolerach Laboratorium

Warstwy i funkcje modelu ISO/OSI

MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN

Układy Cyfrowe projekt. Korekcja jasności obrazów w 24-bitowym formacie BMP z użyciem funkcji gamma. Opis głównych modułów sprzętowych

Politechnika Białostocka. Wydział Elektryczny. Katedra Automatyki i Elektroniki. Kod przedmiotu: TS1C

Ethernet. Ethernet odnosi się nie do jednej, lecz do wielu technologii sieci lokalnych LAN, z których wyróżnić należy cztery podstawowe kategorie:

Interfejsy systemów pomiarowych

Literatura. adów w cyfrowych. Projektowanie układ. Technika cyfrowa. Technika cyfrowa. Bramki logiczne i przerzutniki.

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

Pomoc dla użytkowników systemu asix 6. Strategia buforowa

Standard transmisji równoległej LPT Centronics

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Aby lepiej zrozumieć działanie adresów przedstawmy uproszczony schemat pakietów IP podróżujących w sieci.

Opis protokołu RPC. Grzegorz Maj nr indeksu:

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

Programowanie sterowników przemysłowych / Jerzy Kasprzyk. wyd. 2 1 dodr. (PWN). Warszawa, Spis treści

5. Model komunikujących się procesów, komunikaty

Architektura komputerów. Układy wejścia-wyjścia komputera

Pracownia Transmisji Danych, Instytut Fizyki UMK, Toruń. Instrukcja do ćwiczenia nr 10. Transmisja szeregowa sieciami energetycznymi

Sieci Komputerowe Mechanizmy kontroli błędów w sieciach

Komunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji BSEND/BRCV

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja. do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1.

asix5 Podręcznik użytkownika Strategia buforowa

TCP/IP formaty ramek, datagramów, pakietów...

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Sieci komputerowe - warstwa fizyczna

Przykładowe pytania DSP 1

PROCESORY SYGNAŁOWE - LABORATORIUM. Ćwiczenie nr 03

Organizacja typowego mikroprocesora

Mikroprocesory i mikrosterowniki Wydział Elektroniki Mikrosystemów i Fotoniki Politechniki Wrocławskiej Ćwiczenie nr 4

CR232.S v2 KONWERTER CAN / RS232

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Mikroprocesory i Mikrosterowniki Laboratorium

Architektura komputerów

Smart home managing by Ethernet micro server. Zarządzanie systemem inteligentnego domu za pomocą mikro serwera Ethernet. 1. Cele

Działanie systemu operacyjnego

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Współpraca procesora ColdFire z urządzeniami peryferyjnymi

Szkolenia specjalistyczne

Działanie systemu operacyjnego

Klient-Serwer Komunikacja przy pomocy gniazd

Oprogramowanie przekaźnika monostabilnego UNIV

Komunikacja w mikrokontrolerach. Magistrala szeregowa I2C / TWI Inter-Integrated Circuit Two Wire Interface

Praca dyplomowa. Program do monitorowania i diagnostyki działania sieci CAN. Temat pracy: Temat Gdańsk Autor: Łukasz Olejarz

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

Aplikacja dla eksperymentu identyfikacyjnego z wykorzystaniem układu PAIO. Wykonał : Marcin Cichorowski Prowadzenie : dr inż.

Sieci komputerowe. Wykład 2: Sieci LAN w technologii Ethernet. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Arduino dla początkujących. Kolejny krok Autor: Simon Monk. Spis treści

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Wykład 4. Interfejsy USB, FireWire

Kurs SIMATIC S7-300/400 i TIA Portal - Podstawowy. Spis treści. Dzień 1. I System SIEMENS SIMATIC S7 - wprowadzenie (wersja 1503)

SEGMENT TCP CZ. II. Suma kontrolna (ang. Checksum) liczona dla danych jak i nagłówka, weryfikowana po stronie odbiorczej

UKŁADY MIKROPROGRAMOWALNE

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Kurs Podstawowy S7. Spis treści. Dzień 1

Ogólne przeznaczenie i możliwości interfejsu sieciowego przepływomierza UniEMP-05 z protokołem MODBUS. ( )

WPROWADZENIE Mikrosterownik mikrokontrolery

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

OPROGRAMOWANIE FIRMWARE INTERFEJSU ETHERNETOWEGO UNIV

Protokoły dostępu do łącza fizycznego. 24 października 2014 Mirosław Juszczak,

Wersja dokumentacji1.01. TeleToken API

Podstawy Transmisji Danych. Wykład IV. Protokół IPV4. Sieci WAN to połączenia pomiędzy sieciami LAN

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Systemy wbudowane - wykład 7

Transkrypt:

ROZDZIAŁ 99 BIBLIOTEKI FUNKCJI KOMUNIKACYJNYCH CAN ANALIZA PORÓWNAWCZA Przedstawione zostaną podobieństwa i różnice między bezpłatnymi bibliotekami funkcji komunikacyjnych CAN, przeznaczonych dla węzłów opartych na procesorach rodziny ATMega i układzie komunikacyjnym MCP2515. W rozdziale zawarta jest analiza porównawcza dwóch bibliotek, opracowanych przez: autora artykułu w ramach pracy dyplomowej oraz Martina Thomasa. Rozdział zaczyna się od krótkiej charakterystyki sieci poprzez omówienie jej cech i zasady działania. Przedstawiony zostanie również moduł komunikacyjny, przy użyciu którego realizowana jest transmisja w sieci. Podczas analizy pod uwagę brane były następujące cechy: struktura biblioteki, nazewnictwo typów, definicji, funkcji oraz ich budowa. 1. WPROWADZENIE Biblioteka funkcji komunikacyjnych CAN została wykonana w ramach pracy dyplomowej, obronionej na Politechnice Śląskiej w 2005 roku. Powodem jej powstania był brak takiej darmowej biblioteki dla procesorów rodziny ATMega. Już po obronieniu pracy okazało się, że w tym samym roku pojawiła się podobna biblioteka, opracowana przez pana Martina Thomasa. Porównania obu bibliotek dokonano w celu poprawienia biblioteki stworzonej przez autora artykułu, a zarazem przedstawienia różnych sposobów rozwiązań. Controller Area Network (CAN) jest siecią przemysłową o transmisji szeregowej, asynchronicznej, bez węzła sterującego. Można się z nią zetknąć w instalacjach przemysłowych, budynkach użyteczności publicznej, samochodach oraz aparaturze medycznej. Podstawowymi jej zaletami są: wysoka prędkość transmisji, niezawodność, odporność na zakłócenia, a także możliwość tworzenia własnych protokołów wymiany informacji, których częścią będą warstwy protokołu CAN. Specyfikację protokołu CAN, opracowanego przez firmę BOSCH, opublikowano w 1993 roku (ISO 11898). W dokumencie ISO11898-1 zawarte są informacje o warstwie łącza danych oraz niektóre parametry warstwy fizycznej, w tym: format sygnałów przesyłanych magistralą, właściwości fizyczne łącza oraz sposób synchronizacji zegarów taktujących nadajnika i odbiorników. Szerokie zastosowanie sieć CAN zawdzięcza Paweł Moroz: Politechnika Śląska, Instytut Informatyki; ul. Akademicka 16, 44-101 Gliwice; pawel.moroz@polsl.pl

elastyczności zarówno w zakresie medium transmisyjnego, gdzie spotykane są rozwiązania wykorzystujące miedź, światłowód i fale radiowe, ale także ze względu na możliwość tworzenia własnego protokołu warstwy aplikacyjnej. W protokole tym poza warstwą 7 występują jeszcze tylko: warstwy fizyczna i łącza danych. SOF Identifier RTR Control Data CRC ACK EOF 1 bit 11 bit / 29 bit 1 bit 6 bit 0 8 bajtów 16 bit 2 bit 7 bit Rysunek 1 Budowa ramki Rysunek 1 przedstawia budowę ramki, w skład której wchodzą następujące elementy: SOF (ang. Start Of Frame) sygnalizacja rozpoczęcia transmisji; Identyfikator niezależny od nadajnika, w pierwszej wersji standardu identyfikator miał długość 11 bitów. Rozwinięcie standardu wprowadziło możliwość wykorzystania identyfikatora 11 (2.0A) lub 29 bitowego (2.0B). Na jego podstawie węzły określają, czy są daną informacją zainteresowane. RTR (ang. Remote Transmition Request) flaga określająca rodzaj ramki (ramka zdalnego żądania lub ramka danych); Control informacja o ilości bajtów danych; Data pole danych; CRC (ang. Cyclic Redundancy Checksum) suma kontrolna; ACK (ang. Acknowledgment) obszar, w którym sygnalizowane jest odebranie ramki; EOF (ang. End Of Frame) znacznik końca ramki. Zastosowanie w sieci CAN magistrali, w której wszystkie węzły są równoprawne w dostępie do łącza, wymusiło wprowadzenie protokółu rozstrzygania kolizji. W tym przypadku zastosowano bezstratny algorytm CSMA/CD/CR (ang. Carrier Sense Multiple Access/Collision Detection/Collision Resolution). Umożliwia on rozstrzyganie kolizji a zarazem nie powoduje uszkodzenia pakietu, który rywalizację wygrywa. Do tego celu wykorzystuje się fizyczną cechę łącza tzw. iloczyn na drucie (ang. Wired AND). Podczas arbitrażu uwzględnia się tylko następujące pola: identyfikator wiadomości, flagę rozszerzenia identyfikatora oraz flagę zdalnego żądania. Każdy węzeł nadający wiadomość prowadzi jednocześnie nasłuch i porównuje, czy wartość nadawanego bitu odpowiada stanowi łącza. W razie różnicy pomiędzy bitem nadawanym a odczytanym, węzeł wycofuje się z transmisji. Procedura ta trwa do momentu wyłonienia tylko jednego nadawcy, którym będzie węzeł wysyłający ramkę o najniższym identyfikatorze. Jako układ do realizacji transmisji przez magistralę CAN wybrano układ MCP2515 firmy Microchip. 2

2. UKŁAD KOMUNIKACYJNY MCP2515 MCP2515 jest prostym i tanim układem autonomicznym (ang. stand alone), przystosowanym do współpracy z szeroką gamą mikrosterowników. Stosuje się go do realizacji węzłów w sieciach o niedużym natężeniu ruchu wiadomości. W jego skład wchodzą następujące moduły: obsługi protokołu CAN, interfejs SPI, rejestry kontrolne i przerwań oraz układ sterujący. Niektóre funkcje protokołu CAN układ MCP2515 realizuje w sposób sprzętowy: nadawanie i odbiór, obliczanie sumy kontrolnej, synchronizację zegarów, kontrolę poprawności transmisji, potwierdzanie. W układzie tym identyfikatory tych wiadomości, które węzeł ma przyjąć, określa się poprzez ustawienie odpowiednich wartości w maskach i filtrach rejestrów odbiorczych. Wiadomości, których identyfikatory odpowiadają wartościom ustawionym w tych rejestrach, trafiają do jednego z dwóch dostępnych buforów odbiorczych, skąd następnie mogą zostać pobrane poprzez magistralę SPI do mikroprocesora. Za pomocą tej samej magistrali wiadomości zapisywane są do wybranego bufora nadawczego. Szeregowa magistrala SPI jest złożona z 4 linii: zegarowej, danych wysyłanych z procesora, danych odbieranych przez procesor oraz linii wyboru układu, z którym procesor ma się skomunikować. Prędkość transmisji wynosi do 10Mbit/s. W rejestrach kontrolnych umieszczone są informacje, na podstawie których układ sterujący konfiguruje moduł MCP2515. Układ ten, oprócz ustawiania parametrów pracy interfejsu CAN, obsługuje system przerwań, w skład którego wchodzi rejestr przerwań oraz kilka wyjść sygnałów żądania przerwania. Do dyspozycji są: wyjście zbiorcze (zgłoszenie żądania następuje po zajściu zdarzenia określonego przez konfigurację odpowiednich rejestrów) i wyjścia indywidualne, przeznaczone dla każdego z rejestrów odbiorczych (wyjście opcjonalne sygnalizujące odebranie i załadowanie wiadomości do odpowiadającego mu bufora odbiorczego). Poza sygnałami przerwań można wykorzystać trzy linie wejściowe inicjalizujące transmisję dla każdego z buforów nadawczych. 3. OPIS BIBLIOTEK Biblioteka wykonana w ramach magisterskiej pracy dyplomowej (dalej nazywana biblioteką 2) zostanie porównana z biblioteką opracowaną przez Martina Thomasa (dalej nazywaną biblioteką 1). Celem obu implementacji było stworzenie interfejsu dla tworzonych aplikacji. W obu bibliotekach występuje podział funkcji na następujące warstwy (Tabela 1): Table 1. Zawartość bibliotek Biblioteka 1 Biblioteka 2 SPI spi.c mega128_hardwarespi.c 3

spi.h mega128_hardwarespi.h warstwa niższa mcp2515.c mcp2515.h mcp2515_basic.c mcp2515_basic.h warstwa wyższa can.c can.h mcp2515_extended.c mcp2515_extended.h zbiór definicji mcp2515_defs.h mcp2515_registers.h Definicje stałych ułatwiają wykorzystanie w kodzie: adresów rejestrów, masek i flag, a także parametrów przekazywanych jako parametry funkcji. Pełny schemat zależności przedstawiony jest poniżej (strzałka wskazuje, do którego pliku dołączony jest plik z jej drugiego końca): W bibliotece 1 wykorzystano dodatkowo dwie funkcje: timebase - będącą standardową biblioteką wyznaczającą przedziały czasu przy użyciu licznika wewnętrznego i systemu przerwań oraz delayloop32, umieszczoną w pliku delay.c, będącą pętlą opóźniającą zaimplementowaną w asemblerze. 3.1. NAZEWNICTWO I TYPY Podrozdział ten przedstawia sposób tworzenia nazw funkcji, stałych i zmiennych. Dzięki znajomości tej zasady korzystanie z biblioteki jest łatwiejsze. W obu rozwiązaniach stworzone zostały schematy tworzenia nazw stałych, zmiennych i funkcji. Biblioteka pierwsza ogranicza się do zdefiniowania pod postacią stałych: adresów rejestrów MCP_<nazwa_rejestru>, bitów w rejestrach MCP_<nazwa_rejestru>_<nazwa_bitu/ów>[_M] lub rozwinięcia stosowanych w dokumentacji skrótów nazw. Inaczej ma się to drugim przypadku. Plik nagłówkowy zawierający definicje jest rozszerzony. Zawiera następujące typy stałych: _i instrukcja, blok kilku bitów, będący częścią lub pełnym rozkazem dla układu MCP2515, 4

_r adres rejestru, _p wartość bitu lub maska danego bitu, Biblioteki funkcji komunikacyjnych CAN analiza porównawcza _n liczba porządkowa, podająca pozycję bitu w postaci dziesiętnej, _m maska dla zbioru bitów odpowiednich rejestrów, t liczba tymczasowa. Różnica pomiędzy _i i _m jest nieznaczna. W obu przypadkach można powiedzieć, iż mamy do czynienia z ustawieniem wartości kilku bitów, ale przedrostek _i wykorzystywany jest wtedy, gdy stała jest umieszczana w pierwszym bajcie komunikatu SPI (w bajcie rozkazu/instrukcji). Maska natomiast używana do wykonania operacji na bitach w rejestrach. Nazwy funkcji wykorzystują podobny sposób ich tworzenia. Zaczyna się od prefiksu mcp2515_ w pliku mcp2515.x, can_ w can.x oraz CAN_ i CAN odpowiednio dla mcp2515_basic.x i mcp2515_extended.x. Omawiając nazewnictwo należy wspomnieć o typach zmiennych. Autor pierwszej biblioteki postanowił wykorzystać typy zdefiniowane w dołączonym pliku nagłówkowym inttypes.h, w której wykorzystuje uint<x>_t, gdzie <x> reprezentuje ilość bitów zajmowanych w pamięci przez zmienną. Natomiast autor artykułu korzysta z własnych definicji, odpowiednio: BYTE uint8_t, WORD uint16_t, DWORD uint32_t. 3.2. FUNKCJE WARSTWY NIŻSZEJ Warstwa niższa implementuje podstawowe operacje wykonywane na układzie MCP2515. Funkcje te realizują odpowiednio przygotowanie i nadanie rozkazu. W skład realizowanych przez układ rozkazów wchodzą: 1) zapisanie/odczytanie komórki pamięci, 2) zapisanie/odczytanie całości lub części bufora ramki, 3) modyfikacja poszczególnych bitów w komórce pamięci, 4) odczyt rejestru statusu buforów nadawczych/odbiorczych, 5) odczyt rejestru statusu buforów odbiorczych, 6) RTS (ang. Request to Send) - żądanie nadania wiadomości ze wskazanego bufora, 7) wyzerowanie układu. Tabela 2 zawiera zestawienie nazw funkcji z obu bibliotek. Tabela 2. Funkcje warstwy niższej No. Biblioteka 1 Biblioteka 2 1 mcp2515_readregister mcp2515_setregister CAN_ReadByte CAN_WriteByte 2 mcp2515_readregisters CAN_ReadRx 5

mcp2515_setregisters CAn_WriteTx 3 mcp2515_modifyregister CAN_BitModify 4 mcp2515_readstatus CAN_ReadStatus 5 mcp2515_rxstatus CAN_RxStatus 6 mcp2515_start_transmit CAN_RTSFrame 7 mcp2515_reset CAN_Reset 8 mcp2515_init CAN_MasterInit Realizacja rozkazów opisanych w dokumentacji identyczna jest tylko w przypadku funkcji: 1, 3, 7. Nieznacznie różnią się funkcje: 4 i 5. W bibliotece 1 skróceniu o 1 bajt uległ rozkaz odczytu. Możliwe to było z powodu powtarzania się w dwóch kolejnych bajtach wartości wskazanego rejestru. Inną występującą różnicą jest napisanie oddzielnego kodu dla każdej z funkcji w bibliotece drugiej, co zwiększa kod wynikowy, natomiast pierwsza biblioteka wywołuje oddzielną funkcję, której parametrem jest kod instrukcji. Zupełnie inne podejście autor biblioteki 1 miał w przypadku implementacji mcp2515_start_transmit wykorzystał 4-bajtowy rozkaz modyfikacji bitów w komórce pamięci zamiast dostępnego jednobajtowego rozkazu rozpoczęcia transmisji. To drugie rozwiązanie zostało wykorzystane w mojej bibliotece. Układ MPC2515 ma wbudowaną auto-inkrementację wskaźnika komórki pamięci, wykorzystywaną w niektórych rozkazach z dokumentacji. Rozwiązanie umieszczone w bibliotece 1 wykorzystuje tą funkcjonalność i stosuje zapis blokowy, o adresie pierwszej komórki i rozmiarze bloku zdefiniowanym przez przekazywane parametry. Nie posiada natomiast opisanych w dokumentacji rozkazów zapisu i odczytu ramek. W bibliotece autora artykułu funkcje za pomocą 3 bitów w instrukcji ustawiają wskaźnik pamięci na zdefiniowany w układzie adres, a następnie prowadzony jest odczyt lub zapis blokowy buforów nadawczych lub odbiorczych. Dodatkowo rozkaz ten automatycznie zeruje flagę przerwania po odczycie odebranej ramki ze wskazanego bufora. Obie biblioteki posiadają funkcje inicjalizującą, w której zawarty jest ciąg rozkazów (funkcji) umożliwiających skorzystanie z biblioteki. Funkcja umieszczona w bibliotece 1 przygotowuje procesor do komunikacji, ustawiając parametry modułu MCP2515, takie jak prędkość i zeruje zawartość buforów CAN. Ta sama funkcja w drugiej bibliotece zawiera tylko inicjalizację komunikacji poprzez ustawienie parametrów transmisji modułu SPI. Biblioteka napisana przez Martina Thomasa jest znacznie rozbudowana w stosunku do opisu obsługiwanych instrukcji przez MCP2515. Dodatkowo umieszczono w niej funkcje: a) odczytania/zapisania identyfikatora wiadomości, b) odczytania/zapisania wiadomości, c) ustawiania prędkości transmisji, d) ustawiania trybu pracy układu. 6

Są to funkcje związane z warstwą wyższą, dlatego omówione zostaną w następnym podrozdziale. Umieszczenie ich w tzw. warstwie niższej spowodowało powiązanie obu warstw. Wynikiem takiej konstrukcji jest brak czytelności i jasnego rozdzielenia niezależnych części. 3.3. FUNKCJE WARSTWY WYŻSZEJ Zadaniem tej warstw jest uproszczenie obsługi układu komunikacyjnego. Zakres realizowanych zadań jest zależny od autora, dlatego obie biblioteki w znaczący sposób się różnią. Porównanie zamieszczone zostało w tabeli 3. Tabela 3. Funkcje warstwy wyższej Zadania Biblioteka 1 Biblioteka 2 inicjalizacje modułu CAN x x przesyłanie wiadomości x x sprawdzenie odebrana wiadomości x x obsługa błędów - x obsługa systemu przerwań - x konfiguracja parametrów układu - x obsługa filtrów i masek identyfikatorów - x W tych plikach umieszczone zostały również definicje struktury przechowującej ramkę. Zawiera ona następujące pola (Tabela 4): Table 4 Struktura wiadomości No Biblioteka 1 CanMessage 1 extended_ident ifier Biblioteka 2 CANMessage IsExtendedID Opis przyjmuje wartość bool, sygnalizuje typ identyfikatora (standardowy lub rozszerzony) 2 identifier Address zawiera identyfikator 3 dlc NumberOfDataByt es długość pola danych 4 dta Data tablica zawierająca dane 5 trt IsRemoteFrame przyjmuje wartość bool, sygnalizuje ramkę zdalnego żądania 6 - Priority ustawienie kolejności nadawania ramek z buforów nadawczych 7 filhit - numer filtru, który spowodował przyjęcie wiadomości do układu 7

Często podczas korzystania z parametrów nie wiadomo, jaki stan binarny odpowiada za włączenie danej flagi. Dlatego zdefiniowałem stałe Yes i No. Nazwy zmiennych oraz definicje stałych są w taki sposób zbudowane, aby tworzyły proste zdania, jasno informujące o ustawionej wartości np. IsRemoteFrame = Yes. Wykorzystanie takiej struktury w znaczny sposób ułatwia analizę odbieranych i tworzenie wysyłanych wiadomości. Aby zawartość takiej struktury zamienić na reprezentację konieczną do zapisania jej w module MCP5215 lub odczytania z niego, powstały funkcje umieszczone jeszcze w module mcp2515.c. Są to odpowiednio mcp2515_read_canmsg i mcp2515_write_canmsg, natomiast w pliku can.c funkcja can_readmessage. Ostatnia z wymieniowych funkcji wyszukuje wypełniony bufor, aby następnie wywołać funkcję mcp2515_read_canmsg oraz wyzerować flagę przerwania. Funkcja can_writemessage znajduje pierwszy wolny bufor nadawczy i do niego rozpoczyna zapisywanie wiadomości. Podczas przekształcania obie biblioteki korzystają z tymczasowej tablicy bajtów, w której zapisywane są kolejne bajty bufora. Następnie za pomocą jednego rozkazu są one kopiowanie do bufora. Stworzone przeze mnie funkcje umożliwiają: wysłanie/odebranie pełnej wiadomości CANSendMsgFull/ CANReceiveMsgFull, wysłanie/odebranie identyfikatora wiadomości CANSendMsgAddress/ CANReceiveMsgAddress, wysłanie/odebranie pola danych CANSendMsgData/ CANReceiveMsgData Jako parametry podawane są: numer bufora, z którego chcemy korzystać, wskaźnik na strukturę wiadomości oraz, w przypadku wysyłania, informację, czy wiadomość ma być wysłana zaraz po zapisaniu jej do bufora. Analizując możliwości ustawienia prędkości transmisji autor pierwszej przewidział tylko dwa tryby pracy: 125 i 20 kbps, ustawiane na podstawie wcześniej wyznaczonych wartości rejestrów. Moja biblioteka wyznacza te wartości dla dowolnej prędkości z dopuszczalnego zakresu. Dodatkowo umieszczone zostały makra niektórych operacji, aby umożliwić optymalizowanie kodu przez użytkownika. Dużą niedogodnością może być dla użytkownika brak przygotowania biblioteki 1 do obsługi filtrów, dzięki którym do buforów zapisywane są tylko wiadomości o określonych identyfikatorach. Zamiast tego autor stworzył funkcję mcp2515_initcanbuffers, ustawiającą filtry i maski w taki sposób, aby wszystkie wiadomości były przez nią odbierane. W bibliotece 2 do tworzenia i przechowywania filtrów jak i wiadomości stworzona została specjalna struktura RXnFilter, zawierająca 32-bitowe pole, w którym ustawia się identyfikator wiadomości oraz określa, czy jest to ramka o rozszerzonym identyfikatorze. 8

4. PODSUMOWANIE Z porównania obu bibliotek wynika, że biblioteka Martina Thomasa zapewnia mniejsze możliwości współpracy z układem. Dotyczy to zarówno ustawiania parametrów transmisji, obsługi przerwań, konfiguracji filtrów akceptacyjnych oraz nadawanych ramek. Oczywiście wszystkie operacje można wykonać bezpośrednio na układzie, ale wymaga to znajomości poszczególnych rozkazów, pozycji bitów w rejestrach i adresów samych rejestrów. Wykorzystanie definicji nazw ułatwi to zadanie. Ważną cechą jest możliwość łatwego ustawiania prędkości. Ustawienie dowolnych wartości bez odwoływania się do dokumentacji i poznawania zasad stosowanych przy doborze odpowiednich wartości rejestrów: CNF1, CNF2, CNF3 jest niezmiernie ważna. Szybkość wykonania nie ma tu znaczenia, ponieważ funkcja wywoływana jest zazwyczaj jednokrotnie. W obu bibliotekach zabrakło natomiast funkcji automatycznego wykrywania prędkości transmisji, co udostępnia MCP2515, a do poprawnego działania wymagane są komunikujące się już ze sobą przynajmniej 2 węzły sieci. Bardzo dobrym rozwiązaniem w bibliotece 1 jest zastosowanie kwalifikatora typu const, który może wpłynąć na optymalizacje aplikacji. Także dobrym rozwiązaniem jest rozróżnienie funkcji poszczególnych warstw za pomocą prefiksów mcp2515 i can. LITERATURA DO ROZDZIAŁU [1] Etschberger K.: Controler Area Network - Basics, Protocols, Chips and Applications. IXXAT Press, Weingarten/Niemcy 2001. [2] Kołodziejski J., Kalita W., P. Rz., Kamuda K.: Magistrala CAN. Struktura, właściwości i zastosowania Elektronika 2000. [3] Microchip: DataSheet Stand-Alone CAN Controller With SPI Interface MCP2515 www.microchip.com [4] Thomas M.: Demo-Application, Kaiserslautern, Germany 2005 http://gandalf.arubi.uni-kl.de/avr_projects/can/index.html [5] Moroz P. Praca dyplomowa Driver komunikacyjny sieci CAN dla mikrosterowników z rodziny AVR z 2005 roku przechowywana w bibliotece Instytutu Informatyki, Politechniki Śląskiej. 9