mi_what7

  1. Home>
  2. エレクトロニクス豆知識>
  3. マイコンとは?>
  4. I2C

I2C

I2Cとは

I2C(Inter-Integrated Circuit)はフィリップス社(現NXP社)が提唱する通信インターフェースで、クロックに同期させてデータの通信を行う同期式シリアル通信のひとつです。
I2CはSPIと並んで、EEPROMやセンサとのデータ通信によく使われています。
I2Cでは、クロック(SCL)、データ入出力(SDA)の2本の信号線を用いて通信します。また、それぞれの信号線はオープンドレイン通信になるので、プルアップ抵抗を接続します。
そして、通信をする場合には、マスタとスレーブというように役割を分け、マスタ側からスレーブ側に対して送信や受信の指示をします。また、クロックは必ずマスタから出力され、入力と出力はクロックに同期して行われます。
マスタ1つに対しスレーブは複数接続できます。
マスタとスレーブの接続は以下のようなイメージになります。

I2Cとは

通信手順

I2Cの場合、以下のような手順で通信を行います。
①マスタから通信開始の合図(スタートコンディション)を出す
②マスタからスレーブアドレスを送信する
③スレーブからマスタにスタンバイOKの合図(アクノリッジ)を返す
④データの通信を行う(必要に応じて繰り返す)
⑤マスタから通信終了の合図(ストップコンディション)を出す
図で示すと、以下のようになります。

通信手順

スレーブアドレス0xA0、マスタからスレーブへ1バイトのデータ(0x5A)を送信する例を説明します。

スレーブアドレスやデータはMSBファースト(最上位ビットから下位ビットの方向)でSCL(クロック)に同期して転送されているのが確認できます。また、スレーブアドレスを転送した後、および8ビットのデータ転送ごとにアクノリッジ(=0)が受信側から出力されます。
また、SCLがHレベルのときにSDAの立ち下がりでスタートコンディション、SCLがHレベルのときにSDAの立ち上がりでストップコンディションとなります。この信号で、通信の開始と終了をスレーブ側に知らせています。

通信手順

マスタからスレーブへデータを送信する場合

マスタ1つに対しスレーブは複数接続できるため、マスタはどのスレーブと通信するかをスレーブ側のデバイスに知らせる必要があります。スレーブアドレスはこの役割を持っていて、スレーブ側のデバイスはそれぞれ固有の値を持っています。
通信開始の合図(スタートコンディション)を出した後、マスタは通信したいスレーブ側デバイスのスレーブアドレスを送信し、スレーブ(複数)が受信します。このうち、アドレスが一致したスレーブがスタンバイ状態となり、マスタとの送受信が可能になります。なお、スレーブアドレスが一致しなかったスレーブ側のデバイスは待機状態へ移行します。
以下の図は、マスタからスレーブへ1バイトのデータを送信する場合の、通信の様子を示したものです。
スレーブアドレス通信時に最下位ビットにW(=0)を指定すると、マスタはスレーブへデータを送信します。

マスタからスレーブへデータを送信する場合

スレーブからのデータをマスタが受信する場合

以下の図は、スレーブから1バイトのデータをマスタが受信する場合の、通信の様子を示したものです。
スレーブアドレス通信時に最下位ビットにR(=1)を指定すると、マスタはスレーブからデータを受信します。
I2Cの詳細については、NXP社のホームページに公開されている『I2Cバス仕様およびユーザーマニュアル』を参照してください。

スレーブからのデータをマスタが受信する場合

汎用マイコンデータシートダウンロード

micon_local

サイドナビ - エレクトロニクス豆知識

共通スタイル・スクリプト - エレクトロニクス豆知識