超小型3.2×1.5mmサイズ・高精度・低消費電流の RTCモジュール『RV-8803-C7』の評価ボードです。
★温度特性:±1.5ppm(0〜+50℃/最大月差±3.88秒以内)かつ ±3.0ppm(-40〜+85℃/最大月差±7.78秒以内)
※RaspberryPI の外付けRTCモジュ―ルとしてもそのままご使用頂けます。
※バックアップのリチウム一次電池(CR1025)を搭載し時刻情報を設定した状態で出荷されます。
※バックアップ電池の期待保持期間は10年以上です。
・『 SCL / SDA / INT端子』は 基板上で Vddへプルアップされています(10kΩ)。
・『CLKOE 端子』は 10kΩにて GNDへプルダウンされています。
*実際のアプリケーションでクロック出力を使用しない場合にはCLKOE端子は直接GNDへ接続して下さい。
・『EVI端子』はデフォルトでは 0Ωで GNDに短絡しています。
この端子を使用する場合は短絡抵抗を外して未実装部分にプルアップ抵抗(10kΩ)を実装して下さい。
*実際のアプリケーションでもこの端子はオープンにはしないで下さい。
・ ヘッドピンのVddに+5Vを印加される場合は 『#1:3v3』との間にある 0Ω を取り外してご使用下さい。
・ 角ピンソケットの #4端子は NCです(内部接続無し)。
・ 電源切替用のダイオードは『BAS70-05』(Vishay, Diodes 他 )を使用しています。
(1) バックアップ電池搭載 ..... 出荷時にCR1025 ・リチウムボタン電池を搭載しています(一次電池)
(2) クロック出力を『1Hz』に設定
(3) 1PPSオフセット設定を書込み
(4) 時刻を書込み設定 ..... 出荷時はUTC時刻 = 日本時間+9時間 に設定
※以下実際に Rasbian を新規インストールしたデフォルトの状態からドライバの組み込みを行った例です。
( I2Cデバイスとして使用する場合にはドライバの組み込みは不要です)
★ テストで使用した RaspberryPI* のバージョン等の情報
ハードウェア | RaspberryPi 3B |
OS / Kernel |
OS = Rasbian 9.4 /Kernel =4.17.70-v7+ |
@ リナックスドライバのダウンロード
こちらからリナックスドライバをダウンロード出来ます。ドライバファイルの他にドライバの説明ファイル(PDF/英語)も一緒にダウンロードされますのでそちらもご一読ください。
ダウンロードしたRV-8803-C7 用の Linuxドライバ用のファイルをUSBメモリなどでRaspberryPI* の任意のフォルダ(ドキュメントなど)に移しておきます(パソコンからドライバファイルを取得した場合 )。
A Raspberry PI* での設定 (I2Cを有効化)
先にRasbian の設定の部分で I2Cインターフェースを有効化しておきます。
RV8803-Raspi基板を RaspberryPI* のピンへ接続し、正しく電気的に接続されていると
sudo i2cdetect -y 1
を送った際には以下の様に<0x32アドレス>に接続されていることを確認出来ます。
この状態で I2C経由で RaspberryPi から RV-8803-C7 のレジスタへのアクセス、及び設定が出来ます。
(時刻設定、アラーム、タイマ、周波数オフセット設定など)
任意のプログラムを用いてRV-8803-C7 をIC2デバイスとしてご使用になる場合にはこの後の Linuxドライバの設定は必要ありません。
B kernel-header をインストール
以下の kernel-header をインストールします。
・raspberrypi-kernel-headers
( apt-get install raspberrypi-kernel-headers でインストール)
Cリナックスドライバ組み込みの作業用フォルダの作成
make KDIR = /usr/src/linux 、または~$ sudo pcmanfm にて管理者権限で /usr/src/を開いて、ここに作業用フォルダとして"/linux" を作成します。ここにドライバ作成用のファイル (Makefile と rtc-rv8803.c) をコピーします。
(管理者権限で行う必要があるので、 ~$ sudo pcmanfm として管理者権限でフォルダを開きます )
D make コマンドの実施
カーネルヘッダのインストール後に /usr/src/linux ディレクトリで、
make
の コマンドを実行するとドライバファイルの "rtc-rv8803.ko" が生成されます。
![]() ![]() |
E 作成されたドライバファイルを必要な場所へ移す
作成された "rtc-rv8803.ko" ドライバファイルを必要な場所へ移動します。
modprobe rtc-rv8803
のコマンドを使うと、
Module rtc-rv8803 not found in directry /lib/modules/4.17.70-v7+
とエラーが返ってきますので
/lib/modules/4.17.70-v7+/
のディレクトリに ドライバファイルをコピーします ( "rtc-rv8803.ko" ファイルのみ )。
( kernel のバージョンにより "4.17.70-v7+" の部分は変わってきますので以降も読み替えて下さい )
(管理者権限で行う必要があるので、 ~$ sudo pcmanfm として管理者権限でフォルダを開きます )
F depmod コマンドの実施
ここで再度 modprobe rtc-rv8803 のコマンドを使ってもまだエラーになります。これは、
/lib/modules/4.17.70-v7+/modules.dep
のファイルに rv8803 が反映されていないためです。
![]() ![]() |
RV-8803-C7 を modules.dep ファイルに反映させるために同ディレクトリで
depmod
のコマンドを使います。
すると "modules.dep" に rtc-rv8803 が反映され modprobe rtc-rv8803 コマンドが通るようになります。
(ファイルを開くと末尾に rtc-rv8803.ko が登録されていることを確認出来ます)
(ファイル末尾に見つからない場合は検索をかけて確認します)
![]() ![]() |
G HWCLOCK として組み込むコマンドの実施
ここで
modprobe rtc-rv8803
のコマンドと、
sudo bash
echo rv8803 0x32 > /sys/class/i2c-adapter/i2c-1/new_device
(管理者権限で実行)
のコマンドを送ると、ラズパイに hwclock として認識されます。
正しくHWCLOCK として認識されると、
i2cdetect -y 1
のコマンドで I2Cリスト を確認した際に rv8803の表示が <32> から <UU> に変わっていてOSの管理下になったことが確認出来ます。
後は ご使用方法に合わせて諸設定を行って頂ければ RasbpberryPi の hwclock としてRV-8803-C7 を使用することが出来ます。
時計の初期誤差が気になる場合はネットワークに接続して、時計を再書込みしておけば (hwclock -w コマンド)その後はRaspberryPi本体の電源を落としてもバックアップのリチウム一次電池で時刻情報を正確に保持します。
逆にネットワークに接続して RV-8803-C7 の保持している時刻とネットワーク時刻との誤差を確認することも出来ます。
★RV-8803-C7 を hwclock に設定した後の動作
ハードウェアクロックとして設定すると
demog | grep rv8803
のコマンドで電圧低下の状態を確認することが出来ます。
(電池を抜き差しして故意に電圧低下状態を作って上記コマンドで確認した例 )
Voltage low, temperature compensation stoppted
(電圧が規定値を下回り温度補償動作が停止した)
及び
Voltage low, data is invalid
(電圧が規定値を下回ったため データ=時刻情報 が無効です)
のコメントが確認出来ます。このコメントは RV-8803-C7 のフラグレジスタ (0Ehアドレス、または1Ehアドレス)の値を反映しています。このフラグレジスタは値が"1"の時にフラグが立った状態で"0"と書き込むとクリアされます。ラズパイに RV8803のドライバを組み込んで HWCLOCK として動作させている場合は、新たに時刻情報の書き込みが行われるとドライバの動作でこれらのフラグはクリアされます。
(1) RV-8803-C7 を HWCLOCK に設定し、RV-8803-C7 の時刻をラズパイ(OS)に設定する
modprobe rtc-rv8803
sudo bash
echo rv8803 0x32> /sys/class/i2c-adapter/i2c-1/new_device
hwclock -s
電池交換直後の場合は上記の書き込みをするとエラーが返ってきます。
これは初期状態では 『RV-8803-C7』の "電圧低下検出フラグ"が立っているため 『hwclock-s』(時刻読み込み)の際に時刻情報が "無効" と判断されるためです。電池交換後には、まずラズパイをネット環境に接続してインターネット時刻になっている状態で『hwclock-w』(時刻書き込み)を実行します。その際にリナックスドライバの動作で時刻情報の書き込みと同時に"電圧低下検出フラグ"がクリアされます。 その後は『hwclock-s』で時刻が読み込めるようになります。
(ご購入直後は既に時刻情報が書き込まれているためこのエラーは起きません)
(2) ラズパイ(OS)の時刻(ネットワーク時刻など)を RV-8803-C7に書き込む
sudo hwclock -w
(3)RV-8803-C7に設定されている時刻を読み出す
sudo hwclock -r
(4) RV-8803-C7 (HWCLOCK)の保持時刻をラズパイ(OS)の時刻に設定する
sudo hwclock -s
(5)RV-8803-C7 を ラズパイ(OS) の HWCLOCK の設定から外す
( sudo i2c コマンドで直接レジスタを 読込み/書込み 出来るように戻す場合 )
sudo rmmod rtc-rv8803
(6) RV-8803-C7 の CLK出力を デフォルトの32.768kHz から 1Hz に変更する
sudo i2cset -y 1 0x32 0x0d 0x08
(7) 1Hzの精度をカウンタで測定して、オフセット値を設定する
※出荷時には電池装着後に既に個別にオフセット設定してあります。
+0.952ppm ....sudo i2cset -y 1 0x32 0x2c 0x04
+0.714ppm ....sudo i2cset -y 1 0x32 0x2c 0x03
+0.477ppm ....sudo i2cset -y 1 0x32 0x2c 0x02
+0.238ppm ....sudo i2cset -y 1 0x32 0x2c 0x01
0.000ppm ....sudo i2cset -y 1 0x32 0x2c 0x00
-0.238ppm ....sudo i2cset -y 1 0x32 0x2c 0x3F
-0.477ppm ....sudo i2cset -y 1 0x32 0x2c 0x3E
-0.714ppm ....sudo i2cset -y 1 0x32 0x2c 0x3D
-0.952ppm ....sudo i2cset -y 1 0x32 0x2c 0x3C
-1.190ppm ....sudo i2cset -y 1 0x32 0x2c 0x3B
-1.428ppm ....sudo i2cset -y 1 0x32 0x2c 0x3A
-1.666ppm ....sudo i2cset -y 1 0x32 0x2c 0x39
-1.904ppm ....sudo i2cset -y 1 0x32 0x2c 0x38
-2.142ppm ....sudo i2cset -y 1 0x32 0x2c 0x37
-2.380ppm ....sudo i2cset -y 1 0x32 0x2c 0x36
-2.618ppm ....sudo i2cset -y 1 0x32 0x2c 0x35
オフセットの分解能は 『 0.238ppm 』 です。
マイナスの場合はマイナスに設定します。
例えば 1Hzの測定値が 『0.999999750Hz』 (-0.25ppm) だった場合は、
sudo i2cset -y 1 0x32 0x2c 0x3F
と設定すると 『1.000000Hz』 ちょうどに近い値に設定されます
(この値はリセットがかかるまで保持されます。電源断やリセットで解除されます)
アラーム、タイマ、外部イベント検出、タイムスタンプなどの各機能を使用する場合には、一旦HWCLOCK の設定を外して I2Cモード の状態で直接レジスタに値を書き込んで設定します。
( sudo i2cset -y 1 0x32 0x** 0x** と送ります )
------------------------------------------------------------------------------
Raspberry PI は、RaspberryPI 財団の登録商標です。
※こちらの記事内容の作成及び 上記基板の提供等についてRaspberry PI財団 は一切関与はしておりません。
Arduino は、Arduino LLCおよびArduino SRLの登録商標です。
------------------------------------------------------------------------------
(免責事項)
当サイト上の情報・資料の掲載には細心の注意を払っておりますが、当サイトに掲載されている情報・資料をご利用されて直接または間接的に生じたいかなる損害についても当社は一切の責任を負うものではありません。