Armbianを入れたOrange Pi PCにi2c接続のRTCをつけてオフラインでも時間を保持するようにしてみた。今回も秋月のRTC-8564NBモジュールを使用してみた。Raspberry Pi OSにもともと入っているモジュールでpcf8563として使えたのでArmbianでもそのまま使えるんじゃないかな…
まずはsudo armbian-configで設定画面を開いて
System→Hardwareでi2c0を有効にしておく。
sudo i2cdetect -y 0
でRTCが認識されてるかどうか確認した。
ラズパイの場合はDevicetree Overlayで簡単にRTCの設定ができたので、Orange Pi PCのArmbian上ではどうなんだろうと思って調べてみたら自分でDTSファイルを作成してuser_overlayで読み込ませればデバイスツリーでもRTCが使えるみたい。
Device Tree overlays for sunxi devicesにds1307を使用したサンプルがあったのでRTC-8564NB用に少し変更して使ってみた。i2cバスのレジスタさえ合わせれば他のArmbianなデバイスでも同じように設定できるかも。
/dts-v1/; /plugin/; / { compatible = "allwinner,sun4i-a10", "allwinner,sun7i-a20", "allwinner,sun8i-h3", "allwinner,sun50i-a64", "allwinner,sun50i-h5"; fragment@0 { target-path = "/aliases"; __overlay__ { rtc0 = "/soc/i2c@01c2ac00/pcf8563@51"; }; }; fragment@1 { target = <&i2c0>; __overlay__ { #address-cells = <1>; #size-cells = <0>; pcf8563@51 { compatible = "nxp,pcf8563"; reg = <0x51>; status = "okay"; }; }; }; };
これをpcf8563.dtsとかにして保存したあとに
sudo armbian-add-overlay pcf8563.dts
を実行すると自動でコンパイルされて、/boot/armbianEnv.txtに追記してコンパイル済みのdtboが読み込まれるようにしてくれる。
あとは再起動してtimedatectlを実行してみるとRTCが認識されてるはずなので
ls /dev
してみる。
するとAllwinner H3自体にRTCが内蔵されているため、Orange Pi PCではrtc0とrtc1としてRTCが2つ認識されてしまった。どっちがRTC-8564NBなのかは時間を読み込んで見ればわかるので
timedatectl
を実行してみる。そうするとrtc0はCPU内蔵のRTCで、rtc1がRTC-8564NBになっていた。
rtc0が優先されるっぽいのでrtc1がある場合にはrtcへのシンボリックリンクをrtc1にするスクリプトを起動時に実行されるようにする。
sudo nano /etc/rc.local
でexit0の前辺りに
if [ -e /etc/rtc1 ]; then ln -f -s /dev/rtc1 /dev/rtc hwclock -f /dev/rtc1 -s fi
と追記して保存。これで起動時にrtc1がデバイスツリーで追加された場合はrtcへのシンボリックリンクをrtc1に変更した後にrtc1の時刻を読み込んでくれる。
今回は時計バックアップ用バッテリに秋月で売っていたMSリチウム二次電池のMS621FEをバックアップ電源に使ってみた。3.3Vからダイオードと抵抗だけで充電できるし良いんじゃないかなと。一緒に低Vfのダイオード買っておけばよかった…最初電池で行こうとしていたので低リークな1SS380しか買ってなかったので、とりあえずこれと1kオーム入れてみたら2.88Vぐらいまでしかチャージされなかった。
秋月だと1SS154あたりが低Vfっぽいので良さそうなので次回買ってみようかな。用途違うけど…
0 件のコメント:
コメントを投稿