Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
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á. |