How to adjust Hardware RTC clock

From IGEP - ISEE Wiki

Revision as of 12:51, 13 November 2013 by Pau (talk | contribs) (Calculate systematic clock error)

Jump to: navigation, search
Igep community logo.png This is a work in progress article. Help other developers like you in the IGEP Community by improving it!

Overview

Real time clock (RTC) is a computer clock (most often in the form of an integrated circuit) that keeps track of the current time. RTCs are present in almost any electronic device which needs to keep accurate time. More general information here.

In IGEP Boards, MPU and PMIC contains each one a RTC clock:

  • RTC System clock: system clock is controlled by OMAP processors using its internal RTC peripheral. Every bootup, the default firmware copies the hardware clock data from /dev/rtc to system clock data to keeps clock up to date.
  • RTC Hardware clock: hardware clock is controlled by PMIC IC using its internal RTC peripheral. RTC PMIC can afford two behaviours:
    • RTC battery is not used: PMIC RTC peripheral keeps hardware clock alive when OS isn't running and power source is active. If the power source fails, the RTC Hardware clock will lose its clock.
    • RTC battery is used: PMIC RTC peripheral keeps hardware clock alive when OS isn't running and backup battery powers the backup state as far as the input voltage is high enough.

Simplified RTC diagram

Block diagram from IGEP0033

Requirements

This How-to has been tested with an IGEPv2 RC Board (DM3730 and TPS65950), steps used below can be slightly different for other boards:

Rectify clock drift

IGEP Boards use as a source clock a 32.768kHz crystal. This passive component can add clock drifts due:

  • General drift error
  • Ambient temperature error
  • Aging error
  • ...

Some software tools can be used to compensate these errors. Once you tested your implementation add some rule to cron deamon to automatize it.

Set the date and time via NTP

If your board its is connected to Internet, this can be the most interesting workaround. The network time protocol (NTP) is the current widely accepted standard for synchronizing clocks over the Internet. NTP uses a hierarchical scheme in order to synchronize the clocks in the network.

ntpdate program

Ntpdate program is not installed by default, use zypper to download and install the package:

  • Uninstall ntp deamon:
 zypper rm ntp
  • Install ntpdate
zypper in ntpdate 

Once you installed the program, make sure that IGEP is connected to Internet.

  • Synchronize system clock and hardware clock:
 ntpdate pool.ntp.org; hwclock --systohc 
  • Compare offset between ntp server and your system clock:
 ntpdate -q pool.ntp.org && date 

If your result is positive, it means that your system clock is delayed and viceversa.

ntpd deamon

Under contruction

Rectify systematic error editing PMIC RTC registers

This workaround can be helpful when your board is not connected to Internet. Using this method we are going to:

  • Calculate systematic clock error
  • Rectify systematic error using PMIC RTC registers

Calculate systematic clock error

Every IGEP Board has its own systematic clock error. To find it, we use use ntpdate program to calculate the clock offset added every day:

  • Syncronize your system clock using: ntpdate pool.ntp.org
  • Compare actual offset (it is recommendable wait one or two days to deprecate random clock errors): ntpdate -q pool.ntp.org && date

My IGEP Board was a systematic drift of +3.6 seconds/day.

Rectify systematic error using PMIC RTC registers

Using my systematic clock drift finded before