Sprzętowy stos TCP/IP
• tech • 669 słów • 4 minuty czytania
Coraz częściej popularne staje się podłączenie do sieci i Internetu różnych ciekawych zabawek, szczególnie tych wykonanych samodzielnie. Pomińmy kwestie przemysłu i różnych gotowych produktów służących, czy to do zdalnego monitorowania obiektów, pomiarów i przesyłania danych poprzez sieć, czy też do zdalnego sterowania. A skupmy się na bardziej amatorskich projektach.
Jak to zawsze bywa, możliwość podłączenia naszej zabawki do sieci zależy głównie od czasu i pieniędzy.
Jeszcze do niedawna musieliśmy się sami bawić w obsługę stosu sieciowego, bądź wykorzystywać dostępne stosy programowe, głównie dla małych systemów mikroprocesorowych opartych na 8-bitowych mikrokontrolerach rodziny ‘51 czy AVR. Miało to swoje zalety i wady. Do zalet można zaliczyć możliwość nieograniczonej konfiguracji i dużego wpływu na samą implementację. Wadą było znaczne, wręcz duże zapotrzebowanie na zasoby, co dawało o sobie znać przy wykorzystaniu małych mikrokontrolerów.
To już można zaliczyć do przeszłości. Obecnie możemy cieszyć się możliwością wykorzystania sprzętowych implementacji stosu TCP/IP, w których wszystkie bebechy związane z siecią zostały upakowane do jednego układu scalonego, dla niektórych “czarnej skrzynki”. Układy takie są nazywane często Internet Inside Chip, w skrócie iinChip lub i2Chip.
Jednym z takich układów jest kostka W3100A firmy WIZnet. Układ ten wykonany w technologii CMOS 0,35 zawiera kompletny sprzętowy stos TCP/IP z obsługą podstawowych protokołów: TCP, IP, UDP, ICMP, ARP, DLC i MAC. Możliwa jest praca w trybie full-duplex i obsługa 4 niezależnych kanałów transmisyjnych (połączeń) w dowolnym kierunku. Schemat blokowy układu na poniższym rysunku.
Nie chce tutaj kopiować dokumentacji czy noty katalogowej, ale sposób konfiguracji układu jest ciekawy.
Sam układ zawiera zestaw rejestrów konfiguracyjnych, a jego konfigurowanie to ustawienie odpowiednich stanów właśnie na tych rejestrach. Rejestry te można podzielić na rejestry poleceń - ustawiamy kod polecenia/funkcji jaki chcemy wykonać (na przykład otwarcie gniazda, wysłanie danych) oraz rejestry statusowe - odzwierciedlają stan operacji, czyli informacje czy polecenie zakończyło się sukcesem. Każdy kanał zawiera swoje własne rejestry, a synchronizacja pracy naszego układu z kostką W3100A może odbywać się poprzez przeglądanie rejestrów statusowych lub poprzez przerwania generowane przez układ.
Oprócz rejestrów konfiguracyjnych, układ zawiera także w swoim wnętrzu 16kB pamięci RAM, którą użytkownik może w dowolny sposób podzielić pomiędzy poszczególne kanały. Przy nadawaniu i odbieraniu pamięć ta pracuje jako bufor cykliczny dla danych, a dostęp do niej możliwy jest za pomocą 4-bajtowych rejestrów wskaźników, po dwie pary (zapis/odczyt) na kanał.
Komunikacja pomiędzy mikroprocesorem a stosem może odbywać się za pomącą magistrali równoległej lub interfejsu szeregowego I2C. Głównie polega to na odczytywaniu wartości odpowiednich rejestrów o których wspomniałem wyżej. Magistrala równoległa składa się z 8 linii danych, 15 linii adresowych i sygnałów ChipSelect, Read, Write. Dzięki temu, możemy podłączyć układ do mikroprocesora w taki sposób, aby był widoczny jako obszar w pamięci.
Oczywiście sam układ W3100A nie wystarczy nam do podłączenia się do sieci, potrzebujemy jeszcze transceivera warstwy fizycznej, czyli sterownika (PHY) jak na przykład RTL8210BL i transformatora (MAG).
Do komunikacji pomiędzy transceiverem a układem W3100A służy specjalna magistrala synchroniczna o nazwie MII (Media Independent Interface), która może pracować w dwóch trybach: równoległym i szeregowym.
Skompletowanie i uruchomienie takiego modułu może wydawać się trochę kłopotliwe, ale dla leniwych i tych, którzy nie mają czasu i ochoty na babranie się z tym, firma WIZnet oferuje także gotowy moduł ethernetowy - NM7010A, który zawiera na swoim pokładzie W3100A, RTL8201BL oraz gniazdko RJ45 zintegrowane z transformatorem.
Moduł ten realizuje pełny interfejs pomiędzy naszym systemem mikroprocesorowym a warstwą fizyczną sieci ethernetowej, o czym świadczy “prosty” schemat blokowy przedstawiony poniżej.
Połączenie z systemem realizują dwie 28-nóżkowe łączówki, uwzględniające sygnały z 15-bitowej szyny adresowej, 8-bitowej szyny danych, sygnały sterujące, I2C, zasilanie, a także wyprowadzenia do sterowania diodą LED prezentującą status sieci. Tak, więc użycie gotowego modułu jest bardzo wygodne i opłacalne.
Aktualnie, sam producent nie zaleca już używania układu W3100A w nowych projektach, zastępując go jednym z nowszych i lepszych produktów. Zachęcam do zapoznania się z pełnym asortymentem produktów firmy WIZnet.
Jednym z ciekawych układów zbudowanych na w/w aplikacjach może być prosty “pinger” do fingowania urządzeń w sieci przydatny sieciowcom, którego temat został poruszony na usenetowej grupie pl.misc.elektronika.
Kiedyś to się trzeba było namęczyć, a teraz jeden scalak i problem rozwiązany ;)
Komentarze (2)
No, ciekawa rzecz. Fajnie byloby miec to w postaci SoC z jakims kontrolerem, bo tak mocno rozrasta sie rozmiar calego ukladu - stos, PHY, kontroler.
Cieeekawe cieekawe ;>