Wie genau wäre die Zeit auf meinem Raspberry Pi 3, wenn er ständig mit dem Internet verbunden wäre, jedoch ohne RTC?
Wie genau wäre die Zeit auf meinem Raspberry Pi 3, wenn er ständig mit dem Internet verbunden wäre, jedoch ohne RTC?
Da das NTP
-Protokoll versucht, die Netzwerklatenz und andere Verzögerungen zu messen und zu kompensieren, ist es selbst bei Verwendung öffentlicher Zeitserver sehr genau.
RTC
wird verwendet, um die Systemzeit aufrechtzuerhalten, wenn die Stromversorgung unterbrochen wird, und ist nicht unbedingt genau, nachdem Ihr Himbeer-PI gestartet und die Zeit von NTP
RTC
, auch wenn das Netzwerk nicht verbunden ist.
Wenn Sie NTP
verwenden und nicht kontinuierlich mit dem Netzwerk synchronisieren, wird die Systemzeit mit einem Timer verwaltet, der auf der CPU-Uhr basiert.
Bei Ausführung mit einem lokalen Netzwerkzeitserver kann NTP
eine Genauigkeit von <1ms
erreichen.
Bei Überführung Das öffentliche Internet, das dynamische und möglicherweise asymmetrische Routing von Paketen tragen zu einer schlechteren Schätzung der Netzwerkverzögerungen bei. Sie können jedoch eine Genauigkeit von deutlich unter 1s
erwarten, wobei die meisten Dokumentationen über das öffentliche Internet eine Genauigkeit von 100 ms
beanspruchen.
Wenn Sie eine bessere Synchronisierung benötigen, Ohne bessere Genauigkeit können Sie in Betracht ziehen, einen lokalen NTP-Server zu betreiben, um mehrere Himbeer-Pi relativ zueinander mit einer Synchronisation von weniger als 1 ms
zu synchronisieren (gut zum Ausrichten von Sensordaten).
Wenn Sie sowohl Genauigkeit als auch Synchronisation benötigen, können Sie einen Stratum 1-NTP-Server mit GPS als Zeitquelle ausführen.
Laut Wikipedia soll das Network Time Protocol, das standardmäßig auf Raspbian und Millionen anderer vernetzter Geräte und Computer verwendet wird:
alle teilnehmenden Computer synchronisieren Innerhalb weniger Millisekunden
Tatsächlich wird NTP auf Systemen (Servern, PCs usw.) verwendet, die über eine RTC verfügen, um die Drift-Computeruhren zu korrigieren. Das heißt, wenn Sie eine RTC hinzufügen, wird diese genau gehalten, indem genau dieselben Netzwerkmechanismen verwendet werden, die zum Einstellen der "Software" -Uhr des Betriebssystems bereits verwendet werden (was realistisch gesehen an die Prozessorfrequenz gebunden ist, dh, dass sich dort Kristall befindet irgendwo, wo die Zeit effektiv bleibt, während das System eingeschaltet ist).
Das Vorhandensein oder Fehlen von RTC hat nichts mit der Genauigkeit der Zeitmessung zu tun. Es geht lediglich darum, die aktuelle Zeit (eine schlechte Annäherung an die aktuelle Zeit) beim Ausschalten des Geräts beizubehalten, damit die Systemzeit korrekt ist, bevor Sie das Netzwerkgerät und ntpd aufrufen.
Beachten Sie, dass if Wenn Sie eine sichere Remote-Clock-Quelle anstelle von einfachem NTP verwenden möchten, müssen Sie eine ungefähre Vorstellung von der aktuellen Zeit (genau innerhalb einer Monatsskala) haben, um Zertifikate validieren zu können. Dies ist wahrscheinlich der moderne Hauptzweck einer RTC auf Geräten mit Internetverbindung.
Nach Experimenten mit C ++ auf meinem RPI3 (Stretch) mit der Funktion sys / time.h gettimeofday (**) und der wiringPi-API, die dann anhand eines Bereichs gemessen werden, können optimierte Anwendungen eine Auflösung von weniger als einer Millisekunde und eine Genauigkeit beim Timing erzielen.
Wenn Sie jetzt andere Sprachen im RPI verwenden, können Sie diese Geschwindigkeiten möglicherweise nicht erhalten.
Mit einem öffentlichen NTP-Server auf der anderen Seite eines komplexen und ausgelasteten Netzwerks erreichen wir auf mehreren Geräten eine Genauigkeit von mehr als einer Sekunde. Wir benötigen außerdem nur eine Genauigkeit in der Größenordnung von 1s (die die Systemuhr beim Einschalten tagelang beibehalten kann).
Lesen Sie die ntpd-Manpage, jedoch nach der Konfiguration eines Servers Stellen Sie sicher, dass ntpd -g
beim Booten ausgeführt wird. Mit dem -g
kehren Sie zur Echtzeit zurück, wenn die Uhr weit entfernt ist, z. B. nach einem Stromausfall.