I2Cの波形をオシロスコープで確認してみた

本サイトはアフィリエイト広告を利用しています。
オシロスコープ

I2C通信の波形をオシロスコープで測定してみました。

i2cdetectを行い、該当のアドレス箇所での信号を確認しています。

実際のI2C通信のクロックとデータの波形を詳細に紹介します。

 

スポンサーリンク

I2Cの波形をオシロスコープで確認してみた

I2Cの波形をオシロスコープで確認してみました。

ラズベリーパイとI2CデバイスのEEPROMの通信時を測定しています。

 

実際にSCL(クロック)とSDA(データ)を測定しています。

オシロスコープのデコード機能を使い、I2C通信を解析しています。

i2cdetectを行い、該当のアドレス箇所での信号を確認しています。

 

I2C通信の仕組みを実際のオシロスコープの波形交えて分かりやすく紹介します。

 

I2C通信の基礎

I2C通信の基礎を簡単に説明します。

I2Cの信号線はSCL(クロック)とSDA(データ)の2本となります。

CPUとデバイス間でデータのやり取りを行います。

 

実際にデバイスを接続する形だと「3.3V」と「GND」も繋げています。

今回のラズベリーパイとEEPROMをI2C接続する回路としては下記形となります。

 

実際のI2C通信(Read)の波形例としては下記形となります。

「黄色のSCL(クロック)」を基準に「青線のSDA(データ)」が動いています。

下記例だと青線は2進数「1010000」つまり16進数だと「0x50」となります。

オシロスコープのデコード機能の値と実際の波形が一致しています。

 

もしI2C通信のデータを詳細に解析したい場合はアナライザが便利です。

応答信号であるACK/NACKまで解析してくれます。

 

下記記事では個人で購入可能なアナライザを使ってI2C通信を解析しています。

1000円程度で簡単に手に入ります。(記事のリンク先はこちら)

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

 

I2CとSPIの違い

I2C以外にも汎用的な通信IFとしてはSPIがあります。

SPIは一般的に4本の信号線があり、I2Cと比べて比較的多くのデータ量が送れます。

(通信速度・送信方法によってデータ量が変わるので一概には言えないですが…)

 

SPI通信の波形例としては下記です。

I2Cと比べると信号線が増えますので、配線・接続は少し手間になります。

 

SPI通信の波形については下記記事で紹介しています。

PythonでSPI通信を制御して色々なパターンの波形を確認しています。(リンク先はこちら)

SPI通信に入門!速度・チップセレクト変更時の波形を確認してみた
SPI通信をオシロスコープで測定してみました。 プログラムを変更して、速度やチップセレクトを変えた波形も確認しています SPI通信の基礎を初心者の方に分かりやすく紹介します。

 

i2cdetectの波形をオシロスコープで確認してみる

ラズベリーパイとI2CデバイスであるEEPROMを接続して波形を確認します。

今回のI2C通信としては一番簡単な「i2cdetect」を使います。

sudo i2cdetect -r 1

 

コマンド一つでラズパイ接続されているI2Cの全てのアドレスが分かります。

EEPROMのI2Cのスレーブアドレスとしては「0x50」と「0x58」になります。

 

実際のコマンド結果は下記となります。

「0x03」から「0x77」までのアドレスを検索していることが分かります。

 

PythonでもI2C通信は可能です

今回は使いませんが、Pythonでも簡単にI2Cのプログラミングが可能です。

 

下記記事でラズパイとPythonでI2C通信を紹介しています。

I2Cデバイスの加速度センサ情報をReadしたり、アドレスを変えたりしています。

よろしければ一緒にご覧ください。(リンク先はこちら)

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

 

i2cdetectをオシロスコープで解析をする

ラズパイで「i2cdetect」実施中にオシロスコープで波形測定します。

SCL(クロック)とSDA(データ)をプローブに接続します。

 

「i2cdetect」が開始して終わるまでの時間で捉えたのが下記波形です。

「0x03」から「0x77」までのアドレスを総当たりでReadしています。

 

波形をアップして、I2C通信を確認していきます。

EEPROMのアドレスに該当する「0x50」の箇所をアップしています

「黄色のSCL(クロック)」を基準に「青線のSDA(データ)」が動いています。

 

この例ではアドレス「0x50」に「Read」して「ACK」応答の波形となります。

0-7bitでアドレスの2進数「1010000」16進数だと「0x50」を指定しています。

8bitの箇所でRead/Writeを示し、9bitの箇所でACK/NACKを意味します。

 

ACKの波形

接続先のアドレスがいたACK応答後の波形を確認します。

EEPROMのアドレスに該当している「0x50」ならばACK(応答信号)の波形が確認できます。

i2cdetectでACK応答後は8bit分データ「0xFF」が返ってきています。

 

NACKの波形

接続先のアドレスがいないNACK応答後の波形を確認します。

今回は「0x51」のアドレス箇所で確認します。

NACK後はデータが無く、またその後は次のアドレス「0x52」をReadします

 

まとめ

今回はI2Cの波形を紹介させていただきました。

記事をまとめますと下記になります。

I2Cの信号線はSLC(クロック)とSDA(データ)の2本となります。
i2cdetectはアドレスを総当たりでReadして、ACK応答のものを表示しています

 

筆者のオシロのRIGOL DS1054Zは趣味の波形測定・解析が十分に測定が可能です。

今回のI2CだけでなくSPI、UARTなど多くの通信に対応できます。

下記記事でまとめて紹介していますので、よろしければご覧ください。(リンク先はこちらから)

オシロスコープの使い方!初めての人向けに多くの測定事例を紹介
オシロスコープの使い方を一から紹介します。 電源の入れ方からトリガーのかけ方までを写真・動画交えて分かりやすく説明します。 初心者の方でも簡単にオシロを使った測定方法を学ぶことができます。

コメント