NEC ELECTRONICS NEC ELECTRONICS
NEC electronics NEC electronics NEC
ホーム
アプリケーション
製品情報
先端技術
サポート
WEBショップ
ニュース&イベント
会社案内
header
GO
詳細検索機能/特性検索
サイトマップ お問い合わせ

I2Cバス

目次

    
FAQ-ID = v85iic-nnnn
0101: I2Cバスについての概要
v85iic
-0101
I2Cバスについての概要
はじめに
I2Cバスはフィリップス社が提唱しているシリアル・バスで、 2本の信号により複数の機器の間でデータをやり取りをサポートしています。
(フィリップス社の特許が2004年8月で失効したので、以降は契約やロイアリティの支払いが不要となりました。)

(2004/12)

この情報はお役にたちましたか?
Q1
I2Cバスの概略仕様は?
A1
I2Cバスは複数の機器をシリアル・クロックとシリアル・データの2本の信号で結んでデータのやり取りを行います。
転送速度としては
 ・標準モード: 〜100Kbit/s
 ・ファースト・モード: 〜400Kbit/s
 ・高速モード: 〜3.4Mbit/s
の3つがあり、速いモードの機器は遅いモードのバスに接続しても使える必要があります。

なお、高速モード・バスは標準モードやファースト・モードのバスとはブリッジを用いて分離する必要があります。
また、通信はシリアル・クロックに同期して行われますが、シリアル・クロックを出力し、 通信相手を指定して通信を制御する機器 (これをマスタと呼ぶ) は1つのバスに複数存在することが許されています (マルチ・マスタ)。
このため、データのやり取りだけではなく、 アドレスの指定やバス・アービトレーション等プロトコルも含んで規定されています。

(1) 接続機器

I2Cバスに接続される機器には
 ・マスタ専用: マイコンは通常マスタとしての使い方が主です。
 ・スレーブ専用: EEPROMや A/D、D/A等があります。
 ・マスタ/スレーブ共用: マルチ・マスタ・システムで両方の機能を持たせる場合です。
があります。

通常マイコンで使用することが多いのはマスタ専用の機能で、この機能を使ってEEPROMと接続します。 アプリケーションによってはスレーブとして使用することもあります。


(2) インタフェース信号

インタフェース信号は複数の機器の出力を接続するためにオープン・ドレーン出力でドライブするようになっており、 ロウ・レベルは機器が出力しハイ・レベルはプルアップ抵抗で供給されます。
なお、高速モードに関しては立ち上がりの高速化のために機器の中で電流ソース・プルアップが内蔵されています。

以降、特に断らない限りは標準バス/ファースト・バスで話を進めて行きます。

バス信号の電圧レベルとしては2つが規定されています。
最近のマイコンの動作電源電圧は変更できますので、I2Cバスのプルアップ抵抗は VDDに接続し、 ハイ・レベル入力電圧は 0.7VDD(MIN)となります。
古いデバイスや電源電圧が固定されているデバイスを接続する場合には 5V±5% に接続し、 ハイ・レベル入力電圧は 3V(MIN)となります。

(a) シリアル・クロック(SCL)
通信は SCLで同期を取りながら行います。
通常、SCLはマスタが出力し、送信する機器は SCLがロウの期間にシリアル・データを変更し、 SCLがハイの期間では保持することで通信を行います。
しかし、スレーブが通信準備できていないとき等に SCLをロウにすることで待ち合わせを行い、 データの同期をとることができます。

iic_01

(b) シリアル・データ(SDA)
SCLに同期してデータの転送に使用されます。
マスタとスレーブのどちらからも送信することがあります。
また、通信データに対してのアクノリッジ信号も SDAを通じて送信されますので、 8ビットのデータとそれに対するアクノリッジでは転送方向が逆になります。
なお、通常の通信では必ず、SCLがロウのときに SDAは変化します。

iic_02

SCLがハイの状態で SDAが変化すると、 スタート・コンディションやストップ・コンディションのような制御信号となります。


(3)基本的な通信方法

[スタート・コンディション]
マスタが通信をスタートする時には最初にバスの使用権を獲得する必要があります。

このために、スタート・コンディションを発行します。
これは SCLがハイの状態で SDAをロウに落とすことで実現します。

このときに既に SDAまたは SCLがロウになっていると、これは他のマスタが既にバスを使っている状態ですので、 新たに通信を開始することができず、通信予約状態にします。
また、バスを使えなかったマスタがスレーブとしての機能をもっている場合にはスレーブとしての通信待ちにします。
ただし、同時に 2つ以上のマスタがスタート・コンディションを発行した場合にはこの段階ではどちらが優先かは区別できません。

なお、スタート・コンディションは通信の最初にバスを確保するために使用する以外に、 バスを確保したままでスレーブとの間のデータ送受信の方向を切り替えたりするためにも使用します。
この場合に使用するスタート・コンディションをリスタート・コンディションと呼びます。
具体的な例は後述の [リスタート・コンディション] を参照してください。

[アドレスとアービトレーション]
スタート・コンディションに続いて、 スレーブを指定するために 7ビットのアドレスと転送方向を示す 1ビットの合計 8ビットを送信します。

同時に 2つ以上のマスタがスタート・コンディションを発行した場合には、各々がスレーブのアドレスを送信することになります。
I2Cバスとしてはロウが強いので、スレーブのアドレスの小さい方への通信 (SDAをロウに保持していた方) が優先となります。
このようにして、バス使用権の調停が行われます。

iic_03

アドレス及び転送方向の送信に対して、 SCLの 9クロック目で選択されたスレーブからアクノリッジ (ロウ) が戻されます (このときに SCLをロウに引くことで、ウエイトがっかりますが、ウエイトについては別途説明します)。

指定したスレーブが存在しなければバスをロウに引くものが存在しないので、 アクノリッジは戻らないことになります。
アクノリッジが戻らなかったら通信はそこで終わりとなり、 マスタはストップ・コンディションを発行してバスの使用を中止します。

[データ転送]
スレーブとの通信が確立したら、データの転送に移ります。
このとき、スレーブは SCLをロウに引いてウエイトをかけた状態で、 アドレスの 8ビット目で指定された転送方向での通信準備を行い、 準備が完了したら SCLをロウに引くのを止めます。
これにより、SCLはマスタが制御できるようになり、マスタからの SCLでデータ転送を行えるようになります。
以下のタイミングも参照してください。

iic_04

[アクノリッジ]
データ転送は 8ビット単位で行われ、データの後にデータを受信したほうはアクノリッジを戻します。
マスタからスレーブにデータを送信する場合には、スレーブはデータを受け取ると必ずアクノリッジを戻します。
データを受け取れなかったときにはアクノリッジを戻さないことで、マスタに知らせます。

マスタが受信する場合には受信した最後のデータに対してはアクノリッジを戻さないことで、 スレーブに対して通信の終了を知らせます。
スレーブはアクノリッジがないことで通信の終了と判断し、以降の送信を中止し SDAをハイにします。
このような処理を行わないと、スレーブが次のデータの送信を開始し、SDAをロウに引っ張ってしまうと、 マスタがストップ・コンディションを発行できなくなってしまうことになります。

[ウエイト]
スレーブ(及びマスタ)は SCLをロウに引くことで通信を停止 (ウエイト) させることができます。
通常、ウエイトは 8クロック目の後 (つまりデータの転送が終了してアクノリッジを戻す前) か 9クロック目の後 (アクノリッジの後で、次の転送の前) にかけます。

受信側でデータに対してアクノリッジを戻すかどうかを判断する場合には 8クロック目でウエイトをかけます。
送信側はアクノリッジの後つまり 9クロック目でウエイトをかけることになります (これでアクノリッジを確認してその後の動作を決められます)。

[リスタート・コンディション]
EEPROMのようにデバイスのアドレス以外に内部にアドレス情報をもったデバイスの場合には I2Cバスのアドレスではデバイスそのものを選択することしかできません。
デバイスの中のどのアドレスのメモリかを指定するためのアドレス情報はデータとして送る必要があります。
書き込みの場合には下記の例のようにメモリ・アドレスに引き続いて書き込みデータを送信すればいいのですが、 読出しでは途中でデータの転送方向を切り替える必要があります。

iic_05

以下に読み出しの例を示します。
最初のスタート・コンディションでバスの使用を開始し、 デバイスのアドレスを指定します (このときはマスタからの送信を指定します)。
その後、デバイス内のアドレスをデータとして送信します。
このままでは読み出せませんので、再度スタート・コンディションを発行します。
この ST2と書いたところがリスタート・コンディションとなります。

その後、再度アドレスでデバイスを指定しますが、今度はスレーブの送信を指定します。
その後のデータはスレーブがマスタに送信するので、読み出しができるようになります。

iic_06

[ストップ・コンディション]
データ転送が終了するとバスを開放します。
このために使用するのが、ストップ・コンディションです。

マスタは SCLがロウの状態で、SDAをロウにし、SCLをハイにします。
その状態で、SDAをハイに立ち上げるとストップ・コンディションとなります。

EEPROMへの書き込みではデバイス内の実際の書き込み動作はストップ・コンディションを検出してから行います。
この情報はお役にたちましたか?
Q2
その他の仕様や仕様外の注意事項は?
A2
(1) アドレス
スレーブのアドレスを指定するためのアドレス・フィールドは 7ビットありますが、 そのすべてが自由に使える訳ではありません。
アドレスの最初の 4ビットが 0000 と 1111 は用途が規定されています。

0000 で始まるアドレスはジェネラル・コール・アドレス (0000 000) のような目的で使用します。
1111 で始まるアドレスの内で、 1111 0xx はこの xx の 2ビットとその後に続く 1バイトの合計10ビットでスレーブのアドレスを指定できます。
ただし、通常のマイコンでの使用では 10ビットのアドレスを使う可能性は低いと考えられます。

(2) バスの初期状態
I2Cバスに途中からマスタとして参加するような場合にはバスが使用中かどうかが完全には判断できません。
通常は SCLSDAがハイの状態を保持していればバスは開放状態と考えられますが、 SCLのハイ期間については上限の規定がないので、どの程度待てばバスが開放状態と断定できません。
従って、この部分はコントローラではなく、上位のプログラムで判断する必要があります。

(3) 動作中のリセット
通信中にリセットがかかるような場合、バス上の全てのデバイスがリセットを認識できればいいのですが、 EEPROMのようにリセット信号をもたないデバイスも存在します。

この場合、もし EEPROMが SDAにロウを出力した状態であれば、 そのままではスタート・コンディションもストップ・コンディションも発行できないため、 バスは使用できなくなります。
これはコントローラでは対応できません。

この場合には、SCLを出力ポートでドライブし、出力ポートから SCLパルスを出力します。
これにより EEPROMは 1バイトの残りのデータ出力を継続します。

EEPROMがハイを出力するか、出力が終わってアクノリッジが戻らないので次の出力を止めることで SDAがハイ状態となります。
この状態になると、スタート・コンディションもストップ・コンディションも発行できますから、 バスを使用できるようになります。
この情報はお役にたちましたか?
back to top  
(2004/04)









































 ご利用にあたって  個人情報保護について  RSS       © 1995-2008  NEC Electronics Corporation