Jste zde

ETHERNET V PŘÍKLADECH I

ETHERN~1.png

Dnešním dílem začíná nový seriál o využití Ethernetových řadičů a modulů. Obsahem seriálu bude nejen výčet vlastností jednotlivých produktů, jak je zvykem v jiných zdrojích, ale jak bylo pravidlem u seriálu o modulech IQRF, hlavní část budou tvořit praktické aplikace s různými úrovněmi složitosti. Prvními součástkami, kterým se budeme věnovat, budou obvody ENC28J60 od fy Microchip a dále řadiče a moduly Wiznet od stejnojmenného výrobce. Nepochybuji, že se v průběhu seriálu vyskytnou z řad čtenářů požadavky na otestování dalších součástek a modulů. Bude-li to v mých silách, případně v silách kolegů, samozřejmě rádi vyhovíme.

Úvod

Požadavky na využití Ethernetu se objevují v mnoha typech aplikací. Mnohdy je tato vlastnost jedním z kritérií, dle kterých vývojáři vybírají například MCU, který použijí. Tento seriál bude zaměřen na samostatné Ethernetové řadiče, které je možné využít s jakýmkoliv typem mikroprocesoru vybaveným rozhraním SPI, případně jinou standardní sběrnicí. Uvedeny budou nejenom základní parametry obvodu (modulu), ale také doporučené vývojové prostředky, a výsledkem práce s každým publikovaným typem součástky bude vždy „samostatně chodící“ aplikace s kompletními daty pro výrobu, ať už bude projekt jakékoliv úrovně složitosti.

Seriál nebude primárně určen vývojářům, kteří mají s Ethernetem letité zkušenosti. Pravděpodobně jim nepřinese mnoho nových informací, snad kromě obsáhlejšího (a doufám, že i objektivního) srovnání produktů konkurenčních výrobců. Cílovou skupinou budou spíše vývojáři považující nasazení Ethernetu za příliš složité. Budu se snažit o vyvrácení tohoto mýtu.

ENC28J60 – Microchip

Prvním recenzovaným obvodem bude produkt společnosti Microchip ENC28J60. Jedná se o samostatný Ethernetový převodník se standardním rozhraním SPI. Je navržen pro využití téměř jakýmkoliv mikrokontrolérem vybaveným touto sběrnicí. ENC28J60 splňuje veškeré požadavky normy IEEE 802.3. Norma zahrnuje velké množství schémat pro filtrování příchozích paketů. Jejich rychlé zpracování je umožněno prostřednictvím DMA a také HW podporou výpočtu zabezpečení IP hlaviček. Využití rozhraní SPI a dvou linek externího přerušení umožňuje počítat až s rychlostí 10Mbit/s.

ENC28J60 se skládá z těchto základních částí:

  • SPI rozhraní, které zajišťuje komunikační kanál mezi mikrokontrolérem a ENC.
  • Řídíci registry kontrolující činnost řadiče.
  • Dvouportový RAM buffer pro odeslaná a přijatá data.
  • Arbitr pro řízení přístupu do RAM bufferu na požadavek DMA, přijímacích a vysílacích bloků.
  • Rozhraní sběrnice interpretující data a příkazy z SPI.
  • MAC modul implementující pravidla IEEE 802.3.
  • Modul fyzické vrstvy (PHY), který kóduje a dekóduje analogová data na krouceném páru.

Zařízení dále obsahuje podpůrné bloky jako oscilátor, napěťový regulátor, přizpůsobení logických úrovní poskytující 5V tolerantní vstupně/výstupní logiku a další.

eth01.png
Obrázek 1: Blokové schéma ENC28J60

Vývojové prostředky

Pro první vyžití integrovaného řadiče ENC28J60 je zřejmě nejvhodnější využít předpřipraveného TCP-IP stacku fy Microchip. Ten lze zdarma stáhnout a využívat. Instalační balíček obsahuje množství příkladů. Velkou a významnou výhodou oproti konkurenčním stackům je výborný tutoriál, který vede vývojáře takzvaně „za ručičku“ jednotlivými kroky a vlastně jej tak jednoduše táhne od jednodušších ke složitějším aplikacím. Jako vývojové prostředí budeme samozřejmě využívat MPLAB. Pro výukové účely nám stačí výuková verze C kompilátoru, který je rovněž ke stažení na webu firmy Microchip.

Hardware ale už zadarmo nepořídíme. Přestože je možné si poskládat nejnutnější vybavení ze vzorků a programátor si jen tak „ubastlit“, z vlastní zkušenosti tuto metodu neporučuji, protože hledat chybu v Ethernetové aplikaci, kdy člověk nemá jistotu, jestli mu vůbec chodí hardware opravdu není žádná zábava. Pro pokusy doporučuji vývojovou desku Explorer 16 - 100 pinový, dále programátor a ladící prostředek MPLAB ICD 2, a doplňkovou Ethernetovou kartu PICtail Plus Ethernet. Všechny tyto produkty lze zakoupit až do nového roku zde na HW za zvýhodněné ceny.

eth02.png
Obrázek 2: Explorer 16 - 100 pinový - základ pro naše aplikace

eth03.png
Obrázek 3: MPLAB ICD 2

eth04.png
Obrázek 4: PICtail Plus Ethernet

TCP-IP Stack od Microchipu

TCP-IP stack od Microchipu je balík softwaru a zdrojových kódů určený právě pro usnadnění vývoje Ethernetových aplikací s mikrokontroléry PIC a Ethernetovým modulem ENC28J60. Přiložené příklady umožňují jednoduše vytvořit například HTTP server, e-mailového klienta a mnoho dalších zajímavých aplikací. MCS TCP-IP stack je realizován jako modulární systém, kde každý modul reprezentuje funkce příslušné komunikační vrstvy. Potencionální uživatel nemusí přesně vědět, jak jednotlivé moduly fungují, prostě využívá jejich služeb prostřednictvím funkcí (jakýchsi API), které byly vývojáři Microchipu připraveny.

MCS TCP-IP Stack je stavěn na základě upraveného Referenčního modelu TCP-IP. Software založený na tomto modelu je rozdělován do několika základních vrstev, kde vyšší vrstvy využívají služeb vrstev bezprostředně nižších. Nejjednodušší představu takového modelu uvádí obrázek 5.

eth05.png
Obrázek 5: Zjednodušený referenční model ala MCS

MCS TCP-IP Stack využívá ke své činnosti kooperativní multitasking. V tomto režimu uživatel využívající TCP-IP stacku vykoná jen malou část svého kódu a předá řízení Stacku. Stack vykoná nezbytné operace a předá řízení zpět. Možná se tento popis nezdá tak úplně jasný, ale až si příště uvedeme náš první a jednoduchý příklad, bude jasné, že na tom nic není. Pro tyto operace jsou totiž připraveny velmi dobře popsané šablony zdrojových kódu a bezkonkurenční tutoriál.

V dalším kroku by bylo vhodné zařadit nějakou praktickou ukázku. Vzhledem k tomu, že zde na HW probíhá do konce roku velká slevová akce na vývojové prostředky, které bychom k naší práci potřebovali, nechám praktickou část na další díl.

Odkazy & Download

Hodnocení článku: 

Komentáře

Hodnotím kladně snahu přiblížit ETH širšímu okruhu zájemců, ovšem chtěl bych upozornit na mé špatné zkušenosti s TCP stackem např. z projektu ETHERNUT. Asi před šesti lety jsem vyvíjel svůj TCP stack s využitím zmiňovaného projektu. Během vývoje a testování jsem odhalil několik necností, na které by se měl autor seriálu zaměřit. Především šlo o absenci opakování nepotvrzených TCP paketů a jejich opětovné vysílání, automatické rozpojování spojení při nečinnosti a podobně. Tyto činosti jsou totiž značně náročné na paměť a na množství časovačů, k tomu potřebných. Ze zkušeností mých kolegů se ukázalo, že podobné projekty jsou v praxi nepoužitelné např. v rozsáhlejších routovaných sítích. Na stole přes jeden switch to vždy funguje perfektně, ale při reálném nasazení zařízení selhávají.
Nechci tímto pomlouvat projekt ETHERNUT, naopak, hodně mi pomohl. Této problematice se již delší dobu nevěnuji jako vývojář, a tak by mě zajímalo, jak to dnes vypadá i z tohoto pohledu.

Jiří Jareš

Zdravím. 6 let je u počítačů skoro 1 doba ledová :-). Teď to vypadá lépe. Zde bych rád ocenil možnosti open source SW. Dohodli jsme se s Oliverem Schulzem a komunikaci "přes WiFiny" rozchodili. Stack byl navíc vyzkoušen i v prostředí se smrští broadcastů - nejmenovaná automobilka. A chodí to. Více viz fórum v roce 2003.
Naproti tomu mohu porovnat s komerčním Fusion TCP stackem (Pacific Softworks, později Netsilicon, nyní Unicoa), u kterého snaha přesvědčit autory o nesprávnosti implementovaného RFC trvala několik měsíců, přestože jsem jim nabídl již hotový patch.
Pokud tedy berete stack jako hotovou věc, kterou chcete jen použít, pak je vždy komerční lepší na té konkrétní desce, kde to mají vyzkoušeno. Pokud si chcete přidat protokol, poslední RFC či dotáhnout nějakou chybu, pak bych volil open source.
Nut/OS má již i komerční podporu http://www.ethernut.de/en/support/index.html.
Dušan Ferbas

1) Ohledně výpočtu checksumu, je třeba zmínit, že je to zakázáno v této Erratě http://ww1.microchip.com/downloads/en/DeviceDoc/80349b.pdf a není mi známo, že by to už někdo opravil.
2) S obvodem si lze úspěšně hrát i na nepájivém poli a není třeba vývojový prostředek, i když chápu že HW je potřebuje prodávat :-)
3) TCP stack od Microchipu jednak není nic moc extra kvalitní, dále je dost náročný na prostředky a hlavně je složitý na pochopení, takže začátečník může mít potíže.
4) Většině lidem navíc stačí pouze náhrada sériové linky přes TCP, tedy jediné TCP spojení s rychlostí kolem 10000 - 100000 kbps.
5) Když se člověk zamyslí nad bodem 4), zvládne dostat plnohodnou TCP komunikaci s ENC28J60 o rychlosti cca 115200 kbps jako náhradu sériové linky do ATmega16 bez externí RAM bez použití jakéhokoliv stacku, prostě kdo umí, umí ...

Budu reagovat snad jen na poslední bod, dotknu se tak možná i těch ostatních. Ano, kdo umí umí, ale pro toho právě tento seriál není. Podle mě začátečník, který chce alespoň NĚCO rozchodit si nebude týden hrát s něčím co by možná mohlo chodit na možná dobře zapojeném nepajivém poli s možná chodícím programátorem. Není to o tom pouze prodat produkty na HW, ikdyž samozřejmě proč nezmínit že je lze získat i zde (ale jsou samozřejmě i jiní prodejci). Ono potom každý článek na jakémkoliv serveru by bylo možné považovat za ryze komerční se snahou pouze vydělat...