Ethernet Robootika Kodulaboris

Autor: Raivo Sell

Käesolev õpiobjekt tutvustab Etherneti kasutamist Robootika Kodulaboris.

Ethernet on põhiline juhtmetega kohtvõrgu (inglise k. lühend LAN) tehnoloogia, mille kaudu on omavahel ühendatud enamik arvutitest maailmas, et moodustada internet. Seda tutvustati esmakordselt aastal 1980. Aastal 1985 see standardiseeriti kui IEEE 802.3.

Robootika Kodulaboris on kasutusel eraldi Etherneti kiip, mis võimaldab mikrokontrolleris käivitada lihtsa veebiserveri võimaldades nii kontrolleri sisendeid ja väljundeid juhtides otse üle interneti.

ESF

Õpiobjekti nimi: Ethernet Robootika Kodulaboris

Õpiväljundid:

Pärast mooduli läbimist õpilane:

  • Kirjeldab Etherneti standardit
  • Kirjeldab Etherneti andmete struktuuri
  • Käivitab mikrokontrolleris lihtsa veebiserveri
  • Ühendab vajalikud Robootika Kodulabori moodulid õigesti

Kasutusjuhend:

  • Teoreetilise taustamaterjaliga tutvumine
  • Graafilise materjaliga tutvumine
  • Enesekontrolli küsimustele vastamine

Õpetatav osa: Lugeda teoreetilist ülevaadet enne riistvara reaalset ühendamist ja pingestamist. Vaadata juhendeid korrektse riistvara käsitlemise tagamiseks. Õpitu kinnistamiseks tuleb praktilised näited reaalselt läbi teha.

Seoste loomine: Läbi õppejuhendite ja sõnalise selgituse järgimise.

Kinnistav osa: Iseseisev praktika reaalse riistvarakomplekti baasil.

TEOREETILINE OSA

Ethernet määrab juhtmete ja pistikute tüübid, kirjeldab füüsilist signaali ülekannet ning määrab andmevahetuse formaadi. Ethernet on aluseks võrguprotokollidele nagu TCP/IP, millega tagatakse interneti ja muude võrkude toimimine. Selle standardid on tihedalt seotud OSI füüsilise kihiga, täites mudeli kahe alumise kihi (füüsiline kiht ja lülikiht) funktsioone.

Algusaegadel kasutati Etherneti ülesehitamiseks koaksiaalkaableid, mis vastasid standardile 10BASE5. Hiljem need vahetati keerupaari ja fiiberoptilise kaabli vastu. Ethernet võimaldab andmevahetust kõikide kohtvõrku ühendatud seadmete vahel kiirustega 10 Mbit/s kuni 10 Gbit/s.

Etherneti põhised süsteemid jagavad andmevood väiksemateks kaadriteks (inglise k. frame). Iga kaader peab kindlasti sisaldama saatja ja vastuvõtja MAC aadressi ja andmeid veakontrolliks. Kaadri keskosas on piirkond andmete jaoks, mida üle kantakse. Andmed võivad sisaldada teiste protokollide päiseid, nagu näiteks IP protokoll (inglise k. Internet Protocol). Veakontroll on realiseeritud 32 bitise tsükkelkoodkontrolli meetodil, kus saatepoolel rakendatakse edastamisele kuuluvale andmeplokile 32-bitist polünoomi, mille tulemusena saadav kood lisatakse plokile. Vastuvõtupoolel rakendatakse andmeplokile sama polünoomi ja kui tulemused kokku langevad, loetakse andmeedastus õnnestunuks.

802.3 standardile vastav Etherneti kaader koosneb 8 baidi pikkusest preambulast. Preambula koosseisus on SFT (inglise k. Start Frame Delimiter), mis sisaldab biti jagu sünkroniseerimiseks vajalikku informatsiooni (“10101011”). SFT võimaldab lihtsalt saabuva uue paketi kindlaks teha. Järgmised kaks korda kuus baiti sisaldavad sihtkoha ja saatja MAC aadressi, mis kumbki on 48 bitti pikad.

Etherneti kaader

Järgmised kaks baiti kirjeldavad andmete segmendi pikkust. Nendele järgneb andmesegment (baidid 46 kuni 1500). Standardi 802.3 järgi saab maksimaalne andmete segmendi pikkus olla 1500 MTU (inglise k. the Maximum Transmission Unit). LLC, SNAP ja PPPoE korral on maksimaalne pikkus kõigest 1492 MTU-d. Muude Etherneti tüüpide korral võib andmete segmendi pikkus olla vahemikus 1500 kuni 9000 MTU-d. Viimased 4 CRC baiti on veakontrolliks.

NÄITEKOOD

Kodulabori teegis on funktsioonid lihtsa veebiserveri loomiseks. Allpooltoodud näiteprogramm loob IP aadressile 192.168.1.100 veebilehe, millel oleva lingi kaudu on võimalik lülitada sisse ja välja kontrolleri plaadil olevat LED-i.

#include <string.h>
#include <homelab/module/ethernet.h>
#include <homelab/pin.h>
 
//	Veebilehe koostamiseks eraldi funktsioon
uint16_t ethernet_load_webpage(uint8_t on_off);
 
// MAC ja IP peavad olema unikaalsed oma kohtvõrgus,
// kahte ühesugust aadressi ei saa olla seadmetel.
// See MAC on suvaliselt võetud (üldjuhul pole vaja muuta)
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};
 
// IP vastavalt kohtvõrgule (viimane number valida ise)
static uint8_t myip[4] = {192,168,1,100};
 
//andmejada pikkus
static uint16_t gPlen; 
 
//Andmete puhvri suurus #define BUFFER_SIZE 600 static uint8_t buf[BUFFER_SIZE+1];   //LED PB7 muutuja määramine pin debug_led = PIN(B, 7);     int main(void) {   uint16_t pktlen; char *str;
 
// LED PB7 on väljund pin_setup_output(debug_led);   // Etherneti initseerimine vastavalt etteantud aadressidele ethernet_init(mymac, myip);
 
while(1) { // Võtab vastu pakette, kuni saab endale määratud andmetega paketi pktlen=ethernet_get_packet(BUFFER_SIZE, buf);   // Teeb paketi eeltöötluse ja vastab "ping" paketile. Tagastab paketi URL-i. gPlen=ethernet_analyse_packet(buf,pktlen);   // Kui on URL-is on infot, siis hakkab seda analüüsima if (gPlen!=0) {
// Laeb URL-i aadressiosa viita "str". Olgu veel öeldud, et //URL-is on neli esimest kohta IP aadressi numbrid. str = (char *)&(buf[gPlen+4]);   // Otsib URL-ist stringi "/1" if (strncmp("/1",str,2)==0) { // Laeb veebilehe gPlen = ethernet_load_webpage(0);   // LED põlema pin_clear(debug_led);
 
} // Järgmisena otsib URL-ist stringi "/0" else if (strncmp("/0",str,2)==0) { // Laeb veebilehe gPlen = ethernet_load_webpage(1);   // LED kustutada pin_set(debug_led);   } // Muul juhul lae veebileht vastavalt LED olekule else
{
gPlen=ethernet_load_webpage(pin_get_value(debug_led)); }
 
// Kuva varem valmis laetud veebileht ethernet_print_webpage (buf,gPlen);
 
} } return (0); }     // Veebileht laetakse kuvamiseks kirjutades andmed TCP saatmise puhvrisse uint16_t ethernet_load_webpage(uint8_t on_off) { uint16_t plen=0;
 
// Laeb html koodi saatmiseks puhvrisse // Need suured stringid on salvestatud PSTR makro abil programmimälusse, // et mitte raisata liigselt töömälu.   // Laeb veebilehe päise plen=ethernet_load_data(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"));   plen=ethernet_load_data(buf,plen,PSTR("<center><p>Homelab PB7 LED: "));   // Kui LED ei põle, siis kuva nii. if (on_off) { plen=ethernet_load_data(buf,plen,PSTR("<font color=\"#00FF00\"> OFF</font>")); } // Kui LED põleb. else { plen=ethernet_load_data(buf,plen,PSTR("<font color=\"#FF0000\"> ON</font>")); } // Lae "Refresh" nupp plen=ethernet_load_data(buf,plen,PSTR(" <small><a href=\".\">[refresh status]</a></small></p>\n<p><a href=\"."));   // Lae LED oleku muutmise nupp vastavalt selle olekule. if (on_off) { plen=ethernet_load_data(buf,plen,PSTR("/1\">Switch on</a><p>"));   } else { plen=ethernet_load_data(buf,plen,PSTR("/0\">Switch off</a><p>"));   }
 
// Väljasta andmete lõpu aadress puhvris return(plen); }

 

ENESEKONTROLL

Vastates alljärgnevatele küsimustele, saad proovida oma teadmisi antud teema kohta

Milline levinud võrk kasutab Ethernet standardit?
Vali õige vastus

CAN andmesidevõrk autodes
Andurite ja täiturite võrgustik mikrokontrolleris
Internet
RS-232 protokollil toimiv tööstuskontrollerite võrk

Mille määrab Ethernet standard?
Vali õiged vastused

Pistikute ja juhtmete tüübi
Andmevahetuse formaadi
Mälumahu

Milliseid pakette sisaldab Etherneti kaader?
Vali õiged vastused

Andmeedastuse kiirust
MAC aadressi
Ülekantavaid andmeid
Etherneti kaardi nime
Saatja nime

Kas Robootika Kodulaboris käivitatud veebiserveri kaudu saab üle interneti juhtida kontrolleri viikude olekuid (lülitades neid sisse või välja)?
Vali õige vastus

Ei
Jah

Millised olulised parameetrid tuleb määrata mikrokontrolleris veebiserveri käivitamiseks?
Vali õiged vastused

MAC aadress
Kasutaja nimi
IP aadress
Litsentsi tingimused

LISAMATERJAL

  1. Robootika Kodulabor - Ethernet
  2. Etherneti kiibi ENC28J60 andmeleht

Teoreetilise osa algtekstide autor: Raivo Sell ja Heiko Pikner