I2C


I2C:Inter-Integrated Circuit
アイツーシーやアイスクエアドシーと呼ばれる通信規格。

双方向通信の規格であり、信号線は一本のみという特徴を持つ。
SPI通信に比べ、

  • 信号線は一本
  • スレーブセレクトがいらない
  • 127個程度接続できる
  • 同時送信も可能
  • マルチマスターモードがある

という長所を持つが、

  • アドレス設定が必要
  • 通信速度は比較的遅い
  • プルアップで吊っているため、少々ノイズに弱い。
という弱点を持っている。

SPI通信とI2C通信の簡単な使い分けは次の通り。

  • SPI通信
通信頻度が高い、高速動作が要求される、スレーブ数が少ない、アドレス設定が不要。

  • I2C通信
配線を気にせずつなぎたい、スレーブが多い、スレーブ数を変化させたい、どれもマスターにしたい


配線としては、
  • GND
  • SCK
  • SDA
の最低3本があれば動く。

信号規格


SPI機能に対応しているPICならば、I2C機能に対応していることが多い。
ソフトウェアで実現しようとすると結構面倒だったりする。

双方向でありながら信号線は一本であり、SPIのように同時に送受信することはできない。

SCKおよびSDAはどちらもプルアップのある引き込み出力となっている。
よって1を送るときは開放、0を送るときはGNDと短絡することで、出力のショートが発生しないようになっている。

同期式通信であり、クロックをマスターのSCK端子より供給する。
ただし、供給するマスターを自由に変更できるのがマルチマスターモードである。

まずマスターを含むそれぞれのデバイスにI2C用のアドレスを設定する。
マスターからのクロックに合わせてUSART信号と同様にビット列で送受信を行う。
ただし、マスターから送られる最初の1byte(2byteの場合もある)の信号はアドレスと送受信の情報であり、どこにデータを送受信するかを指定する。
次のbyteデータからが実際に送信するデータとなる。
マスターのクロック出力を1(開放)にし続けると、すべてのスレーブは待機状態となる。
一方データ送信後クロック出力を0にし続けると、次の情報はデータとなり連続送信となる。


信号衝突も検知できるらしいが、あまり使う機会はないだろう。
最終更新:2011年03月08日 10:27