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 Opencircuit