Jste zde

Síťové aplikace s mikrokontroléry Atmel

334_03.png

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:

  • Realtek RTL8019 – paralelní, 10Base-T
  • Crystal LAN CS8900A – paralelní (ISA), 10Base-T,
  • SMCS LAN91C111 – paralelní, 10Base-T/100Base-TX
  • Microchip ENC28J60 – SPI, 10Base-T,
  • Connect One Nano SocketLAN – UART/SPI/USB, 10Base-T/100Base-TX

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

Zají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.

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č).

Ř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.

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ě.

Mož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

Software 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 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.

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.

 

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.

Odkazy

Hodnocení článku: 

Komentáře

Napadají mě ještě 2 další možnosti, o které by šel přehled doplnit:

1) Obvody firmy Wiznet – např. WZ5100 je HW implementace TCP/IP stacku, s obvodem se komunikuje po SPI. Tento obvod používá, mezi amatéry velmi oblíbený, Ethernet Shield pro Arduino (ATmega 328).

2) Moduly firmy Lantronix – např. XPort, což je kompletní modul, podobně jako Nano SocketLan. Oproti Nano SocketLan toho tolik neumí, ale je možné získat SDK a moduly o požadovanou funkčnost doplnit. XPort používá např. firma Papouch.

Přidal bych pár informací:
1) Firma Lantornix vyrábí několik Ethernetových modulů. Nejzajímavější jsou asi XPORT-03 (lze programovat pomocí CKP; je to 16bit; 256kB RAM - dostupné je ale mnohem méně, velká část je vyhrazena pro TCP/STACK; levná a velmi flexibilní součástka).
XPORT-AR - na stejném CPU ale 100MHz, více paměti, programovatelné pomocí Evulation-OS, nekomatibilní s CPK
XPORT-PRO - 32b ARM, velké množství RAM a FLASH, docela drahé řešení, možnost použít Linux nebo Evulation-OS

2) Firma DIGI. Za zmínku stojí moduly Connect ME a Connect ME 9210, dost paměti, ARM CPU, dražší než řešení od Lantronix

3) Freescale. Mají přímo několik čipů ColdFire přímo s PHY rozhraním. Nemusí se nic připojovat přes MII

4) TI - LuminaryMico - řada Stellaris - CoetexM3, též s PHY rozhraním, příznivá cena. Asi nejlepší low-cost Ethernetové řešení které dokáže i složitější věci.

Jeste bych pridal obvody firmy TIBBO - www.tibbo.com
Jsou plne programovatelne SW zdarma, vcetne standardniho firmware pro prevod Serial / LAN a umi toho pomerne dost.
Cemna nejlevnejsiho - EM500 zacina na cca 530,- Kc

"Mož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."

Hmm, maximální výkon? 8-16 Mips? Woow to je skoro stejně rychlé jako elektronkový počítač;) Ale vážně, nechápu proč řešíte zastaralé a pomalé procesory, když za stejné peníze můžete mít mnohem výkonnější a bezproblémové 32bitové procesory (Cortex M3- od STM, NXP nebo zmiňované Stellarisy). Dokonce některé Stellarisy nebo Freescalí Coldfiry (češtináři prominou, nevím jak to správně skloňovat;)) mají integrovanou MAC i PHY vrstvu.

Pokud někdo trpí 8bitou mánií tak existují i výkonné 8bity (25-100 Mips- viz. Silabs, dokonce mají 8051 jádro!) a stejný výrobce má i PHY controller (ale také jen 10Mbit jako Microchip). Všechny čipy mají nějakou xram (0,5kb a víc), jtag (originál debugger stojí 39USD, ne majlant jako u Atmelu) a jsou od 11 pinů do 144 pinů. Flash od 8 do tuším 256kb, a vždy mají něco navíc (AD převodník, USB, CAN, atd.). Celý ethernetový kit se 100Mips procesorem, deskou ethernetu, debuggerem, SW, atd. skojí okolo 100USD.

Ale jak říkám, v době ARM Cortex M3 nebo Coldfirů je práce s těmito procesory to spíš úchylka než opodstatnitelný čin. Já se Silaby ještě občas pracuji (přešel jsem na ně od Atmelu, poté co jsem potřeboval trošku slušnější procesor), ale řekněme si na rovinu- nejlevnější Cortex M3 cca 2 USD, Coldfire cca 3 USD (stovkové množství, takže jakákoliv malá firma se zakázkovou výrobou).

Pro nadšence výkonných procesorů doporučuji friendly ARM na ebay, za 85USD kit s ethernetem, USB host i device, 3x UART, SD karta, procesor ARM11 Samsung 2440 s frekvencí 400-533 Mhz, 3,5" TFT LCD s dotykáčem, 128 Mb Ram, 256 Mb flash, g, hromada SW, win CE5.0, CE6.0, Linux, atd.. pokud chcete faakt "sociální" procesor, třeba na PWM do vrtačky nebo na řízení lampičky, tak například Freescale HCS08 (QG0x nebo QD0x s SPI, HW UARTem, 8-16 pinů, špičkový C compiler Codewarrior v 32kb kódu free verzi) v cenách od 0,5 USD je správná volba.

Veřím, že řada vývojářů se bojí přechodu na nějakou novější platformu (i my jsme ještě loni na VŠB-TUO bohužel pracovali s AVR!:( ), ale vývoj prostě nezastavíš. A ARM (hlavně jejich nová architektura Cortex- nejen M3) se asi stane stejnou legendou jako 8051 na 8bitech...

A čím ty ARMy a Motoroly nahraju? Čím přeložím program? Co udělám se zbylými 99 kusy? Kde u nás koupím ARM pod 50 Kč včetně započítaného opotřebování podrážek? Proč bych měl chodit na komára s bazukoidem?

ARMa nahraju JTAGem (nejlevnejsi wiggler na lpt je jeden integrac na oddeleni urovni). Prelozim GCC (IDE je zadarmo a je jich moc). No tak si koupim jeden, bude za 200kc.
Az uvidim AVR mega (i obyc ATmega16) za 50kc jak budu stasten, ta doba je nejak pryc. A to nehovorim o cene ENC... A navic prvni jakz takz srovnatelna mega je 128 (a to ma pidiramku).

"Mož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."

Hmm, maximální výkon? 8-16 Mips? Woow to je skoro stejně rychlé jako elektronkový počítač;) Ale vážně, nechápu proč řešíte zastaralé a pomalé procesory, když za stejné peníze můžete mít mnohem výkonnější a bezproblémové 32bitové procesory (Cortex M3- od STM, NXP nebo zmiňované Stellarisy). Dokonce některé Stellarisy nebo Freescalí Coldfiry (češtináři prominou, nevím jak to správně skloňovat;)) mají integrovanou MAC i PHY vrstvu.

Pokud někdo trpí 8bitou mánií tak existují i výkonné 8bity (25-100 Mips- viz. Silabs, dokonce mají 8051 jádro!) a stejný výrobce má i PHY controller (ale také jen 10Mbit jako Microchip). Všechny čipy mají nějakou xram (0,5kb a víc), jtag (originál debugger stojí 39USD, ne majlant jako u Atmelu) a jsou od 11 pinů do 144 pinů. Flash od 8 do tuším 256kb, a vždy mají něco navíc (AD převodník, USB, CAN, atd.). Celý ethernetový kit se 100Mips procesorem, deskou ethernetu, debuggerem, SW, atd. skojí okolo 100USD.

Ale jak říkám, v době ARM Cortex M3 nebo Coldfirů je práce s těmito procesory to spíš úchylka než opodstatnitelný čin. Já se Silaby ještě občas pracuji (přešel jsem na ně od Atmelu, poté co jsem potřeboval trošku slušnější procesor), ale řekněme si na rovinu- nejlevnější Cortex M3 cca 2 USD, Coldfire cca 3 USD (stovkové množství, takže jakákoliv malá firma se zakázkovou výrobou).

Pro nadšence výkonných procesorů doporučuji friendly ARM na ebay, za 85USD kit s ethernetem, USB host i device, 3x UART, SD karta, procesor ARM11 Samsung 2440 s frekvencí 400-533 Mhz, 3,5" TFT LCD s dotykáčem, 128 Mb Ram, 256 Mb flash, g, hromada SW, win CE5.0, CE6.0, Linux, atd.. pokud chcete faakt "sociální" procesor, třeba na PWM do vrtačky nebo na řízení lampičky, tak například Freescale HCS08 (QG0x nebo QD0x s SPI, HW UARTem, 8-16 pinů, špičkový C compiler Codewarrior v 32kb kódu free verzi) v cenách od 0,5 USD je správná volba.

Veřím, že řada vývojářů se bojí přechodu na nějakou novější platformu (i my jsme ještě loni na VŠB-TUO bohužel pracovali s AVR!:( ), ale vývoj prostě nezastavíš. A ARM (hlavně jejich nová architektura Cortex- nejen M3) se asi stane stejnou legendou jako 8051 na 8bitech...

O plagiatu nelze hovorit, protoze oba autori jsou pod clankem uvedeni a vzhledem k tomu, ze se jedna o skolni projekt, neni duvod ho nezverejnit vicekrat.

Konektor RJ45 s integrovanou magnetikou, ktery spolecnost Bel vyrabi pod ochrannou znamkou MagJack, sice neni stezejnim tematem tohoto clanku, nicmene bych rada reagovala na jeho zminenou cenu. Ta se u originalniho MagJacku pohybuje jiz od 50 Kc, samozrejme v zavislosti na typu a zakoupenem mnozstvi...