Web51-C - první kroky Web51-C je vývojový kit pro tvorbu vestavných Ethernetových UDP a SNMP aplikací na bázi 8051 procesorů. Web51-C je rozšíření projektu Web51 původně tvořeného v assembleru do jazyka C. Výsledné embedded ethernet aplikace lze kompilovat volným kompilátorem SDCC nebo komerčním Keil C51. Projekt Web51-C lze zkompilovat na původní HW (od cca 1kB interní RAM na novějších x51 procesorech, jako je T89C51RD2. Pro funkce SNMP je ale potřeba použít větší externí RAM. Základ doporučeného hardwarového řešení tvoří vestavný modul Charon I poskytující dostatečnou paměťovou a výpočetní kapacitu. Tento popis vás krok za krokem provede instalací a otestováním některých aplikací Web51-C. Vzhledem ke značným možnostem poslední demonstrační aplikace SNMP I/O Thermometer lze upravit a velmi rychle použít ji jako finální řešení. Základní vlastnosti Web51-C Zdrojové kódy v ANSI C Používá standardní 8051 MCU a RTL8019AS Ethernet řadič Plně otevřená HW i SW platforma Veškeré příklady lze testovat na zdokumentovaných Charon I + Development Kit nebo Charon I + Charon I&II Development Board Vše k dispozici ve zdrojových kódech Implementován UDP stack Příklady kompatibilní pro volné SDCC (Small Device C Compiler) Příklady kompatibilní pro komerční Keil C51 Funkční SNMP aplikace SNMP I/O Thermometer s JAVA vizualizací Podrobný popis, starting guide. Rychlý návrh a vývoj aplikací Velmi levné HW řešení, vhodné pro velké série 1 / 24
Blokové schéma projektu Web51-C Demo verze ANSI C - SNMP vývojový systém 2 / 24
Hardwarové řešení projektu Základ hardwarového řešení 8051 kompatibilní (dále x51) procesor a řadič Ethernetu RTL8019AS. V našich aplikacích používáme vestavný modul Charon I, jehož schéma a popis najdete v přílohách této dokumentace. Charon I je osazen 8-bitovým mikroprocesorem T89c51RD2 firmy Atmel. Obecně lze ale samozřejmě použít jakýkoliv jiný x51 MPU. Paměťový podsystém tvoří integrovaná paměť FLASH 64 kb (kód programu), integrovaná paměť EEPROM 2 kb (konfigurační parametry), externí paměť SRAM 32 kb (dynamické přidělování paměti), přímo mapované periferie - ethernetový řadič RTL8019as. Adresový prostor 0x0000 0xFBFF 0xFC00 0xFFFF Použito FLASH 63 kb (CODE) zavaděč (bootloader) 1 kb Tab.1 Paměťový podsystém Web51-C interní paměť programu CODE Adresový prostor 0x0000 0x7FFF 0x8000 0x801F 0x8020 0x80FF 0x8100 0xFFFF Použito SRAM 32 kb (XRAM) ethernetový řadič RTL8019as volný pro rozšiřující hardware zrcadlení adres 0x8000 0x80FF Tab.2 Paměťový podsystém Web51-C externí paměť dat XRAM Adresový prostor Použito Adresový prostor Použito 0x0000 0x03FF SRAM 1 kb (XRAM) 0x0000 0x07FF EEPROM 2 kb Tab.3 Paměťový podsystém Web51-C interní paměť dat XRAM a EEPROM Programování paměti FLASH a EEPROM se provádí metodou ISP přes sériový port mikroprocesoru viz kapitola Programování firmwaru do modulu Charon I. Tato metoda nevyžaduje žádný další podpůrný hardware a zcela eliminuje použití klasického programátoru. Ethernetový řadič RTL8019as je zapojen v minimalizovaném zapojení bez nutnosti použití externí paměti EEPROM 93c46. Komunikace s řadičem probíhá v 8-bitovém režimu, umožňující adresovat 8 kb SRAM integrované uvnitř řadiče. Paměť je určena pro příjem a vysílání ethernetových rámců. Po přijetí ethernetového rámce, řadič automaticky generuje požadavek o přerušení pro řídící mikroprocesor. K připojení zařízení do lokální sítě 10BaseT slouží konektor RJ-45. 3 / 24
Doporučený HW pro ladění příkladů Testovací příklady jsou určeny pro moduly Charon I a standardně fungují s dodávanými vývojovými kity : Charon I DK Charon I&II DB Poznámka : (Development Kit) je jednoduchý a levný vývojový kit, ve kterém lze otestovat pouze základní periferie, neobsahuje posuvné registry atd.. (Development Board) je vývojový kit, na němž najdete přímé výstupy, ale také SHIFT registry pro externí rozšířené vstupy a výstupy, LCD displej připojený také přes posuvné registry, přímý výstup na 1-Wire. Charon I&II obsahuje také periferie, které podporuje pouze Charon II (druhou sériovou linku RS-232, JTAG, SERIAL FLASH až 4 MB, ISP programovací rozhraní..). Modul lze použít v jakékoliv základní desce, která připojí galvanicky oddělený Ethernet a napájení. V příkladech použité periferie Šířka binárních vstupů a výstupů je dána počtem použitých posuvných registrů, které se připojí kaskádně za sebe. Rozšířené periferie v příkladu SNMP I/O Thermometer fungují pouze, pokud je z JAVA aplikace (nebo z obecného SNMP clienta) nastaven pro periferie mód special, v režimu paralel lze přistupovat pouze přímo na 8. bitový vstupně/výstupní port P1. Sériová linka RS-232 (data z RS-232 jsou odeslána do SNMP clienta jako trapy) 0.. 32 binárních vstupů 0.. 32 binárních výstupů až 4x teploměr 1-Wire Aplikaci SNMP I/O Thermometer doporučujeme ladit na vývojové desce Charon I&II DB, která má vyvedeny všechny potřebné periferie, včetně LCD displeje. 4 / 24
Softwarové řešení Od prvopočátku bylo jasné, že projekt Web51-C musí být směřován do oblasti jednoduchých embedded ethernet zařízení. 8-bitové mikroprocesory řady 8051 jsou bohužel kvůli své hardwarové architektuře dosti limitovány co do možností dosažitelného maximálního výpočetního výkonu. Je třeba šetřit s dostupnými prostředky a celé řešení uzpůsobit použitému mikroprocesoru. Seznam základních požadavků na navrhovaný systém lze shrnout do následujícího výčtu: použití vyššího programovacího jazyka, možnost dynamické správy paměti, přístup k periferiím pomocí vyhrazených funkcí, implementace základních síťových protokolů, snížit dobu odezvy systému na minimum, transparentnost celého řešení. Proč použít jazyk C? Jazyk C byl navržen k systémovému (nízkoúrovňovému) programování. Díky tomu se prosadil všude tam, kde je třeba přímo ovládat libovolný hardware. V jazyce C je napsaná celá řada operačních systému, uživatelských a mikroprocesorových aplikací. Překladače jazyka C existují pro většinu dostupných typů procesorů. Výhody jazyka C jednoduchá přenositelnost zdrojových kódů programu (multiplatformnost), přehlednost zdrojových kódů programu a celkové zjednodušení při správě složitých projektů, rychlejší vývoj aplikací (použití standardních knihoven), nástroje na optimalizaci a validaci výsledného kódu programu, zavedený programovací jazyk, podporovaný výrobci hardwaru (mikroprocesorů) a softwaru (kompilátorů). Nevýhody jazyka C vyšší cena kvalitního vývojového prostředí, relativně větší nároky na paměť dat a programu výsledné aplikace, složitější na osvojení oproti ostatním vyšším programovacím jazykům. Implementace jazyka C u mikroprocesorů řady 8051 Díky neutuchající oblibě mikroprocesorů řady 8051 je k dispozici dostatečné množství kompilátorů jazyka C. Základní vlastností jazyka C je, že využívá intenzivně práce se zásobníkem (předávání parametrů, lokální proměnné, návratové adresy funkcí, reentrivní funkce atd.). To je kamenem úrazu u mikroprocesorů řady 8051, která není vybavena vhodným zásobníkovým systémem. Úspěšnost implementace jazyka C u mikroprocesorů řady 8051 závisí na tom, jak se daný výrobce kompilátoru vypořádal s tímto nelehkým problémem. V další fázi se pak řeší specifické problémy s implementací jazyka C na 8-bitový mikroprocesor řady 8051. 5 / 24
Volba kompilátoru jazyka C Základním kritériem při výběru kompilátoru jazyka C bylo jádro systému Web51-C musí být možno sestavit nejméně ve dvou kompilátorech (komerční/volně dostupný), vývoj aplikací musí být možný na platformě MS Windows a Linux, výsledný systém Web51-C musí umožňovat vývoj aplikací s minimálními investicemi do programového vybavení. GNU kompilátor SDCC (Small Device C Compiller) vyvíjený skupinou nadšenců si v porovnání s komerčními produkty vede docela obstojně. Svými vlastnostmi výsledného kódu programu se řadí do střední třídy kompilátorů. Chybí spousta vymožeností, které je dána absencí IDE a s tím spojený komfort při vývoji. Rozšířená syntaxe jazyka C používaná u mikroprocesorů řady 8051 je u SDCC a Keil C51 shodná. To umožňuje psát programy, které lze jednoduše přeložit v obou kompilátorech. Při realizaci složitějších projektů, je však třeba počítat se zvýšeným úsilím, ze strany vývojáře k dosažení patřičného výsledku. Keil C51 je odbornou veřejností považován za jeden z nejlepších kompilátorů pro 8051 mikroprocesory. Je to pravda a na celém produktu je vidět několik let intenzivního vývoje, který má za sebou. Pokud vážně uvažujete o nákupu komerčního kompilátoru, tak by jste při výběru neměli opomenout Keil C51. Poznámka: Překladač Keil C51 používá pro ukládání dat do paměti metodu velkého endiánu (Big Endian) na rozdíl od SDCC, které využívá metodu malého endiánu (Little Endian). Adresářová struktura projektu Projekt Web51-C je rozdělen do následujících adresářů web51c\app... uživatelské aplikace (např. demonstrační příklady) web51c\bin... podpůrné programy využívané systémem Web51-C (např. RD2-Flasher) web51c\dev... ovladače jednotlivých hardwarových zařízení (např. ethernetový řadič RTL8019as) web51c\doc... dokumentace web51c\include... hlavičkové soubory systému Web51-C web51c\lib... předkompilované knihovny (např. udp, snmp knihovna) web51c\net... zdrojové kódy systému Web51-C 6 / 24
Implementované síťové protokoly Volba rozsahu implementovaných protokolů vycházela z celkové koncepce zvoleného řešení. Vybrané protokoly pokrývají oblast referenčního modelu OSI-RM. Na jednotlivých vrstvách byly implementovány následující protokoly Linková vrstva (data link layer) Vysílání a příjem rámců podle standardu Ethernet II. ARP (Address Resolution Protocol) - používá se při znalosti cílové IP adresy stanice pro nalezení příslušné fyzické adresy rozhraní MAC. Síťová vrstva (network layer) IP (Internet Protocol) - klíčový protokol, provádí vysílání datagramů na základě síťových adres obsažených v jejich záhlavích a poskytuje síťovou službu bez spojení. ICMP (Internet Control Message Protocol) - protokol řídících hlášení, slouží k přenosu specifických zpráv týkajících se chyb a zvláštních okolností při přenosu datagramů. Transportní vrstva (transport layer) UDP (User Datagram Protocol) - poskytuje mechanismus pro koncový přenos dat mezi dvěma stanicemi. Nabízí transportní službu bez spojení. Aplikační vrstva (application layer) SNMP (Simple Network Management Protocol) protokol podporující přenos informací pro management sítí. Slouží k monitorování aktivních prvků sítě, dálkové řízení a změny konfigurace sítě. DNS (Domain Name System) umožňuje mapování jmen stanic na IP adresy. WOL (Wake On Lan) zapnutí stanice na lokální síti. Různé proprietární protokoly použité v uživatelských aplikacích (např. měření teploty). V současné verzi tvoří jádro systému UDP protokolový zásobník nad kterým jsou provozovány další síťové protokoly. Jádro lze přeložit jak v SDCC tak i Keil C51. Jednou z hlavních aplikačních úloh kde je systém Web51-C využíván, je monitorování zařízení na síti pomocí protokolu SNMP. Implementace SNMP protokolu byla provedena pouze pro kompilátor Keil C51. 7 / 24
Vývoj a ladění aplikací Vývoj aplikací se provádí na platformě MS Windows nebo Linux. Programátor může volit mezi kompilátorem SDCC (překlad pomocí souborů makefile) nebo Keil C51 (integrované prostředí µvision2). Pro pochopení principů práce se systémem Web51-C je k dispozici celá řada demonstračních příkladů v adresáři web51c\app. Tvorba aplikací v Keil C51 Sestavení aplikace se provádí v µvision2 IDE, které sdružuje management projektu, editaci zdrojových kódů, překladač, linker a debugger v jeden celek. Instalace programu je obdobná běžně používanému postupu známého z prostředí MS Windows. Volba hardwarové platformy Systém Web51-C lze v současné době provozovat na procesorech T89c51RD2 a AT89c51ED2. Volba cílové hardwarové platformy se provádí pomocí direktivy pro podmíněnou kompilaci v menu Project! Options for Target! C51! Preprocesor Symbols. direktiva pro procesor T89c51RD2 direktiva pro procesor AT89c51ED2 T89C51RD2 AT89C51XD2 V prostředí µvision2 IDE lze přímo zvolit cílovou platformu pomocí menu Select Target, kde je k dispozici na výběr Web51 T89c51RD2 nebo Web51 AT89c51xD2. Konfigurace paměti eeprom mikroprocesoru T89c51RD2 Systém Web51-C používá pro uložení konfiguračních parametrů interní paměť eeprom mikroprocesoru T89c51RD2 viz příklad 1. Pro správnou funkci je nezbytně nutné tuto paměť následujícím způsobem nakonfigurovat. Zdrojové soubory příkladu 1 jsou sdruženy v rámci projektu web51.uv2. Projekt obsahuje informace potřebné pro překladač a linker. Projekt otevřeme v menu Project! Open Project, kde zadáme cestu \web51c\app\00.eeprom.setup a vybereme projekt web51.uv2. V levém okně vidíme jednotlivé části které projekt obsahuje: složka SRC zdrojový kód programu eesetup.c (EEPROM SETUP), složka INC hlavičkové soubory systému Web51-C, složka LIB použité knihovny Web51Udp.LIB (celý systém Web51-C včetně UDP protokolového zásobníku). ETH_ADDR MY_ETH_ADDR = {{0x00, 0x0A, 0x59, 0x00, 0x00, 0x00}}; // Web51 MAC adresa IP_ADDR MY_IP_ADDR = {{192,168,6,68}}; // Web51 IP adresa IP_ADDR GW_IP_ADDR = {{192,168,6,254}}; // maska podsítě IP_ADDR NETMASK = {{255,255,255,0}}; // IP adresa brány 8 / 24
Obr. 1: Keil C51 - µvision2 IDE Hodnoty IP adres je třeba nastavit tak, aby odpovídaly použitým adresám v dané lokální sítí do které se modul Charon I připojuje. Sestavení programu provedeme v menu Project! Build target čímž dojde k vytvoření několika souborů s informacemi o výsledcích překladu. Jméno souboru WEB51 WEB51.HEX WEB51.M51 WEB51.OPT WEB51.UV2 EESETUP.C EESETUP.LST Popis vstupní data pro debugger sestavený kód programu tabulka symbolů aktuální nastavení µvison2 (otevřené soubory, velikost oken, ) soubor projektu zdrojový kód programu (Eeprom Setup) výpis programu po provedení sestavení Poznámka: V dolní části obr.1 je vidět výsledek kompilace. Knihovna Web51Udp.LIB obsahuje i některé funkce, které nejsou v programu použity. V důsledku toho kompilátor ohlásí 14 varovných hlášení. Nejedná se o chybu, pouze nás kompilátor upozornil, že tyto funkce nejsou použity a zabírají zbytečně místo v paměti kódu programu. Uživatel má možnost označit v souboru \include\config.h funkce, které se nemají přidávat do knihovny Web51Udp.LIB a tím potlačit výskyt těchto chybových hlášení. Tento krok však vyžaduje znovusestavení knihovny a je doporučen zkušenějším uživatelům. Nahrání firmwaru (soubor web51.hex) do modulu Charon I lze provést pomocí souboru flash.bat (uložen ve stejném adresáři jako projekt). 9 / 24
Web51c Embedded Ethernet Project ver 1.0.0 May 20 2003, 21:20:13 - Keil 7.05 Old T89c51RD2 eeprom settings. Web51 network interface parameters MAC addres : 00:0A:59:00:00:01 IP address : 192.168.2.6 Gateway : 192.168.2.1 Netmask : 255.255.255.0 New T89c51RD2 eeprom settings. Web51 network interface parameters MAC addres : 00:0A:59:00:00:00 IP address : 192.168.6.68 Gateway : 192.168.6.254 Netmask : 255.255.255.0 Obr. 2: Výstup programu na sériový port 9600, N, 8, 1 Nyní je paměť eeprom nakonfigurována. O tom, že data byla správně zapsána do paměti eeprom se můžeme přesvědčit pokud vyresetujeme modul Charon I. První aplikace v systému Web51-C Následující popis uvádí základní principy použití systému Web51-C. Na jednoduchém příkladu UDP klienta bude demonstrována komunikace mezi PC a modulem Charon I. Program přijímá data vyslaná z PC na IP adresu modulu port 2000. Obsah UDP datagramu je zobrazen na standardní výstup (sériový port). Projekt otevřeme v prostředí µvision2 (viz postup uvedený v předchozím příkladě). Zdrojový kód příkladu je uložen v adresáři web51c\app\02.udp.client. Funkce main Celý program je obsažen v souboru udpclient.c. Nejdříve musíme vyhradit paměť pro příjem UDP datagramů (ethernetových rámců). u_char EthFrmBuf[ ETH_FRM_SIZE ]; /* paměť pro přijatý UDP datagram */ data WORD EthProt; /* typ zjištěného protokolu */ Následuje inicializace systému Web51-C nastavení sériového portu (9600,N,8,1), načtení konfigurace z eeprom, inicializace ARP CACHE protokolu ARP, inicializace ethernetového řadiče RTL8019as. W51SystemInit(); /* inicializace systému Web51-C */ W51VerStrComp(); /* zobrazení aktuální verze systému na standardní výstup */ W51SysInfo(); /* zobrazení konfigurace (MAC, IP adresa atd.) */ 10 / 24
Hlavní smyčku programu se dělí na následující dvě části: Zpracování požadavků od ethernetového řadiče program testuje výstup RTL8019as, jestli nedošlo k příjmu ethernetového rámce. Pokud jsou data k dispozici načtou se funkcí W51EthReadData() do paměti XRAM. Z přijatého datagramu se určí typ zapouzdřeného protokolu (ARP, IP atd.) a podle toho se postupuje při dalším zpracování. W51ArpInput() zpracování ARP dotazu/odpovědi, W51IpValid() ověření intergrity IP datagramu (CRC, cílová IP adresa atd.), W51IcmpInput() zpracování ICMP dotazu/odpovědi, W51UdpValidCRC() ověření intergrity UDP datagramu (platné CRC), W51UdpValidPort() platný(otevřený) UDP port na systému Web51-C, W51DisplayUdpData() zobrazení UDP datagramu na standardní výstup. if( RTLIrq0 ) // check for received ethernet data // test RTL8019as interrupt request line { W51EthReadData( &EthFrmBuf[0] ); // read data from ethernet controller EthProt = MAKEWORD(EthFrmBuf[12], EthFrmBuf[13]); // --- decode received ethernet frame data --- // if(ethprot == 0x0806) W51ArpInput( (ARP_FRAME *) EthFrmBuf ); // ARP if(ethprot == 0x0800) // IPv4 {if( W51IpValid((IPv4_FRAME *) EthFrmBuf)) {if( EthFrmBuf[23] == IP_Prot_ICMP ) // ICMP W51IcmpInput((ICMP_FRAME *) EthFrmBuf); if( EthFrmBuf[23] == IP_Prot_UDP ) // UDP { if( W51UdpValidCRC( (UDP_FRAME *) EthFrmBuf)) { // decode received UDP datagram here if(w51udpvalidport((udp_frame *)EthFrmBuf)) // available UDP port { W51DisplayUdpData( (UDP_FRAME *) EthFrmBuf); } } } } } } Management systému Web51-C správa ARP cache, nalezení příslušné fyzické adresy rozhraní MAC pro danou IP adresu (ARP resolver). W51ArpManagement(); // updata arp cache, resolve remote hosts,... 11 / 24
Test funkčnosti aplikace Sestavení programu provedeme v menu Project! Build target, výsledný soubor web51.hex nahrajeme do modulu Charon I. Dostupnost modulu nejdříve ověříme pomocí programu ping (např. ping 192.168.6.68). Zasílá požadavek na ozvěnu hostiteli 192.168.6.68 s 32 bajty dat: Odezva od 192.168.6.68: bajty=32 čas=5ms TTL=64 Odezva od 192.168.6.68: bajty=32 čas=4ms TTL=64 Odezva od 192.168.6.68: bajty=32 čas=4ms TTL=64 Odezva od 192.168.6.68: bajty=32 čas=4ms TTL=64 Odezva od 192.168.6.68: bajty=32 čas=4ms TTL=64 Odezva od 192.168.6.68: bajty=32 čas=4ms TTL=64 Obr. 3: Odezva systému Web51-C na ping K testování funkce programu na PC slouží aplikace udp_client.exe uložená v adresáři web51c\app\02.udp.client\udp.client.pc. Aplikace čte data ze standardního vstupu (klávesnice) a posílá na IP adresu modulu port 2000. Spuštění programu UDP klient na PC: udp_client 192.168.6.68. -=[ Web51 Demo Application ver 0.1.0 (C) 2002 by www.hw.cz ]=- UDP client sends data to remote Web51 board via UDP protocol. Local host : 192.168.6.67-192.168.6.67 Remote host : 192.168.6.68-192.168.6.68 Enter any characters or press ESC to terminate program. Web51-C project based on T89c51RD2 and RTL8019as. Obr. 4: Program udp_client.exe spuštěný na PC Zadáme testovací řetězec Web51-C project based on T89c51RD2 and RTL8019as. a na obr. 5 vidíme data přijatá modulem Charon I. Web51c - Embedded Ethernet Project ver 1.0.0 May 20 2003, 21:20:13 - Keil 7.05 -=[ Web51 UDP Client - Demo Application ver. 0.2.0 (C) 2003 by www.hw.cz ]=- UDP client receives data from PC via UDP protocol on port 2000 and displayes it on serial port. Web51 network interface parameters MAC addres : 00:0A:59:00:00:00 IP address : 192.168.6.68 Gateway : 192.168.6.254 Netmask : 255.255.255.0 Received data Web51-C project based on T89c51RD2 and RTL8019as. Obr. 5: Přijatá data modulem Charon I zobrazená na sériovém portu 12 / 24
Demonstrační příklady systému Web51-C Systém We51-C obsahuje dále uvedené demonstrační příklady řešených aplikací EEPROM konfigurace paměti EEPROM systému Web51-C. Wake On Lan - zapnutí stanice na lokální síti pomocí UDP datagramu. UDP klient příjem UDP datagramu a jeho zobrazení na standardní výstup. UDP server vysílání UDP datagramu na danou IP adresu. UDP echo server příjem a následné zpětné vyslání UDP datagramu. ICMP ping test dostupnosti vzdáleného počítače pomocí ICMP zpráv. SNMP I/O Thermometer použití SNMP protokolu pro monitorování teploty, ovládání vstupů a výstupů. Poznámka: Systém Web51-C využívá pro standardní vstup/výstup sériový port mikroprocesoru T89c51RD2. K zobrazení dat posílaných na sériový port lze použít libovolný sériový terminál. Stačí pouze nastavit přenosové parametry 9600, N, 8, 1 a vypnout řízení toku dat. Příklad 1 EEPROM Systém Web51-C používá pro uložení konfiguračních parametrů (IP adresa, maska, brána atd.) interní paměti eeprom mikroprocesoru T89c51RD2. Adresa Popis Délka [B] 0x000 Web51 MAC adresa 6 0x006 Web51 IP adresa 4 0x00A maska podsítě 4 0x00E IP adresa brány 4 0x012 IP adresa DNS serveru 4 Tab.4 Struktura paměti eeprom systému Web51-C Program provede následující nastavení konfiguračních parametrů systému Web51-C Web51 MAC - počáteční MAC adresa vyhrazená projektu Web51 00:0A:59:00:00:00. Web51 IP adresa 192.168.6.68 Maska podsítě 255.255.255.0 IP adresa brány 192.168.6.254 Zdrojový kód příkladu : web51c\app\00.eeprom.setup. Poznámka: Implementace SNMP protokolu využívá vlastní(adaptivní) uspořádání paměti eeprom, který není slučitelný s popisem uvedeným v tabulce 4. 13 / 24
Příklad 2 Wake On Lan (WOL) Technologie Wake On Lan (Magic Packet Technology) byla vyvinuta firmami AMD a Hewlett Packard. WOL umožňuje zapnutí počítače na lokální síti pomocí speciálního UDP datagramu (ethernetového rámce). UDP datagram musí obsahovat sekvenci 6 x FFh za kterou je zopakována 16 x MAC adresa počítače, který má být probuzen. Počítač musí obsahovat síťovou kartu a základní desku podporující funkci WOL, která musí být zároveň povolena v BIOSu počítače. Zdrojový kód příkladu : web51c\app\01.wake.on.lan. Příklad 3 UDP klient Program přijímá data vyslaná z PC na IP adresu Web51 zařízení port 2000. Obsah UDP datagramu je zobrazen na standardní výstup (sériový port). K testování funkce programu na PC slouží aplikace udp_client.exe, která čte data ze standardního vstupu (klávesnice) a posílá vše na Web51 zařízení. Aplikace je napsaná v jazyce C a lze ji sestavit pomocí kompilátoru MS Visual C++ nebo volně dostupného kompilátoru LCC-WIN32. IP adresa zařízení Web51 lze zadat jako parametr programu např. udp_client.exe 192.168.6.68. Zdrojový kód příkladu : web51c\app\02.udp.client. Příklad 4 UDP server Program vysílá každou sekundu UDP datagram z Web51 zařízení na IP adresu PC klienta port 4000. UDP datagram obsahuje informace o teplotě (simulovaná teplota inkrementující se po 0,1 C při každém odeslání). K testování funkce programu na PC slouží aplikace udp_server.exe, která přijímá vyslaná data z Web51 zařízení. Aplikace je napsaná v jazyce C a lze ji sestavit pomocí kompilátoru MS Visual C++ nebo volně dostupného kompilátoru LCC-WIN32. Zdrojový kód příkladu : web51c\app\03.udp.server. Příklad 5 UDP echo server Program čte data z libovolného UDP portu, zobrazí je na standardní výstup a odpoví (pošle originální datagram) co nejrychleji zpět. Jedná se o rozšíření příkladu 3 a demonstrace běžné situace, kdy obslužný systém funguje formou dotaz odpověď. K testování funkce programu na PC lze použít např. aplikaci udp_client.exe. Zdrojový kód příkladu : web51c\app\04.udp.echo.server. 14 / 24
Příklad 6 ICMP ping Program testuje dostupnost vzdáleného počítače pomocí ICMP zpráv echo request a echo reply. Jedná se o obdobu příkazu ping (Packet Internet Grouper) běžně používaného na PC. Zdrojový kód příkladu : web51c\app\05.icmp.ping. Příklad 7 SNMP Příklad demonstruje detailní popis použití SNMP na jedné rozsáhlé aplikaci, která ovládá binární vstupy, výstupy, LCD display, sériovou linku RS-232 a 1-Wire teploměr. Celý příklad je k dispozici v rámci projektu Web51-C, k jeho zkompilování je ale již třeba kompilátor Keil C51, verze pro SDCC zatím není k dispozici, s pomocí zdrojových kódů pro Keil C51 ji nelze vytvořit. V poslední kapitole najdete podrobný popis jak začít používat aplikaci SNMP I/O Thermometer, která je případně k dispozici i jako samostatný text pro tento příklad. Zdrojový kódy příkladů k problematice SNMP jsou uloženy v adresářích web51c\app\10.snmp.led, web51c\app\10.snmp.led_table web51c\app\ 10.snmp.LED_variable_all web51c\app\10.snmp.serial_io 15 / 24
Programování firmwaru Atmel Flip Modul Charon je defaultně dodáván s firmwarem Konvertor Ethernet / RS-232, takže nejdříve je nutné nahrát do modulu nový firmware, který obsahuje tuto SNMP aplikaci. Upload firmware do procesorů T89C51RD2 a následovníků se provádí programem Flip od výrobce procesorů firmy Atmel. Program stáhnete buď na oficiálních stránkách Atmelu, nebo odzkoušenou starší verzi 1.6, kterou vidíte na obrázku najdete na : www.hwgroup.cz na stránce DOWNLOAD mezi užitečnými utilitami. PSEN programování Připojte modul Charon k sériové lince RS-232 a osaďte jumper PSEN. Pozici jumperu PSEN najdete vyznačenu na vývojové desce (Charon I&II DB vlevo dole spodní pozice Forced, Charon I DK pod ledkami LINK a POWER). Po osazení jumperu zapněte napájecí napětí, vyberte ve Flipu typ procesoru (Device! Select! T89C51RD2) pak načtěte firmware uložený v souboru s příponou.hex Nastavte programování po sériovém portu RS-232 (Settings! Communication! RS-232). Pokud program zahlásí chybu, zkontrolujte osazení jumperu PSEN, použité kabely pro připojení RS-232 (stačí 3. vodičové připojení RxD, TxD, GND), (u Charon I&II DB zkontrolujte zda jste osadili jumper RESET do pozice x51) a případně modul resetujte. - Před programování nezapomeňte zaškrtnout i políčka ERASE a BLANK CHECK. - Po naprogramování a verifikaci odpojte program Atmel Flip ze sériového portu. - Odstraňte jumper PSEN a proveďte reset zařízení. - Pokud aplikace podporuje SETUP režim, osaďte jumper SETUP (T0) a proveďte reset zařízení. Pro nastavení v SETUPu spusťte libovolný sériový terminál (TeraTerm, Terminal, v nejhorším případě HyperTerminál z Windows), nebo náš program Ethernet Converter SETUP, který lze také stáhnou ze stránky DOWNLOAD na www.hwgroup.cz. 16 / 24
Programování firmwaru RD2-Flasher Program RD2-Flasher slouží k programování mikroprocesoru Atmel T89c51RD2 metodou ISP přes sériový port v operačních systémech MS Windows. Jedná se o konzolovou aplikaci určenou pro snadnou integraci do libovolného vývojového prostředí (Keil µvision2, SDCC atd.). Zdrojové kódy programu jsou k dispozici v rámci projektu Web51. RD2-Flasher představuje alternativní řešení k originálnímu softwaru FLIP. Ve spojení se zavaděčem (plně kompatibilní s FLIPem) vyvinutým v rámci projektu Web51 umožňuje přímo programovat eeprom paměť mikroprocesoru T89c51RD2. Umí navíc přepnout modul Charon I přímo do programovacího režimu pomocí ovládání pinu PSEN mikroprocesoru vývodem CTS z RS232. Postup ISP programování Nastavení jumperu PSEN se shoduje s postupem uvedeným u programu FLIP. Detailní popis použití RD2-Flasheru je uveden na adrese http://www.hw.cz/software/rd2_flasher/flasher22.html. Příklad nahrání souboru snmp.hex do modulu Charon I : RD2F -f snmp.hex -c COM1 -b 115200 -m 0 -p 1 -t 2 -q 18 -i 32 -v 1 17 / 24
Aplikace SNMP I/O Thermometer první kroky RS-232 SETUP pro aplikaci SNMP I/O Thermometer Poté, co nahrajete do modulu aplikaci SNMP I/O Thermometer, nastavte parametry sériového kanálu 9600 Bd 8N1, no handshake. Ověřte, zda jste osadili jumper SETUP a odstranili jumper PSEN. Zresetujte modul. POZOR DŮLEŽITÉ Po každém nahrání nového firmware, nebo jeho updatu, je NUTNÉ provést nejprve RESET TO DEFAULT, abyste inicializovali hodnoty v konfigurační paměti EEPROM. Proveďte příkaz : d... load default setup Po jeho provedení a opětovném načtení menu nastavte IP adresu, Gateway, Masku a target trap adress. t... enter target trap address Target trap adress je adresa, kam se budou odesílat UDP pakety se SNMP TRAPy. Jedná se tedy o jedinou adresu, která bude s modulem komunikovat. Pravděpodobně sem nastavte vaší IP adresu. Pokud používáte DHCP, nebo si ji nepamatujete, nejsnáze ji zjistíte spuštěním v příkazovém řádku IPconfig Systém Windows vypíše DNS, IP, MASK a GATEWAY. Další možnosti jsou 0.0.0.0 = vypnuto, 255.255.255.255 = UDP broadcast. v... set port value Definuje hodnotu I/O portu po zapnutí napájení. Lze tak definovat například vypnutí nějakých zařízení po restartu systému Hodnota se nastavuje v desítkové soustavě v rozsahu 0..255 p... switch port type Mění typ práce s porty mezi direct přímý přístup na I/O port a shifted použití posuvných registrů a 1-Wire teploměru. Pokud používáte Charon I&II DB nastavte si verzi s... Web51 system info Vypíše aktuální nastavené síťové parametry (MAC, IP, GW, MASK) Po nastavení potřebných parametrů, odstraňte jumper SETUP a modul restartujte.. Do sériového portu modul vypíše : EEPROM loading, preserving MAC, getting. Závěr Firmware modulu je nyní nastaven. Je čas připojit se k modulu po SNMP! Pokud si chcete být jisti, že modul skutečně na síti funguje, zkuste si pingnout na jeho IP adresu, ping je součást ICMP a funguje samozřejmě i na UDP a SNMP zařízeních, které nepodporují TCP/IP. 18 / 24
Instalujeme a spouštíme JAVA aplikaci Thermometer Pro obsluhu modulu Charon I, který komunikuje po SNMP můžete používat libovolný SNMP client (browser), protože MIB tabulka je přiložena k aplikaci, ale pokud se SNMP začínáte použijte naši JAVA aplikaci Thermometer která vám vše přehledně zobrazí s pomocí grafiky a zároveň v ní lze snadno a rychle modul nastavovat. Základní pojmy kolem jazyka JAVA JAVA ještě není běžně rozšířena, proto se vám pokusíme vysvětlit pár základních pojmů : JAVA SDK (Software Development Kit) Obsahuje překladač souborů.java na soubory.class a vše potřebné proto, abyste mohli začít vyvíjet v JAVĚ aplikace. Pokud potřebujete hotové aplikace jen používat, nepřidělávejte si starosti s instalací kompletního balíku. JRE JAVA runtime enviroment Základní prostředí, které umí JAVA kód spustit a JRE tak potřebujete k tomu, abyste mohli jakoukoliv JAVA aplikaci vůbec pustit. Poslední dobou firma SUN, která JAVU vymyslela hodně propaguje tzv. Java Web Start 1.2. Jedná se o jakýsi další balík rozšíření, který umožňuje spouštět aplikace z jediného souboru, nebo přímo z Internetu atd. Poslední dobou je standardně obsažen v základním JRE..java Textový zdrojový kód aplikace, jedná se tedy o textový kód..class Tzv. byte code = univerzální spustitelný kód, který není závislý na platformě CPU. Vzniká přeložením původního textového zdrojového souboru.java..jar Několik souborů.class sloučených do jednoho souboru.jar = finální spouštěná aplikace. Aplikace je pak jediný soubor, nepotřebujete tolik otevřených souborů, případně komprimovat programy atd. 19 / 24
Poslední verzi ovládající JAVA aplikace Thermometer si lze stáhnout z Internetu: http://www.dfsoft.cz/charon/ Jak pracovat s aplikací Thermometer K tomu, abyste vůbec spustili soubor sthermometer.jar potřebujete mít napřed nainstalovaný buď JAVA SDK, nebo JRE. Ten není defaultně součástí Windows, tak si jej stáhněte z Internetu : http://java.sun.com/products/javawebstart/download-windows.html Po nainstalování podpory pro JAVA aplikace již na.jar soubor na disku stačí kliknout a aplikace se spustí sama. Aplikaci také můžete spustit z výše uvedené WWW stránky. Pro uložení IP adresy a proměnných slouží soubor charon_properties.txt ve stejném adresáři : max=50 graph_time=1 min=-20 timeout=5000 IP=192.168.6.16 Aplikace používá freeware Westhawk což je implementace SNMP protokolu pro JAVA aplikace. 20 / 24
Ovládání aplikace Thermometer Před spuštěním JAVA aplikace nastavte IP adresu modulu Charon v textovém souboru. Options Pokud IP adresu modulu nenastavíte v charon_properties.txt, program bude hlásit, že modul nenalezl. IP lze nastavit ještě v menu Options! Host IP, spolu s timeoutem po kterém SW nahlásí chybu SNMP komunikace. V Options dále nastavíte parametry grafu teploty (rozsah grafu a časy mezi měřeními). Thermo Nastavuje alarmy = hodnoty, při kterých SNMP zařízení (modul Charon) nečeká na dotaz klienta (zde JAVA aplikace) na teplotu a sám hlásí překročení povoleného rozsahu. Hodnota alarmu je zobrazena vlevo na stupnici teploměru červenou a modrou šipečkou. Hlášení o alarmu se vypisují v textovém okně nad grafem s průběhem teploty. Vyzkoušejte alarmy nastavte horní mez teploty (červená šipka) na cca 31 C a vezměte teploměrové čidlo do ruky, teplota poroste a při překročení nastavené meze se objeví hlášení : 04:35:07 [0] '31.13 C' Temperature High from 192.168.6.16 Klimatická poznámka : Pokud je 32 36 C běžná teplota, ve které se pohybujete, použijte spodní mez na cca 15 C a kostku ledu.. TEA Tea je algoritmus pro kryptování dat, pokud potřebujete zabezpečit autorizaci protistrany. 21 / 24
Ethernet Toto menu slouží ke vzdálenému nastavení parametrů modulu. Kromě standardních IP parametrů, které lze definovat i v SETUPu přes RS-232 (IP adresa modulu, Maska, Gateway) lze nastavit také přijímací port modulu (defaultně 2000) a IP adresu a port kam jsou odesílány SNMP Trapy (IP adresa počítače kde běží JAVA aplikace, nebo standardní SNMP klient). Specialitou je Allowed IP adress range což je rozsah adres s nimiž modul komunikuje.rozsah se definuje hodnotou IP adresy a její maskou, jako v klasických sítí pro rozlišení komunikace v lokální síti / komunikaci přes Gateway. Serial Menu pro nastavení parametrů sériové linky RS-232 na modulu. Parametr serial timeout řídí paketizer (algoritmus, který souvislý tok dat z RS-232 rozkládá na jednotlivé pakety, které odesílá do Ethernetu). Parametr definuje maximální délku mezery za posledním přijatým znakem, která se má respektovat, než je z přijatých dat vytvořen paket a odeslán po SNMP. Počet timeout znaků je tedy vlastně časové zpoždění, ale udává se ve znacích, aby jej uživatel nemusel přepočítávat při změně baudové rychlosti. Pokud je tedy na 9600 Bd nastaveno serial timeout = 7 a přijde souvislý paket 15 znaků (trvá cca 15 ms), čeká po posledním znaku modul dalších 7 ms (7 ms = cca 7 znaků na 9600 Bd) než přijatých 15 bytů sbalí a odešle jako SNMP trap. Poznámka : Všechny vzdáleně nastavené parametry modul ukládá do interní EEPROM a po spuštění je aplikace znovu z modulu po SNMP načítá, takže nemusíte mít obavu o ztrátu konfigurace. Port Menu port nastavuje typ přístupu k 8. bitovému I/O portu na modulu Charon. Parallel I/O port P1 je použit jako přímých 8 pinů. Šířka portu má pak smysl 1..9, kdy 9. bit je vstup INT0 (druhý jumper vedle jumperu SETUP). Pokud nastavíte šířku 4, jsou automaticky horní 4 piny přiřazeny jako síťová indikace, podle následujících funkci : - P1.4 PING - P1.5 ARP - P1.6 SNMP - P1.7 UDP V přímém režimu nelze port dále rozšířit a nelze používat 1-Wire sběrnici, ani posuvné registry. Special I/O port je rozšířen pomocí posuvných registrů a dalších periferií podle dokumentace Rozšíření sériových portů modulů Charon, což je plně kompatibilní se schématem k doporučené vývojové desce Charon I&II Development Board. - I/O porty lze rozšířit až na 32 vstupů a výstupů - Na P1.0 lze připojit až 4x 1-Wire teploměr Popisované aplikace SNMP I/O Thermometer nepodporuje rozšíření o A/D převodníky (LCD displej zatím není, ale bude brzy podporován), což zmíněná specifikace umožňuje. 22 / 24
Použití aplikace s obecným SNMP clientem Pokud budete chtít použít aplikaci s obecným SNMP clientem, budete potřebovat MIB tabulku k aplikaci v modulu Charon. Tuto tabulku najdete buď v adresáři příkladů k originálnímu ANSI C - SNMP Development System nebo je ke stažení spolu s.hex souborem a zde popsanou aplikací sthermometer.jar Pro ověření funkce nebo pro reálnou aplikaci lze použít libovolný SNMP Client. Po nainstalování clienta, je třeba nahrát do příslušného adresáře.mib soubor. K tomu aby jej SNMP client vzal k dispozici je třeba nahranou tabulku přikompilovat k výběru používaných MIB. Po úspěšném přikompilování by měl client SNMP zařízení Web51 rozpoznat a zobrazit strom s proměnnými, které obsahuje. 23 / 24
Závěr Projekt Web51 má za sebou již několik let vývoje a stovky aplikací, což se positivně promítá do jeho současného stavu. V oblasti implementace síťových technologií do embedded zařízení si našel své stále místo. Verze Web51-C rozšiřuje stávající možnosti projektu zvláště v oblasti managementu sítí. Implementace SNMP protokolu otevírá cestu k monitorování aktivních prvků sítě, dálkovému řízení a změně konfigurace sítě. Použití programovacího jazyka C zpřehledňuje a zpřístupňuje celý systém většímu okruhu vývojářů. Programování v jazyku C má za následek rapidní snížení doby vývoje aplikací v porovnání s psaním v assembleru. Literatura & zajímavé odkazy [1] Modul Charon I - http://www.hwgroup.cz/products/charon1/ [2] Projekt Web51 - http://web51.hw.cz/ [3] Keil C51 http://www.keil.com/ [4] SDCC http://sdcc.sourceforge.net/ [5] RD2-Flasher - http://www.hw.cz/software/rd2_flasher/flasher22.html [6] Atmel FLIP http://www.atmel.com/ [7] Charon I - SNMP I/O Thermometer http://www.hwgroup.cz/products/charon1/snmp/ [8] LCC-WIN32 http://www.cs.virginia.edu/~lcc-win32/ Vše o SNMP - http://www.snmplink.org/ http://www.castlerock.com - SNMPc Network Manager SNMP Client který lze licencovat na 30. denní trial verzi - http://www.mg-soft.com Server se zajímavými nápady kolem SNMP - http://www.pcmeasure.com CodeGen - Generátor kódu, parser a merger - program analyzuje MIB a generuje kostru kódu podle zadané šablony. Usnadňuje vytváření MIB - http://www.dfsoft.cz/products.htm Související dokumentace web51c\app\readme.txt Všechny SNMP aplikace mají propracované readme v angličtině. Charon I&II Development Board Schémata a popis rozšířeného vývojového kitu. Charon I Dokumentace Schéma a popis samotného modulu a programování Projekt Web51 - http://web51.hw.cz/ www.hwgroup.cz - Dokumentace k finálním produktům a řešením. 24 / 24