0 I2マニュアル
I2C (Inter-Integrated Circuit) インターフェースは、1982年にフィリップス・セミコンダクターズ(当時、現在はNXPセミコンダクターズ)によって開発された。
I2C バス仕様およびユーザーマニュアルはNXPセミコンダクターズに有る。
I2C バス仕様およびユーザーマニュアルはNXPセミコンダクターズに有る。
1 概要
1-1 通信役割名
通信は2つの機器間で行われるが、このときの役割を明確に説明するため「マスタ・スレーブ」で分けている。
| マスタ |
役割: 通信の主導権を握り、クロック信号を生成して通信のタイミングを制御する。 機能: 通信の開始と終了を決定し、どのスレーブと通信するかをスレーブアドレスで指定する。 例: マイコンやプロセッサがマスタとして機能することが多い。 |
|---|---|
| スレーブ |
役割: マスターからの指示を受けて、データの送受信を行う。 機能: 自分に割り当てられたスレーブアドレスでマスタから呼び出されるのを待つ。 特徴: 通信の開始はできず、マスタが要求しない限りデータを送信することはできない。 例: センサーやメモリなどがスレーブとして接続される。 |
1-2 通信線名と用途
I2Cは3本の線で情報を受け渡ししている。
これらの信号線は、一般的にプルアップ抵抗を介して電源(IO電源)に接続する。
このプルアップ抵抗があることで、デバイスが何も出力していないときに信号がハイレベル(H)になり、 意図的にデバイスがローレベル(L)を出力したときのみ、信号がローレベルになる。
| SCL |
役割: 通信を同期させるためのクロック信号を生成する。 送信元: 通信の開始と終了、およびデータ送受信のタイミングを制御する「マスタ」がこの信号を生成する。 信号: マスタがSCLをハイ(H)またはロー(L)にすることで、スレーブ側はSCLの立ち上がり・立ち下がりエッジに合わせてSDAのデータを読み書きする。 |
|---|---|
| SDA |
役割: データ信号の送受信を行う。 双方向性: マスタとスレーブの間でデータを双方向に送受信できるため、同じ線が送信と受信の両方に使われる。 信号: SCLのクロック信号に同期して、マスタとスレーブがデータをこの線に流す。 |
| GND |
信号の基準となるグラウンド(接地)線です。すべてのデバイスで共通の基準電位を提供し、正しく通信するために不可欠です。 |
これらの信号線は、一般的にプルアップ抵抗を介して電源(IO電源)に接続する。
このプルアップ抵抗があることで、デバイスが何も出力していないときに信号がハイレベル(H)になり、 意図的にデバイスがローレベル(L)を出力したときのみ、信号がローレベルになる。
1-3 通信
1-3-1 通信bit
データは8ビット単位で転送されますが、通信の基本単位は「データ8ビット + ACKビット」の合計9ビットです。
通信は、デバイスのアドレスとR/Wビットを組み合わせた1バイトで開始し、以降は8ビットのデータとACK/NACKビットを交互に送受信することで進行します。
通信は、デバイスのアドレスとR/Wビットを組み合わせた1バイトで開始し、以降は8ビットのデータとACK/NACKビットを交互に送受信することで進行します。
1-3-2 通信スピード
規格には
標準モード Standard-mode で最大 100kbit/s
ファーストモード Fast-mode で 400kbit/s
ファーストモード・プラス Fast-mode Plus で 1Mbit/s
となっていますが、
ハイスピードモード(High-speed-mode):3.4Mbps
ウルトラファストモード(Ultra-fast-mode):5Mbps(単方向通信のみ)
も有ります。
標準モード Standard-mode で最大 100kbit/s
ファーストモード Fast-mode で 400kbit/s
ファーストモード・プラス Fast-mode Plus で 1Mbit/s
となっていますが、
ハイスピードモード(High-speed-mode):3.4Mbps
ウルトラファストモード(Ultra-fast-mode):5Mbps(単方向通信のみ)
も有ります。
1-4 通信デバイス
1-4-1 デバイスのアドレス
個々のデバイスを識別するためにアドレスが有ります。
またアドレスには7bitまたは10bitで表します。
(1)7ビットアドレス:
一般的に使用されるアドレス形式です。
0x00から0x7Fまでの範囲(10進数で0から127)で、理論上最大128台のデバイスを接続できます。
ただし、一部のアドレス(0x00や0x01-0x07、0x78-0x7Fなど)は特殊な用途や将来の予約アドレスとして確保されているため、実際に使用できる範囲は少なくなります。
(2)10ビットアドレス:
使用は稀ですが、より多くのアドレス空間が必要な場合に使用されます。
アドレス指定に2バイトを要するため、通信手順が複雑になります。
またアドレスには7bitまたは10bitで表します。
(1)7ビットアドレス:
一般的に使用されるアドレス形式です。
0x00から0x7Fまでの範囲(10進数で0から127)で、理論上最大128台のデバイスを接続できます。
ただし、一部のアドレス(0x00や0x01-0x07、0x78-0x7Fなど)は特殊な用途や将来の予約アドレスとして確保されているため、実際に使用できる範囲は少なくなります。
(2)10ビットアドレス:
使用は稀ですが、より多くのアドレス空間が必要な場合に使用されます。
アドレス指定に2バイトを要するため、通信手順が複雑になります。
1-4-2 プルアップ抵抗
通信線に接続されるディバイスは全て電圧を発生せず、GNDに対してオープン(ハイインピーダンス)または、短絡(ショート)状態にしている。
このため、外部からVDDに抵抗を通し信号線に接続し電圧を発生させている。
この抵抗をプルアップ抵抗と言う。
後でプルアップ抵抗の設計について記載したいと思うが、今回は概要を記載する。
概略プルアップ抵抗は、数kΩから数十kΩ(例:10kΩ)の値で設計する。
ただし、抵抗値を大きくしすぎると、信号波形の立上り・立下り時間が長くなり、信号として検出できなくなる可能性がある。
またリニア電流が大きくなり、オープン状態でのリーク電流との関係で、ハイレベルの出力電圧が低下することがある。
外来ノイズに強くなる。
ただし、抵抗値を小さくしすぎると、プルアップ時に消費する電流が増加してデバイスのショート許容電流を超えるとデバイスを破損する可能性がある。
なお電流値として下記値が定格として出ているが、詳細はデバイス個々の定格表を参照すること。
通信スピードと立下り電流 (mA)
プルアップ抵抗値は、バス容量とプルアップ抵抗によって決まる立ち上がり時間を、規定値内に収まるように選定する。
具体的には、以下関係式となる。
立上り時間 tr = バス容量 × プルアップ抵抗値
通信スピードと立上り、立下り時間 (ns)
オープンコレクタ出力の素子は、抵抗を接続することでハイレベル出力を実現する。
たとえば、5Vで動作するデバイスのバスには、電源電圧5Vにプルアップする。
このため、外部からVDDに抵抗を通し信号線に接続し電圧を発生させている。
この抵抗をプルアップ抵抗と言う。
後でプルアップ抵抗の設計について記載したいと思うが、今回は概要を記載する。
概略プルアップ抵抗は、数kΩから数十kΩ(例:10kΩ)の値で設計する。
設計上の考慮事項
(1)基本的な値の選定:
一般的な目安として、1kΩ〜10kΩ程度の抵抗を5Vまたは3.3V電源に接続して使用する。(2)抵抗値を高くする場合:
消費電流を抑えたい場合には、プルアップ抵抗値を大きくする。ただし、抵抗値を大きくしすぎると、信号波形の立上り・立下り時間が長くなり、信号として検出できなくなる可能性がある。
またリニア電流が大きくなり、オープン状態でのリーク電流との関係で、ハイレベルの出力電圧が低下することがある。
(3)抵抗値を低くする場合:
電流が多く流れることにより、 バスの配線が長い場合には、信号の立上り・立下り時間を短くする効果がある。外来ノイズに強くなる。
ただし、抵抗値を小さくしすぎると、プルアップ時に消費する電流が増加してデバイスのショート許容電流を超えるとデバイスを破損する可能性がある。
なお電流値として下記値が定格として出ているが、詳細はデバイス個々の定格表を参照すること。
通信スピードと立下り電流 (mA)
| 立下り電流 IOL | |
|---|---|
| Standard-mode 100kbit/s | 3 |
| Fast-mode 400kbit/s | 3 |
| Fast-mode Plus 1000kbit/s | 20 |
(4)立ち上がり時間の考慮:
I2Cの通信モードごとに、立ち上がり時間(tr)の規定がある。プルアップ抵抗値は、バス容量とプルアップ抵抗によって決まる立ち上がり時間を、規定値内に収まるように選定する。
具体的には、以下関係式となる。
立上り時間 tr = バス容量 × プルアップ抵抗値
通信スピードと立上り、立下り時間 (ns)
| 立上り時間 tr | 立下り時間 tf | ||
|---|---|---|---|
| Standard-mode 100kbit/s | 最小 | ーー | -- |
| 最大 | 1000 | 300 | |
| Fast-mode 400kbit/s | 最小 | 20 | 20×(VDD/5.5) |
| 最大 | 300 | 300 | |
| Fast-mode Plus 1000kbit/s | 最小 | -- | 20×(VDD/5.5) |
| 最大 | 120 | 120 | |
(5)オープンコレクタ出力への考慮:
多くのI2Cデバイスはオープンコレクタ出力であるため、プルアップ抵抗を接続しないと、信号のハイレベルを出力できない。オープンコレクタ出力の素子は、抵抗を接続することでハイレベル出力を実現する。
(6)システム全体の整合性:
プルアップ抵抗の電圧は、I2Cバスを構成するデバイスの電源電圧に合わせる必要がある。たとえば、5Vで動作するデバイスのバスには、電源電圧5Vにプルアップする。
※ただしその他ディバイスが3.3Vで使用している中で、1つのデバイスが5Vで使用している時はそのディバスの通信信号閾値がその他3.3Vで使用している信号Hiの値以下であれば、5Vで使用しているディバイスのプルアップは3.3Vとする。
もし閾値が電圧以上であれば使用できないので、信号線の間に電圧変換器を入れるか、3.3Vで動作するものに変更する必要がある。
ADS1115モジュールで失敗しているので、注意!
もし閾値が電圧以上であれば使用できないので、信号線の間に電圧変換器を入れるか、3.3Vで動作するものに変更する必要がある。
ADS1115モジュールで失敗しているので、注意!
1-5 信号の種類
大きく分け、最初と最後の信号、データ信号に分けられる。

図1
スタート(START)コンディションとストップ(STOP)コンディション
すべてのトランザクションは START (S) で始ま り 、 STOP (P) で終了します (図1)。
SCL が HIGH の期間の、SDAラインの HIGH から LOW への変化を スタートコンディション、 LOW から HIGH への変化をスト ップコンディションと定義します。
1-5-1 最初と最後の信号

図1
すべてのトランザクションは START (S) で始ま り 、 STOP (P) で終了します (図1)。
SCL が HIGH の期間の、SDAラインの HIGH から LOW への変化を スタートコンディション、 LOW から HIGH への変化をスト ップコンディションと定義します。
1-5-2 データ信号共通
データ信号データ部と確認部の信号がある。
データ部をバイトと言う。
確認部は ACK と言い以下に説明する。
1回の転送で送ることができるバイト数に制限は無い。
アクノリッジビットはデータ受信側(以下受信側と言う)からデータ送信側(以下送信側と言う)に対し、バイト受信の成功と、次のバイトの送信をして構わないことを通知する。
しかしACKが無いと次に説明する NACK 状態を受信側が故障したと送信側が処理させる場合もあり、他の方法で受信側の判断で送信側を長期待機状態にすることが出来るようにしている。
受信側内で次のデータバイトを処理する準備が整うと、受信側のクロックラインSCLをオープン(ハイインピーダンス)状態にすると送信側はデータ転送を継続する。

図2
マスタはストップコンディションを生成して転送を中止するか、リピートスタートコンディションを生成して新たな転送を開始できます。
NACKを発生させる条件は次の通り。
1.転送されたアドレスのレシーバがバスに存在しない.つまりアクノリッジで応答するデバイスがない場合。
2.レシーバが何らかのリアルタイム機能を実行中でマスタとの通信を行える状態ではなく、送信も受信もできない場合。
3.転送の間、受信したデータやコマンドをレシーバが理解できない場合。
4.転送の間、レシーバがそれ以上データバイトを受信できない場合。
5.マスタレシーバがスレーブトランスミッタに対し転送の終了を伝える場合。
データ部をバイトと言う。
確認部は ACK と言い以下に説明する。
1-5-2-1 Byte format
バイト・フォーマット
SDAライン上のすべてのバイトは、8ビット長でなければならない。1回の転送で送ることができるバイト数に制限は無い。
1-5-2-2 ACK NACK
SDA信号
| 送信者 | 受信者 | ||
| 1 | データ送信 8bit | → | 受信完了 |
| 2 | 受信良好 | ← | ACK 1bit(Lo) |
| 3 | データ送信 8bit | → | 受信x |
| 4 | 受信不良処理 | ← | NACK 1bit(Hi) |
| 5 | ・ |
ACK アクノリッジ
アクノリッジは、データ受信側が発信し、各バイトの後に付けられる。アクノリッジビットはデータ受信側(以下受信側と言う)からデータ送信側(以下送信側と言う)に対し、バイト受信の成功と、次のバイトの送信をして構わないことを通知する。
しかしACKが無いと次に説明する NACK 状態を受信側が故障したと送信側が処理させる場合もあり、他の方法で受信側の判断で送信側を長期待機状態にすることが出来るようにしている。
送信側を強制的に待機状態にする方法としては
受信側は送信側を強制的に待機状態とするためにクロックラインSCLを短絡(ショート)状態に保持することにより送信側を待機状態にできる。受信側内で次のデータバイトを処理する準備が整うと、受信側のクロックラインSCLをオープン(ハイインピーダンス)状態にすると送信側はデータ転送を継続する。
SCLのクロック信号についてはマスタが出力する。
アクノリッジの9番目のデータが同期するクロックパルスを含め、すべてのクロックパルスはマスタが出力する。
図2
NACK ノット・アクノリッジ
9番目のクロックパルスの間にSDAがHIGHである場合を、ノット・アクノリッジ(NACK)と定義します。マスタはストップコンディションを生成して転送を中止するか、リピートスタートコンディションを生成して新たな転送を開始できます。
NACKを発生させる条件は次の通り。
1.転送されたアドレスのレシーバがバスに存在しない.つまりアクノリッジで応答するデバイスがない場合。
2.レシーバが何らかのリアルタイム機能を実行中でマスタとの通信を行える状態ではなく、送信も受信もできない場合。
3.転送の間、受信したデータやコマンドをレシーバが理解できない場合。
4.転送の間、レシーバがそれ以上データバイトを受信できない場合。
5.マスタレシーバがスレーブトランスミッタに対し転送の終了を伝える場合。
1-6 信号の流れ
ここでは、スレーブアドレスが 7bit の物を想定して説明する。

図3

図3
1-6-1 スタート信号
1-5-1で説明したスタートコンディションをマスターが出力します。
1-6-2 アドレスとモード指定信号
2番目の信号はマスターが誰とどんなモードで通信するかを指定する。
この信号をスレーブアドレスとR/Wモードと言う
スレーブアドレスは 1-4-1 デバイスのアドレスで説明したアドレスが入る。
次のビットは
R:READ、 読み出しを示し、スレーブからデータを読み出したいデータを次のデータで指定する。
W:書き込みを示し、スレーブに対し書き込みしたいデータを次のデータで措定する。
この信号をスレーブアドレスとR/Wモードと言う
スレーブアドレスは 1-4-1 デバイスのアドレスで説明したアドレスが入る。
次のビットは
R:READ、 読み出しを示し、スレーブからデータを読み出したいデータを次のデータで指定する。
W:書き込みを示し、スレーブに対し書き込みしたいデータを次のデータで措定する。
1-6-3 データ信号
1-5-2で説明したByte format(データ)とACK NACK(結果)によりデータ送信側から受信側へデータを伝達する。
1-6-4 ストップ信号
1-5-1で説明したストップコンディションをマスターが出力します。
2 読み書き信号

図4
2-1 書き込み信号
メインからスレーブに対しデータを書き込みする場合は、図4のように、スレーブアドレスの後1bitを0にすると次からのデータがスレーブに対し書き込まれる。
例として最初に書き込みデータ2Byteとすると
①スタートコンディション ②スレーブアドレス R/W bit=0 ④ANK ⑤データ ⑥ANK ⑤デー タ⑥ANK
⑦ストップコンディション
例として最初に書き込みデータ2Byteとすると
①スタートコンディション ②スレーブアドレス R/W bit=0 ④ANK ⑤データ ⑥ANK ⑤デー タ⑥ANK
⑦ストップコンディション

図5
2-2 読み込み信号
メインからスレーブのデータを読み込みする場合は、図5のように、スレーブアドレスの後1bitを1にすると次からのデータがスレーブからデータが送られてくる。
例として最初に読み込みデータ2Byteとすると
⑪スタートコンディション ⑫スレーブアドレス ⑬R/W bit=1 ⑭ANK ⑮データ ⑯ANK ⑮データ ⑯NANK ⑰ストップコンディション
例として最初に読み込みデータ2Byteとすると
⑪スタートコンディション ⑫スレーブアドレス ⑬R/W bit=1 ⑭ANK ⑮データ ⑯ANK ⑮データ ⑯NANK ⑰ストップコンディション

図6
2-3 組み合わせ信号
メインからスレーブに対し書き込み、読み込みの組み合わせする場合、最初の要求と次の要求にはストップコンディションは不要とする。
図6のようになるが、 例として最初に書き込みデータ2Byte、次に読み込みデータ2Byteとすると
①スタートコンディション ②スレーブアドレス ③R/W bit=0 ④ANK ⑤データ ⑥ANK ⑤データ ⑥ANK
⑪リピートスタートコンディション ⑫スレーブアドレス ⑬R/W bit=1 ⑭ANK ⑮データ ⑯ANK ⑮データ ⑯NANK ⑰ストップコンディション
となる。
図6のようになるが、 例として最初に書き込みデータ2Byte、次に読み込みデータ2Byteとすると
①スタートコンディション ②スレーブアドレス ③R/W bit=0 ④ANK ⑤データ ⑥ANK ⑤データ ⑥ANK
⑪リピートスタートコンディション ⑫スレーブアドレス ⑬R/W bit=1 ⑭ANK ⑮データ ⑯ANK ⑮データ ⑯NANK ⑰ストップコンディション
となる。
