Seperti yang saya mengerti, RTC diperlukan untuk melacak waktu. Namun, Raspberry Pi tidak memilikinya dan menggunakan server NTP untuk menyinkronkan waktunya.
Semua itu baik-baik saja, tetapi bagaimana Pi tahu bahwa satu milidetik atau satu detik telah berlalu. Bagaimana Pi menyadari berlalunya waktu?
timekeeping
rtc
AppleGrew
sumber
sumber
Jawaban:
Operasi RTC
Kekurangan RaspberryPi adalah RTC yang didukung baterai (Real Time Clock). Perangkat itu dapat bekerja secara independen dari komputer utama dan melacak waktu yang berlalu meskipun saat dimatikan (inilah sebabnya ia memiliki baterai sendiri). Ini dapat bekerja dengan cara yang sangat sederhana - ia memiliki osilator frekuensi yang diketahui terhubung dan pada setiap pulsa osilator, ia akan menambah timer / penghitung internal. Karena frekuensi diketahui, mudah untuk menghitung waktu yang berlalu berdasarkan penghitung. Perangkat juga akan memiliki baterai sehingga dapat terus bekerja bahkan ketika daya eksternal mati.
Beberapa perangkat RTC mungkin lebih canggih. Mereka dapat, misalnya, membuat interupsi dalam frekuensi yang dapat diprogram atau dalam mode alarm (diatur ke waktu tertentu di masa depan atau ke waktu tertentu setiap hari, dll). Ini tidak relevan untuk menjaga waktu sistem dan bersifat opsional.
Bagaimana RTC digunakan
Komputer dapat menanyakan RTC jam berapa sekarang (atau lebih tepatnya - berapa nilai penghitungnya) pada waktu boot dan menetapkan tanggal / waktu internal berdasarkan nilai ini. Mulai sekarang, bagaimanapun, komputer tidak akan meminta RTC untuk waktu setiap detik / milidetik / mikrodetik. Sebagai gantinya, ia akan menjalankan jamnya sendiri (disebut waktu sistem), biasanya menggunakan timer / penghitungnya sendiri. Sama seperti di RTC, timer / penghitung clock dengan frekuensi yang dikenal sehingga mudah untuk menghitung waktu berlalu.
Anda dapat memaksa sistem Anda untuk menyinkronkan jamnya dengan perangkat RTC (di kedua arah) tetapi itu tidak akan terjadi sampai diminta. Beberapa sistem dikonfigurasikan untuk menyimpan waktu sistem dalam RTC ketika mematikan atau setelah sinkronisasi NTP, misalnya.
Kekurangan RTC
RaspberryPi, seperti banyak komputer papan tunggal murah, tidak memiliki perangkat RTC eksternal. Ini berarti tidak dapat meminta waktu saat ini saat boot. Tetapi seperti yang telah disebutkan - ini bukan masalah jika kita bisa mendapatkan tanggal / waktu dari sumber lain (seperti NTP). Satu-satunya kelemahan adalah bahwa tidak seperti RTC, Anda tidak dapat meminta NTP pada boot awal (karena Anda pertama kali membutuhkan koneksi jaringan).
Jadi untuk langsung menjawab pertanyaan Anda - tidak peduli apakah RaspberryPi (atau komputer lain) memiliki RTC atau tidak, itu akan melacak waktu menggunakan timer / alat penghitung internal yang tersedia di hampir setiap sistem komputer dan diharuskan menjalankan hampir semua jenis komputer sistem operasi.
Waktu di Linux
Aplikasi userspace di Linux dapat menentukan apa yang disebut
calendar time
(yang merupakan waktu di dunia nyata) menggunakangettimeofday()
fungsi yang kemudian memanggil panggilanclock_gettime()
sistem. Apa yang terjadi sekarang sedikit rumit karena banyak fitur canggih yang dimiliki kernel Linux (seperti namespaces dll). Tetapi dasarnya adalah bahwa kernel mempertahankan waktunya berdasarkanjiffies
. Ini sebenarnya hanya variabel di dalam kernel (biasanya lebar 64bit) yang menghitung jumlah kutu sejak sistem dimulai.Kutu dihasilkan oleh pengatur waktu perangkat keras dengan
interrupts
.jiffies
nilai bertambah pada setiap interupsi tersebut. Pengatur waktu perangkat keras dikonfigurasikan untuk menghasilkan interupsi seperti itu secara berkala. Interval dikonfigurasikan pada saat boot sesuai dengan nilaiHZ
parameter konfigurasi kernel.Pada waktu tertentu, kernel tahu berapa banyak tick yang dihasilkan dari boot (
jiffies
variabel), ia tahu berapa banyak tick yang dihasilkan setiap detik (HZ
opsi konfigurasi) sehingga dapat dengan mudah menghitung berapa banyak waktu yang dilewati dari boot terakhir.Jadi untuk meringkas - kernel bertanya
RTC
tentangcalendar time
(juga disebutwall clock
) pada saat boot sehingga ia tahu apa waktu sebenarnya ketika sistem dimulai. Itu kemudian menambahkanjiffies/HZ
nilai untuk ini setiap kali aplikasi userspace bertanya berapa kali menggunakanclock_gettime
panggilan sistem.Perangkat penghitung waktu / perangkat keras
Timer / penghitung perangkat keras adalah perangkat yang sangat sederhana. Ia memiliki register penghitung yang menghitung detak jamnya. Kutu jam biasanya dibuat oleh beberapa eksternal
oscillator
(sirkuit elektronik yang menghasilkan sinyal berulang) dan memiliki frekuensi yang diketahui (biasanya berkisar dari beberapa kHz hingga ratusan MHz). Ini berarti bahwa kita dapat dengan mudah menghitung berapa banyak waktu berlalu dengan membagi nilai penghitung dengan frekuensi osilator.Perangkat pengatur waktu dapat diprogram untuk melakukan berbagai hal - dapat menghitung ke atas dan ke bawah, membandingkan penghitung register dengan beberapa nilai. Misalnya dapat membuat sinyal eksternal dan mulai menghitung dari awal ketika register register bernilai tertentu. Dengan cara ini Anda dapat mengkonfigurasi perangkat timer untuk membuat sinyal eksternal pada interval konstan yang jauh lebih rendah daripada frekuensi osilator. Sinyal ini kemudian dapat digunakan sebagai acara interupsi untuk CPU.
Perhatikan bahwa osilator dapat digunakan secara langsung sebagai ganti perangkat penghitung waktu. Yang membedakan alat penghitung waktu / penghitung dari osilator adalah ia dapat diprogram. Jadi Anda dapat menganggap timer / alat penghitung sebagai osilator yang jauh lebih canggih.
sumber
Jam CPU berasal dari kristal. Biasanya Anda dapat mengharapkan 10-20 bagian per juta untuk akurasi jam (sekitar 5-10 menit per tahun)
sumber
Pokoknya untuk menjawab pertanyaan dengan cara yang jauh lebih mudah bersama dengan instruksi untuk menambahkan RTC ke PI Anda, saya akan memasukkan tautan di bawah ini. Tergantung pada apakah Anda hanya ingin metode yang dapat diandalkan selain menggunakan inet / ntp cara untuk memberitahu waktu atau memerlukan metode yang sangat tepat saya akan merekomendasikan pergi dengan RTC "Chronodot". Kalau tidak, papan breakout RTC akan bekerja dengan baik dan sangat mudah untuk bekerja semua yang Anda perlu setup adalah I2C untuk memiliki PI berkomunikasi dengan RTC. Info Tautan / materi
sumber