W futurystycznych wizjach przyszłości każda lodówka ma być podłączona do Internetu, aby samodzielnie uzupełniać stan kończących się produktów, zamawiając je w sklepach internetowym. Można się zastanawiać nad sensownością takich pomysłów, jednakże podobne prognozy jednoznacznie sugerują bieżące trendy w technice. Niezależnie od oczekiwać konsumentów globalna sieć stanowi wygodny sposób na przesyłanie danych i kontrolowanie urządzeń z dowolnego miejsca na świecie.
Dobrym przykładem mogą być systemy zabezpieczające budynki mieszkalne, które można zdalnie monitorować przez Internet. Rozwój układów półprzewodnikowych na przestrzeni ostatnich lat sprawił, że oferta rynkowa producentów jest bardzo szeroka i dziś dołączenie urządzenia do Internetu nie stanowi większego problemu. Dostępne są specjalizowane kontrolery, układy realizujące warstwę fizyczną, gotowe biblioteki, stosy TCP/IP oraz mikrokontrolery mające wbudowane kontrolery MAC czy nawet pełną obsługę warstwy sprzętowej.
Niniejszy artykuł przybliża funkcjonowanie sieci Ethernet i przedstawia niektóre z metod dołączania do globalnej sieci własnych urządzeń. W części pierwszej prezentujemy podstawowe informacje o standardzie i rozwiązania układowe gotowych konwerterów protokołów i modułów komunikacyjnych, w części drugiej omówimy Ethernet w mikrokontrolerach i układach programowalnych oraz możliwości dostępnych bibliotek oprogramowania.
Ethernet został zdefiniowany w standardzie IEEE 802.3 określającym wymagania dla warstwy fizycznej, metody dostępu do medium transmisyjnego oraz sposób przesyłania sygnałów (w tym format ramek i protokołów w dwóch najniższych warstwach). Sieć Ethernet funkcjonuje w oparciu o model warstwowy, tzn. zastosowany został podział na warstwy - im jest ona wyższa, tym operacje na danych są bardziej abstrakcyjne.
Każda z warstw jest odpowiedzialna za realizowanie określonych zadań i udostępnianie interfejsu dla warstw niższych oraz wyższych. Idea podziału na warstwy powstała w latach 80., gdy organizacja ISO stwierdziła, że konieczne jest opracowanie modelu sieciowej komunikacji. Miał on umożliwić opracowywanie rozwiązań sieciowych przez różnych producentów, które będą ze sobą zgodne. Powstały na podstawie tych prac model OSI (Open System Interconnection) stanowi punkt wyjścia dla funkcjonowania większości protokołów sieciowych.
Na rysunku 1 pokazano strukturę takiego modelu. Warto zauważyć, że na potrzeby Internetu wykorzystuje się głownie mniej złożony model TCP/IP. W przypadku połączenia w sieci Ethernet najniższa warstwa, fizyczna (oznaczana skrótem PHY), odpowiada za nadawanie strumienia bitów przez medium (przewód, światłowód): kodowanie, multipleksowanie, synchronizację, odzyskiwanie zegara, serializację, wykrywanie kolizji i ponawianie transmisji po jej stwierdzeniu.
Kolejną, wyższą warstwę stanowi warstwa MAC (Media Access Control). Dane przekazane do tej warstwy zostają opakowane w ramkę z dołączonym nagłówkiem, sumę kontrolną oraz dodatkowymi polami kontrolnymi. Następnie tak skonstruowana ramka jest przekazywana w postaci strumienia bitów do warstwy niższej (fizycznej), gdzie zostaje przesłana bezpośrednio do sieci. Głównym zadaniem warstwy MAC jest uniezależnienie danych od medium transmisyjnego. W takim układzie, zmieniając jedynie warstwę fizyczną, można zmienić sposób, w jaki są przesyłane dane (np. ze skrętki na światłowód).
W ramce ethernetowej przekazywanej do warstwy fizycznej można wyróżnić następujące pola:
- preambuła (7 oktetów postaci 01010101),
- pole SFD (Start of Frame Delimiter), które może być uważane za dalszą część preambuły,
- adres urządzenia docelowego złożony z 6 bajtów (adres MAC-48),
- adres urządzenia nadającego ramkę, złożony również z 6 bajtów (MAC-48),
- pole określające rozmiar pakietu (w zakresie od 46 do 1500 oktetów) lub typ przesyłanej ramki: IPv4, IPv6, ARP, RARP. Znaczenie tego pola jest uzależnione od wartości, gdy jest ona niższa niż 1536, pole zawiera informację o rozmiarze pakietu,
- pole danych oraz bajty wypełniające, jeżeli liczba przesyłanych bajtów jest mniejsza niż wymagane minimum (46 oktetów),
- suma kontrolna CRC złożona z 4 bajtów,
- pole ESD (End of Stream elimiter).
Graficzną ilustrację ramki ethernetowej przedstawiono na rysunku 2. Warto zauważyć, że zastosowane na tym poziomie zabezpieczenia pozwalają odrzucać błędne ramki, ale nie ma możliwości ponowienia transmisji w przypadku uszkodzenia lub utraty pakietu. Co więcej, nie ma możliwości zarządzania dużymi blokami danych, których rozmiar przekracza 1500 bajtów. Nie można ich umieścić wewnątrz pojedynczej ramki i należy je podzielić na odpowiednio większą ich liczbę.
To zadanie jest jednakże realizowane przez wyższe warstwy. Wykorzystując sieć do przesyłania danych, należy mieć na uwadze, że ramki mogą docierać do urządzenia docelowego w kolejności innej niż wysłana. Wynika to bezpośrednio ze specyfiki sieci i jej topologii oraz faktu, że różne poszczególne pakiety nie muszą dotrzeć do odbiorcy zawsze tą samą drogą. Konieczna staje się implementacja mechanizmów buforujących i sortujących odbierane ramki oraz scalanie ich w pełny blok danych.
Niestety w międzyczasie może dojść do utraty bądź przekłamania ramek transmitowanych przez sieć, a co za tym idzie - utraty integralności danych. Ponawianie całej transmisji byłoby wysoce nieefektywne, dlatego niezbędne staje się zaimplementowanie mechanizmów wymuszających wysyłanie jedynie brakujących bądź uszkodzonych ramek. Zadanie to również jest powierzane warstwom wyższym. Warto wspomnieć jeszcze, że adres MAC jest złożony z kombinacji 48 bitów niepowtarzalnych w obrębie całej sieci.
Adres ten dzieli się na dwie 24-bitowe części, gdzie starsza z nich stanowi identyfikator OUI (Organizationally Unique Identifier) przydzielany przez organizację IEEE konkretnej firmie lub organizacji, natomiast bity młodsze - identyfikator urządzenia. W sytuacji, gdy potrzeba nie więcej niż 4096 adresów, istnieje możliwość zakupienia indywidualnego bloku adresowego (IAB). W takiej sytuacji identyfikator OUI należy do IEEE, a kolejnych 12 bitów jest zastrzeżonych i do dyspozycji producenta pozostaje tylko 12 najmłodszych bitów.
Stos TCP/IP
Stos TCP/IP pośredniczy w wymianie danych między warstwą MAC oraz warstwami wyższymi realizującymi obsługę np. poczty elektronicznej. Nazwa sugeruje, że stos ten jest zbudowany w oparciu o dwa protokoły: IP (Internet Protocol) oraz TCP (Transmission Control Protocol). Protokół IP został zaprojektowany z myślą o wykorzystaniu w sieciach bazujących na komutacji pakietów. Głównym założeniem było przesyłanie datagramu z punktu źródłowego do punktu docelowego w oparciu o adres o stałej długości.
Ponadto protokół IP został stworzony z myślą o fragmentacji danych na mniejsze części z możliwością złożenia z nich całej wiadomości po stronie odbiorcy. Warto zauważyć, że każdy datagram jest traktowany jako niezależny i niezwiązany z żadnym innym datagramem. W ramach zadań związanych z protokołem IP wymienia się także routing między sieciami, czyli mechanizmy kierowania pakietu przez poszczególne węzły do punktu docelowego. Cztery najważniejsze elementy datagramu (oprócz pola danych) to:
- rodzaj usługi - określający pożądaną jakość, na co składa się określenie priorytetu oraz pożądaną wydajność, niezawodność czy opóźnienie sieci,
- czas życia (Time to Live) - parametr ten jest zmniejszany o jeden za każdym razem, gdy pakiet jest przetwarzany przez węzeł w sieci (np. router), w sytuacji, gdy wartość ta spadnie do zera, pakiet zostanie zniszczony; mechanizm ten sprawia, że żaden pakiet nie może krążyć w sieci w nieskończoność,
- opcje - pozwalają umieścić dodatkowe informacje związane z bezpieczeństwem czy sposobem trasowania drogi datagramu w sieci,
- suma kontrolna - wykorzystywana do weryfikacji poprawności datagramu.
Na rysunku 3 pokazano nagłówek pakietu IP. Protokół TCP jest protokołem połączeniowym (w przeciwieństwie do np. UDP), co oznacza, że przesyłane nim dane zostaną dostarczone do odbiorcy bez błędów i w całości. Po wysłaniu pakietu urządzenie nadawcze rozpoczyna odliczanie, jeżeli w ustalonym czasie nie nadejdzie potwierdzenie, to pakiet zostanie uznany za stracony i transmisja zostanie ponowiona. Cała transmisja ma charakter niejako wirtualny, gdyż przekazywanie danych odbywa się za pomocą adresów i numerów portów urządzenia docelowego oraz źródłowego.
Port stanowi w tym przypadku numer zapisany w jednym z pól ramki, na podstawie którego urządzenia rozpoznają przeznaczenie pakietu. Tym samym istnieje możliwość stworzenia niezależnych kanałów komunikacyjnych w ramach jednego urządzenia. Przykładowo dane przesyłane przez port 80 są przeznaczone dla usług HTTP, a odebrane z portu 110 - dla usługi POP3. Warto jeszcze dodać, że komunikacja w ramach protokołu TCP ma charakter komunikacji klient-serwer. Serwer oczekuje na połączenie, które inicjowane jest przez klienta.
Sprowadza się to do wysłania pakietu z ustawioną flagą SYN (synchronize), na co host odpowiada odesłaniem pakietu z ustawionymi flagami SYN oraz ACK (jeżeli zaakceptuje połączenie od klienta). W odpowiedzi klient przesyła pierwszy pakiet danych z ustawioną jedynie flagą ACK. Schematycznie przedstawiono to na rysunku 4. Połączenie może zakończyć każda ze stron, wysyłając pakiet z ustawioną flagą FIN (finished), na co druga strona w odpowiedzi odsyła pakiet z potwierdzeniem (ustawiona flaga ACK i czasem także FIN). Budowę ramki TCP pokazano na rysunku 5.
Konwertery RS232-Ethernet
Podłączenie własnego urządzenia do sieci jest najłatwiejsze do zrealizowania, gdy wykorzystywane są gotowe, zintegrowane moduły komunikacyjne. Udostępniają one interfejs sieciowy oraz prostszy interfejs (np. RS232), do którego podłącza się najczęściej mikrokontroler pracujący w projektowanym urządzeniu. Oczywistą zaletą takiego rozwiązania jest duża prostota, dostęp do dokumentacji producentów, prostsza konfiguracja i łatwiejsza integracja z projektowanym urządzeniem.
Niewątpliwą wadą takich modułów jest ich wyższa cena w stosunku do zintegrowanych kontrolerów oraz większe rozmiary. Na rynku można spotkać zintegrowane moduły do komunikacji sieciowej pochodzące od różnych producentów. Przykładem mogą być produkty firmy Tibbo stanowiące interfejs pomiędzy Ethernetem oraz standardowym portem szeregowym. W ofercie producenta dostępny jest moduł DS203 (rys. 6) będący serwerem urządzenia szeregowego (Serial Device Server), zaprojektowany z myślą o starszych urządzeniach wyposażonych jedynie w port COM.
Niekiedy nawet wiekowe rozwiązania muszą zostać podłączone do sieci Ethernet np. w celu wykorzystania istniejącej już w firmie infrastruktury sieciowej do komunikacji z nadrzędnym komputerem. Dzięki przygotowanym przez Tibbo rozwiązaniom możliwe jest bezpośrednie podłączenie urządzeń mających jedynie interfejs RS232 do sieci. Moduł DS203 prześle dane z portu szeregowego przez sieć do miejsca docelowego w sposób niezauważony przez dołączony do niego układ.
Udostępnione przez producenta sterowniki pozwalają także na zainstalowanie w systemie operacyjnym wirtualnego portu szeregowego, dzięki którym komunikacja przez Internet staje się całkowicie transparentna. Oczywistą zaletą jest możliwość znaczącego zwiększenia dystansu pomiędzy komputerem oraz urządzeniem oraz zdalne sterowanie jego pracą. Zabudowując moduł Tibbo w obudowie starszego urządzenia, można praktycznie bez żadnego wysiłku zastąpić wiekową komunikację przez port szeregowy współczesną komunikacją przez sieć Ethernet.
Konwertery RS232 <-> Ethernet dostarcza także Moxa oferująca m.in. moduł MiiNePort E1 (rys. 7) przeznaczony do zabudowy we własnym urządzeniu. Umożliwia on wymianę danych przez standardowy interfejs RS232 bądź RS485. Moduł może pracować w jednym z pięciu trybów. Jednym z nich jest wspomniany już wcześniej wirtualny port szeregowy, dzięki któremu zarówno od strony urządzenia, jak i aplikacji uruchomionej na komputerze jest on widziany jako zwyczajny port COM.
Wykorzystując moduł firmy Moxa, można przesyłać dane w postaci pakietów UDP bądź TCP. Warto zauważyć, że MiiNePort E1 może pracować w trybie TCP jako serwer, klient bądź spełniać obie te funkcje jednocześnie. Dostęp do ustawień konfiguracyjnych modułu jest możliwy poprzez port szeregowy lub sieć Ethernet, a sama konfiguracja jest wprowadzana przez konsolę bądź terminal.
Programowalne moduły komunikacyjne
Rozwinięciem koncepcji prostych konwerterów Ethernet-RS232 są moduły wyposażone w niezbędne układy peryferyjne, złącze RJ45 oraz mikrokontroler umożliwiający uruchamiania aplikacji użytkownika. Takie podejście sprawia, że oferowany produkt jest bardziej elastyczny i przyczynia się do obniżenia kosztów końcowego urządzenia, gdyż implementacja własnego mikrokontrolera często nie będzie potrzebna. Moduł tego typu stają się dzięki temu wygodną platformą do dalszej rozbudowy.
Mają oczywiście odpowiednią warstwę sprzętową z warstwą sieciową opracowaną i sprawdzoną przez producenta. Produkty tego typu są oferowane m.in. przez firmę SystemBase. W jej ofercie znajduje się m.in. moduł Eddy-CPU v2.5 (rys. 8) wyposażony w 32-bitowy mikrokontroler z rdzeniem ARM9 oraz pamięci Flash (8MB) i SDRAM (32MB). Oprócz interfejsu Ethernet 10/100 i przetwornika ADC udostępnione zostały porty: USB, TWI, SPI. Moduł Eddy-CPU konfiguruje się za pomocą terminalu, przeglądarki lub aplikacji PortView współpracującej z portem szeregowym.
Duże zasoby sprzętowe umożliwiają instalację systemu Linux i pisanie działających pod kontrolą systemu operacyjnego programów, które mogą być znacznie bardziej złożone niż programy uruchamiane na "małych" mikrokontrolerach. Producent przygotował pakiet oprogramowania SDK przeznaczony do tworzenia własnych aplikacji. Udostępniono także gotowe do uruchomienia przykłady wraz z kodem źródłowym. W skład SDK wchodzi m.in. LemonIDE API, przykładowe kody źródłowe, dokumentacja oraz narzędzia do testowania i zarządzania modułem Eddy-CPU.
IDE zostało oparte na środowisku Eclips i zawiera zintegrowany, graficzny interfejs użytkownika (GUI), kompilator GNU C/C++ oraz edytor kodu. Wspomniana wcześniej firma Tibbo również dostarcza programowalne moduły ethernetowe, np. EM1206 (rys. 9). Zawierają one autorski, dwuzadaniowy system operacyjny Tibbo OS. Jego cechą charakterystyczną jest jednoczesna praca dwóch procesów: systemowego, odpowiedzialnego m.in. za obsługę sieci Ethernet oraz portów TCP i wirtualnej maszyny, na której uruchamiane są aplikacje użytkownika.
Producent zapewnia, że taka organizacja pracy wyklucza ryzyko zawieszenia systemu operacyjnego i utraty kontroli nad nim. Aplikacje napisane przez użytkownika są kompilowane do tzw. pseudokodu (pseudo-code lub pcode), interpretowane oraz wykonywane w następnej kolejności przez wirtualną maszynę znajdującą się w module. Dość interesującym rozwiązaniem zastosowanym przez Tibbo jest wbudowanie w układ debuggera, który pozwala w pełni kontrolować i nadzorować wykonywanie programów bez stosowania dodatkowych narzędzi sprzętowych.
Projektantom udostępnione zostało zintegrowane środowisko programistyczne - TIDE - pokazana na rysunku 10. Posiada ono udogodnienia typowe dla tego rodzaju narzędzi: kolorowanie i podpowiadanie składni, wbudowaną pomoc kontekstową oraz zintegrowany debugger oferujący zastawianie pułapek w kodzie (breakpoints), podgląd stosu, pracę krokową. Programowanie modułów Tibbo odbywa się w języku, którego składnia została zapożyczona z BASICa. Warto wspomnieć o obsłudze zdarzeń (events), tzn. dany fragment kodu zostanie wykonany w reakcji na określone zdarzenie, jakim może być np. odebranie pakietu TCP.
W takiej sytuacji może rozpocząć się wykonywanie przygotowanej uprzednio procedury obsługującej odebrany pakiet. Takie podejście pozwala zrezygnować z nieustannego odpytywania systemu operacyjnego, czy nadeszła oczekiwana ramka, co przekłada się na wzrost dostępnej mocy obliczeniowej. Mechanizm ten w swoim działaniu jest zbliżony do koncepcji przerwań, z tym że przerwania są najczęściej związane ze sprzętem, podczas gdy zdarzenia mogą odnosić się do bardziej abstrakcyjnych sytuacji, jak właśnie odebranie poprawnego pakietu.
Układy interfejsowe (ENC)
Pewną odmianą modułów komunikacyjnych Ethernet-RS232 są układy scalone oferujące podobną funkcjonalność, ale wymagające przygotowania oprogramowania we własnym zakresie. Przykładem takiego rozwiązania jest ENC28J60 produkowany przez firmę Microchip mający zintegrowane warstwy: MAC oraz sprzętową w standardzie 10BASE-T. Komunikacja z układem nadrzędnym, którym najczęściej będzie mikrokontroler, odbywa się za pomocą interfejsu SPI.
Wysoki stopień integracji sprawia, że do pracy wymagany jest jedynie transformator separujący, złącze RJ45 (lub złącze ze zintegrowanym transformatorem) oraz kilka elementów zewnętrznych. Na rysunku 11 pokazano podstawową aplikacje, która nie należy do szczególnie skomplikowanych. ENC28J60 ma wbudowany, konfigurowalny bufor nadawczo-odbiorczy o łącznej pojemności 8kB. Możliwość sprzętowego filtrowania przychodzących pakietów pozwala ograniczyć przetwarzanie danych jedynie do pakietów wysłanych przez właściwe urządzenia.
Układ ENC28J60 może współpracować z dowolnym mikrokontrolerem dzięki komunikacji przez port SPI. Komunikacja sieciowa sprowadzona została do zapisywania rejestrów kontrolnych PHY, MAC oraz MII i ponadto zapisywania i odczytywania danych z wewnętrznego bufora. Po umieszczeniu ramki ethernetowej wewnątrz bufora jest ona przekazywana przez układ do sieci. W buforze umieszczane są również ramki, które odebrano z sieci.
Warto zauważyć, że oprócz SPI układ zawiera linię INT, na której wystawiany jest sygnał przerwania po wystąpieniu jednego z uprzednio zdefiniowanych zdarzeń: błędu transmisji, zakończenia transmisji, zmiany stanu połączenia czy zakończenia pracy przez DMA. W swojej ofercie Microchip ma również układy ENC424J600 oraz ENC642J600, które stanowią zbliżony, nowszy odpowiednik układów ENC28J60. Najważniejszą zmianą jest wyposażenie tej serii układów w dwa interfejsy komunikacyjne: SPI (do 14 Mbit/s) oraz równoległy (do 160 Mbit/s), co pozwoli wybrać między prostszym projektem PCB a większą przepustowością.
Kolejną zmianą jest zwiększenie rozmiaru wewnętrznego bufora z 8kB do 24kB, co umożliwi przechowywania większej liczby ramek. Układ został ponadto wzbogacony w sprzętowe moduły ułatwiające prowadzenie bezpiecznej komunikacji, takie jak:
- moduł szyfrujący/deszyfrujący AES wspierający klucze 128-, 192- oraz 256-bitowe,
- moduł wyliczający wartość funkcji mieszających według algorytmu MD5 lub SHA-1 (hash), pozwalający jednoznacznie zidentyfikować pliki (niezależnie od ich nazwy) czy wyszukiwać pożądane pliki z pominięciem tych, które zostały zmodyfikowane w sposób nieautoryzowany,
- wsparcie dla algorytmów RSA czy Diffie-Hellman służących do bezpiecznej wymiany kluczy szyfrujących.
Funkcje te ułatwiają realizację protokołów bezpiecznej wymiany informacji, takich jak SSL czy TLS. W układach ENC424J600 oraz ENC642J60 zapisano na stałe adresy MAC, co znacząco powinno ułatwić projektowanie oraz produkowanie własnych urządzeń. Producent przewidział jednakże możliwość zmiany tego adresu na własny. Innym przykładem zintegrowanego kontrolera Ethernet jest 78Q8430 produkcji Teridian. W jego strukturze zawarto obsługę warstw MAC oraz PHY.
Układ został ponadto wyposażony w interfejs zbliżony do interfejsu pamięci SRAM, co czyni go szczególnie wygodnym w obsłudze przez procesory z magistralami 8-, 16- lub 32-bitowymi. Nie bez znaczenia jest wysoki stopień integracji, dzięki któremu z elementów zewnętrznych wymagane jest jedynie gniazdo RJ- 45. 78Q8430 został przeznaczony przede wszystkim do pracy w aplikacjach o dużej przepustowości, czego przykładem mogą być dekodery STB przesyłające przez sieć Ethernet strumień wideo. Schemat blokowy takiego rozwiązania przedstawiono na rysunku 12.
Jakub Borzdyński, jotbeage@interia.pl











