Abstrakt: Jednoduchá aplikace umožňující zjistit aktuální čas prostřednictvím sítě Ethernet
Tato aplikace umožňuje synchronizaci času pomocí protokolu SNTP (Simple Network Time Protocol), což je zjednodušená verze NTP protokolu, která je určená pro embedded zařízení. Protokol NTP je navržen tak, aby byl schopen zajistit, aby všechny počítače v síti obdrželi stejnou časovou informaci i přesto, že v doručování paketů nástávají obecně proměnlivá zpoždění. K tomuto účelu se používá iterativní dotazování. SNTP protokol pracuje nad protokolem UDP a nevyžaduje proto složité operace. Nejjednodušší možnost, jak získat aktuální čas je odeslání SNTP paketu s žádostí o aktuální stav na port s číslem 123 a dle odpovědi získat potřebné údaje (např. datum, čas apod). K zjištění potřebných údajů se používá SNTP server ntp.nic.cz.
V hlavní funkci main aplikace nejprve nainicializuje DHCP klienta tak, abychom získali IP adresu v lokální síti z DHCP serveru a nemuseli ji konfigurovat ručně. Poté následuje volání funkce udp_bind(123, sntp), která zaregistruje callback funkci pojmenovanou sntp, která bude vyvolána při příchodu UDP paketu s cílovým portem číslo 123 (číslo cílového portu lze libovolně změnit). V hlavní smyčce je postupně volána funkce ENC28J60_idle() a následně testován stav DHCP pomocí funkce dhcp_ready().
Při zadání příkazu GET TIME do terminálu se vyvolá postupně následující sekvence příkazů. Pomocí tx_init(UDP_PROTO) se zinicializuje UDP paket v odesílacím bufferu, poté se zapíše pomocí volání funkce tx_write(&sntp_header, SNTP_HEADER_LEN) SNTP paket do bufferu. Zápis je následován dokončením paketu voláním funkce tx_close() a odesláním UDP paketu na port číslo 123 (zdrojový port jsme nastavili též na hodnotu 123). Odeslání je realizováno pomocí volání udp_send(123, 123, CHAR2IP(217,31,205,226)). Makro CHAR2IP převádí IP adresu zadanou jako čtveřici bytů na číslo typu long int. Při příchodu odpovědi na port číslo 123 je načtena odpověď do struktury sntp_header pomocí volání funkce rx_read a následuje zjištění informací o datu a čase a jejich výpis do terminálu.
připojte k FITkitu rozšiřující modul Ethernet obsahující ENC28J60 a připojte modul do sítě LAN
přeložte aplikaci
naprogramujte MCU a FPGA a spusťte terminálový program
jakmile aplikace obdrží odpověď od DHCP serveru, je odeslán požadavek na aktuální čas
Aplikace nevyžaduje ke své činnosti nastavit kromě propojek umožňujících programování další propojky.