Zpět

Ethernet

Jakub Laník
kubanecxxx|at|gmai|dot|com

Obsah

Úvod

Cílem této části projektu bylo navrhnout napojení fyzické vrstvy (DP83848) na procesor STM32F407 pomocí rozhraní RMII + SMI. V další fázi bylo potřeba rozchodit vlastní komunikaci mezi procesorem a fyzickou vrstvou + komunikace s jiným zařízením (PC).

V další fázi následovala implementace vyšších síťových vrstev, v tomto případě IP vrstva a TCP/UDP vrstva. Potom také implementace protokolu ARP a ICMP.

Všechny tyto věci budou použity v naší diplomové práci.

Realizace

Schéma zapojení části s fyzickou vrstvou je na obrázku 1. Je zde potřeba zmínit, že již při komunikaci mezi procesorem a fyzickou vrstvou ve směru od PHY k procesoru pomocí RMII dochází k chybným přenosům dat. Tento fakt je z vysokou pravděpodobností způsoben použitím krystalu na frekvenci 50MHz, výrobce ovšem doporučuje použít hotový oscilátor na této frekvenci. (Bude vyzkoušeno hned po odevzdání projektu z důvodu dodávky oscilátoru domů a nikoliv na koleje). Další problém by mohl být špatný layout plošného spoje.

Schéma zapojení
Obrázek 1: Schéma zapojení fyzické vrstvy

Jelikož většinu času na projekt zabraly HW problémy, tak firmwarová část vychází z example kódů přímo od ST pro jiný procesor. Tyto kódy bylo nutno přeportovat na konkrétní typ procesoru STM32F407VG6. Původní zdrojové kódy jsou ke stažení zde. Jedná se o portovaný LWIP TCP/IP stack pro STM32.

Vlastní portování spočívalo primárně v úpravě souboru ethernet/stm32f4x7_eth_bsp.h kde bylo potřeba přepsat konkrétní piny rozhraní RMII/SMI. Upravené zdrojové kódy je možno stáhnout zde

Demonstrace posílá každých 5s broadcast paket v přerušení od systick timeru.

Projekt je napsán v Eclipse doplněné pluginem pro ARM, použitý kompilátor arm-none-eabi-gcc (Přímo stažené binárky Sourcery G++ Lite), tento kompilátor neumí použít hardwarové instrukce na počítání s floatem. Přímá kompilace ze zdrojových kódů skončila po několika hodinách chybou...

Nástroj pro ladění byl použit Openocd, který vytvoří GDB server, ke kterému se připojí arm-none-eabi-gdb přes Eclipse. Touto kombinací je možno kód nahrávat a krokovat přímo uvnitř procesoru. Nutno podotknout, že celý vývojový toolchain je dostupný plně zdarma pro různé operační systémy bez jakéhokoliv omezení velikostí kódu nebo počtu použitých breakpointů.

Závěr

Závěrem screenshot z programu Wireshark a výpis konzole s pingem na procesor. Velký problém byl (a ještě stále je) jak již bylo psáno výše chybné přijímání rámců z PHY do procesoru. Při použití loopbacku (to co PHY přijme přes RMII tak hned odešle zpět přes RMII) docházelo k chybám.

V rámci projektu byl vyzkoušen ještě jeden integrovaný obvod na fyzickou vrstvu KSZ8031RNL který vyžaduje pouze 25MHz krystal pro RMII. Ovšem nebylo dost času dotáhnout to do konce. Bylo by vhodné tento integrovaný obvod používat v budoucnu protože je daleko levnější a nevyžaduje drahý oscilátor. Jeho zásadní nevýhoda je pouzdro LGA s roztečí 0.5mm, což lze v amatérských podmínkách zapájet velmi složitě. (Já jsem použil troubu na pečení). Další problém je neochota ze strany místní dílny, kde nejsou schopni vyrobit desku s tloušťkou čar/mezer 0.2/0.2mm, takže opět domácí výroba v kůlně.

Wireshark
ping

Download

projekt.zip - projekt s funkčním ethernetem na procesor STM32F407