Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:enc28j60

Toto je starší verze dokumentu!


Ethernet řadič ENC28J60

Milan Kotulek 2015/01/17 13:34


Zadání:

Připojte řadič ENC28J60 k desce FRDM-KL25Z, zprovozněte TCP/IP stack a vytvořte jednoduchý TELNET server, pomocí kterého bude možné příkazy ovládat RGB LED.


Cílem projektu je vytvořit jednoduchý TELNET server. Základním prvkem je vývojový kit FRDM-KL25Z propojený s obvodem ENC28J60 pomocí sběrnice SPI. Ten dokáže komunikovat přes ethernet s PC.

Blokové schéma

Zpracování

Projekt byl zpracován v prostředí mbed.ogr. V plánu bylo využití jeho výhod, neboli komunitně vytvářených programů. Našel jsem několik projektů o kterých jsem si myslel, že půjdou využít nakonec však žádný ze zde vytvořených nevyhovovalo. Nejblíže tomu co je cílem tohoto projektu je tento projekt, jenž je obsluhou obvodu ENC28J60. Je založen na autorově knihovně pro ENC28J60 desku. Plně potporuje TCP / IP a UDP připojení jak klienta tak serveru, ARP, ICMP, DHCP a DNS.


S jeho implementací jsem narazil na problém, když jsem ho použil objevila se spousta varování snimiž jsem si nevěděl rady. Zkusil jsem je ignorovat a vyzkoušet zda program něco dělá. Lehce se ztrácím v kódu c++, ale je vidět, že obsahuje kontrolu zda je program v běhu a data jsou posílána. Sprovoznil jsem sériovou komunikaci přes COM a zjištoval kde je problém. Nepodařilo se mi však najít kde je problém. Rozhodl jsem se tak pro psaní vlastního programu.

ENC28J60 komunikuje po rozhraní SPI. Celkově se využívá pouze sedmi instrukcí. Kontroler má však celkem 32 registrů dělených do 4 bank, jež se vybírají nastavením ve dvou nejvýznačnějších registrech ECON1/ECON2. Chtěl jsem taky využít mbed SDK funce pro SPI implemetované v knihovně mbed.h, ale ikdyž je u ní napsáno „Number of bits per SPI frame (4 - 16)“ tak tomu tak není.
I příručka KL25Z říká, že obsahuje 2 osmibitové porty SPI. Dovolí tedy zapisovat jen 8 bitů. Tak jsem zkusil přečíst kontrolní regist jak ukazuje obrázek vlevo. Další problém. Jak něco přečíst? přímo funkce na to není a návod v knihovně doporučuje postup ukázaný níže. Vyzkoušel jsem ho tedy i s proměnlivou adresou a nic. Takto se číst nedá.

    spi.format(8,0);// Setup the spi for 8 bit data, high steady state clock,
    spi.frequency(1000000);// second edge capture, with a 1MHz clock rate
 
    cs = 0;// Select the device by seting chip select low
    spi.write(0x1F);  // Send 0x1F, the command to read the ECON1 register
 
    int read = spi.write(0x00); // Send a dummy byte to receive the contents of the WHOAMI register
    pc.printf("register read= 0x%X\n\r", read);

Inicializace

Podle datasheetu ENC28J60 je třeba před zahájením komunikace provést inicializaci. Ta se skládá z:

  • Nastavení přijímacího/ vysílacího bufferu - musí se nastavit ERXST a ERXND ukazatele přičemž všechny adresy mezi těmito včetně nich samotných přestavují přijímací buffer. Takto zbylá část paměti představuje vysílací buffer
  • receive filter - nastavením reg. ERXFCON se dá povolit a nastavit přijímací filter. Ten obsahuje šest přednastavených filtrů pro minimalizaci práce kontroleru ( Unicast / Pattern Match / Magic Packet / Hash Table / Multicast / Broadcast )
  • OST - v případě, že je inicializace provedena okamžitě po ztrátě napájení (restartu), bit ESTAT.CLKRDY by měl zkontrolován, pro kontrolu, že uplynul dostatek času než se bude pokračovat se změnou MAC a PHY registrů.
  • nastaveni MAC - Je třeba nastavit několik registrů majících vztah k MAC během inicializace. Přičemž se toto nastavení provede pouze jednou. Mimo jiné se nastavení závisí na tom, zda se použije plně duplexní provoz. Nastaví se i samotná MAC adresa zařízení.

Příjem paketu


Závěr:

Při tvorbě tohoto projektu mě zastavila neznalost C++ a obsáhlost nastavení ENC28J60. Podařilo se mi vše zapojit a propojit. Dále jsem chtěl využít výhodn online prostředí mbed a to komunitního vývoje, ale program zde již napsaný pro ovládání ENC28J60 je tak složitý, že jsem ho se svou skromnou znalostí C++ nedokázal upravit do provozuschopné podoby. Měl jsem se radši pustit do vlastního projektu od začátku v offline prostředí s čistým C jazykem. Takto jsem prostudoval nastavení řadiče, ale nestihl jsem přijít na to, jak zprovoznit SPI. A bez toho se nedá hnout.


2014/enc28j60.1421598353.txt.gz · Poslední úprava: 2015/01/18 17:25 autor: Milan Kotulek