Come utilizzare NTP con Aduino Leonardo

Posto su

Come funziona l'NTP?

NTP utilizza i pacchetti UDP/IP per il trasferimento dei dati a causa della rapida configurazione della connessione e dei tempi di risposta. Il numero di porta ufficiale per l'NTP (con cui ntpd e ntpdate ascoltano e parlano) è 123. L'unità di tempo è in secondi e l'epoca è 1 gennaio 1900.

Il timestamp NTP è un valore binario a 64 bit, costruito da un valore di secondi senza segno a 32 bit e una parte frazionaria a 32 bit. In questa notazione il valore 3.5 sarebbe rappresentato dalla stringa a 64 bit:

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

Se prendi tutti i bit come un numero intero senza segno a 64 bit, lo memorizzi in una variabile a virgola mobile con almeno 64 bit di mantissa (di solito doppia) e fai una divisione a virgola mobile per 2 ^ 32, otterrai il risposta esatta. Su un Arduino standard, sfortunatamente, non abbiamo 64 bit doppi ma la maggior parte degli RTC ha solo informazioni di secondo livello, quindi non è necessario ottenere la seconda metà (o il primo byte possibilmente) Solo i primi quattro byte di un pacchetto NTP in uscita devono essere impostato per ciò che vogliamo ottenere

opportunamente, il resto può essere qualsiasi cosa.

I campi di intestazione del messaggio NTP sono i seguenti:

  • Indicatore di salto LI (2 bit)
    • Questo campo indica se all'ultimo minuto del giorno corrente deve essere applicato un secondo intercalare. Seguono i valori del campo:
      • 0: nessuna regolazione del secondo intercalare
      • 1: l'ultimo minuto della giornata ha 61 secondi
      • 2: L'ultimo minuto della giornata ha 59 secondi
      • 3: L'orologio non è sincronizzato
  • VN Numero versione NTP (3 bit) (la versione corrente è 4).
  • Modalità Modalità pacchetto NTP (3 bit)
    • Seguono i valori del campo Mode:
      • 0: riservato
      • 1: Simmetrico attivo
      • 2: passivo simmetrico
      • 3: Cliente
      • 4: servitore
      • 5: Trasmissione
      • 6: messaggio di controllo NTP
      • 7: Riservato per uso privato
  • Livello di strato della sorgente temporale (8 bit)
    • Seguono i valori del campo Stratum:
      • 0: non specificato o non valido
      • 1: server primario
      • 2–15: server secondario
      • 16: non sincronizzato
      • 17–255: riservato
  • Poll Intervallo di polling (intero con segno a 8 bit)
    • Il valore log2 dell'intervallo massimo tra messaggi NTP successivi, in secondi.
  • Precisione Precisione dell'orologio (intero con segno a 8 bit)
    • La precisione dell'orologio di sistema, in log2 secondi.
  • NTP primi quattro byte 0xEC0600E3

Questa è l'intestazione della richiesta NTP ma abbiamo bisogno solo dei primi 32 bit. Definiamo la DIMENSIONE DEL PACCHETTO NTP che è 48 byte perché il timestamp NTP è nei primi 48 byte del messaggio dopo una query riuscita, otterremo una risposta di 48 byte dal server NTP.

Per comprendere la struttura di una query e risposta NTP vedere http://www.cisco.com/c/en/us/about/press/internet-protocol-journal/back-issues/table-contents-58/154-ntp.html

Quindi, se vogliamo leggere il "Transmit Timestamp", allora dobbiamo leggere la parte intera che è il byte 40,41,42,43 se vogliamo arrotondare al secondo più vicino se vogliamo una certa precisione allora la parte frazionaria è il byte 44, 45,46,47 se è maggiore di 500ms il byte 44 sarà > 128 e quindi controllando solo il byte 44 della risposta, possiamo arrotondare al secondo successivo; Il 90% dei server NTP presenta ritardi di rete inferiori a 100 ms

Possiamo anche tenere conto di un ritardo di rete medio presunto di 50 ms, e quindi invece di confrontare con 128 puoi confrontare con (0,5 s - 0,05 s) * 256 = 115;

Pagina corrente 3. Come funziona l'NTP? 1. introduzione 2. Lo Schema 3. Come funziona l'NTP? 4. Modulo DS3231 5. L'LCD 6. L'ESP8266 7. Programma completo Pubblicato da

Commenti

Webwinkelkeur Kiyoh Trustpilot Opencircuit