Ethernet i AVR–y, cz 1


K U R S
Ethernet i AVR y
Ethernut od podstaw, część 1
Jeszcze niedawno korzystanie z sieci lokalnych
i Internetu pozwalały wyłącznie duże komputery.
Dziś łatwo dostępne, tanie i szybkie mikrokontrolery
oraz kontrolery sieciowe umożliwiają taki dostęp
również samodzielnie konstruowanym urządzeniom
elektronicznym. Ethernet stał się dla nich
wygodnym środkiem komunikacji i uzupełnił,
a często zastąpił, dotychczas stosowane interfejsy
umożliwiające wymianę danych z innymi urządzeniami,
np. port szeregowy. O ile UART da się oprogramować w kilku
linijkach kodu i jest to łatwe zadanie nawet dla początkującego
elektronika, o tyle napisanie od początku najprostszego programu dla
takie uproszczenia jest niezbyt wy-
godny interfejs programistyczny. Dzię-
mikrokontrolera wykorzystującego sieć opartą na protokole TCP/IP
ki integracji z systemem operacyjnym,
wymaga mnóstwa czasu i wiedzy. Na szczęście nie musimy tego
Nut/Net jest łatwy w obsłudze, o czym
robić, powstały bowiem sieciowe systemy operacyjne, przeznaczone
przekonacie się w dalszej części arty-
dla małych mikrokontrolerów. Jednym z nich jest Nut/OS, znany
kułu.
również jako Ethernut. W artykule omówię możliwości tego systemu,
Oto niektóre z jego możliwości:
opiszę sposób instalacji i posługiwania się bibliotekami Nut/OS a oraz
 obsługa protokołów TCP/IP: ARP,
przedstawię jego przykładowe zastosowania.
IP, TCP, UDP, ICMP,
 obsługa kilku najpopularniej-
szych kontrolerów Ethernet,
Nut/OS  ogólnie tego stworzenie wersji na inny proce- m.in. RTL8019AS, CS8900,
Nut/OS to wielowątkowy sys- sor nie powinno sprawiać kłopotów. LAN91C111, DM9000,
tem operacyjny czasu rzeczywistego Nut/OS udostępnia programiście ty-  możliwość łączenia się z Interne-
(RTOS) stworzony przez niemiecką fir- powe mechanizmy wielozadaniowego tem za pomocą protokołu PPP
mę Egnite. Kod zródłowy systemu jest systemu operacyjnego: (modem),
objęty bardzo liberalną licencją BSD,  wielowątkowość z podziałem czasu  wbudowany serwer WWW o spo-
co umożliwia tworzenie bazujących procesora, rych możliwościach  skrypty CGI,
na nim komercyjnych aplikacji, na-  zarządzanie pamięcią, dynamiczną dynamiczne generowanie zawar-
wet o zamkniętym kodzie zródłowym. alokację RAM u, tości stron, autoryzacja użytkowni-
Należy jedynie zaznaczyć, że produkt  komunikację międzyprocesową ków,
używa systemu Ethernut. Nut/OS jest (events),  autokonfiguracja interfejsu siecio-
dostępny dla kilku platform sprzęto-  obsługę systemów plików (UROM wego z wykorzystaniem DHCP,
wych oraz obsługuje sporo urządzeń i FAT),  wbudowane resolvowanie nazw ho-
peryferyjnych, a wszystko to można  sterowniki urządzeń, stów,
łatwo dopasować do własnych wyma-  timery (jednorazowe i okresowe),  bardzo prosty interfejs programi-
gań. Obecnie obsługiwane są następu-  wysokopoziomową obsługę prze- styczny, naśladujący  pecetowe
jące rodziny mikrokontrolerów: rwań. sockety.
 Atmel AVR (Atmega103/Atmega- Wymienione cechy stanowią mini-
128), malną funkcjonalność jądra systemu, Środowisko uruchomieniowe
 ARM (Atmel), konieczne do uruchomienia najważ- Jako platformę do uruchamiania
 Renesas H8/300H. niejszego elementu Nut/OSa  stosu i testowania aplikacji Nut/OS wykorzy-
System napisano w języku C z nie- TCP/IP Nut/Net. Oczywiście istnieją stałem zestaw składający się z trzech
wielką liczbą wstawek asemblerowych, stosy, które obywają się bez wymie- modułów firmy Kamami: ZL1ETH
bardzo przejrzyście i modularnie, dla- nionych mechanizmów, ale ceną za (uniwersalny interfejs Ethernet z ukła-
dem RTL8019 i gniazdkiem RJ45 zinte-
Co to jest stos TCP/IP growanym z transformatorem), ZL9AVR
TCP (Transmission Control Protocol) jest to strumieniowy protokół komunikacji pomiędzy dwoma
(płyta bazowa z wyposażeniem umoż-
komputerami. Został stworzony przez Vintona Cerfa i Roberta Kahna. Jest on częścią większej
liwiającym budowanie własnych apli-
całości określanej jako stos TCP/IP. W modelu OSI TCP odpowiada warstwie transportowej.
TCP zapewnia wiarygodne połączenie dla wyższych warstw komunikacyjnych zabezpieczanych za
kacji ethernetowych), ZL7AVR (moduł
pomocą sum kontrolnych i numerów sekwencyjnych pakietów. Brakujące pakiety są obsługiwane
dipAVR z mikrokontrolerem ATmega-
przez żądania retransmisji. Host odbierający pakiety TCP porządkuje je według numerów sekwen-
128). Kompletny zestaw pokazano na
cyjnych tak, by przekazać wyższym warstwom modelu OSI pełen, złożony segment.
Fragment informacji z http://pl.wikipedia.org/wiki/TCP
fot. 1.
Elektronika Praktyczna 12/2006
89
K U R S
Co to jest  stos ?
Mikrokontroler ATmega128 zainsta- Uruchomimy w ten sposób kompi-
lowany na płytce ZL7AVR jest takto- lację zródeł systemu, trwającą, w za-
wany sygnałem zegarowym o często- leżności od szybkości komputera, od
tliwości 16 MHz. Na płytce bazowej kilkunastu sekund do kilku minut.
umieszczono m.in. 32 kB statycznej Jeżeli wszystko przebiegnie bez zakłó-
pamięci RAM, niezbędnej do prawi- ceń, na ekranie zobaczymy komunikat
dłowej pracy systemu. o pomyślnej kompilacji Nut/OS-a.
c:\nutbuild> make install
Zestaw ten jest w pełni zgodny
ze specyfikacją Ethernut I, ale nieco Polecenie to przekopiuje skompi-
lepiej wyposażony od wersji mini- lowane przed chwilą biblioteki, pliki
malnej: wprowadzono dodatkowe ele- nagłówkowe oraz narzędzie crurom
menty często używane w systemach do katalogu, w którym jest zainstalo-
mikroprocesorowych  prostą klawia- wany kompilator AVR GCC (WinAVR).
turę, diody LED, złącze dla wyświe- Biblioteki i nagłówki dla architektury
tlacza alfanumerycznego LCD, 2 porty AVR znajdą się w folderze kata- Często stosowane pojęcie  stosu określa
warstwowy  jak widać na rysunku  model
szeregowe RS232, złącze konwertera log_winavr\NutOS\avr. Poprawna
sieciowej komunikacji aplikacji współpracujących
USB2RS232 oraz JTAG. instalacja zostanie również zasygnali-
ze sobą zdalnie poprzez sieć informatyczną. Or-
ganizacja ISO opracowała 7 warstwowy Model
Do kompilacji projektów i biblio- zowana odpowiednim komunikatem.
Referencyjny Połączonych Systemów Otwartych
tek Nut/OS a posłuży dobrze zna- Po wykonaniu powyższych czynności,
(model OSI), który obejmuje wszystkie elementy
ne środowisko WinAVR oparte na katalog nutbuild możemy usunąć.
niezbędne do zdalnej komunikacji. Przyjęto
podział według sekwencji zdarzeń zachodzących
AVR owej wersji kompilatora GCC. Kolejnym sposobem na zainstalo-
podczas sesji komunikacyjnej. Warstwy od 1 do
wanie Nut/OS-a jest wykorzystanie
3 zapewniają fizyczny i logiczny dostęp do sie-
Kompilacja systemu graficznego konfiguratora dołączonego
ci, a warstwy od 4 do 7 obsługują logistycznie
komunikację pomiędzy aplikacjami.
Mimo że biblioteki Nut/OS są do zródeł systemu. W tym celu insta-
dostępne także w formie binarnej, lujemy wersję dla Windows i urucha-
chciałbym na początku przedstawić miamy program Nut/OS Configurator. ethernut13f.conf jest odpowiedni
sposoby kompilacji systemu ze zródeł. Na ekranie pojawi się okno, w którym dla płyty bazowej ZL9AVR. Parametr
Zacznijmy więc od ściągnięcia kodu należy wybrać plik konfiguracyjny  m wskazuje kompilator C (avr gcc
zródłowego ze strony www.ethernut.de dla posiadanej przez nas platformy lub ImageCraft).
(publikujemy je także na CD EP12/ sprzętowej  dla zastosowanego zesta- Następny krok to edycja pliku
2006B). Można pobrać zarówno wer- wu jest to plik ethernut13f.conf nutbld/UserConf.mk. Dopisujemy
sję dla Linuksa, jak i dla Windows. w katalogu katalog_instalacji\ do niego linię:
Kompilację bibliotek systemu Ethernut nut\conf. Następnie w menu Edi- HWDEF+= DNUT_CPU_FREQ=16000000
(co wymaga wcześniejszego zainstalo- t>Settings>Build>Platform wybieramy Jest to definicja częstotliwo-
wania kompilatora AVR-GCC) możemy interesującą nas architekturę  avr gcc ści oscylatora kwarcowego na płyt-
przeprowadzić na trzy sposoby, opisu- i z menu Build wybieramy pozycję Bu- ce (16 MHz), potrzebna do oblicza-
ję je poniżej. ild Nut/OS. Jeśli wszystko przebiegnie nia wartości rejestrów sterujących
Najpewniejszą metodą jest wyko- prawidłowo, w katalogu nutbld\lib UART em i timerami. Zapisujemy plik
rzystanie skryptów dołączonych do znajdą się biblioteki systemu. Nieste- Userconf.mk i w katalogu nutbld
opisanego zestawu ZL9AVR. Zawiera ty, graficzne narzędzie konfiguracyjne wykonujemy polecenia:
make
je archiwum nutbuild.zip, znajdujące jest jeszcze niedopracowane, dlatego
make install
się na płycie CD dołączonej do EPoL często odmawia współpracy i działa
lub na stronie kamami.pl. Archiwum niestabilnie. Z tego powodu nie pole- W ten sposób uruchomimy kom-
to rozpakowujemy do oddzielnego ka- cam jego używania. pilację systemu, która jeśli wszystko
talogu na dysku, np. c:\nutbuild. Ostatnią opisaną metodą, najtrud- wykonaliśmy zgodnie z instrukcją, po-
W tym samym katalogu umieszcza- niejszą, jest ręczna kompilacja syste- winna przebiec bezproblemowo. Jej
my archiwum ze zródłami systemu mu. W tym celu instalujemy window- wynikiem będą pliki w katalogu nut-
w wersji  for Linux Environment sową wersję zródeł, ponieważ zawiera bld\lib  biblioteki systemu Nut/OS.
 plik z rozszerzeniem .bz2, który za- ona binarne narzędzia (crurom i nut- Należy je jeszcze zainstalować, trzeba
wiera sam kod zródłowy Nut/OS a. configure). Uruchamiamy wiersz po- więc wykonać kolejne czynności:
Nasz katalog powinien wyglądać na- leceń cmd i wchodzimy do katalogu,  w katalogu, w którym jest zainsta-
stępująco: w którym zainstalowaliśmy zródła. Za lowany WinAVR (najczęściej jest
[dir] data
pomocą programu nutconfigure two- to c:\winavr) tworzymy podka-
[file] Makefile
rzymy drzewo katalogów, w którym talogi NutOS i NutOS\avr,
[file] ethernut 4.2.1.tar.bz2
Jeżeli wersja ściągniętych zródeł będziemy kompilować system dla wy-  kopiujemy katalog nutbld\lib do
Ethernuta jest inna niż 4.2.1 (naj- branej platformy sprzętowej: NutOS\avr,
nutconfigure  c ./nut/conf/
nowsza stabilna), należy edytować  kopiujemy katalog nut\include
ethernut13f.conf  m avr gcc create
plik Makefile i zmienić zmienną do NutOS\avr,
buildtree
NUT_VERSION na numer posiadanej W wyniku wykonania powyższego  kopiujemy plik nut\tools\wi-
wersji. Następnie uruchamiamy inter- polecenia powstanie katalog nutbld, n32\crurom.exe do jakiegokol-
preter poleceń (cmd), wchodzimy do w którym znajdą się pliki Makefile wiek katalogu znajdującego się
utworzonego przed chwilą katalogu oraz binaria dla wybranej konfigura- w ścieżce systemowej PATH, np.
i wykonujemy polecenia: cji. Parametr  c podaje plik konfigu- c:\winavr\bin. Jest to narzę-
c:\nutbuild> make
racyjny dla platformy sprzętowej. Plik dzie do tworzenia systemu plików
Elektronika Praktyczna 12/2006
90
K U R S
UROM, który pozwala na przecho-  io.h, zawierający m.in. deklarację fileno ze struktury FILE* stdo-
wywanie niewielkich plików w pa- funkcji _ioctl(). ut), cmd  kod polecenia, czyli
mięci Flash mikrokontrolera (np. Jak wspomniałem wcześniej, port UART_SETSPEED, buffer  dane
strony internetowej dla serwera szeregowy wymaga inicjalizacji, nie dla polecenia, w naszym programie
WWW). przez ustawienie określonych wartości wskaznik do zmiennej z podaną
Dokładnie te same operacje wy- rejestrów sterujących UART em, ale prędkością UARTa. Poprawne wy-
konuje opisany wcześniej skrypt za pomocą interfejsu udostępnianego konanie funkcji jest sygnalizowane
N u t b u i l d , wyręczając nas we przez system operacyjny. Za rejestra- zwróceniem wartości 0, niepopraw-
 wklepywaniu poleceń i modyfiko- cję i inicjalizację urządzeń w systemie ne, ujemnej.
waniu plików konfiguracyjnych. Nut/OS odpowiada funkcja: Po wywołaniu powyższych funkcji,
W taki sam sposób możemy za- int NutRegisterDevice(NUTDEVICE * możemy wreszcie wypisać tekst:  Hel-
dev, uptr_t base, u_char irq);
instalować gotowe biblioteki zawarte lo, world! . Następnie każemy progra-
w wersji dla Windows. Po skopio- Parametr dev jest wskaznikiem mowi czekać w nieskończonej pętli.
waniu plików, zródła systemu (o ile do struktury opisującej sterownik
nie będą nam potrzebne) możemy urządzenia. Dla sterowników wbu- Kompilacja programu
odinstalować. Umieszczenie biblio- dowanych w Nut/OS struktury te są Kompilacja aplikacji Nut/OS wy-
tek w podanym podkatalogu drzewa już zadeklarowane w plikach nagłów- maga pewnych dodatkowych opcji
WinAVR jest konieczne do prawi- kowych, np. DEV_DEBUG odpowiada dla kompilatora C oraz podania
dłowego działania plików Makefi- zerowemu UART owi w mikrokon- w odpowiedniej kolejności biblio-
le zastosowanych w przykładowych trolerze ATmega128. Przez parametry tek systemu oraz specjalnego kodu
aplikacjach. base i irq możemy przekazać adres startowego (nutinit.o) przy linko-
Mamy już zainstalowane biblio- bazowy rejestrów urządzenia i numer waniu. Chcąc ułatwić pracę czytel-
teki systemu  pora zacząć pisać przerwania  w tym przypadku nie są nikom, przygotowałem gotowe pli-
programy. one istotne. Jeżeli rejestracja urządze- ki sterujące kompilacją  Makefile
nia przebiegnie prawidłowo, funkcja i Sources. Plik Makefile zawie-
Pierwszy program NutRegisterDevice zwróci wartość ra reguły sterujące wywoływaniem
Stworzymy teraz najprostszą apli- 0, jeśli nie, wartość  1. AVR GCC oraz opcje konieczne do
kację systemu Nut/OS, będącą odpo- Następnym krokiem jest przekiero- prawidłowej kompilacji programu
wiednikiem programu znajdującego wanie standardowego wyjścia (stdo- i zazwyczaj nie trzeba go modyfi-
się na początku prawie wszystkich ut) do portu szeregowego. Odpowi- kować. Zmian wymaga natomiast
książek o programowaniu w języku C: ada za to funkcja: plik Sources, który dla programu
FILE *freopen(CONST char *name,
#include podanego przed chwilą wygląda na-
CONST char *mode, FILE * stream);
main()
stępująco:
{
printf("Hello, world!\n"); OUTPUT = hello
Otwiera ona plik o nazwie name
return 0; SOURCES = hello.c
w trybie mode i (w przeciwieństwie
} OPTIONS =  Os
LIBS =  lnutarch  lnutdev  lnutos
Na komputerze PC powyższy kod do popularnej funkcji fopen) usta-
 lnutarch  lnutcrt
wyświetli oczywiście tekst:  Hello, lonym deskryptorze stream. W na-
world! . Ponieważ nasz system nie szym przypadku jest to plik o nazwie Definicja OUTPUT to nazwa pliku
ma monitora, jako  wyświetlacz za- DEV_DEBUG_NAME (uart0) w trybie wynikowego (bez rozszerzenia), SO-
stosujemy terminal na komputerze do zapisu (w) i deskryptorze stdo- URCES  wykaz plików zródłowych
połączonym z płytką przez port szere- ut (standardowe wyjście). Podobnie rozdzielony spacjami, OPTIONS 
gowy. Dlatego program musi być uzu- jak w systemach uniksowych, w Nut/ dodatkowe opcje kompilatora, w tym
pełniony o inicjalizację UART a i prze- OSie urządzenia są reprezentowane przypadku  optymalizacja kodu
kierowanie standardowego wyjścia na przez pliki, dlatego zapis do pliku pod względem wielkości (  O s ).
port RS232. Poprawny kod jest nieco o nazwie uart0 spowoduje wysłanie LIBS jest listą bibliotek dołączo-
większy i wygląda następująco: danych do zerowego portu szeregowe- nych do projektu. Projekt kompilu-
#include go. Jeżeli funkcja freopen wykona jemy wydając polecenie make. W je-
#include
się prawidłowo, zwróci wskaznik do go wyniku powstaną pliki hello.
#include
#define UART_SPEED 38400
podanego w parametrach deskryptora hex i hello.bin, którymi możemy
main()
pliku, w przeciwnym przypadku  pu- zaprogramować mikrokontroler.
{
u_long baudrate = UART_SPEED;
sty wskaznik (NULL). Polecenie make clean usuwa
NutRegisterDevice (&DEV_DEBUG,
Kolejna linia kodu wywołuje funk- wszystkie pliki utworzone podczas
0, 0);
freopen (DEV_DEBUG_NAME, "w",
cję: kompilacji, zaś make isp pro-
stdout);
int _ioctl(int fd, int cmd, void
gramuje procesor z wykorzystaniem
_ioctl(_fileno(stdout), UART_
*buffer);
SETSPEED, &baudrate);
programatora STK 200 (np. ZL2PRG)
printf("Hello, world!\n");
for(;;); Służy ona do wykonywania nie- i programu AVRdude standardowo
}
standardowych operacji na urządze- obecnego w środowisku WinAVR.
Pierwsza zmiana polega na dołą- niach wejścia wyjścia. W naszym Za miesiąc opiszę dokładniej
czeniu dodatkowych plików nagłów- przypadku _ioctl odpowiada za pliki Makefile, funkcje poszczegól-
kowych: ustawienie prędkości przesyłania nych bibliotek systemu Nut/OS oraz
 dev/board.h, który zawiera de- danych przez port szeregowy. Para- przedstawię prostą aplikację serwera
klaracje nazw urządzeń oraz spe- metr fd to numer deskryptora pli- WWW. Zapraszam do lektury!
cyficznych dla nich struktur i ty- ku urządzenia (w naszym przypadku Tomasz Włostowski
pów danych, uzyskaliśmy go za pomocą makra twlostow@onet.eu
Elektronika Praktyczna 12/2006
91


Wyszukiwarka

Podobne podstrony:
Ethernet i AVR–y, cz 3
Ethernet i AVR–y, cz 5
Ethernet i AVR–y, cz 2
Bootloader AVR cz 2
Kurs AVR GCC cz 5
Zestaw uruchomieniowy do procesorow rodziny AVR i 51, cz 2
Kurs AVR GCC, cz 3
Kurs AVR GCC cz 2
Kurs AVR GCC cz 3
Kurs AVR GCC cz 1
Kurs AVR GCC, cz 1
AVR owe fusy cz 2
Kurs AVR GCC, cz 5
Kurs AVR GCC, cz 4
Kurs AVR GCC, cz 2
Kurs AVR GCC cz 4

więcej podobnych podstron