I〓C
読み:アイ-スクウェアード-スィー
外語:I2C bus: IIC bus (Inter-IC bus)
オランダのPhilips社が開発した
IC
間でデータ通信をする
半二重
方式の
シリアルバスインターフェイス
。
目次
概要
インターフェイス
アドレス
信号線
通信速度
シリアルクロック(SCL)
シリアルデータ(SDA)
使用例
主要デバイス
派生技術
技術
手順
スタートコンディション
データ
送受信
アドレス
ACK
リード
ライト
ストップコンディション
基本的な通信
書き込み
読み込み
読み込み(アドレス指定)
概要
基板
上で、さほど速度を要しないIC間の通信が必要な場合によく使われているインターフェイスの一つである。
同規格に基づくIC同士なら、僅か2本の配線で、複数の周辺IC間の相互データ転送や制御ができる。対応するICには
シリアルEEPROM
や、A/D、D/Aなど様々なものがある。
この技術は2004(平成16)年8月に特許が切れていることからロイヤルティフリーであることに加え、シンプルで必要十分な性能、僅か2ピンで通信できるのでICを小型軽量に出来る、そしてOSでの実装の多さ(LinuxやBSDで対応している)などから広く普及している。古典的ではあるが現役の技術で、最新のスマートフォンなどでも内部ではこのI〓CでIC間が結ばれている。
インターフェイス
アドレス
I〓Cバスに接続された機器類にはアドレスが割り当てられる。このアドレスを、スレーブアドレスという。
2つのグループ(0000 XXX および 1111 XXX)に対して、各々8個のスレーブアドレスが予約されている。
スレーブアドレス
R/ ̄(W)
用途
0000 000
0
ゼネラルコールアドレス
1
スタートバイト
0000 001
X
将来の使用のため予約
0000 010
X
将来の使用のため予約
0000 011
X
将来の使用のため予約
0000 1XX
X
将来の使用のため予約
1111 1XX
X
将来の使用のため予約
1111 0XX
X
10ビット・スレーブアドレス指定
信号線
信号線
は
オープンコレクタ
(
MOS
の場合はオープンドレイン)で、シリアルクロック線(SCL)と、シリアルデータ線(SDA)がある。
この2線だけで、制御側(マスター)と、IC(スレーブ)の通信を行なう。
電圧は
5V
以下、現在は
3.3V
が一般的となっている。
通信速度
当初仕様は100kbit/s(100kHz)だったが、拡張が続けられ、これを著している時点では計5種類のモードが存在する。
双方向バス
Standard-mode (Sm) 最大100kbit/s
Fast-mode (Fm) 最大400kbit/s
Fast-mode Plus (Fm+) 最大1Mbit/s
High-speed mode (Hs-mode) 最大3.4Mbit/s
片方向バス
Ultra Fast-mode (UFm) 最大5Mbit/s
シリアルクロック(SCL)
SCLは、同期を取るための信号線である。通常はマスター→スレーブの一方向である。
SCLがロー(L)の期間にシリアルデータ(SDA)を変更し、SCLをハイ(H)で保持することでその通信を行なう。
シリアルデータ(SDA)
SCLに同期し、データの転送に用いる信号線である。マスター、スレーブ、どちらからも送信されうる。
通信の
ACK
信号もSDAを通じて送信されるため、転送方向は通信中に随時変化する。
送信データ(SDA)は、SCL=Hの間のどこかで確定する。基本的には、立ち上がり・立ち下がりエッジではないので、送信(マスター→スレーブ)の場合、SCL=Hの間はSDAを変化させてはいけない。
送信(マスター→スレーブ)の場合、SCL=Hの間にSDAを変えるのはスタートコンディションとストップコンディションだけであり、通常のSDAの変更はSCL=Lの間に実施しなければならない。
使用例
主要デバイス
I〓Cが使われることが多い、主なもの(順不同)。
シリアルEEPROM
(機器の情報を保存する不揮発メモリー)
Serial presence detect (SIMMやDIMMに付いているIC)
ADコンバーター
DAコンバーター
リアルタイムクロック
ディスプレイ
(液晶の輝度調整や、
DDC
など)
スピーカー
(アンプICの制御など)
LED
(
LEDドライバー
の制御など)
NFC
(NFCプロセッサーの制御など)
PCの
マザーボード
(
SMBus
など)
派生技術
I〓Cが根幹技術となっている、主な派生技術。
DDC
SMBus
技術
手順
データは、スタートコンディションに始まり、実際のデータ送受信が続き、ストップコンディションで終わる。
スタートコンディション
マスターが通信を開始する前に、バスの使用権を獲得するため、スタートコンディションを発行する。
これは、SCLがハイの状態で、SDAをハイ→ローとすることで行なう。
データ
送受信
バス使用権を獲得した後、データの送受信が行なわれる。
送受信する内容はICによって異なるが、一例では、デバイスアドレス、リード/ライトの区別、デバイス内のメモリーアドレス、実際のデータ、といった形式になる。
アドレス
スレーブアドレス空間は、元々は7ビット。後に10ビットに拡張する規格も作られた。スレーブアドレスは、R/Wおのおので8ずつ、計16が予約されており、特殊な用途に使われる。
7ビットの場合、最初にスレーブ7ビット、次にR/W(スレーブに対してリードするかライトするか)を1ビットで指定する。R/Wのビットは、0でライト、1でリードである。その後、スレーブからACKを受け取る。
制御仕様書などでは、8ビットにまとめて、リード時アドレス/ライト時アドレスなどと呼びわけることもある。
10ビットの拡張仕様では、スレーブアドレスは2回に分けて送る。最初に予約アドレスとなる11110XXとR/Wを送信(XXはスレーブアドレスの2ビット)しACKを受け取り、2回目に残るスレーブの8ビットを送信しACKを受け取る。以降は両者で同様である。
ACK
8ビット送受信するごとに1ビットのACKまたはNOACKがある。
送信(マスター→スレーブ)では、マスターはスレーブからACKを受け取る。受信(スレーブ→マスター)では、マスターは継続して受け取るかどうかをACKまたはNAKでスレーブに対して通知する。
ACKは、SCLがローの状態でSDAをロー(ACK)またはハイ(NOACK)とし、SCLをロー→ハイ→ローとすることで送受信される。
リード中であれば、スレーブからACKが送信され、ライト中であればスレーブに対してNOACKを送信する。
リード
SCLをロー→ハイとすると、スレーブはSDAに1ビットのデータを送信するので、マスターはこれを読み取る。
SCLをローに戻し、再度ロー→ハイとすれば、その次のビットが送信される。これを繰り返す。
ライト
SCLがローの状態でSDAに1ビットのデータを設定し、SCLをロー→ハイとすると、スレーブは1ビットのデータを受信する。
SCLをローに戻し、SDAに1ビットのデータを設定して再度ロー→ハイとすれば、その次のビットがスレーブに送信される。これを繰り返す。
ストップコンディション
データの転送を終えたら、バスを解放するため、ストップコンディションを発行する。
これは、SCLがローの状態でSDAをローにし、SCLをハイ、SDAをハイ、とすることで行なう。
基本的な通信
書き込み
マスターからスレーブへの転送(書き込み)を説明する。
マスターからスレーブに対するデータを1オクテット(8ビット)送信すると、スレーブからマスターにACKが返される。この9ビットのまとまりを継続して実施することで、複数のデータをマスターからスレーブに転送することができる。
データの転送を終えたら、マスターはストップコンディションを送出し、通信を終了する。
例えば、ICのレジスター変更などでは、1オクテット目にレジスター番号、2オクテット目に書き込む内容、といったシーケンスがよく見られる。
読み込み
スレーブからマスターへの基本的な転送(読み込み)を説明する。
マスターはスレーブから送られてきたデータを1オクテット(8ビット)受信する。その後、継続して受信するかどうかをACK(SDA=L)またはNAK(SDA=H)としてスレーブに送信する。9ビットのまとまりとして、継続して読み込みが実施できる。
読み込み(アドレス指定)
スレーブからマスターに、アドレスを指定しての転送(読み込み)を説明する。
シリアルEEPROM
、あるいはレジスター制御をするICなどでは、書き込みは単純なシーケンスで実施できるが、読み込みは若干複雑なシーケンスが必要である。
標準的なインターフェイスでは、いったんアドレスやレジスターなどの番号を書き込みしたあと、ストップコンディションを発行
せずに
スタートコンディションを再発行するシーケンスとなる。
最初のアドレスやレジスターを送信するシーケンスはマスター→スレーブの送信になるためR/WはW(SDA=L)で実施し、次にレジスターを読み取るシーケンスはスレーブ→マスターの受信になるためR/WはR(SDA=H)で実施する。
再検索