Jste zde

Realizace Ethernetu v mikrokontrolérech ColdFire - 2.část - TCP/IP stack a HTTP

Zatímco první díl seriálu o realizaci Ethernetu v MCU ColdFire byl o struktuře OSI modelu a základním principu komunikace po ethernetu, druhý díl se již více zabývá praktickou stránkou implementace softwarové části komunikace prostřednictvím ColdFire TCP/IP stacku a popisuje funkci a možnosti HTTP protokolu.

ColdFire TCP/IP stack a RTOS

TCP/IP (Transmission Control Protocol / Internet Protocol) je komunikační protokol pro komunikace po internetu. Uvedená zkratka je sice odvozena ze dvou vrstev OSI modelu (transportního protokolu TCP a síťového protokolu IP), ale prakticky dnes zastřešuje celou škálu dalších protokolů také obsažených v TCP/IP stacku. Každý jednotlivý protokol je pak podrobně definován v technické specifikaci RFC (Request For Comment) popisující přenos informací na internetu a jsou publikovány pomocí Internet Engineering Task Force (IETF). Více na www.rfc-editor.org.

Správný provoz TCP/IP stacku vyžaduje multi-tasking. Proto ColdFire TCP/IP stack je již integrován s jednoduchým operačním systémem (round-robin OS), který může být zároveň využíván i aplikačním kódem (uživatelem naprogramovaná část programu). K tomuto účelu poskytuje 2 provozní módy: single-stack (superloop) a multi-stack. Další přidané vlastnosti OS zahrnují systém interaktivně upgradovatelného menu v reálném čase (interactive real-time upgradeable menu system), uživatelské časovače, či správu dynamického přidělování paměti (heap memory management).


Struktura jednoduchého RTOS (Real-Time OS) pro MCU ColdFire obsahující i TCP/IP stack

 

4.1: Vlastnosti ColdFire TCP/UDP/IP Stacku

TCP/UDP/IP Stacku v MCU ColdFire poskytuje následující komunikační protokoly a rozhraní:

  • Protokol HTTP (HyperText Transport Protokol)
  • Převod sériové komunikace na Ethernet (Serial to Ethernet)
  • Souborový přenosový protokol TFTP (Trivial File Transfer Protokol)
  • Aplikační rozhraní Mini IP
  • Dynamické přidělování IP adres DHCP (Dynamic Host Configuration Protokol)
  • Manuální nastavení (konfiguraci) IP adres
  • Překlad symbolických adres DNS (Domain Name Servers)
  • Transportní protokol TCP (Transmission Control Protokol)
  • Uživatelský protokol UDP (User Datagram Protokol)
  • Řídící protokol ICMP (Internet Control Messaging Protokol)
  • Protokol BOOTP (BOOTstrap Protokol)
  • Protokol ARP (Address Resolution Protokol)
  • IP protokol (Internet Protokol)

OSI model ColdFire TCP/IP stacku

 

ColdFire TCP/UDP/IP stack v sobě implementuje následující protokoly, které jsou podrobně popsané v technických specifikacích RFC (viz detailní anglický popis na webové stránce www.rfc-editor.org/rfcxx00.html):

  • RFC791 Internet protokol (IP)
  • RFC792 Internet Control Message protokol (ICMP)
  • RFC768 User Datagram Protokol (UDP)
  • RFC793 Transmission Control Protokol (TCP)
  • RFC826 Ethernet Address Resolution Protokol (ARP)
  • RFC1035 Domain Name Server (DNS)
  • RFC2131 Dynamic Host Configuration Protokol
  • RFC2132 Volby / Rozšíření DHCP a BOOTP

Prezenční a relační vrstva OSI modelu je realizována jako malé spojovací rozhraní (mini-socket interface) velmi podobné všeobecně známému spojovacímu rozhraní BSD (BSD socket Inteface). ColFire TCP/IP stack byl optimalizován pro použití v embedded aplikacích, což znamená, že pro práci s daty se používá tzv. zero-copy pomocí ukazatelů (pointerů), čímž se minimalizuje využití paměti RAM.

ColdFire TCP/UDP/IP stack se chová jako černá krabička (black box), která s okolím komunikuje prostřednictvím vstupů a výstupů (volání funkcí v jazyce C)

 

4.2: DHCP klient

DHCP protokol (Dynamic Host Configuration Protocol) se používá k dynamickému získání nastavení síťových komunikačních parametrů. Tento protokol je definován v RFC2131 a RFC2132. Ve stacku běží DHCP klient, který vyhledává DHCP servery, jež poskytují patřičné informace. Tento proces vyhledávání je označován jako "discovery". Celá komunikace DHCP serveru a klientu probíhá prostřednictvím UDP komunikace a BOOTP portů (konkrétně portů 67 a 68).

Pokud IP stack nemá definovanou IP adresu, vyšle požadavek na konfiguraci prostřednictvím tzv. vyhledávacího packetu (Discovery packet) na striktně broadcastové adresy. Každý discovery packet obsahuje unikátní transakční identifikátor "xid" (unique transaction ID), který je dekódován poslouchajícím DHCP serverem, který paket zachytil. DHCP server následně vyšle opět na broadcast adresu nabídkovou zprávu (offer message) obsahující xid identifikátor DHCP klienta (stacku) a požadované konfigurační parametry, které vhodně vybral (tj. IP adresu s příslušnou maskou subsítě a další volitelné parametry — např. adresu výchozí brány, adresy DNS serverů, jméno domény apod.). Také v nabídkové zprávě je zakódován unikátní identifikátor, tentokrát serveru (unique server ID). DHCP klient využije tento identifikátor, když vysílá žádost (request packet) zpět k serveru, která oznamuje, že zaslané síťové parametry byly přijaty a použity. Konečně DHCP server vše potvrdí DHCP klientu již na jeho nově přidělenou IP adresu.

Příklad komunikace mezi klientem a DHCP serverem (uvedené funkce na straně klienta jsou součástí ColdFire TCP/IP stacku - více v aplik. poznámce AN3470)

 

4.3: DNS klient

DNS klient se používá ke komunikaci s DNS servery (Domain Name Server). Účelem DNS je překlad symbolických názvů domén do IP adres. DNS protokol je popsán v RFC1035 a přenos informací se může uskutečnit jak pomocí UDP komunikace, tak TCP protokolu a to na portu 53. DNS protokol je velmi jednoduchý a všechny potřebné informace, které DNS poskytuje, jsou obsaženy v jediné zprávě. Tyto zprávy jsou detailně zdokumentovány v RFC1035.

 

HTTP protokol

HTTP ( Hyper-Text Transport Protocol ) je komunikační protokol, který je určen pro přenos webových stránek (Hyper-Text dokumentů) napříč internetem. HTTP propojení se sestává ze dvou částí: HTTP klienta (webový prohlížeč) a HTTP serveru. HTTP klient je určen k příjmu a prohlížení stránek, zatímco HTTP server slouží k uložení, správě a přenosu webových stránek. HTTP je definován v technické specifikaci RFC2616 (definuje HTTP verzi 1.1.) a RFC1945 (definuje HTTP verzi 1.0.).

5.1: HTTP komunikace

HTTP je komunikační protokol typu žádost-odpověď (request-response protocol). Klient si zažádá server o webovou stránku a server mu odpoví jejím obsahem v HTML kódu (Hyper-Text Markup Language code). HTTP však lze použít i zasílání jakýchkoli jiných typů dat, včetně binárních. HTTP klient žádá o soubor prostřednictvím metody GET (HTTP je ASCII protokol) a server mu odpoví HTTP záhlavím, které následuje obsah zasílaného souboru. Klient také může poslat soubor prostřednictvím metody POST. Uvnitř žádosti je také vložena ASCII informace o používané HTTP verzi (1.1 nebo 1.0). To říká serveru, jaká omezení má klient.

Příklad průběhu jednoduché komunikace mezi HTTP serverem a Web klientem

 

Praktické příklady a zdrojové kódy pro ColdFire

Různé příklady, aplikační poznámky a zdrojové kódy pro potřeby realizace Ethernetu, TCP/IP komunikace, RSS, XML a dalších, jsou dostupné na webových stránkách společnosti Freescale Semiconductor - www.freescale.com. Jednoduchý způsob, jak takové zajímavé informace na těchto stránkách najít, je zvolit stránku některého z MCU ColdFire a na stránce poskytující obecný popis, zvolit záložku "Documentation". Poté se již objeví nejen pdf datasheety a propagační listy MCU, ale i různé tzv. aplikační poznámky vždy označené jako ANxxx.

6.1: HTTP web server a flash file system

HTTP web server a flash file system je detailně popsán v aplikačních poznámce AN3455 – ColdFire Lite HTTP Server, kterou lze stáhnout na adrese
www.freescale.com/http://hw.cz/files/microcontrollers/doc/app_note/AN3455.pdf.

HTTP web server a flash file system obsahuje a poskytuje následující věci:

  • HTTP1.0 kompatibilní server (HTTP1.1 by měl být dostupný v nových verzích)
  • Podporu více HTTP připojení na jednou
  • File System podporující ColdFire interní paměť Flash i externí SPI Flash
  • Webové stránky mohou být v paměti aktualizovány skrze ethernet či při kompilování programu
  • Podporuje HTTP GET metodu a s jednoduchým mechanismem pro přidávání dalších metod
  • Podporu dynamických HTML
  • Podporu sériového rozhraní pro proměnné dynamického HTML
  • Čas zpracování a kompilační čas flash file systemů
  • Podporu dlouhých názvů souborů a podadresářů.
  • Podporu příkazu ‘DIR’ skrze sériové rozhraní.
  • PC utility pro kompresi času potřebného pro zpracování stáhnutelných obrázků z vícestránkových webových stránek
  • PC utility pro stažení stáhnutelných obrázků z webových stránek prostřednictvím TCP portu 80 (kvůli průchodu skrz Firewally)
  • 32 bajtový ASCII klíč pro zvýšení bezpečnosti proti stáhnutí obsahu webové stránky

 

6.2: Zdrojové kódy pro příklady UDP/TCP klientů a serverů

Projekt ColdFire Lite TCP/IP stack zahrnuje téměř tucet zabudovaných příkladů zdrojových kódů pro MCU ColdFire. Tyto příklady jsou navrženy pro zvýraznění některých vlastností TCP/IP stacku a jejich využití. ColdFire TCP/IP stack a RTOS společně se příklady kódů reálných aplikací jsou popsány v aplikační poznámce AN3470.

Příklady zdrojových kódů v aplikační poznámce AN3470 zahrnují:

  • ColdFire_Lite - struktura TCP/IP stacku
  • ColdFire_Lite_RTOS - jak používat RTOS aplikace
  • ColdFire_Lite_TFTP - TFTP serverové aplikace
  • ColdFire_Lite_UDP_client - klientská aplikace pro potřeby testování výkonu UDP komunikace
  • ColdFire_Lite_UDP_server - UDP serverová aplikace pro potřeby testování výkonu UDP komunikace
  • ColdFire_Lite_TCP_client - klientská aplikace pro potřeby testování výkonu TCP klientu
  • ColdFire_Lite_TCP_server - TCP serverová aplikace pro potřeby testování výkonu TCP serveru
  • ColdFire_Lite_TCP_serial_client - převodník TCP komunikace na sériovou a zpět a připojení na TCP klienta
  • ColdFire_Lite_TCP_serial_server - převodník TCP komunikace na sériovou a zpět a připojení na TCP server
  • ColdFire_Lite_TCP_with_Web_Server - Web (HTTP) server podporující dynamické HTML

 

6.3: ColdFire_Lite_TCP_alarm

ColdFire_Lite_TCP_alarm je demo aplikace, která obsahuje jak software pro PC, tak i firmware pro mikrokontrolér ColdFire. Tento zdrojový kód je příkladem pro aplikaci sběru dat z dálkových senzorů, kde tyto senzory periodicky posílají data prostřednictvím TCP protokolu do nadřazeného serveru. Celou demo aplikaci lze stáhnout na stánkách Freescalu -
www.freescale.com/webapp/sps/site/prod_summary.jsp?code=M52233DEMO&fpsp=1&tab=Design_Tools_Tab.

Demo aplikace ColdFire_Lite_TCP_alarm pro přenos vzdálenými senzory naměřených dat do PC přes internet

 

6.4: Firmware HTTP klienta

HTTP klient umožňuje číst webové stránky a data ve formátu XML za použití procesoru Coldfire. HTTP klient používá DHCP klienta pro automatické načítání IP adresy a jiných TCP/IP informací včetně IP adres jakýchkoliv DNS serverů. HTTP klient používá metodu GET pro získání obsahu webové stránku ze serveru. Spolu s žádostí GET je odesláno i HTTP záhlaví, které je zakódovano v HTTP klientu pomocí konstantního řetezce, který je deklarován ve zdrojovém souboru emg_http_client.c.

6.5: Příkaz WGET – příklad využití HTTP klienta

Příkaz "wget" je často používán v distribucích linuxu pro přenos souboru prostřednictvím HTTP protokolu a de-facto je to konsolový HTTP klient. S využitím možností poskytované ColdFire TCP/IP stackem (detailně popsáno v aplikační poznámce AN3470) lze do MCU ColdFire implementovat jak HTTP klienta a vlastnosti příkazu "wget".

6.6: M52233DEMO deska od Freescale Semiconductor

M52233DEMO je referenční deska vhodná pro vývoj aplikací s procesorem ColdFire MC52233. K tomuto účelu obsahuje sériový port, USB BDM debug port a Ethernetový port. Navíc pro možnost vývoje různých dalších aplikací obsahuje i 40pinový konektor, která uživatelům umožňuje přístup k téměř všem signálům procesoru ColdFire, 3D akcelerometr (připojený k 3 analogovým vstupům MCU), potenciometr a 2 uživatelská tlačítka. Freescale dodává tuto desku v rámci kitu společně s freeware verzí vývojového softwaru a prostředí CodeWarrior a zdrojovým kódem TCP/IP stacku, což je všechno, co potřebujete k rozběhnutí vlastních Ethernetových aplikací. Freescale poskytuje zdarma na svých internetových stránkách zdrojové kódy pro TP/IP stack (ten je detailně popsán v AN3470).

 

~ Pokračování v 3. části, kde najdete popis RSS a XML a příklad Embedded aplikace - RSS/XML čtečka ~

Autor: Eric Gregori

Překlad: Tomáš Coufal

Úprava: Antonín Vojáček

DOWNLOAD & Odkazy

Hodnocení článku: