Raspberry PiのI2Cデータ転送速度と波形を見る その2
前回、I2Cのデータ転送を10kHzに設定して動作を確認しました。ラズパイのデフォルトは100kHzですが、低速でも温度センサからの読み出しができました。100kHz(100kビット/秒)はI2C規格のスタンダード・モードです。
●よく使われる50kHz
キャラクタLCDモジュールのACM1602を利用するときに、多くの方がこの50kHzの設定をされています。安定に温度を読み取っています。
●中途半端な96kHzを設定しても問題なかった
キャラクタLCDモジュールのACM1602ではSCLのクロックが0.2usほど早すぎるようなので、クロックをちょっとだけ下げて96kHzを設定をしました。
微妙な周波数ですが、しっかり設定できることがわかります。
●スタンダード・モードの100kHz
省略します。
●200kHz
ちょっとだけ高速にします。
SCLの波形がすごくなまっています。この後400kHzにすると、3.3Vまで波形が伸びません。垂直軸を19ビットと高精度にして表示をしているため、USBオシロスコープの演算速度が足りなくなったようです。
●ファースト・モードの400kHz
温度センサMCP9808は400kHzをサポートしています。PicoScope 5242Bの高精細度の表示をあきらめて8ビットに戻しました。
I2Cのスタート・コンディションは、SCLがHIGHのときSDAがHIGHからLOWになるタイミングと規定されています。SCLが最初にLOWになるとき1クロック分のノイズが入るので、デコードに失敗します。そこで、SCLの見ている電圧とスレッショルドを変更して、正常にデコードできるようにしました。
プログラムは正常に温度データを読みだしています。
●ファースト・モード・プラスの1MHz
温度センサMCP9808のサポート外の速度ですが、正常に温度データを送ってきます。
●2MHzまではコンスタントに温度データを送ってくる
PicoScope 5242Bではデコードがクリチカルになりました。KeysightのオシロスコープDSOX3012Tの観測結果です。
●High-speed (Hs-mode) に挑戦したが
3.4MHzではコンスタントに通信できていません。プログラムは途中で読めないとあきらめましたが、数十秒温度データを送っていました。