PythonとラズパイでI2C!速度・アドレス変更時の波形を確認

Python

I2Cの速度・アドレス変更時の波形をアナライザで確認しました。Pythonとraspberry piでテストして測定動画を撮っており、I2C通信の使い方・基礎を確認したい方におすすめです。

 

前回はデフォルトの設定でI2C通信を確認

以前の記事でI2CのACK・NACKの解析記事を上げましたが、その際はラズベリーパイ(raspberry pi)のコンソールからコマンド「i2cdetect」で対応していました。(リンク先はこちらから)

I2CのACKとNACKの波形を見てみる
今回は筆者が持っているラズベリーパイとI2Cデバイスをつなげてアナライザを使い「I2CのACKとNACKの波形を見てみる」を紹介します 簡単にI2C通信でのACK,NACKを確認するまでの手順を紹介しています。 「自分でI2...

 

今回はデフォルト設定のI2Cではなく「速度・アドレスを変更」「PythonでI2Cプログラミング」をしてみたとき波形がどのようになるか確認していきます。

 

I2Cの速度をFast-mode(400kbps)に変更してみる

最初にラズベリーパイでのI2Cの最速であるFast-modeの400kbpsを確認していきます。

 

単純にI2Cの速度を変えるのであれば「/boot」フォルダ内にある「config.txt」を編集すれば可能です。

 

既にI2Cが使える環境になっている方はconfig.txtの最後に一文追加するだけでOKです。「config.txt」を編集するにはroot権限が基本必要ですので下記sudoコマンドで対応します。

sudo nano /boot/config.txt

 

nanoエディタで最後の一文にI2Cで使う速度を入力します。今回は400kbpsなので「400000」の値で設定します。最後に「Ctrl+o」で書き込みします。

dtparam=i2c_baudrate=400000

 

筆者はアナライザを使ってI2Cの速度を確認しました。(詳細の回路図・配線は後半に記載しています)

 

特に確認程度ならばコマンドの「i2cdetect」で構いません。無事Fast-modeの400kbpsが出ていることを確認できました。

 

raspberry piのデフォルトは100kbps(standard-mode)

以前の複数スレーブ接続した際の記事でも記載していましたが、ラズベリーパイ(raspberry pi)のI2Cのデフォルトは100kbps(standard-mode)です。(リンク先はこちらから)

raspberry piでI2Cの複数スレーブ接続の波形を見てみた
今回は筆者が持っているラズベリーパイとI2C複数デバイスをつなげてアナライザを使い「I2Cで複数スレーブ接続の波形を見てみた」を紹介します CPUは1本のI2Cで複数デバイス接続している際でもしっかり何処にデバイスがあるか見つけてくれ...

 

1周期10us(100kbps)であることをアナライザで同様に確認しています

 

PythonでI2Cのプログラミングをする

今回はPythonで簡単なプログラムを組んで、I2C通信の遅い速度の波形を確認していきます。Pythonでプログラムしたのは測定時にI2C通信を無限ループさせたかったためです。

 

プログラム内容としては簡単です。加速度センサの適当な値を無限に読み続けるようにしています。

 

I2Cのデータが固定されないような動くレジスタ値を読み続けています。

 

※今回は適当な動くレジスタ値を拾っています。本来は加速度の値を持ってくる予定でしたが、なぜか狙ったアドレスを確認しても「0」しか読めなかったため。

 

PythonでI2CをReadして波形解析する動画

実際にPythonのプログラムを走らせて、アナライザで確認する動画が下記となっています。

 

~4秒  Pythonプログラム実行(I2Cを読み続ける)

~11秒  アナライザで波形解析スタート

~16秒  アナライザの解析終了⇒Pythonプログラムも終了

~24秒  I2Cの波形が見やすい箇所をアップ

~32秒  I2CのACKが返ってきてデータを拾えていることを確認

 

ちなみに筆者も少し前までPython初心者でした

ちなみに筆者は少し前までPython初心者でしたが、下記記事で紹介しているUdemy で勉強することで今回のレベルのことは出来るようになりました。

未経験・社会人向け! Pythonと機械学習の勉強方法・始め方
未経験で社会人である筆者がPythonと機械学習を学ぶにあたって「今回の勉強方法はかなり実用的かつ効率的!」と強く実感した内容でしたので紹介したいと思います。 UdemyがPythonと機械学習の始め方に最適! 結論から言いますとの講座...

 

初心者が高い参考書を買って一人でPython勉強するよりは「非常に分かりやすく」「費用が抑えられる」はずですのでご参考ください。リンク先はこちらから

 

I2Cの速度を遅く(4kbps)設定する

今回はラズベリーパイで何処までI2Cの速度を遅くできるか確認してみました。最初は100bpsぐらいの速度の設定をしてみましたが…

 

I2Cが動作しなくなりました。波形を見てみると何もI2Cが出力されていないのでラズベリーパイ側に限界があるようです。(おそらくI2C_IFのクロックの分周・逓倍の関係で限界?)

 

試行錯誤した結果4kbpsならば動作したので、今回はこれで動作確認させていきます(ちなみに3kbpsは動作しませんでした)

 

I2CのクロックとデータをLEDとリンク

今回I2Cの遅い速度を確認するだけでは面白くないため、I2Cの「クロック」と「データ」の動作をリンクさせたLEDを実装します。

 

さすがに「100kbps・400kbpsは目が追い付かない」と思いますが「遅いI2C速度の4kbpsならばLEDで見て分かるレベルになるのでは?」と言った思いつきです。

 

直接I2CからLEDを駆動することは難しいのでバッファIC(TC4HC4050AP)を一つ噛まして対応します。

 

そのため今回のテストの全体構成としては下記のようになります。

 

回路図・配線

今回の回路図としては下記形です。どの部品も汎用的なデバイスで対応してますので誰でも同様に組むことができます。電子工作セットブレッドボードのみで配線が可能です。

 

I2Cを遅い(4kbps)速度でテストする

回路図は用意できて、Pythonプログラムも400kbpsで作成したものが流用できるのでテストしていきます。

I2Cデータ読み取りのprint文は省略

一番最初のテスト動画ではI2Cのデータ値が読み取れているかの確認のためprint文を入れていましたが、

 

print文を入れるとI2Cデータを読み取る間でどうしても処理時間が入ってしまいます。

 

今回I2CのLEDリンク具合を確認したいので、余計な処理になるprint文はコメントアウトして省略しときます。

 

テスト結果

無事I2Cの速度を落とした4kbpsでI2C通信できていました。

 

周期的にHI(点灯)になっている黄LEDのクロックに関しては動作が確認できなかったですが、赤LEDのデータに関してはLow(消灯)の時間も長く点滅していることが確認できました。

 

PythonでI2C(4kbps)をReadしてLEDとリンクする動画

実際にI2Cの4kbpsでPythonのプログラムを走らせて、アナライザで確認する動画が下記となっています。

 

~10秒  Pythonプログラム実行(赤LED_I2Cデータが点滅開始する)

~16秒  アナライザで波形解析スタート

~23秒  アナライザの解析終了⇒Pythonプログラムも終了

~32秒  I2Cの波形が見やすい箇所をアップ

~35秒  4kbpsでもI2C通信ができていることを確認

 

 

スレーブアドレスを間違えたときのnack波形を確認する

最後にスレーブアドレスをワザと間違えてnack波形を出した時を確認しました。(本来0x68をPythonで0x77にした場合の波形を確認しました。)

 

下記のようにNackが出てI2C通信が直ぐに終了しました。狙い通りで問題無しです。

 

PythonとI2CでNackを確認した動画

Pythonで間違ったアドレスにしたプログラムを走らせて、アナライザで確認する動画が下記となっています。

 

~5秒  アナライザの波形解析スタートさせてPythonプログラム実行

~6秒  Pythonプログラムは直ぐにエラーで止まる

~8秒  アナライザの解析終了

~17秒  I2Cの波形が見やすい箇所をアップ

~22秒  NACKでI2C通信が終了していることを確認

 

まとめ・感想

PythonでプログラミングすることによりI2C通信のテストを色々と試すことができました。

やはりPythonを使えるようになると色々なデバッグ・テストが捗ります。筆者は下記記事で紹介しているUdemy で勉強することで今回のレベルのことは出来るようになりました。

未経験・社会人向け! Pythonと機械学習の勉強方法・始め方
未経験で社会人である筆者がPythonと機械学習を学ぶにあたって「今回の勉強方法はかなり実用的かつ効率的!」と強く実感した内容でしたので紹介したいと思います。 UdemyがPythonと機械学習の始め方に最適! 結論から言いますとの講座...

 

初心者が高い参考書を買って一人でPython勉強するよりは「非常に分かりやすく」「費用が抑えられる」はずですのでご参考ください。リンク先はこちらから

 

コメント