Oscilogi on Raspi3問題が解決した
(2016.08.16)
Mike McCauleyから”bcm2835_i2c_setClockDivider(uint16_t divider) 関数を使え”と言われ困っていました。つまり、core_freqの値に合わせてClockDivederの値を替えるしかない、ということです。
そのcore_freqのdefault値がRaspi2では250MHz、Raspi3では400MHzというのが今回の不具合の原因です。
--------------------------------
BCM2835ライブラリはcore_freq=250MHzを基準にbaudrateを設定している。400/250=1.6なので、Raspi2でbaudrate=100kHzのClockDivider設定を行うとRaspi3では1.6倍の160kHzになってしまう。
--------------------------------
core_freqの値さえ判れば何とかなりそうなのですが、その値がどこに記されているのか、調べた限りでは見つかりませんでした。
その代わり、動作しているRaspiのModelが/proc/device-tree/modelに記されていることがわかりました。
cat /proc/device-tree/model
Raspi2B==>Raspberry Pi 2 Model B Rev. 1.1
Raspi3B==>Raspberry Pi 3 Model B Rev. 1.2
これを読み取って、core_freqの値を推定して、ClockDivider設定を行う・・・
なんてことを考えたのですが、もっと簡単な方法が見つかりました。
Raspi3Bの/boot/config.txtに”core_freq=250”を追記します。
この設定が他にどのような影響を与えるか判りませんが、OscilogiはI2Cで問題を起こさず、Raspi3上で動作するようになりました。
まずは、目出度し目出度し
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
追記
core_freqの値を調べる方法が判りました。
vcgencmd measure_clock core
これです。
measure_clockって、どうやって計っているんだろう?
他にもこんなパラメータが指定出来るらしい
arm h264 isp v3d uart pwm emmc pixel vec hdmi dpi