On this page, you will find useful informations to use the Real Time Clock of your boards (if chip is mounted).
No permanent RTC is present on the APF9328/APF27 modules, but you can have one (DS1374, as an option) on the development boards or add it yourself if you are an electrician (it is not so complex to add a DS1374 (with integrated quartz) on the I2C bus). Do not forget to provide the two power-supply (VCC and Vbackup)). Currently only Maxim's DS1374 has been tested on APF9328Dev/APF27Dev but any I2C RTC, supported by Linux, should work the same way.
APF6Dev has an onboard external RTC chip: MCP794000.
DS1374 driver is by default included in standard Armadeus Linux kernel. To check if your board (Linux) has correctly detected the RTC:
# dmesg | grep ds1374 ds1374-legacy 0-0068: chip found, driver version 1.0 ds1374-legacy 0-0068: rtc core: registered ds1374-legacy as rtc0 ds1374-legacy 0-0068: setting system clock to 1970-01-01 00:00:07 UTC (7)
Driver is by default installed and launched. To check if your board (Linux) has correctly detected the RTC:
# dmesg | grep rtc wm831x-rtc wm831x-rtc: rtc core: registered wm831x as rtc0 wm831x-rtc wm831x-rtc: setting system clock to 2011-05-03 13:27:26 UTC (1304429246)
On APF28 the RTC is integrated under the i.MX28 processor. See the reference manual chapter 22 "Real-Time Clock Alarm Watchdog Persistent Bits".
There isn't button-lithium backup battery under APF28dev board, if we unplug the power, clock is not saved and then we could ask : what the interest of RTC if not backuped ?
The interest is when we power the whole board with a battery and we poweroff the apf28 with the command :
The processor will be powered of ... except the RTC. Then we could power on the board pushing power switch and keep the clock up to date.
To read the hardware value of clock use hwclock command on file /dev/rtc0:
To power off the board type :
# poweroff The system is going down NOW! Sent SIGTERM to all processes Sent SIGKILL to all processes P Communications disconnect (Back at localhost) ---------------------------------------------------- (/home/fabien/) C-Kermit>
And to wake-up the board push the button 'ON'. The date and hour will be keeped when you type 'date' or 'hwclock'.
MCP794000 driver is integrated by default in armadeus BSP's Linux kernel for APF6.
# dmesg | grep mcp [ 1.665275] rtc-mcp7940x 1-006f: rtc core: registered mcp7940x-rtc as rtc0
- From Linux use the command hwclock to read, write, synchronize the RTC (here we pre-suppose that RTC is storing time in UTC format).
# hwclock --help # hwclock -r -u to read hardware clock and print result (localtime) # hwclock -s -u to set the system time from the hardware clock # hwclock -w -u to set the hardware clock to the current system time (UTC)
- Use date command to read and update system date and time while running:
# date --help for more information # date -R to read hardware clock and print result # date 013122302011 to sets the system date to january 31th 2011 22h30 (localtime) # date 2011.01.31-22:30:00 also do the job
- Then, when booting you will see something like this:
ds1374 0-0068: setting the system clock to 2011-xxxx or wm831x-rtc wm831x-rtc: setting system clock to 2011-xxxx
- TimeZone/Summer time handling can be configured in /etc/TZ (uClibc particularity):
# cat /etc/TZ CET-1DST,M3.5.0/2:00,M10.5.0/3:00
Examples for TZ can be found here:http://www.sonoracomm.com/support/20-voice-support/107-uclibc-tz
- you can update RTC from a NTP (Network Time Protocol) server if your board is connected to internet or a NTP server
# ntpd -nqp 184.108.40.206 ntpd: setting clock to Mon Apr 23 22:36:39 DST 2012 (offset 1335216961.855897s) # hwclock -wu # to set the hardware clock to the current system time (UTC)
- if Alarm/wakeup is supported by the RTC driver then the alarm/wakeup time may be set like that for a 60 sec delay with RTC0
# sec=`date '+%s'` # let "sec=$sec+60" # echo $sec > /sys/class/rtc/rtc0/wakealarm
- if the time specified in wakealarm is earlier than the current time, then the Alarm/wakeup is disabled