Raspberry PIへリアルタイムクロックモジュールのI2C接続

秋月電子通商のリアルタイムクロック(RTC)モジュール「RTC-8564NB」を購入して、Raspberry PIにI2Cインタフェースを使って接続しました。

Raspberry PIとリアルタイムクロックモジュールとの接続図を次に示します。2ピンのクロック出力端子と3ピンのアラームと定周期タイマ割り込みの割り込み信号にLEDを接続し、表示で確認できるようにしました。
Raspberry PIとRTCの接続図

Raspbian OSのバージョンを示します。

# uname -a
Linux raspberrypi 3.18.0-trunk-rpi #1 PREEMPT Debian 3.18.5-1~exp1+rpi16 (2015-03-28) armv6l GNU/Linux

最新のRaspbian OSは、RTC-8564NBをサポートしているため、カスタムカーネルをビルドする必要はありません。

初期の状態では、I2C通信がOFFになっているので、次のコマンドでI2Cを有効にします。コマンドを入力すると選択画面が表示されるので、表示に従って選択していきます。

sudo raspi-config
  1. 「8 Advanced Options」を選択する
  2. I2C通信

  3. 「A7 I2C」を選択する
  4. i2c1

なお、2014年までの Raspbian では、/etc/modprobe.d/raspi-blacklist.conf を使って I2Cの有効/無効 を切り替えるようになっていましたが、2015-01-31 リリースからは、より汎用的な Device Tree という仕組みが導入されたのに伴い、I2C のペリフェラル機能の有効化方法が変わり、raspi-blacklist.confへの設定はなくなりました。

その後、再起動します。

# sudo reboot

/etc/modulesに次のデータを設定し、I2Cが使用できるように設定します。

i2c-bcm2708
i2c-dev
rtc-pcf8563

次のコマンドで、i2c-toolsをインストールします。

# sudo apt-get install i2c-tools

その後、再起動します。

# sudo reboot

リアルタイムクロック(RTC)モジュールが動作しているか次のコマンドで確認します。

# sudo i2cdetect -y 1

RTCモジュールが動作していれば次の表示があり、0×51が表示されます。

# sudo  i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

RTC-8564NBをRaspberry Piで動かすためには、次のコマンドを実行します。

# sudo su
# modprobe i2c-dev
# modprobe rtc-pcf8563
# echo pcf8563 0x51>/sys/class/i2c-adapter/i2c-1/new_device
# hwclock -w
# hwclock
# exit

私の環境では、デバイスドライバ「rtc-pcf8563」を組み込もうとしたときに、次のように「FATAL: Module rtc-pcf8563 not found」が表示されます。どうもRTC-8564NB用のデバイスドライバが入っていないようです。

# modprobe rtc-pcf8563
FATAL: Module rtc-pcf8563 not found.