ラズベリーパイとI2Cデバイスをつなげてアナライザを使い「I2CのACKとNACKの波形を見てみる」を紹介します。
簡単にI2C通信でのACK,NACKを確認するまでの手順を紹介しています。
「自分でI2Cを色々解析してみたい!」という方におススメな記事となっています
ラズベリーパイとI2Cデバイスをつなげてみる
まずはI2C通信の環境をラズベリーパイ(raspberry pi)を使って作っていきます。
ラズベリーパイでのI2Cの動かし方は既に先人たちにより多くの記事がありますので省略したいと思います。
「ラズベリーパイ I2C」とググれば多くの参考になる記事がありますので、そちらを参考にしてください
実際につなげた写真がこちらとなります。
「ラズベリーパイ」と「I2Cデバイスを2つ(EEPROMと加速度センサ)」接続しています
筆者のは少し型が古いラズベリーパイですが、I2Cをつなぐのは新旧ともに簡単にできます。
EEPROMの詳細は下記となります。
加速度センサの詳細は下記となります
回路図的には下記の形になります。「3.3V」「GND」「SDA」「SCL」ブレッドボードにジャンパー接続するだけで簡単に可能です。※ラズベリーパイのGPIOピン配置は新しい型に合わせています
そしてラズベリーパイを設定・起動してI2C先にデバイスがいるかを確認してみましょう
「i2cdetect」のコマンドで確認できました。
赤字の50,58がEEPROM、青字の68が加速度センサのアドレスになります
pi@raspberrypi ~ $ sudo i2cdetect -r -y 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
アナライザを使って波形を確認したのを次章から紹介してきたいと思います
オシロスコープでもI2Cを測定しています
今回の記事とは別にオシロスコープでもI2Cを測定しています。
オシロを使ってACK・NACKの波形を確認しています。
ぜひ一緒に合わせてご覧ください。(リンク先はこちら)
アナライザを用意する
I2Cの波形を見たいと思いますが、今回はACKとNACKを見ますのでアナライザを使って確認していきます。
最近はI2CやSPIなど数MHz,数十MHz程度の解析するアナライザが1000円足らずで買えます。
筆者は色々触りたかったのでモジュール化されていないアナライザの開発ボードを買いました。
(値段は一番安く多くのピンで遊べますが、EEPROMなどの設定が必要ですのでマイコン初心者は少し難しいかもしれません)
本当にマイコン(サイプレス製CY7C68013A)が載っているだけのボードです。
PCとUSB経由で接続して解析することができます。詳細は下記になります。
MiniUSBケーブルとジャンパーワイヤは別で購入が必要です
但し数百円の差ですので下記のようなモジュールになっているアナライザを買った方が直ぐに測定できて楽できるかと思います。
PCとUSB接続してI2C,UART,SPIなど多くの通信を解析できます。
USBケーブル、ジャンパーワイヤまで付いてきますので単に解析するだけならば筆者的には下記をおススメします
アナライザを使ってI2Cの波形を確認する
アナライザをSCL、SDAの箇所に接続して「i2cdetect」しているときの波形を確認します。
実際行ったときの写真が下記です
回路ベースですと下記箇所「SDA」「SCL」をアナライザに繋げています。
そして実際にとれた波形の一部が下記です。無事SDA、SCLの波形を取れました
今回はI2CのクロックのSCLは100kbps(100kHz)ですので1周期10μsになっていることが波形からも分かります
これでアナライザで無事波形取ることができました。
I2Cの解析してACK/NACKを見てみる
それではI2Cのデータの解析を行っていきます。解析する設定をI2Cに設定します。
解析設定するだけでI2Cのビット情報、そしてデータの「アドレス」「R/W」「ACK/NACK」が確認できました。
これでACK,NACKが確認できるようになりました。
それではACK,NACK時のSDA,SCLの波形を確認していきたいと思います
先ほども記載しましたが、デバイスのアドレスがある箇所はi2cdetectで読み取れている(ACKが返ってきている)ということなので、今回の例では下記2例を見ていきたいと思います。
①ACKが出てると思われるアドレス「50」
②NACKになっているアドレス「03」
赤字の50,58がEEPROM、青字の68が加速度センサのアドレスになっています
pi@raspberrypi ~ $ sudo i2cdetect -r -y 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
①ACKが出てると思われるアドレス「50」
狙い通りEEPROMから「ACK」が返ってきてデバイスがあることを確認できました。
ACKの箇所のアップが下記となります。Readの後にデバイス側からSDAをLow(1⇒0)に出力していて、ACKが返ってきている形となっています
②NACKが出ているアドレス「03」
やはり何もデバイスが無いためReadしても何も反応がなくNACKと判断しています
NACK箇所のアップは下記となります。Read後にデバイス側から何も出力がされずHi(1)のままとなっておりNACKという形になっています
まとめ・感想
最近では1000円足らずのアナライザでI2Cを測定・解析することができます。
今回はi2cdetect時のACKとNACKに焦点を当てていましたが、応用すればR/W時のI2Cのスタートからストップまでのデータも詳細に確認できます。
データシート見て確認するのもいいですが、やはり実物の波形見ることでよりI2Cの理解が深まると思います。
よろしければ皆様もアナライザを購入して確認してみてください。
<<20190428追記>>
I2Cの速度・アドレス変更時の波形をアナライザで確認しました。Pythonとraspberry piでテストして測定動画を撮っており、I2C通信の使い方を確認したい方におすすめです。(リンク先はこちらから)
今日はここまでにしたいと思います。どうもありがとうございました
コメント