• 検索結果がありません。

I 2 C の実装と動作

ドキュメント内 LPC111x UM Rev0015 Japanese (ページ 147-151)

(パワーマネージメントユニット)

10.10 I 2 C の実装と動作

FT D RAF FT DR

AFT DRA

FT D FT D

RA FT D

RA FT D

RA FT DR

A

FT D RAF FT DR

AFT DRA

FT D FT D

RA FT D

RA FT D

RA FT DR

A

10.10.1 入力フィルタと出力ステージ

入力信号は内部クロックと同期し、3クロックよりも短いスパイクはフィルタアウトされ ます。

I2Cの出力は、I2C規格に準拠するように設計された特殊パッドです。

10.10.2 アドレスレジスタ、 I2ADDR0 I2ADDR3

これらのレジスタは、スレーブトランスミッタまたはレシーバとしてプログラムされてい るときにI2Cブロックが応答する7ビットのスレーブアドレス(上位7ビット)とともに ロードされることがあります。 LSB(GC)を使用して、ゼネラルコールアドレス(0x00) の認識をイネーブルにします。複数のスレーブアドレスをイネーブルにすると、実際に受 信したアドレスは、自身のスレーブアドレスを受信した状態で、I2DATレジスタから読み 取ることができます。

10.10.3 アドレスマスクレジスタ、 I2MASK0 I2MASK3

4つのマスクレジスタには、それぞれ7つのアクティブビット(7:1)が含まれています。

これらのレジスタのうち、「1」に設定されている任意のビットは、そのマスクレジスタ に関連付けられているI2ADDRnレジスタと比較されたとき、受信したアドレスの対応す るビット上で自動的に比較が行われます。言い換えると、マスクされている I2ADDRn レ ジスタ内のビットは、アドレスマッチを判定する際に考慮されません。

I2ADDRnビット 0(GC イネーブルビット)が設定され、ビット(7:1)がすべて 0の場 合、関連するマスクレジスタの状態に関係なく、部品は受信アドレス = “0000000”に応答 します。

アドレスマッチ割り込みが発生すると、プロセッサはデータレジスタ(I2DAT)を読み 取って、実際にマッチが発生した受信アドレスがどれであるかを特定します。

10.10.4 コンパレータ

コンパレータは、受信した7ビットスレーブアドレスを自身のスレーブアドレス(I2ADR 内の上位 7 ビット)と比較します。さらに、最初に受信した 8 ビットバイトをゼネラル コールアドレス(0x00)と比較します。同じであることが判明すれば、該当するステータ スビットが設定され、割り込みが要求されます。

10.10.5 シフトレジスタ、 I2DAT

この 8 ビットレジスタには、これから送信されるシリアルデータのバイトか、受信した ばかりのバイトが含まれています。 I2DAT内のデータは、常に右から左へとシフトします。

最初に送信されるビットはMSB(ビット7)であり、1バイトを受信した後、受信データ の最初のビットがI2DATのMSBに配置されます。データがシフトアウトしている間、バ ス上のデータは同時にシフトインします。常に I2DAT には、バス上に存在する最後のバ イトが含まれています。したがって、アービトレーションロストが発生した場合、マスタ トランスミッタからスレーブレシーバへの遷移が I2DAT 内の正確なデータによって行わ れます。

FT D RAF FT DR

AFT DRA

FT D FT D

RA FT D

RA FT D

RA FT DR

A

10.10.6 アービトレーションと同期化のロジック

マスタトランスミッタモードでは、送信された各ロジック1が実際にI2Cバス上のロジッ ク 1 として現れることをアービトレーションロジックが確認します。バス上の別のデバ イスがロジック1を拒否してSDAラインをLOWにプルした場合、I2Cブロックはアービ トレーションを失い、ただちにマスタトランスミッタからスレーブレシーバに変わりま す。 I2C ブロックは、現在のシリアルバイトの送信が完了するまで(SCL 上で)クロック パルスを出力し続けます。

また、マスタレシーバモードでもアービトレーションが失われることがあります。この モードでのアービトレーション喪失は、I2Cブロックが「NOT ACK」(ロジック1)をバス に返している間にのみ発生します。アービトレーションは、バス上の別のデバイスがこの 信号をLOWにプルしているときに失われます。これはシリアルバイトの最後でのみ発生 するため、I2Cブロックはそれ以降にクロックパルスを生成しません。Figure 24にアービ トレーションの手順を示します。

同期化ロジックは、シリアルクロックジェネレータを、別のデバイスからの SCL ライン 上のクロックパルスと同期させます。 2つ以上のマスタデバイスがクロックパルスを生成 している場合、「マーク」の持続時間は最短の「マーク」を生成するデバイスによって決 定され、「スペース」の持続時間は最長の「スペース」を生成するデバイスによって決定 されます。Figure 25に同期化の手順を示します。

(1) Another device transmits serial data.

(2) Another device overrules a logic (dotted line) transmitted this I2C master by pulling the SDA line low. Arbitration is lost, and this I2C enters Slave Receiver mode.

(3) This I2C is in Slave Receiver mode but still generates clock pulses until the current byte has been transmitted. This I2C will not generate clock pulses for the next byte. Data on SDA originates from the new master once it has won arbitration.

Fig 24. Arbitration procedure

SDA line

SCL line

1 2 3 4 8 9

ACK

(1) (1) (2) (3)

FT D RAF FT DR

AFT DRA

FT D FT D

RA FT D

RA FT D

RA FT DR

A

スレーブはスペースの持続時間を延ばして、バスマスタの速度を落とします。スペース持 続時間を延ばすのは、ハンドシェークのためでもあります。これは、1ビットまたは1バ イト全体が転送された後で行えます。I2C ブロックは、1 バイトが送信または受信され、

ACKビットが転送された後、SCLスペース持続時間を延ばします。シリアル割り込みフラ グ(SI)が設定され、この延長はシリアル割り込みフラグがクリアされるまで継続します。

10.10.7 シリアルクロックジェネレータ

このプログラマブルなクロックパルスジェネレータは、I2C ブロックがマスタトランス ミッタモードまたはマスタレシーバモードのときに、SCL クロックパルスを提供します。

I2Cブロックがスレーブモードのとき、これはオフに切り替わります。 I2C出力クロック周 波数およびデューティサイクルは、I2Cクロック制御レジスタによってプログラムできま す。詳細については、I2CSCLLおよびI2CSCLHレジスタの説明を参照してください。前述 したように、バスが他の SCL クロックソースと同期している場合を除き、出力クロック パルスにはプログラムされたとおりのデューティサイクルがあります。

10.10.8 タイミングと制御

タイミングと制御のロジックは、シリアルバイト処理のためのタイミングおよび制御の信 号を生成します。このロジックブロックは、I2DATのシフトパルスを提供し、コンパレー タをイネーブルにしてSTART およびSTOP状態を生成・検出し、ACKビットの送受信を 行い、マスタおよびスレーブモードを制御し、割り込み要求ロジックを含み、I2Cバスの ステータスを監視します。

10.10.9 制御レジスタ、 I2CONSET および I2CONCLR

I2C制御レジスタには、シリアル転送の開始とリスタート、シリアル転送の終了、ビット レート、アドレス認識、肯定応答などの I2C ブロックの機能を制御するのに使用される ビットが含まれています。

(1) Another device pulls the SCL line low before this I2C has timed a complete high time. The other device effectively determines the (shorter) HIGH period.

(2) Another device continues to pull the SCL line low after this I2C has timed a complete low time and released SCL. The I2C clock generator is forced to wait until SCL goes HIGH. The other device effectively determines the (longer) LOW period.

(3) The SCL line is released , and the clock generator begins timing the HIGH time.

Fig 25. Serial clock synchronization

SDA line

SCL line

(2)

(1) (3)

high period

low period (1)

FT D RAF FT DR

AFT DRA

FT D FT D

RA FT D

RA FT D

RA FT DR

A I2C制御レジスタの内容は、I2CONSETとして読み取られることがあります。 I2CONSETへ の書き込みにより、書き込まれた値に含まれているビットに対応するI2C制御レジスタ内 のビットが設定されます。それに対し、I2CONCLRへ書き込むと、書き込まれた値に含ま れているビットに対応するI2C制御レジスタ内のビットがクリアされます。

10.10.10 ステータスデコーダとステータスレジスタ

ステータスデコーダは、内部ステータスビットをすべて取り込み、5ビットコードに圧縮 します。このコードは、各I2Cバスステータスで固有のものです。 5ビットコードは、各種 サービスルーチンを高速処理するためのベクタアドレスを生成するのに使用されること があります。各サービスルーチンは、特定のバスステータスを処理します。 I2Cブロックの 4つのモードすべてが使用されている場合、可能なバスステータスは26あります。 5ビッ トステータスコードは、シリアル割り込みフラグが(ハードウェアによって)設定されて いるときはステータスレジスタの上位 5 ビットにラッチされ、割り込みフラグがソフト ウェアによってクリアされるまで、安定を保ちます。ステータスレジスタの下位3ビット は常に0です。ステータスコードがサービスルーチンへのベクタとして使用されている場 合、ルーチンは8つのアドレス位置によって置き換えが行われます。 8バイトのコードは ほとんどのサービスルーチンにとって十分です(このセクションのソフトウェア例を参照 してください)。

ドキュメント内 LPC111x UM Rev0015 Japanese (ページ 147-151)