Obsah

Zadání

Navrhněte zařízení využivajíci vlastní ethernet modul (STM32F4 + LAN8720A), sloužíci k zasílaní tzv. Magic paketu. Cílová adresa pro Magic packet bude nastavitelná pomocí HTTP rozhraní.

Úvod

Cílem tohoto projektu je navrhnou vlastní ethernet modul pro STM32F4DISCOVERY desku. Tento ethernet modul musí být kompatibilní s oficiálním STM32F4-BB deskou. STM32F4 procesor pro stisk tlačitka USER a po přijetí události odešle nastavený počet Magic paketů na broadcast dané počitačové síté ( nebo globální bradcast).

Pro konfiguraci bude FW obsahovat primitivní HTTP server s jedinou stránkou. Parametry budou předány metodou GET.

Hardware

- Vývojový kit STM32F4DISCOVERY - Vlastní LAN 8720A ethernet shield:

Ethernet shield je zhotoven v domácích podnínkách na FR4 desku. QFN24 je zapájeno následujícím způsobem:

Finální verze desky je zde. Jde o vygenerované gerber data. Oproti předchozí verzi je ořezaná o nepotřebnou plochu.

Firmware

Základ projektu je vygenerován v prostředí STCubeMX. Zde jsou vybrány komponenty FreeRTOS a LwIP stack. Následně je základ projektu skompilován a doplěn o blikání diodou pro ověření kompilačniho a programovacího flow.

Utility:

Jako API pro síťovou komunikaci byly zvoleny UNIX sockety. Práce se scokety se značně podobá práci se soubory a dokumentace je jednoduše dostupná. Není však možné ji použít bez kooperativního multitaskingu (volání jsou blokující).

Semihosting

Pro zprovoznění semihostingu je třeba mít OpenOCD verze alespň 0.10.0-dev-00419-gbcaf775.

HTTP server

Zařízení bude poslouchat na portu 80 a reagovat na následující dotazy:

GET / HTTP/1.1
(Ignore all nonempty lines)
GET /save?target=(MAC) HTTP/1.1
(Ignore all nonempty lines)

Příklad odpovědí:

HTTP/1.1 200 OK

(content...)
HTTP/1.1 404 Not found

(content...)

HTTP odpovědi stačí poslat bez hlaviček a následně ukončit spojení. Jedná se o odpověď dle staršího HTTP standardu ale prohlížeče ji dokáží pochopit.

Wake on lan

Magic packet typicky posílaný jako UDP na port 0,7 nebo 9. Struktura není pevně daná, paket musí obsahovat následující data (kdekoli v těle):

FF FF FF FF FF FF
(target MAC)*16

Debugging LwIP stacku

Pro potřeby ladění je vhodné zapnout debug výpisy z LwIP stacku. Pro jejich povolení je třeba:

Pro první testování je vhodné zařízení připojit přímo k počítači bez switche v cestě. Switche typu store-forward zahodí poškozené pakety.

FreeRTOS: pokud aplikace padá na assertion v port.c:752 přidat následující řádek před spuštěním Sheduleru: HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);

Zdrojové kódy

Zdrojové kódy jsou k dispozici zde.

Video

Závěr

Návrh modulu byl poměrně přímočarý. Výroba prototypu nebyla problém i přez velmi malé pouzdor čipu LAN8720A. Oživení modulu bylo lehce komplikovanější, kvůli chybně zapájenému vývodu na desce. Chyba nebyla přímo viditelná kvůli použitému switchi store-and-forward. Při přímém propojení zařízení a PC byla tato chyba vyditelná v Wiresharku. Po prozkoumání dat byla oprava triviální.

Návrh na rozšíření: