Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2016:ethernetwol

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:

  • Vyvrtána díra 2mm uprostřed Thermal padu
  • QFN24 pomocí horkého vzduchu připájeno na desku a zkontrolováno pro mezi vývodové skraty
  • Z druhé strany je ocínován Thermal pad a celá 2mm díra je postupně zalita cínem

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:

  • STCubeMX
  • gcc-arm-none-eabi toolkit
  • gdb-arm-none-eabi a openocd pro programování a debugging
  • gnu make
  • vim

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:

  • Nadefinovat symbol LWIP_DEBUG
  • Změnit definici LWIP_PLATFORM_DEBUG v Middlewares/Third_Party/LwIP/system/arch/cc.h na „do{printf message;}while(0)“ (ano bez zavorek za printf)
  • V souboru Middlewares/Third_Party/LwIP/src/include/lwip/debug.h změnit LWIP_DEBUG_ON a LWIP_DEBUG_OFF na 0xF0

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í:

  • detekce MAC adresy na základě zadané IP
  • vlastní HW bez nutnosti použití DISCOVERY kitu
  • vyhledání zařízení na lokální síti
2016/ethernetwol.txt · Poslední úprava: 2017/01/14 13:45 autor: Lukáš Vykydal