昨日、どこかのページに書いてあったラズパイのI2Cのデフォルトのクロック速度を鵜呑みにして、100kHzと書いてしまいました。しかし、アチこち見て回っているとそんなことはない、実際は
62.5kHz
とあります。どうも62.5kHzが正しそう。でも、折角なので、自分でもオシロを当てて測っておくかと。
※「トホホな疑問」投稿順Indexはこちら
まず、結構いろいろな周波数で測った結果を掲載してくれているサイトがあったので、URL貼っておきます。
https://periph.io/platform/raspberrypi/
100kHzから、1000kHzまで飛び飛びですが測ってくれています。結局
設定したクロック速度の62.5%
で動作するようです。なんで、そんな変な仕様になってしまっているの?と疑問に感じるのですが、これだけ世の中にラズパイが流布していると、突然仕様を変えるとマズイ、ということなのかも知れませんな(もしかすると手が回らないだけかもしれませんが。)
実際、測定してみます。昨日はAnalog Discovery2のロジアナモードを使っていましたが、今回はメイン機能、オシロです。つないであるシャープ、GP2Y0E03測距センサから0.1秒毎に距離を読み出すシーケンスを無限ループで回し、SCLの立ち上がりでトリガしています。波形はこちら。
このグラフから計算すると、やっぱり62.5kHzですね。そのつもりで使わないとなりますまい。しかし、最初に引用したサイトなどに書かれている情報通りには、手元の Raspberry Pi 3 model B+が動きません。いろいろみていると、
- 多くのサイトでI2C使うときに使われているのはBCM2708用のドライバ
- 手元のRaspbery Pi 3 model B+で動作しているのはBCM2835用のドライバ
- BCM2835は、Raspberry Pi 1系に搭載されているSoC
- Raspberry Pi 3 model B+に搭載されているSoCはBCM2837
ちょっと分けが分からなくなりました。ネットをみると、なぜかBCM2835用のドライバ、うまく制御できないみたいで評判が悪そう。わざわざ古いと思われるBCM2708のドライバに入れ替えるような記事も見つかります。なんでだろ。次回の疑問です。