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Ω程度でプルアップする。
・通信距離が長いと使えない。
・スレーブ側は両ピンとも常時は入力モード、ハイインピーダンス状態にする。
・アドレスで指定された出力するデバイスだけ出力モードに設定する。
・基本構成については下記記事を参考
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通信参考記事
5. 関連記事
ソフトウェア基礎知識:
・ソフトウェア基礎知識(2進数から10進数) - Project_OKI’s diary
・SPI通信とは - Project_OKI’s diary
C言語:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary
・STM32マイコン_2(UART通信:TeraTermにHellow表示) - Project_OKI’s diary
・STM32マイコン_3(UART通信:複数文字送信) - Project_OKI’s diary
・STM32マイコン_4(NVICの設定内容) - Project_OKI’s diary
・STM32マイコン_5(スイッチ入力とLED点灯、消灯) - Project_OKI’s diary