raspberry piでI2Cの複数スレーブ接続の波形を見てみた

インターフェース
今回は筆者が持っているラズベリーパイとI2C複数デバイスをつなげてアナライザを使い「I2Cで複数スレーブ接続の波形を見てみた」を紹介します

 

CPUは1本のI2Cで複数デバイス接続している際でもしっかり何処にデバイスがあるか見つけてくれます。実際にどうやっているかをアナライザで確認してみました

 

スポンサーリンク

ラズベリーパイとI2Cデバイスを複数つなげてみる

環境構築は前回記事と同じになります。詳細は下記リンク先をご確認ください

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

実際につなげた写真がこちらとなります。

「ラズベリーパイ」「I2Cデバイスを2つ(EEPROMと加速度センサ)」接続しています

 

回路図的には下記の形になります。「3.3V」「GND」「SDA」「SCL」ブレッドボードにジャンパー接続するだけで簡単に可能です。※ラズベリーパイのGPIOピン配置は新しい型に合わせています

 

そしてラズベリーパイを設定・起動してI2C先にデバイスがいるか「i2cdetect」のコマンドで確認できます。
赤字の50,58がEEPROM青字の68が加速度センサのアドレスになります

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pi@raspberrypi ~ $ sudo i2cdetect -r -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- 58 -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

そしてアナライザをSCL、SDAの箇所に接続して「i2cdetect」しているときの波形を確認します。

 

i2cdetectが何を行っているのか確認する

i2cdetectで実際どのようにしてデバイスを検知しているのかを確認してみました。

 

i2cdetectのコマンドのデフォルトでは0x03~0x77のアドレスにすべてRead命令してACKが返ってきたものに関してデバイスがあると認識しているようです。

上記のように「0x**」で各ブロックになっています

 

隣接するアドレス間の周期を確認してみる

今回はI2CのクロックのSCLは100kbps(100kHz)ですので1周期10μsになっていることが波形からも分かります

 

i2cdetectでの各アドレス間の周期はどうなっているのか確認してみます。まず連続でデータを取りにいっている0x20~0x2Fのアドレス周辺の周期を見てみました

 

5周期ほど確認しましたが結果は「290us,264us,221us,217us,230us」と一定ではありませんでした。ラズベリーパイ内(Linux)でのデータのやり取り時間があるのですかね?もし今度機会があればRTOSでも確認してみたいと思います

 

離れたアドレス間の周期を確認してみる

あと離れたアドレスのブロックごとの周期を確認してみました。下記のように「0x2*」~[0x3*]などの各ブロック周期を見てきます

 

こちらも5周期ほど確認しましたが、やはりこちらも「963us,797us,804us,822us,809us」とバラつきが多くありました。

 

まとめ・感想

「I2Cは指定の周期でほぼずれなくデータやり取りしているんだろうな」と考えていましたがいざ実際に測定してみると、意外にバラつきなどがあり新たな発見でした。

 

データシート見て確認するのもいいですが、やはり実物の波形見て今一度現実と認識のずれを把握する重要ですね

 

<<20190428追記>>
I2Cの速度・アドレス変更時の波形をアナライザで確認しました。Pythonとraspberry piでテストして測定動画を撮っており、I2C通信の使い方を確認したい方におすすめです。(リンク先はこちらから)

PythonとラズパイでI2C!速度・アドレス変更時の波形を確認
I2Cの速度・アドレス変更時の波形をアナライザで確認しました。 Pythonとraspberry piでテストして測定動画を撮っています。 I2C通信の使い方・基礎を確認したい方におすすめです。 前回はデフォルトの設定...

 

今日はここまでにしたいと思います。どうもありがとうございました。

 

1000円足らずでアナライザが購入できます

コメント