Project_OKI’s diary

エンジニアの勉強ブログ

I2C通信とは

​​​​

I2C通信とは

1.目的

  • I2C通信について、理解する。
  • I2C通信で何を行っているのかについて理解する。

目次

2.I2C通信とは  

 ・クロック(SCL)に同期させてデータ(SDA)の通信を行う同期式シリアル通信

 ・ I2Cは、2本の線(SCLとSDA)を用いたシリアル通信の一種。

 ・SCLはクロック信号を、SDAはデータ信号を伝送する。

 ・マスター側がSCLを生成し、スレーブ側はそれに同期して通信する。

 ・スレーブ側はアドレスを持ち、マスターはアドレスを指定して通信する。

 ・データはバイト単位でやり取りされ、読み書きの切り替えはACK/NAKで行われる。

 ・マルチマスター構成においては、バス衝突を防ぐために適切な制御を必要とする。

 

2.I2C通信の特徴

 ・同じ信号ラインに複数のデバイスを繋げられる。

 ・複数センサーがあっても、同じI2Cに全部つなぐこともできる。

 ・親子関係があり、親1つに対して子をたくさん繋げられる。

  (親:マスター、子:スレーブ)

 ・スレーブ側はアドレスを持つ。

 ・1バイト転送ごとに、受信側は、ACK信号を返答する必要がある。

 ・相手がいない場合や相手が拒否した場合には送信自体がエラーとなる。

 ・通信速度はSPIなどに比べると遅い。

 ・信号線が2本の為、配線が簡単。

 ・7ビットアドレスモードと10ビットアドレスモードの2つのモードがある。

 ・7ビットアドレスモードは最大128のアドレスをサポート

 ・10ビットアドレスモードは最大1024のアドレスをサポート

 ・10ビットアドレスモードは7ビットアドレスモードよりも複雑で、

  通信速度も遅くなる傾向がある。

 ・一般的には7ビットアドレスモードが使用される。

 

3.通信速度

 (1) I2C通信は、3つの通信速度モードがある。

  ・スタンダードモード: 100k

  ・ファストモード  : 400k

  ・ハイスピードモード: 3.4M 

4.通信に関して

 ・マスター側は、好きなタイミングで1つのスレーブに対し通信を始める。 

 ・書き込みと読み込みがある。

 ・スレーブ側は、マスターの応答に対し返事する。

5.配線に関して

 ・クロック(SCL)とデータ入出力(SDA)の2本の信号線で通信

 ・双方向通信 

 ・マイコンの出力をオープンドレインにし、プルアップ抵抗で配線する必要がある。

  (オープンドレインについては、下記説明を参照)

 ・外部で、1k~10kΩ程度でプルアップする。

 ・通信距離が長いと使えない。

 ・スレーブ側は両ピンとも常時は入力モード、ハイインピーダンス状態にする。

 ・アドレスで指定された出力するデバイスだけ出力モードに設定する。

 

 ・基本構成については下記記事を参考

  →I2C通信使い方

 

6.基本的な通信のやり取り

(1) マスター側:Start Condition(スタートコンディション)を出力

(2) マスター側:クロック供給しながら、アドレスとRead/Write要求を出力

(3) スレーブ側(全て):SCLのクロックデータを元に、SDAのデータを受信

(4) スレーブ側(全て):SSPADDレジスタにセットされたアドレスと一致したデバイスのみ、送受信を継続

(5) スレーブ側(個別):データの受信完了後、自動的にACKビットを返送、同時にSSP割り込みを発生

(6) マスター側:Stop Conditionを出力するまで、送受信を行う。

 

 

7.通信タイミングについて

(1) スタートコンディション:SCLがHighの時にSDAをLowにする。

 

(2) アドレスとRead/Writey要求とSDAデータの受信:
  マスター側:SCLがLowの間にSDAのビットを送信し、

        送信側から順次8ビットのデータを出力
  スレーブ側:SCLが立ち上がった時に、SDAのビットを取り込む。


(3) スレーブ側:8ビットの受信完了後、

        9ビット目のクロックに合わせて、ACK信号を返送する。

 

(4) スレーブ側で次のデータ準備が出来るまでマスター側を待たせる場合:
  受信側からSCLを強制的にLowにする。
  (見かけ状クロックがなくなる為、マスター側からデータの送信が出来なくなる)


(6) ストップコンディション:最後のデータ送信後、ACKを確認する。
         スレーブ側:SDAを解放し、Highになる。
         マスター側:SCLがHighの間に、SDAをLowする。
         マスター側:クロックを停止(SCLがHighにする)。
         マスター側:SCLがHighの状態で、SDAをHighにし、

               ストップコンディション終了。
         通信終了

 

8.I2C通信のデータフォーマット

 (1) 通信データの開始時のフォーマット:マスター側から送信

 

 ・ 7ビットモードと10ビットモードがある。
 ・アドレスの1バイト目の最後のビットが送信、受信を区別する

  (Read/Wireビット    (RW))となる。

  下記は7ビットモードの場合

  ※ACM1602データシートより。

 

 (2) 全体のフォーマット

  ・マスター側が送信側か、受信側かでフォーマットが異なる。

  ・マスター側が受信側の場合:

    (a) アドレスフォーマットでRWを0に設定し、特定のスレーブに送信
    (b) 指定されたスレーブがデータの送信を開始
    (c) マスター側はデータを受信したらACKを返信

  

  ・マスター側が送信側の場合:

    (a) アドレスフォーマットでRWを1に設定し、特定のスレーブに送信
    (b) 指定されたスレーブはACKを返信
    (c) マスター側は、データの送信を行う。
    (d) スレーブ側は、データを受信したらACKを返信する。

   この記事の図面が分かりやすい:I2C通信使い方

 

I2C通信参考記事

 ・I2C通信の使い方

 ・I2C通信使い方

 ・I2C - obniz Docs

 

 

組み込みC言語