Sådan bruger du NTP med Aduino Leonardo

Placeret på

Hvordan virker NTP?

NTP bruger UDP/IP-pakker til dataoverførsel på grund af den hurtige forbindelsesopsætning og svartider. Det officielle portnummer for NTP'en (som ntpd og ntpdate lytter til og taler til) er 123. Tidsenheden er i sekunder, og epoken er 1. januar 1900.

NTP-tidsstemplet er en 64-bit binær værdi, bygget af en usigneret 32-bit sekunders værdi og en 32-bit brøkdel. I denne notation vil værdien 3,5 være repræsenteret af 64-bit strengen:

0000|0000|0000|0000|0000|0000|0000|0011 . 1000|0000|0000|0000|0000|0000|0000|0000

Hvis du tager alle bits som et 64-bit heltal uden fortegn, gemmer det i en variabel med flydende komma med mindst 64 bit mantisse (normalt dobbelt) og laver et flydende komma divider med 2^32, får du rigtige svar. På en standard Arduino har vi desværre ikke 64 bit doubler, men de fleste RTC har kun andet niveau info, så det er ikke nødvendigt at hente den anden halvdel (eller første byte muligvis) Kun de første fire bytes af en udgående NTP-pakke skal være indstillet på, hvad vi ønsker at opnå

passende, resten kan være hvad som helst.

Overskriftsfelterne for NTP-meddelelsen er som følger:

  • LI Leap Indicator (2 bit)
    • Dette felt angiver, om det sidste minut af den aktuelle dag skal have et springsekund. Feltværdierne følger:
      • 0: Ingen springsekundjustering
      • 1: Dagens sidste minut har 61 sekunder
      • 2: Dagens sidste minut har 59 sekunder
      • 3: Uret er usynkroniseret
  • VN NTP-versionsnummer (3 bit) (nuværende version er 4).
  • Mode NTP-pakketilstand (3 bit)
    • Værdierne i feltet Tilstand følger:
      • 0: Reserveret
      • 1: Symmetrisk aktiv
      • 2: Symmetrisk passiv
      • 3: Kunde
      • 4: Server
      • 5: Udsendelse
      • 6: NTP-kontrolmeddelelse
      • 7: Forbeholdt privat brug
  • Tidskildens lagniveau (8 bit)
    • Værdierne for Stratum-feltet følger:
      • 0: Uspecificeret eller ugyldig
      • 1: Primær server
      • 2–15: Sekundær server
      • 16: Usynkroniseret
      • 17–255: Reserveret
  • Afstemning Afstemningsinterval (8-bit signeret heltal)
    • Log2-værdien for det maksimale interval mellem på hinanden følgende NTP-meddelelser i sekunder.
  • Præcision ur præcision (8-bit signeret heltal)
    • Præcisionen af systemuret i log2 sekunder.
  • NTP første fire bytes 0xEC0600E3

Dette er NTP-anmodningshovedet, men vi har kun brug for de første 32 bit. Vi definerer NTP-PAKKESTØRRELSEN dette er 48 bytes, fordi NTP-tidsstemplet er i de første 48 bytes af beskeden efter en vellykket forespørgsel, vi vil få et 48-byte svar fra NTP-serveren.

For at forstå strukturen af en NTP-forespørgsel og svar, se http://www.cisco.com/c/en/us/about/press/internet-protocol-journal/back-issues/table-contents-58/154-ntp.html

Så hvis vi vil læse "Transmit Timestamp", så skal vi læse heltalsdelen, som er bytes 40,41,42,43, hvis vi vil runde af til nærmeste sekund, hvis vi vil have en vis nøjagtighed, så er brøkdelen byte 44, 45,46,47 hvis den er større end 500ms vil byte 44 være > 128 og ved kun at kontrollere byte 44 i svaret kan vi runde af til næste sekund; 90 % af NTP-serverne har netværksforsinkelser på under 100 ms

Vi kan også tage højde for en antaget gennemsnitlig netværksforsinkelse på 50ms, og man kan altså i stedet for at sammenligne med 128 sammenligne med (0,5s - 0,05s) * 256 = 115;

Nuværende side 3. Hvordan virker NTP? 1. Introduktion 2. Skematisk 3. Hvordan virker NTP? 4. DS3231 modul 5. LCD-skærmen 6. ESP8266 7. Fuldt program Sendt af

Kommentarer

Webwinkelkeur Kiyoh Trustpilot Opencircuit