Síťové aplikace s mikrokontroléry Atmel

Bc. Petr Janů, Bc. Petr Kašpar
xjanup01stud.feec.vutbr.cz, xkaspa23stud.feec.vutbr.cz
projekt zveřejněn také na www.hw.cz

Obsah

  1. Úvod
  2. Ethernetové řadiče
  3. Softwarová architektura
  4. Závěr
  5. Literatura

Úvod

Cílem projektu je podat přehled o možnostech realizace nízko a středně výkonných síťových aplikací s využitím mikrokontrolérů Atmel AVR ATmega.

Ethernetové řadiče

Při realizaci síťových aplikací je zařízení připojeno do sítě pomocí Ethernetu a komunikuje přes něj s jinou částí systému. Z toho vyplývá, že se zařízení musí skládat z řídícího obvodu (v našem případě MCU AVR ATmega) a ethernetového řadiče.

Výkonnější mikrokontroléry jako například některé MCU z řady AVR32 mají integrovaný Ethernetový řadič. Zpravidla se jedná pouze o MAC vrstvu, tedy vrstvu pro řízení přístupu k médiu. Pro komunikaci je potřeba navíc PHY rozhraní. PHY rozhraní v tomto případě tvoří poslední, fyzickou, vrstvu. MAC a PHY spolu komunikují standardizovaným rozhraní MII nebo RMII a nezáleží tedy na typu použitého média (TP/koaxiál/optika).

V případě použití mikrokontrolérů ATmega je potřeba zvolit vhodný ethernetový řadič, pomocí kterého bude probíhat komunikace. Řadič může být k MCU připojen pomocí rozhraní UART, SPI nebo paralelně. Na trhu lze v současné době nalézt následující řadiče:

Zmíněné paralelní řadiče jsou sice poměrně hodně používané, ale vzhledem k jejich ceně a složitosti zapojení (velké množství vývodů) nejsou příliš vhodné pro méně náročné nebo amatérské aplikace, nicméně jsou součástí některých projektů jako Ethernut 1 (ATmega128+RTL8019), Ethernut 2 (ATmega128+ LAN91C111) nebo „Ethernut kompatibilní“ moduly Charon 2 (ATmega128+ RTL8019).

Nano SocketLAN

Nano SocketLANZajímavou možností je využití řadiče Nano SocketLAN, který je postaven na  mikrokontroléru s výkonným jádrem ARM7. Řadič je v podstatě samostatná jednotka, která přímo podporuje protokoly ARP, ICMP, IP, UDP, TCP, DHCP, DNS, NTP, SMTP, POP3, MIME, HTTP, FTP, TELNET a běžné šifrovací protokoly. Řadič obsahuje 256kB uživatelskou paměť, kam je možné nahrát serverovou aplikaci. Pomocí integrovaného HTTP serveru pak může být realizováno například vzdálené řízení nebo dohled nad nějakým zařízením. Do řadiče nelze nahrát libovolnou aplikaci, takže je tedy nutné řadič připojit na mikrokontrolér, který bude jádrem systému. Vzhledem k tomu, že veškeré náročné úkony spojené s komunikací v síti provádí sám, není většinou potřeba příliš výkonné řídící MCU.

Schéma aplikace s Nano SocketLAN

Komunikace s řadičem může probíhat skrz rozhraní UART, SPI nebo USB (s emulací sériové linky). Výměna informací probíhá pomocí AT příkazů, konkrétně pomocí výrobcem rozšířené sady příkazů AT+i. Samotné řízení spojení je pak velice jednoduché, protože s řadičem komunikujeme stylem „SESTAV TCP SPOJENI S 192.168.1.1“ s reakcí „CISLO SPOJENI JE 1“. Všechny zbylé úkoly, které je nutné při vytváření spojení obstará řadič sám. K řadiči je dostupná také konfigurační utilita pro os Windows. Jednoduchost použití řadiče na jedné straně je vyvážena jeho poměrně vysokou cenou (cca 1000 Kč).

Modul PWLANŘadič Nano SocketLAN je také součástí kompletního miniaturního modulu PWLAN nabízeného společností Pandatron. Tento modul je postaven na zmíněném řadiči a mikrokontroléru ATmega48. S cenou okolo 1500 Kč se jedná o zajímavou možnost realizace síťové aplikace. Výrobce poskytuje na svém webu i podklady pro výrobu, nastavení a uvedení modulu do provozu.

Microchip ENC28J60

Dalším oblíbeným řadičem je ENC28J60 firmy Microchip. Jedná se o jednočipový modul s 8kB vstupním a 8kB výstupní bufferem, komunikující pomocí rozhraní SPI (max 20MHz) a cenou okolo 100 Kč. Řadič na rozdíl od NanoSocketLAN poskytuje pouze Tx/Rx, MAC a PHY vrstvu a veškeré úkony spojené s vyššími vrstvami musí být realizovány na úrovni řídicí aplikace v mikrokontroléru. Pro náročnější aplikace je pak potřeba vyššího výkonu MCU. Řadič ke svému běhu vyžaduje 25 MHz krystalový oscilátor a obvody pro galvanické oddělení řadiče od ethernetové linky. Galvanické oddělení se provádí oddělovacími transformátory pro Ethernet, nebo může být využitý tzv. MagJack, což je konektor RJ45 s integrovaným oddělovacím transformátorem a stavovými ledkami.

Schéma aplikace s ENC28J60 MagJack

Levné MagJacky (resp. jejich čínské kopie)  Taimag RJLBC u nás nabízí například firma  Kramara. Cena okolo 70 Kč pak může být rozhodujícím faktorem proč nepoužít kvalitnější MagJacky Bell Stewart (od cca 120 Kč).

Jedna z možností realizace síťové aplikace s ENC28J60 a ATmega88 je popsána v článku An AVR microcontroller based Ethernet device  na serveru tuxgraphics.org. V jiném článku HTTP/TCP with an atmega88 microcontroller (AVR web server) je pak popsán příklad realizace HTTP serveru, podobně jako v článku Malý webový server. Dalšími projekty zabývající se touto „architekturou“ je například  Etherape (ATmega32), který je však dokumentován pouze v němčině.

Asix SpinetMožný problém při použití řadiče ENC28J60 je to, že řadič pracuje s napájením, vstupy a výstupy na 3,3V (5V tolerantní). Mikrokontroléry ATmega pak pracují na maximální výkon s  5V. Jedním řešením problému je provozovat mikrokontrolér na 3,3V. V takovém případě pak nelze dosáhnout maximálního pracovního kmitočtu MCU. V některých případech to vadit nemusí, ale v případě potřeby vyššího výkonu je potřeba hledat jiné řešení. Tím je převodník úrovně 5-3,3V (například 74AHCT541).  Převodník úrovně je použit také v kompletním modulu  Asix Spinet, který obsahuje dále řadič ENC28J60, MagJack a podpůrné obvody.

Pro náročnější aplikace lze využít výkonnější řadiče Microchip ENC424J600 nebo ENC624J600.

Softwarová architektura

Schéma TCP/IP stackSoftware aplikace je tvořen hlavní, řídící aplikací a knihovnou umožňující komunikaci v síti. Knihovna tak poskytuje prostředky řídící aplikaci. V případě využití modulu Nano SocketLAN je situace velice jednoduchá, protože knihovna nemusí být použita. Při komunikaci s tímto modulem se pouze posílají a přijímají data z UARTu. V ostatních případech je vhodné použít nějaký existující TCP/IP stack. TCP/IP stack je v podstatě knihovna, pracující na několika vrstvách modelu TCP/IP. Aby mohl stack využívat nějakého ethernetového driveru, musí být opatřen příslušným ovladačem. Aby stack mohl správně fungovat, je nutné jej provozovat pod nějakým RTOS.

TCP/IP stack

Z volně dostupných stacků pro mikrokontroléry stojí za zmínku oblíbené stacky Adama Dunkelse lwIP a uIP. Oba stacky jsou portovány pro AVR a obsahují i drivery pro ethernetový řadič ENC28J60. lwIP je výkonnější a také paměťově náročnější stack. Autor udává, že zabírá cca 40 kB programové paměti a vyžaduje cca 10 kB operační paměti. Lze jej tedy využít ve výkonnějších mikrokontrolérech ATmega. Stack podporuje protokoly IP, ICMP, UDP, TCP, DHCP, PPP, ARP. Jeho jednodušší bratr je stack uIP. Jedná se o co nejvíce odlehčený stack pro méně náročné aplikace - jeho výkon není příliš velký, ale pro některé aplikace dostačující. K provozu vyžaduje cca 5 kB programové a cca 2 kB operační paměti. Lze jej tedy provozovat na téměř všech mikrokontrolérech řady ATmega. TODO Podobně jako oba zmíněné stacky lze využít například knihovnu Procyon AVRlib, obsahující mimo jiné TCP/IP stack.

OS/firmware

Trochu jinou cestou může být použití nějakého předpřipraného OS nebo firmware. Tyto systémy se vyznačují tím, že jsou slušně vybavené potřebnými prostředky pro síťové aplikace. Systémy také zpravidla obsahují spoustu příkladů, ukázek, popřípadě mají připravený webový server pro vzdálený přístup přes internetový prohlížeč.

Jedná se o například o projekt Ethernut se systémem Nut/OS. Nut/OS vyžaduje hardware kompatibilní s koncepcí Ethernut 1, Ethernut 2 nebo Ethernut 3. To znamená, že nelze použít s ethernetovým driverem ENC28J60. Jedná se však o kompletní systém, jehož distribuce je vybavená šikovným konfigurátorem. Pomocí něj lze nakonfigurovat systém pro konkrétní podporovanou konfiguraci apod.

a

Nut/OS obsahuje vlastní RTOS, TCP/IP stack s podporou protokolů TCP/IP, UDP/IP, DHCP, DNS, HTTP, ARP, ICMP a ovladače kompatibilních ethernetových driverů. Jedná se tak o solidní základ aplikace. Základní popis projektu Ethernut je uveden v článku Co to je Ethernut.

Alternativou k Ethernutu je například firmware Ethersex. Jedná se o méně náročný systém pro MCU AVR. Podobně jako Ethernut je tato distribuce vybavena konfigurátorem (pouze pro OS Linux), ve kterém lze nastavit jak HW parametry, tak SW parametry systému.

a 

Ethersex je vybaven ovladačem pro ENC28J60 - lze jej tak provozovat na méně výkonném hardware než Ethernut. Ethersex podporuje protokoly Pv4 i IPv6, TCP, UDP, ICMP, HTTP, BOOTP, TFTP, SYSLOG, SNMP, SMTP, NTP, DNS. Popis práce s Ethersexem je uveden v článku Ethersex.

Závěr

V práci byl uveden stručný přehled o možnostech realizace méně náročných síťových aplikacích s využitím mikrokontrolérů Atmel AVR ATmega. V odkazech v textu a v literatuře lze získat spoustu podkladů pro výrobu zařízení a také ukázky zdrojových kódů, nebo kompletní aplikace.

Literatura

[1] 10/100 BaseT PHY a MAC od Microchipu [online]. Vysoké Mýto, [cit. 24. 5. 2010]. Dostupné z URL: <http://pandatron.cz/?794&10/100_baset_phy_a_mac_od_microchipu>.

[2] An AVR microcontroller based Ethernet device [online]. USA, [cit. 24. 5. 2010]. Dostupné z URL: <http://tuxgraphics.org/electronics/200606/article06061.shtml>.

[3] HTTP/TCP with an atmega88 microcontroller (AVR web server) [online]. USA, [cit. 24. 5. 2010]. Dostupné z URL: <http://tuxgraphics.org/electronics/200611/embedded-webserver.shtml>.

[4] ENC28J60 Data Sheet - Stand-Alone Ethernet Controller with SPI Interface, Chandler: Microchip, 2008. 95s., [cit. 24. 5. 2010]. Dostupné z URL: <http://ww1.microchip.com/downloads/en/DeviceDoc/39662c.pdf>.

[5] SPINET - Modul rozhraní Ethernet SPI - Uživatelská příručka, Praha: Asix, 2007. 8s., [cit. 24. 5. 2010]. Dostupné z URL: <http://www.asix.cz/download/spinet/spinet_cz.pdf>.

[6] PWLAN - hardware [online]. Vysoké Mýto, [cit. 24. 5. 2010]. Dostupné z URL: <http://pandatron.cz/?1125&pwlan_-_hardware>.

[7] Ethernut Project [online]. Německo, [cit. 24. 5. 2010]. Dostupné z URL: <http://www.ethernut.de/>.

[8] Co to je Ethernut [online]. Praha: HW server s.r.o.,, [cit. 24. 5. 2010]. Dostupné z URL: <http://hw.cz/Teorie-a-praxe/Software/ART1202-Co-to-je-Ethernut.html>.

[9] Ethersex [online]. Kutná Hora, [cit. 24. 5. 2010]. Dostupné z URL: <http://mcu.cz/news.php?extend.1719.15>.

[10] Ethernut 1.3 Hardware [online]. Německo, [cit. 24. 5. 2010]. Dostupné z URL: <http://www.ethernut.de/en/hardware/enut1/index.html>.

[11] Ethernut 2 [online]. Německo, [cit. 24. 5. 2010]. Dostupné z URL: <http://www.ethernut.de/en/hardware/enut2/index.html>.

[12] Charon 2 - Ethernut - modul vestavného Ethernetu [online]. Praha: HW group s.r.o., [cit. 24. 5. 2010]. Dostupné z URL: <http://www.hwgroup.cz/products/charon2/index_cz.html>.

[13] Nano SocketLAN [online]. San Jose: Connect One Semiconductors, Inc., [cit. 24. 5. 2010]. Dostupné z URL: <http://www.connectone.com/products.asp?did=73&pid=96>.

[14] Malý webový server [online]. Vysoké Mýto, [cit. 24. 5. 2010]. Dostupné z URL: <http://www.pandatron.cz/?171&maly_webovy_server>.

[15] uIP [online]. Švédsko, [cit. 24. 5. 2010]. Dostupné z URL: <http://www.sics.se/~adam/uip/index.php/Main_Page>.

[16] Procyon AVRlib - C-Language Function Library for Atmel AVR Processors [online]. Gainesville: Pascal Stang, [cit. 24. 5. 2010]. Dostupné z URL: <http://www.mil.ufl.edu/~chrisarnold/components/microcontrollerBoard/AVR/avrlib/>.