読者です 読者をやめる 読者になる 読者になる

denshikobo’s blog

PICプログラミングやPCの操作で感じた日々の由無し事を綴ります

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