Comment utiliser NTP avec l'Aduino Leonardo

Placé sur

Comment fonctionne NTP ?

NTP utilise des paquets UDP/IP pour le transfert de données en raison de la configuration rapide de la connexion et des temps de réponse. Le numéro de port officiel du NTP (que ntpd et ntpdate écoutent et communiquent) est 123. L'unité de temps est en secondes et l'époque est le 1er janvier 1900.

L'horodatage NTP est une valeur binaire de 64 bits, construite à partir d'une valeur de secondes non signée de 32 bits et d'une partie fractionnaire de 32 bits. Dans cette notation, la valeur 3,5 serait représentée par la chaîne 64 bits :

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

Si vous prenez tous les bits comme un entier non signé 64 bits, stockez-le dans une variable à virgule flottante avec au moins 64 bits de mantisse (généralement double) et faites une division à virgule flottante par 2 ^ 32, vous obtiendrez le bonne réponse. Sur un Arduino standard, malheureusement, nous n'avons pas de doubles 64 bits, mais la plupart des RTC n'ont que des informations de deuxième niveau, donc pas besoin d'obtenir la seconde moitié (ou le premier octet éventuellement) Seuls les quatre premiers octets d'un paquet NTP sortant doivent être prêt pour ce que nous voulons réaliser

de manière appropriée, le reste peut être n'importe quoi.

Les champs d'en-tête du message NTP sont les suivants :

  • Indicateur de saut LI (2 bits)
    • Ce champ indique si la dernière minute du jour en cours doit avoir une seconde intercalaire. Les valeurs des champs suivent :
      • 0 : Pas de réglage de la seconde intercalaire
      • 1 : La dernière minute de la journée compte 61 secondes
      • 2 : La dernière minute de la journée compte 59 secondes
      • 3 : L'horloge n'est pas synchronisée
  • Numéro de version VN NTP (3 bits) (la version actuelle est 4).
  • Mode Mode paquet NTP (3 bits)
    • Les valeurs du champ Mode suivent :
      • 0 : Réservé
      • 1 : Symétrique actif
      • 2 : Passif symétrique
      • 3 : Client
      • 4 : Serveur
      • 5 : Diffusion
      • 6 : message de contrôle NTP
      • 7 : Réservé à un usage privé
  • Niveau strate de la source temporelle (8 bits)
    • Les valeurs du champ Stratum suivent :
      • 0 : non spécifié ou invalide
      • 1 : serveur principal
      • 2–15 : Serveur secondaire
      • 16 : Non synchronisé
      • 17–255 : Réservé
  • Intervalle d'interrogation (entier signé 8 bits)
    • La valeur log2 de l'intervalle maximal entre les messages NTP successifs, en secondes.
  • Précision Précision de l'horloge (entier signé 8 bits)
    • La précision de l'horloge système, en log2 secondes.
  • NTP quatre premiers octets 0xEC0600E3

Il s'agit de l'en-tête de requête NTP, mais nous n'avons besoin que des 32 premiers bits. Nous définissons la TAILLE DE PAQUET NTP qui est de 48 octets car l'horodatage NTP se trouve dans les 48 premiers octets du message après une requête réussie, nous obtiendrons une réponse de 48 octets du serveur NTP.

Pour comprendre la structure d'une requête et d'une réponse NTP, voir http://www.cisco.com/c/en/us/about/press/internet-protocol-journal/back-issues/table-contents-58/154-ntp.html

Donc, si nous voulons lire le "Transmit Timestamp", nous devons lire la partie entière qui est les octets 40,41,42,43 si nous voulons arrondir à la seconde la plus proche si nous voulons une certaine précision, alors la partie fractionnaire est l'octet 44, 45,46,47 s'il est supérieur à 500ms l'octet 44 sera > 128 et donc en ne vérifiant que l'octet 44 de la réponse, on pourra arrondir à la seconde suivante ; 90 % des serveurs NTP ont des délais de réseau inférieurs à 100 ms

Nous pouvons également tenir compte d'un délai de réseau moyen supposé de 50 ms, et donc au lieu de comparer avec 128, vous pouvez comparer avec (0,5 s - 0,05 s) * 256 = 115 ;

Page actuelle 3. Comment fonctionne NTP ? 1. Introduction 2. Le schéma 3. Comment fonctionne NTP ? 4. Module DS3231 5. L'écran LCD 6. L'ESP8266 7. Programme complet Posté par

Commentaires

Webwinkelkeur Kiyoh Trustpilot Opencircuit