今回からI2C通信手順の説明に入ります。
SPI通信の特徴確認
I2C通信手順の説明に入る前に、SPI通信を振り返っておきましょう。
SPI通信を行うには、ホストとデバイスを次のような信号線で接続しました。

データ送受信のタイミング(=データ信号の読み取りタイミング)は、ホストのクロック信号(SCK)が司っています。
ホストからデバイスにデータを送る場合はMOSI信号、デバイスからホストにデータを送る場合はMISO信号により行います。
また、ホストがどのデバイスと通信するかはチップセレクト信号(CSB)により通信相手のスレーブを選択します。
このように、SPI通信の接続形態は分かりやすいと思いますが、一方で以下のような特徴もあります。
このような通信形態をとった場合、
デバイスの数が増えるとCSB信号線がデバイスの数ぶん必要になる!
例えばデバイスを5個接続する場合、CSB信号線は5本必要になり、結果としてマスター側のCSB制御ピンが5本必要になってしまいます。
次にデータ信号線の使い方を見てみます。
実践編で使用する温室度・気圧センサーは、PICマイコンでデータ取得する場合、次の手順で行なっていました。
- PICマイコンからセンサーに対して、読み取るデータのアドレスを「MOSI信号線」で送信する
この間、MISO信号は使用しない - センサーからPICマイコンに、指定されたアドレスのデータを「MISO信号線」で返信する
この間MOSI信号は使用しない
このような通信手順では、MOSI信号とMISO信号を同時に使用することはありません。
ということは、データ線は1本で送受信できるようにした方がいいのでは?という意見も出てきそうです。
このように、SPI通信は接続形態は簡単なものの、上にあげたような特徴もあります。
SPI通信とI2C通信の比較
SPI通信の回路構成と通信手順を振り返ったところで、SPI通信と比較する形でI2C通信の特徴を確認します。
最初に実践編の回路図を確認します。I2C通信部分の接続は以下のようになっています。

I2C通信は、SPI通信と同様にホスト(PICマイコン)とデバイス(温度センサー・LCDモジュール)で通信を行います。
最初に接続形態を確認します。
I2C通信では、SPI通信と異なり、2本の信号線を使用してホストとデバイスを次のように接続します。(上の回路図と同じになっていることを確認してみてください)

このように、I2C通信では「SCL」と「SDA」と呼ばれる2本の信号線のみで通信を行います。
これら2本の信号線は以下のように使用されています。
- SCL
Serial Clockの略で、クロック信号として使用します。 - SDA
Serial Dataの略で、データ信号として使用します。
接続形態を確認したところで、SPI通信とI2C通信を比較してみましょう。
SPI通信と同じところ
I2C通信ではクロック信号とデータ信号の2本の信号線でデータを送りますが、これら2本の信号線の使い方はSPI通信と基本的に同じです。
データ信号線(SDA)に送りたいデータ(0か1)をセットした後に、クロック信号(SCL)を変化させてデータを読むタイミングを知らせる、という使い方をします。
また、SPI通信と同様に、クロック信号線とデータ信号線にデバイスを複数接続することができます。
SPI通信と違うところ
すでにお気付きかもしれませんが、SPI通信手順を理解した上でI2C通信の構成を見てみるといろいろと疑問が出てきますよね。
まずはデバイスを選択するチップセレクト信号線がないのが気になります。
実践編の回路図では、ホスト(PICマイコン)に2個のデバイス(温度センサとLCDモジュール)が接続されていますが、SPI通信の時のような通信相手を選択するチップセレクト信号線がありません。
SPI通信では、チップセレクト信号をそれぞれのスレーブに接続して、チップセレクト信号線で通信相手を選択していました。
I2C通信の場合はチップセレクト信号線がありませんので、通信相手はどのように選択するのか?という疑問があります。
また、SPI通信では次のように2本の信号線を使い、ホストからデバイスと、デバイスからホストの信号線を分けていました。
2本の信号線に対して、スイッチと電球の回路を以下のように構成すれば双方向の通信ができます。

ところで、データ信号線が1本の場合、回路はどのようにすれば送受信ができるのか、という疑問が出てきます。

また、I2Cのデータ信号線には謎の抵抗があります。
なぜこのような抵抗が必要なのかも疑問です。

そこで、次回の記事ではI2C通信のハードウェア構成と通信手順を説明することにより、これらの疑問を解き明かしていきます。
更新履歴
日付 | 内容 |
---|---|
2018.5.26 | 新規投稿 |
2025.8.6 | 「マスター」「スレーブ」を「ホスト」「デバイス」に変更 |