Raspberry Pi用のRTCモジュール届いた
注文してたRaspberry Pi用のRTCモジュール届いたんでOrange Pi Zero LTSで試してからOrange Pi R1に゙実装した。
RTCモジュールはi2cの5pinでDS3231がのってるやつ。
10pinでDS1307がのってるモジュールも売ってるが、Orange Piのi2cは3.3vでDS3231は3.3v駆動できるから5pinなわけだが、DS1307は5vデバイスなんで5vを得るために2列10ピンになってて、信号が3.3vだからDS3231を使ったほうが良いぽいんでDS3231のモジュールにした。
Orange PiのGPIOはRaspberry Piと互換性あるんだが基板の左右反対についてるんでRaspberry用のモジュールをつけると基板の外側に飛び出す感じになるんで、
DS3231のモジュールなら1列だからピンソケットを抜いて裏表反対につけなおす可能性も考えた。
RTCモジュールはi2cの5pinでDS3231がのってるやつ。
10pinでDS1307がのってるモジュールも売ってるが、Orange Piのi2cは3.3vでDS3231は3.3v駆動できるから5pinなわけだが、DS1307は5vデバイスなんで5vを得るために2列10ピンになってて、信号が3.3vだからDS3231を使ったほうが良いぽいんでDS3231のモジュールにした。
Orange PiのGPIOはRaspberry Piと互換性あるんだが基板の左右反対についてるんでRaspberry用のモジュールをつけると基板の外側に飛び出す感じになるんで、
DS3231のモジュールなら1列だからピンソケットを抜いて裏表反対につけなおす可能性も考えた。
dtsを書き直してdtbを作り直したが、
aliases{}内にR1はrtl8189etvがethernet1に設定されててZeroの方も同じ様にxr819がethernet1に設定されてて、wlanなのになぜethernet1なんだ?
思ってGoogleに聞いたら無効だから要らない言われたんだが、これ消すとmacアドレスが起動毎に変化しちゃうようなので必要な設定みたい。
なおR1にはeth1が存在するが、これはUSBデバイスだからdtsに記載がないのね。
あとbuildrootのlinux-menuconfigからCONFIG_RTC_DRV_DS1307=yにした。DS3231もDS1307のドライバでいいらしい。
起動して/dev/rtc1が出現したんで
ntpdが動く前に1970年に戻ってるのが問題なんでinitの最初で読み込もうかとも思ったが、シャットダウン時にntpdで修正された時刻をRTCデバイスに書き込む必要があるんで、
/etc/init.d/S00hwclock-rtc1
これでntpdが起動する前に生成されるファイルのタイムスタンプが1970年に戻らなくなった。
&i2c0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
ds3231: rtc@68 {
compatible = "maxim,ds3231";
reg = <0x68>;
};
};
こんな感じの部分と、aliases{}の中にstatus = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
ds3231: rtc@68 {
compatible = "maxim,ds3231";
reg = <0x68>;
};
};
aliases {
ethernet1 = &rtl8189etv;
rtc0 = &rtc;
rtc1 = &ds3231;
};
書いてAllwinner内臓のrtcが確実にrtc0になってds3231がrtc1になるようにした。ethernet1 = &rtl8189etv;
rtc0 = &rtc;
rtc1 = &ds3231;
};
aliases{}内にR1はrtl8189etvがethernet1に設定されててZeroの方も同じ様にxr819がethernet1に設定されてて、wlanなのになぜethernet1なんだ?
思ってGoogleに聞いたら無効だから要らない言われたんだが、これ消すとmacアドレスが起動毎に変化しちゃうようなので必要な設定みたい。
なおR1にはeth1が存在するが、これはUSBデバイスだからdtsに記載がないのね。
あとbuildrootのlinux-menuconfigからCONFIG_RTC_DRV_DS1307=yにした。DS3231もDS1307のドライバでいいらしい。
起動して/dev/rtc1が出現したんで
# hwclock -f /dev/rtc1
でRTCデバイスから時刻取得# hwclock -w -f /dev/rtc1
でシステムの時刻をRTCデバイスに書き込み。# hwclock -s -f /dev/rtc1
でRTCからシステム時刻をセット。ntpdが動く前に1970年に戻ってるのが問題なんでinitの最初で読み込もうかとも思ったが、シャットダウン時にntpdで修正された時刻をRTCデバイスに書き込む必要があるんで、
/etc/init.d/S00hwclock-rtc1
#!/bin/sh
case "$1" in
start)
if [ -e /dev/rtc1 ]; then
hwclock -s -f /dev/rtc1
fi
;;
stop)
if [ -e /dev/rtc1 ]; then
hwclock -w -f /dev/rtc1
fi
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
こんな感じにした。case "$1" in
start)
if [ -e /dev/rtc1 ]; then
hwclock -s -f /dev/rtc1
fi
;;
stop)
if [ -e /dev/rtc1 ]; then
hwclock -w -f /dev/rtc1
fi
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
これでntpdが起動する前に生成されるファイルのタイムスタンプが1970年に戻らなくなった。