Using the Real-Time Clock
RPi900 includes a PCF8523 real-time clock chip, connected to the I²C bus of the Raspberry Pi. The chip maintains system time in the absence of a network connection and, with backup battery, in the absence of power.
Using the Clock
The Raspberry Pi Arch Linux ARM distribution incorporates a driver module for the PCF8523 chip. The rpi900-rtc package enables the driver, causing the chip to automatically load as the
rtc0 device. System time will also synchronised from the chip automatically during the boot sequence. Build and install the package as follows:
Then reboot to load the
/dev/rtc0 clock device. Initially you will need to set time on the real-time clock from system time via NTP:
Along with the
hwclock command, you can also read the hardware clock using its sysfs attributes, although results are in UTC:
Compensating for Clock Drift
Like any other electronic clock, the RPi900 real-time clock is subject to drift. The RPi900 clock crystal tolerance is specified as ±20 ppm, corresponding to a drift of up to 1.7 seconds per day. Other factors such as temperature and aging also affect drift.
Linux can compensate for systematic clock drift. One simple way is to issue a second
hwclock --systohc command after several weeks. (You’ll need network access for the correct time while you do this.) As described in
man hwclock, this command compares system time to clock time and records an estimate of drift. Subsequent boots will incorporate this estimate when reading from the clock.
The PCF8523 also has an on-board offset register for drift compensation. Although this feature is not currently implemented in the driver, you could set the value yourself. Consult the datasheet (page 28) for information on the register, then use i2c-tools to manually set the value according to your measurements.
With or without a network connection, the Network Time Protocol daemon (ntpd) will manage your system time in the best way, using the drift calibration you have set up.