Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Následující verze | Předchozí verze | ||
|
2016:ethernetwol [2016/11/22 14:47] Lukáš Vykydal vytvořeno - draft |
2016:ethernetwol [2017/01/14 13:45] (aktuální) Lukáš Vykydal |
||
|---|---|---|---|
| Řádek 5: | Řádek 5: | ||
| ====== Úvod ====== | ====== Ú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 bude prosloucht pro přeušení od 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). | + | 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. | Pro konfiguraci bude FW obsahovat primitivní HTTP server s jedinou stránkou. Parametry budou předány metodou GET. | ||
| - | |||
| - | ====== DRAFT ======= | ||
| ====== Hardware ===== | ====== Hardware ===== | ||
| - Vývojový kit STM32F4DISCOVERY | - Vývojový kit STM32F4DISCOVERY | ||
| - | + | - Vlastní LAN 8720A ethernet shield: | |
| + | * Schematic [[http://www.urel.feec.vutbr.cz/MPOA/_media/2016/etherwol_stm32f4_ethernet.pdf ]] | ||
| + | * DPS F.Cu [[http://www.urel.feec.vutbr.cz/MPOA/_media/2016/etherwol_f.cu.pdf]] | ||
| + | * DPS B.Cu [[http://www.urel.feec.vutbr.cz/MPOA/_media/2016/etherwol_b.cu.pdf]] | ||
| - | Schéma ethernet shieldu (alpha) je na (TBD linlk), DPS (TBD link). | + | {{:2016:etherwol_3dpcb.png?300|}} |
| Ethernet shield je zhotoven v domácích podnínkách na FR4 desku. QFN24 je zapájeno následujícím způsobem: | 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 | + | * 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 | + | * 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 | + | * Z druhé strany je ocínován Thermal pad a celá 2mm díra je postupně zalita cínem |
| - | (TBD foto) | + | Finální verze desky je {{ :2016:etherwol_gerber.7z |zde}}. Jde o vygenerované gerber data. Oproti předchozí verzi je ořezaná o nepotřebnou plochu. |
| ======= Firmware ======== | ======= Firmware ======== | ||
| Řádek 31: | Řádek 32: | ||
| Utility: | Utility: | ||
| - | * STCubeMX | + | * STCubeMX |
| - | * gcc-arm-none-eabi toolkit | + | * gcc-arm-none-eabi toolkit |
| - | * gdb-arm-none-eabi a openocd pro programování a debugging | + | * gdb-arm-none-eabi a openocd pro programování a debugging |
| - | * gnu make | + | * gnu make |
| - | * vim | + | * 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: | ||
| + | |||
| + | <code> | ||
| + | GET / HTTP/1.1 | ||
| + | (Ignore all nonempty lines) | ||
| + | |||
| + | </code> | ||
| + | |||
| + | <code> | ||
| + | GET /save?target=(MAC) HTTP/1.1 | ||
| + | (Ignore all nonempty lines) | ||
| + | |||
| + | </code> | ||
| + | |||
| + | Příklad odpovědí: | ||
| + | <code> | ||
| + | HTTP/1.1 200 OK | ||
| + | |||
| + | (content...) | ||
| + | </code> | ||
| + | |||
| + | <code> | ||
| + | HTTP/1.1 404 Not found | ||
| + | |||
| + | (content...) | ||
| + | </code> | ||
| + | |||
| + | 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): | ||
| + | <code> | ||
| + | FF FF FF FF FF FF | ||
| + | (target MAC)*16 | ||
| + | </code> | ||
| + | |||
| + | ==== 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 {{ :2016:ethernetwol.7z | zde}}. | ||
| + | |||
| + | === Video === | ||
| + | |||
| + | {{ youtube>c4wfqEg0cyQ?medium }} | ||
| + | |||
| + | === 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 | ||