2015年11月01日

番外編 -I2C その2(詳細)

前回はI2Cの概要について説明しました。今回はI2Cの詳細を説明します。


目次


1. やり取りの順番

前回説明したようにI2Cを行うためにはマスタースレーブの2種類が必要で、アドレスやACKなどのやりとりを行います。
マスター-スレーブ間のやり取りを図に示します。図1はRead実行時、図2はWrite実行時です。
図の上から順にやり取りを行っていき、矢印は通信の向きを示しています。マスターからスレーブへ向かう矢印はマスターが送信しスレーブが受信するという意味です。

nov01_I2C_1.png
図1 Read実行時のやり取り

nov01_I2C_2.png
図2 Write実行時のやり取り

図の内容を箇条書きでまとめます。
  1. マスターが通信開始を指示する
  2. マスターが通信を行うスレーブのアドレスRead/Write(R/W)のどちらを行うかを指示する。スレーブはアドレスを受け取れたかどうか返事をする
  3. 送信側がデータを送り、受信側は受け取れたかどうか返事をする。(マスターとスレーブのどちらが送信側と受信側になるかはR/Wの指示に従う)
  4. データのやり取りを続けるなら3を繰り返す。やり取りを終えるならマスターが通信終了をスレーブに指示する
マスターが色々な指示を出し、スレーブはそれに従って動作します。
やり取りの中には名前が決まっているものもありますので、以下に示します。
  • 通信開始の指示:スタートコンディション
  • 通信終了の指示:ストップコンディション
  • 受信に成功したときの返事:ACK(Acknowledge)
  • 受信に失敗したときの返事:NACK(Not Acknowledge)


2. 波形

実際にI2Cの通信波形を使ってやり取りの順番を説明します。図3が実際にI2Cで通信(Write)を行った波形です。
※図3の波形は波形にノイズが乗っていたり、ACKが0[V]に下がりきっていないなどの問題があります。とはいえやり取りの順番の説明程度には使えますので、ノイズなどは無視してください

nov01_I2C_3-1.png
図2 Write実行時のやり取り

I2Cは同期方式ですので、SDAはSCLのタイミングに合わせて変化します。基本的にはSCLがLowのときにSDAが変化します。SCLがHighのときにSDAが変化してはいけません。
ただし、スタートコンディションとストップコンディションは例外で、SCLがHighのときにSDAが変化しなくてはなりません。SDAの立ち下がりがスタートコンディション、立ち上がりがストップコンディションです。

I2Cは8[bit]ずつやり取りを行います。初回はアドレス7[bit]とR/W 1[bit]で合計8[bit]、2回目以降はデータ8[bit]ずつやりとりします。受信側は8[bit]毎にACK/NACKを返します。
また、アドレスやデータは上位ビットから送ります。ですので、図3のアドレスは0111110=0x3E、データは10110011=0xB3です。
(シリアル通信では反対に下位ビットから送ります

R/WとACK/NACKの論理は次の通りです。
  • R/W:0ならRead、1ならWrite
  • ACK/NACK:0ならACK、1ならNACK
図3でやり取りしているR/WはSDAが0なのでRead、ACK/NACKはSDAは0なのでACKです。


このようにI2Cではスタートコンディションやストップコンディション、アドレス、R/W、ACK/NACK、データのやり取りを指定された順で行います。
次回は実際にI2Cを使ってみようと思います。


参考資料

  1. 作者名:NXP Semiconductors. "I2C バス仕様およびユーザーマニュアル". サイト名:NXP Semiconductors. http://www.nxp.com/documents/user_manual/UM10204_JA.pdf, (参照日:2015-11-01)

マイコンにプラス!シリアル拡張ICサンプルブック LED/モータからA-D/D-A変換まで2線インターフェースI〔2〕Cで数珠つなぎ!

価格:3,888円
(2015/11/1 17:20時点)
感想(0件)



posted by ました at 17:30| Comment(0) | TrackBack(0) | 電子工作の知識 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。