リアルタイムクロック(RTC)を利用する

概要

EDGEPLANT T1には、Jetson TX2の内蔵RTCとは別に、外部RTCとしてMicrochip1 社の MCP7940N が搭載されています。

外部RTCはボタン電池により給電されており、EDGEPLANT T1に電源が接続されていない状態でも時刻が保持できるようになっています。 初期設定では外部RTCを時刻保持に使用しています。

1

https://www.microchip.com

仕様

初期設定

path

description

/dev/rtc

/dev/rtc2 へのリンク

/dev/rtc1

CPU上のRTC(RX8025)

/dev/rtc2

外部RTC(MCP7940)

利用方法

RTCの時刻をシステムクロックに反映したい

Linuxの標準機能により、起動時および終了時にRTCとシステムクロックの時刻同期が行われるため、特別な操作を行うことなく時刻は同期されます。 任意のタイミングでRTCの時刻をシステムクロックに反映したい場合は、以下のコマンドを実行してください。

$ sudo hwclock --hctosys

外部RTCの時刻を確認したい

外部RTCが保持している時刻を表示したい場合は、以下のコマンドを実行してください。

$ sudo hwclock --show
2021-06-03 14:14:20.365521+0900

デフォルトでは外部RTCはUTC設定になっているため、このコマンドは以下と同じ結果になります。

$ sudo hwclock --utc --show

外部RTCの時刻を設定したい

外部RTCに手動で時刻を設定したい場合、以下のようにコマンドを実行します。

$ sudo hwclock --set --date="1/1/21 10:00:00"
$ sudo hwclock --show
2021-01-01 10:00:04.150531+0900

初期状態ではsystemd-timesyncdサービスが時刻の管理を行っているため、 hwclock --hctosys コマンドを実行するだけでは時刻をシステムクロックに反映することはできません(以下は反映できていない例です)。

$ sudo hwclock --hctosys
$ date "+%Y/%m/%d %H:%M:%S"
2021/06/03 14:15:05

手動でシステムクロックを外部RTCに同期させたい場合は、systemd-timesyncdサービスを停止してから hwclock --hctosys コマンドを実行する必要があります。

$ sudo systemctl stop systemd-timesyncd
$ sudo hwclock --hctosys
$ date "+%Y/%m/%d %H:%M:%S"
2021/01/01 10:00:12

外部RTCが正常に動作しているか確認したい

外部電源に接続されていない場合、外部RTCはボタン電池により駆動します。 そのため、ボタン電池からの供給電圧が動作電圧を下回っている状態で電源ケーブルを抜いた場合、時刻は保持されません。 この状態で次回起動した場合は、RTCからは初期値 2020-01-01 00:00:00 UTC が取得されます。

$ dmesg | grep "system clock"
[    3.655256] rtc-ds1307 1-006f: setting system clock to 2001-01-01 00:00:00 UTC (978307200)