Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:enc28j60

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
2014:enc28j60 [2015/01/18 18:49]
Milan Kotulek
2014:enc28j60 [2015/01/18 19:04] (aktuální)
Milan Kotulek
Řádek 13: Řádek 13:
  
 ===== Blokové schéma a zapojení ===== ===== Blokové schéma a zapojení =====
-{{ :​2014:​2015-01-17_15.35.53.jpg?​200|}}{{ :​2014:​enc28j60.png?​400 |}}+ 
 +{{ :2014:enc28j60:​2015-01-17_15.35.53.jpg?​200|}}{{ :​2014:​enc28j60:​block_schema_enc28j60.png?400 |}}
 ===== Zpracování ===== ===== Zpracování =====
 Projekt byl zpracován v prostředí [[http://​developer.mbed.org/​|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 [[http://​developer.mbed.org/​users/​hudakz/​code/​HTTPServer_Echo_ENC28J60/​|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. Projekt byl zpracován v prostředí [[http://​developer.mbed.org/​|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 [[http://​developer.mbed.org/​users/​hudakz/​code/​HTTPServer_Echo_ENC28J60/​|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.
Řádek 19: Řádek 20:
 \\ 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. \\ 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.
  
-{{:​2014:​enc28j60_spi.png?​150 |}} 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 tedy 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 ) takže se musí posílat po osmi bytech. +{{:2014:enc28j60:​enc28j60_spi.png?​150 |}} 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 tedy 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 ) takže se musí posílat po osmi bytech. 
-\\ {{:​2014:​spi_read.jpg?​150 |}} Tak jsem zkusil přečíst kontrolní regist jak ukazuje obrázek vlevo. Další problém. Jak něco přečíst? Návod v knihovně doporučuje postup ukázaný níže. Přímo funkce na čtení totiž neobsahuje. Vyzkoušel jsem tedy přečíst hodnoty registrů - měnil jsem adresu a stále nula. Zkusil jsem i zapsat do registrů a přečíst zpět jeho hodnotu, ale nic. Takto se číst nedá, nebo dělám něco špatně, ale nevím co. Nějaký příklad jak se vypořádat s SPI komunikaci jsem hledal, bohužel nenašel. Takže netuším co dělám špatně.+\\ {{:2014:enc28j60:​spi_read.jpg?​150 |}} Tak jsem zkusil přečíst kontrolní regist jak ukazuje obrázek vlevo. Další problém. Jak něco přečíst? Návod v knihovně doporučuje postup ukázaný níže. Přímo funkce na čtení totiž neobsahuje. Vyzkoušel jsem tedy přečíst hodnoty registrů - měnil jsem adresu a stále nula. Zkusil jsem i zapsat do registrů a přečíst zpět jeho hodnotu, ale nic. Takto se číst nedá, nebo dělám něco špatně, ale nevím co. Nějaký příklad jak se vypořádat s SPI komunikaci jsem hledal, bohužel nenašel. Takže netuším co dělám špatně.
  
 <code c> <code c>
Řádek 41: Řádek 42:
  
 ==== Příjem paketu ==== ==== Příjem paketu ====
-{{ :​2014:​spi_paket.jpg?​200|}} Po inicializaci je ještě třeba nastavit bity pro povolení přerušení s příjmem paketu a celkově povolit příjem. Poté již pakety, které projdou filtrem jsou zapsány do kruhové paměti přijímacího bufferu. Ostatní které filtr nepustí jsou ztraceny. Jakmile je přijat a zapsán je reg. EPKTCNT inkrementován,​ bit EIR.PKTIF nastaven, a je vygenerováno přerušení. Vlevo je ukázán formát zapsaného paketu v paměti. //Receive Status Vector// informuje o jaký typ se jedná či zda nedošlo k CRC chybě atd. Samotná data následují a obsahují adresy komunikujících,​ informaci o délce, typu dat a data samotná.+{{ :2014:enc28j60:​spi_paket.jpg?​200|}} Po inicializaci je ještě třeba nastavit bity pro povolení přerušení s příjmem paketu a celkově povolit příjem. Poté již pakety, které projdou filtrem jsou zapsány do kruhové paměti přijímacího bufferu. Ostatní které filtr nepustí jsou ztraceny. Jakmile je přijat a zapsán je reg. EPKTCNT inkrementován,​ bit EIR.PKTIF nastaven, a je vygenerováno přerušení. Vlevo je ukázán formát zapsaného paketu v paměti. //Receive Status Vector// informuje o jaký typ se jedná či zda nedošlo k CRC chybě atd. Samotná data následují a obsahují adresy komunikujících,​ informaci o délce, typu dat a data samotná.
  
  
2014/enc28j60.1421603348.txt.gz · Poslední úprava: 2015/01/18 18:49 autor: Milan Kotulek