Edited at

RaspberryPiにRTCモジュールを搭載して、ハードウェア起動時に時刻を合わせる

More than 5 years have passed since last update.

RaspberryPiはRTCおよびバックアップバッテリを搭載していないため、起動直後はシステムクロックが初期値になっています。バッテリバックアップ付きのRTCモジュールを使用することで、オフライン状態で起動してもシステムクロックを維持することが出来ます。


前提条件


  • Arch Linux ARM

  • DS3231使用RTCモジュール


RTCモジュールを搭載する


RTCモジュール

RaspberryPi, RTCなどのキーワードで検索するといくつかの製品が販売されていますが、Amazon.co.jpで販売されていたRaspberryPi用のI2Cモジュールを使いました。

ビジュアル的にこんなかんじで、RaspberryPiに亀の子にして搭載します。写真には写っていませんがモジュールの裏側に小型バッテリがハンダ付けされています。

IMG_0083.jpg


モジュールの初期化

ArchLinux 3.12.20-4-ARCHでは、次のコマンドでRTCモジュールを呼び出すことが出来ました(手元のハードウェアではrc.local的なファイルを使用して起動時にRTCモジュールが有効になるようにしています。

)。

/usr/bin/echo ds1307 0x68 | /usr/bin/tee /sys/class/i2c-adapter/i2c-1/new_device

※昔はmodprobeコマンドなどを利用して認識させていたと思いますが、イマイチこの辺りの仕組みを理解できていません。modprobe.conf的なファイルに何かを書いてあげればシステムファイルに書き込みしなくても認識するのでしょうか?

dmesgの出力。

[root@alarmpi ~]# dmesg | grep -i ds1307

[ 8.205884] i2c i2c-1: new_device: Instantiated device ds1307 at 0x68
[ 8.277696] rtc-ds1307 1-0068: rtc core: registered ds1307 as rtc0
[ 8.277758] rtc-ds1307 1-0068: 56 bytes nvram


起動後の状態で確認

起動直後の状態で、

[root@alarmpi ~]# uptime

15:21:28 up 0 min, 1 user, load average: 0.81, 0.22, 0.07

システムクロックがハードウェアクロックと同期しています。


[root@alarmpi ~]# timedatectl status
Local time: Sat 2014-06-07 15:21:29 JST
Universal time: Sat 2014-06-07 06:21:29 UTC
RTC time: Sat 2014-06-07 06:21:30
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a

いえい!


参考。