I2Cの概要と仕組み

I2Cは通信規格の1つで,主にマイコンとその周辺機器の通信に使われます.

この記事ではI2Cの通信の仕組みについて解説していきます.

目次

  1. I2Cとは?
  2. I2Cの概要
  3. I2Cの仕組み
    1. データ転送
    2. START ConditionとSTOP Condition
    3. アクノリッジ(ACK)とノットアクノリッジ(NACK)
    4. バイトフォーマット
  4. I2Cの使い方

I2Cとは?

I2C(Inter-Integrated Circuit)は,Philips Semiconductors社(現在のNXP Semiconductors社)が開発した通信規格です.

IC間の通信を担い,マイコンとその周辺機器(EEPROMなど)の通信でよく使われます.

I2Cは「アイツーシー」や「アイスクエアドシー」などと読みます.

また,I2CはInter-ICと表記されることもあります.

I2Cの仕様は,NXP Semiconductors社がUM10204 I2C-bus specification and user manualという文書で公開しています(会員登録が必要です).

現在,I2CはSPIと並んで事実上の業界標準(デファクトスタンダード)となっています.

I2Cの概要

I2Cでは,SDASCLの2本の信号線を用いて通信を行います.

SDAはSerial Dataの略で,データ用の信号線です.

SCLはSerial Clockの略で,クロック用の信号線です.

また,それぞれの信号線にはプルアップ抵抗を接続します.

I2Cでは,デバイスはその役割によってマスタスレーブに分けられます.

マスタは通信の開始,クロック信号の生成,通信の終了を行います.

マスタはスレーブが持つスレーブアドレスを指定することで特定のスレーブと通信します.

マスタとスレーブの動作の例:

マスタからスレーブにデータを送信するとき

  1. マスタが通信を開始する
  2. マスタがスレーブアドレスを指定する
  3. マスタからスレーブにデータを送信する
  4. マスタが通信を終了する

マスタがスレーブからデータを受信するとき

  1. マスタが通信を開始する
  2. マスタがスレーブアドレスを指定する
  3. マスタがスレーブからデータを受信する
  4. マスタが通信を終了する

I2Cの出力端子はオープンドレインになっています.

I2Cの仕組み

データ転送

I2Cでデータ転送を行うとき,SDAとSCLはそれぞれ次のように動作します.

SCL=HIGHのときのSDAの信号がデータになります.

この図のように,SCL=HIGHのときにSDAを変化させてはいけません.

START ConditionとSTOP Condition

通信開始の合図としてSTART Condition,通信終了の合図としてSTOP Conditionを使います.

SCL=HIGHのときに:

  • SDAをHIGH→LOWとしたらSTART Condition
  • SDAをLOW→HIGHとしたらSTOP Condition

となります.

通信はSTART Conditionで開始し,STOP Conditionで終了します.

アクノリッジ(ACK)とノットアクノリッジ(NACK)

受信側はデータの受信後,データが正常に受信できたことを送信側に伝えます.この信号がアクノリッジ(ACK)です.

受信側がデータを受信できなかった時は,ACKを送信しません.これをノット・アクノリッジ(NACK)と呼びます.

バイトフォーマット

I2Cでの通信は次のように行います.

  1. マスタがSTART Conditionを発行
  2. マスタがスレーブアドレス(7ビット)を送信
  3. マスタがR/Wを送信
  4. スレーブアドレスが一致したスレーブがACKを返す

R/W=0のとき(マスタが送信側)

  1. マスタがデータ(8ビット)を送信
  2. スレーブがACKを返す
  3. 5に戻る or マスタがSTOP Conditionを発行

R/W=1のとき(スレーブが送信側)

  1. スレーブがデータ(8ビット)を送信
  2. マスタがACKを返す
  3. 5に戻る or マスタがSTOP Conditionを発行

*スレーブアドレス,データともにMSBファースト(最上位ビットから最下位ビットの順)で送信します.

I2Cの使い方

ArduinoでI2Cを使う方法はこちらを参考にしてください。

EEPROMをI2Cで使う方法はこちらを参考にしてください.

参考文献

UM10204 I2C-bus specification and user manual Rev. 7.0

Wire Library

お買い物カゴ