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

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


目次
1.ラズベリーパイとI2Cデバイスを複数つなげてみる
2.i2cdetectが何を行っているのか確認する
3.隣接するアドレス間の周期を確認してみる
4.離れたアドレス間の周期を確認してみる
5.まとめ・感想

1.ラズベリーパイとI2Cデバイスを複数つなげてみる
環境構築は前回記事と同じになります。詳細はこちらをご確認ください
実際につなげた写真がこちらとなります。
「ラズベリーパイ」「I2Cデバイスを2つ(EEPROMと加速度センサ)」接続しています
sP_20180512_095551.jpg

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

そしてラズベリーパイを設定・起動して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」しているときの波形を確認します。
sP_20180401_135924.jpg

2.i2cdetectが何を行っているのか確認する
それではi2cdetectで実際どのようにしてデバイスを検知しているのかを確認してみました

i2cdetectのコマンドのデフォルトでは0x03~0x77のアドレスにすべてRead命令してACKが返ってきたものに関してデバイスがあると認識しているようです。
i2c108.PNG
上記のように「0x1*」で各ブロックになっています


「スポンサーリンク」

3.隣接するアドレス間の周期を確認してみる
今回はI2CのクロックのSCLは100kbps(100kHz)ですので1周期10μsになっていることが波形からも分かります
i2c103.PNG


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

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


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

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


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

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

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


1000円足らずでアナライザが購入できます
HiLetgo 24MHz 8チャンネル USBロジックアナライザ 8CHロジックアナライザ UART IIC SPI デバッグ MCU FPGA ARMに対応 [並行輸入品]
HiLetgo






ラズベリーパイで簡単にI2C通信ができます。

EEPROMの詳細は下記となります。