Čeština / English
Login

Aplikace / Synchronizace času pomocí SNTP

Autor: Zdeněk Vašíček ()

Abstrakt: Jednoduchá aplikace umožňující zjistit aktuální čas prostřednictvím sítě Ethernet

Update: 20110101

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.

1. Popis aplikace

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.

2. Zprovoznění aplikace

  1. připojte k FITkitu rozšiřující modul Ethernet obsahující ENC28J60 a připojte modul do sítě LAN

  2. přeložte aplikaci

  3. naprogramujte MCU a FPGA a spusťte terminálový program

  4. 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.

Zobrazeno: 3803x Naposledy: 3.6.2023 16:11:15