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
piątek, 17 grudnia 2010
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
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
Subskrybuj:
Posty (Atom)
-
Tekst wyjątkowo jest w języku angielskim Before you start reading, p lease read article on lwn , if you have not already done so . The ...
-
Będzie to kontynuacja ostatniego wpisu na temat wymiany kontrolera w Monoprice Maker Ultimate / Wanhao D6. Niestety temat kalibracji dru...
-
Niedawno zostało odkryte kilka problemów w Linuksowej obsłudze protokołu TCP. Najpoważniejszy problem o sygnaturze CVE-2019-11477 umożl...