piątek, 17 grudnia 2010

Stos TCP/IP dla Arduino v1.1

Postanowiłem dodać jeszcze kilka nowych rzeczy do poprzedniego kodu. Miało to na celu poprawienie/przyśpieszenie komunikacji oraz uzyskanie interfejsu bardziej zbliżonego do tego co można znaleźć w Arduinowej bibliotece Ethernet dla chipu W5100.

Poniżej krótka lista zmian:

- Funkcja write może teraz składać duże pakiety kawałek po kawałku. Nie musimy więc wysyłać niepotrzebnie małych pakietów (np podczas generowania dynamicznej strony WWW złożonej głownie z danych zapisanych w pamięci flash). Przyśpiesza to znacząco komunikacje protokołu TCP.

- Utworzyłem bufor dla danych przenoszonych przez protokoły TCP/UDP bezpośrednio na enc28j60. Dane przenoszone są w odpowiednie miejsce na chipie poprzez kanał DMA i nie przerzucane poprzez interfejs SPI. Bufor może pomieścić dane z pakietu o maksymalnej długości. Dzięki takiemu buforowi nie musimy odczytywać wszystkich danych natychmiast po odebraniu, tylko możemy odczytać je później w dowolnych kawałkach. Ma to ogromne znaczenie dla mikro-kontrolerów z minimalną ilością pamięci RAM.

- Weryfikowana jest suma kontrolna dla przychodzących pakietów TCP i UDP. Obliczenia są wykonywane przez enc28j60 więc możemy zweryfikować nawet duże pakiety o maksymalnej długości.

Załączony przykład jest dużo bardziej rozbudowany i skomplikowany. Umożliwia on zmianę podstawowych parametrów sieciowych oraz hasła. Oczywiście edycja ustawień możliwa jest dopiero po poprawnym zalogowaniu ;)





Kod źródłowy można pobrać tutaj

czwartek, 9 grudnia 2010

Stos TCP/IP dla Arduino

Jakiś czas temu wpadłem na pomysł by dodać do Arduino możliwość komunikowania się poprzez Internet. Nie jest to nic odkrywczego, takich projektów było już dziesiątki. Wygodnie jest wejść przez przeglądarkę by zobaczyć jak sobie radzi nasz mały przyjaciel.

Implementacji stosu TCP/IP dla systemów osadzonych również jest kilka. Mają jednak one wspólną wadę: są mimo wszystko zbyt duże i potrzebują zbyt wiele zasobów jak dla Arduino z chipem Atmega168, posiadającym 16kB flash i 1kB ramu ;]

Poniższy projekt wykorzystuje chip enc28j60 oraz moją implementacje TCP/IP dzięki czemu po skompilowaniu potrzebuje poniżej 7kB flashu oraz 224 bajtów pamięci RAM do działania :)

Dla wszystkich zainteresowanych kod źródłowy na licencji GNU jest dostępny tutaj