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

START および STOP 条件の検出

ドキュメント内 dsPIC33E FRM - Section #. Title (ページ 31-46)

19.6 マルチマスタ環境でマスタとして通信する

19.7.2 START および STOP 条件の検出

スレーブ モジュールは、バス上のSTARTおよびSTOP条件を検出し、そのステータスをSス テータスビット(I2CxSTAT<3>)とPステータスビット(I2CxSTAT<4>)で示します。START (S)

およびSTOP (P)ステータスビットは、リセット発生時またはモジュールが無効にされた時に

クリアされます。STARTまたはリピートスタート イベントを検出した場合、Sステータスビッ トがセットされ、P ステータスビットがクリアされます。STOP イベントを検出した場合、P ステータスビットがセットされ、Sステータスビットがクリアされます。

19.7.3 アドレスの検出

スレーブ モジュールを有効にすると、モジュールはSTART条件の発生を待機します。START 発生後、スレーブはA10Mビット(I2CxCON<10>)の状態に応じて、7ビットまたは10ビット アドレスの検出を試みます。スレーブ モジュールは、1バイト(7ビットアドレスの場合)また は2バイト(10ビットアドレスの場合)の受信バイトを比較します。7ビットアドレスのアド

Bus

Master SDAx

Start

First

Address Address

Byte

S1 1 1 0 A A 0

9 8 R P

Slave SDAx Activity

N

A A

A A

Output

Output

R/W ACK ACK ACK Restart R/W ACK NACK Stop

1 Byte

Second Address Byte

A A 7 6

A A 5 4

A A 3 2

A A 1 0

Command Data Byte

1 1 1 0 A A1 1 9 8

Status Data Byte 10-Bit

Address

R

19.7.3.1 スレーブアドレスのマスキング

I2CxMSKレジスタは、「ドントケア」ビットとして指定したアドレスビット位置をマスキング

します。この機能は10ビットおよび7ビットのどちらのアドレッシング モードでも使えます。

I2CxMSKレジスタ内のいずれかのビットをセット(= 1)すると、スレーブ モジュールはアドレ

ス内の対応するビット位置が「0」であっても「1」であっても応答します。例えば、7ビット ス レ ー ブ モ ー ド で I2CxMSK = 0100000 の 場 合、モ ジ ュ ー ル は ア ド レ ス「0000000」と

「0100000」に応答します。

アドレスのマスキングを有効にする場合、IPMIEN ビット (I2CxCON<11>) をクリアする事に よってIPMI (Intelligent Platform Management Interface)を無効にする必要があります。

19.7.3.2 7ビットアドレスによるスレーブ書き込み

START条件の後に、モジュールは8ビットをI2CxRSRレジスタにシフトインします(図19-21

参照 )。レジスタ I2CxRSR<7:1> の値は、クロック (SCLx) の 8番目の立ち下がりエッジで、

I2CxADD<6:0>およびI2CxMSK<6:0>レジスタの値と比較されます。アドレスが有効な場合(マ スキングされていない全てのビット位置が一致した場合)、下記のイベントが発生します。

1. ACKを生成する

2. D/AおよびR/Wステータスビットをクリアする

3. 9番目のSCLxクロックの立ち下がりエッジでSI2CxIF割り込みを生成する 4. マスタからのデータ送信を待機する

19-21:スレーブ書き込みにおける7ビットアドレス検出のタイミング図

19.7.3.3 7ビットアドレスによるスレーブ読み出し

7ビット アドレスバイトのR/W = 1によってスレーブ読み出しが指定された場合のデバイスア ドレス検出プロセスは、スレーブ書き込みの場合と同様です(図19-22参照)。アドレスが一致 すると下記のイベントが発生します。

1. ACKを生成する

2. D/Aステータスビットをクリアし、R/Wステータスビットをセットする

3. 9番目のSCLxクロックの立ち下がりエッジでSI2CxIF割り込みを生成する

この時点でスレーブ モジュールにはデータを返送する事が期待されるため、ソフトウェアが応 答を準備できるまで、モジュールはI2Cバスの動作を一時停止します。これは、モジュールが SCLRELビット(I2CxCON<12>)をクリアした時に自動的に行われます。SCLRELがLOWの 場合、スレーブ モジュールはSCLxクロックラインをLOWにして、I2Cバスを待機状態にし ます。スレーブ モジュールとI2Cバスは、ソフトウェアがI2CxTRNレジスタに応答データを 書き込んでSCLRELビットをセットするまで、この状態を維持します。

SCLx (Master) SDAx (Master) SDAx (Slave) SI2CxIF Interrupt

3 4

1 2

STARTビット検出時にアドレス検出を

1

I2C™-Bus State (D) (D) (D) (A)

A5 A6

A7 A4 A3 A2 A1

D/A ADD10 SCLREL R/W

R/W = 0はスレーブがデータバイトを受

2

先頭バイトのアドレス一致により 3

D/Aステータスビットをクリアする。

R/Wステータスビットをクリアする。

4

スレーブが割り込みを生成する。

5

バス待機中。スレーブはデータ受信準備 5

R/W = 0

(S) (Q)

有効にする。

信する事を示す。

スレーブがACKを生成する。

完了状態になる。

Note: SCLRELは、STRENビットの状態に関係なく、スレーブ読み出しアドレスの検出

後に自動的にクリアされます。

I

2

C™ (Inter -Integrated Circuit™) 19

19-22:スレーブ読み出しにおける7ビットアドレス検出のタイミング図

19.7.3.4 10ビット アドレッシング モード

10ビット アドレッシング モードでは、スレーブは2つのデバイスアドレス バイトを受信する 必要があります(図19-23参照)。先頭アドレスバイトの上位5ビットは、アドレッシング モー ドが10ビットである事を示します。スレーブデバイスは第2アドレスバイトも受信する必要 があるため、先頭アドレスバイトのR/Wステータスビットは書き込みを指定する必要がありま す。10ビットアドレスの先頭バイトは「11110 A9 A8 0」(A9とA8はアドレスの上位2ビッ ト)です。

I2CxMSKレジスタは、10ビットアドレスの任意のビット位置をマスキングできます。I2CxMSK

レジスタの上位2ビットは、先頭バイトで受信する10ビットアドレスの上位2ビットをマス キングします。I2CxMSKレジスタの下位バイトは、第2バイトで受信する10ビットアドレス の下位バイトをマスキングします。

START 条件の後に、モジュールは 8 ビットを I2CxRSR レジスタにシフトインします。

I2CxRSR<2:1>ビットの値は、I2CxADD<9:8>およびI2CxMSK<9:8>ビットの値と比較され、

I2CxRSR<7:3>ビットの値は「11110」と比較されます。アドレスの比較は8番目のクロック (SCLx)の立ち下がりエッジで発生します。アドレスが一致するには、I2CxRSR<7:3>が「11110」

に一致し、I2CxRSR<2:1>がI2CxADD<9:8>内でマスクされていない全てのビット位置で一致 する必要があります(2つのビットが両方ともマスクされている場合、一致は不要)。アドレス が一致すると下記のイベントが発生します。

1. ACKを生成する

2. D/AおよびR/Wステータスビット(I2CxSTAT<5>とI2CxSTAT<2>)がクリアされる 3. 9番目のSCLxクロックの立ち下がりエッジでSI2CxIF割り込みを生成する モジュールは10ビットアドレスの先頭バイトを受信した後に割り込みを生成します。

モジュールは続けて第2バイトをI2CxRSRレジスタに受信します。この時に、I2CxRSR<7:0>

ビットとI2CADD<7:0>およびI2CxMSK<7:0>ビットが比較されます。上位2ビットと同様に アドレスの下位バイトも一致した場合、下記のイベントが発生します。

1. ACKを生成する

2. ADD10ステータスビット(I2CxSTAT<8>)がセットされる。

3. 9番目のSCLxクロックの立ち下がりエッジでSI2CxIF割り込みを生成する

4. モジュールはマスタからのデータ送信またはリピートスタート条件の開始を待機する SCLx (Master)

SDAx (Master) SDAx (Slave) SI2CxIF Interrupt

3 4

1 2

STARTビット検出時にアドレス検出を

1

I2C™-Bus State (D) (D) (D) (A)

A5 A6

A7 A4 A3 A2 A1

D/A ADD10 SCLREL R/W

R/W = 1はスレーブがデータバイトを送

2

先頭バイトのアドレス一致により 3

D/Aステータスビットをクリアする。

R/Wステータスビットをセットする。

4

SCLRELがクリアされる。

5

バス待機中。スレーブがデータの送信を 5

SCLx (Slave)

SCLREL = 0の間スレーブがSCLx

(S) (Q)

R/W = 1

有効にする。

信する事を示す。

スレーブがACKを生成する。

スレーブが割り込みを生成する。

LOWにする。

準備する。

Note: 10ビット アドレッシング モードでリピートスタート条件が発生した場合、スレー

19-23: 10ビットアドレス検出のタイミング図

19.7.3.5 ジェネラルコール動作

通常のI2Cバスのアドレッシング処理では、START条件後最初に送信されるバイトによって、

スレーブデバイスのアドレスが指定されます。例外として、ジェネラルコール アドレスを使う と、全てのデバイスをアドレッシングできます。このアドレスを使うと、有効にされた全ての デバイスが肯定応答を返します。ジェネラルコール アドレスは、I2Cプロトコルが特殊な用途 向けに予約している8つのアドレスの1つです。このアドレスは全て「0」のビットで構成さ れ、R/Wビットも「0」です。ジェネラルコールは常にスレーブ書き込み動作です。

ジェネラルコール アドレスは、ジェネラルコール イネーブルビットGCEN (I2CxCON<7>)が セットされている場合に認識されます(図19-24参照)。STARTビットの検出後、8ビットが

I2CxRSR レジスタにシフトインされ、そのアドレスが I2CxADD レジスタおよびジェネラル

コール アドレスに対して比較されます。

ジェネラルコール アドレスが一致すると、下記のイベントが発生します。

1. ACKを生成する

2. スレーブ モジュールがGCSTATステータスビット(I2CxSTAT<9>)をセットする 3. D/AおよびR/Wステータスビット(I2CxSTAT<5>とI2CxSTAT<2>)がクリアされる 4. 9番目のSCLxクロックの立ち下がりエッジでSI2CxIF割り込みを生成する

5. I2CxRSRレジスタの内容をI2CxRCVレジスタに転送し、RBFステータスビットをセット

する(第8ビット転送時)

6. マスタからのデータ送信を待機する

割り込みがサービスされた時にGCSTATステータスビット(I2CxSTAT<9>)の内容を読み出す 事により、デバイスアドレスがデバイス固有のアドレスとジェネラルコール アドレスのどちら に一致したのかを判別できます。

ジェネラルコール アドレスは7ビットアドレスです。A10Mビット(I2CxCON<10>)をセット してスレーブ モジュールを 10 ビットアドレス向けに設定している場合、GCEN ビット

(I2CxCON<7>)をセットすると、スレーブ モジュールは7ビットのジェネラルコール アドレ

スを検出し続けます。

SCLx (Master) SDAx (Master) SDAx (Slave) SI2CxIF Interrupt

2 4 5

1 3

STARTビット検出時にアドレス検出を有効にする。

1

先頭バイトのアドレス一致により、D/Aステータスビットがクリアされ、スレーブロジックがACKを送信する。

2

先頭バイトの受信によりR/Wステータスビットがクリアされる。スレーブロジックが割り込みを生成する。

3

先頭バイトと第2バイトのアドレス一致により、ADD10Aステータスビットがセットされ、スレーブロジックがACK 4

2バイトの受信により、10ビットアドレスを完全に受信する。スレーブロジックが割り込みを生成する。

5

I2C™-Bus State (D) (D) (D) (A)

1 1

1 1 0 A9 A8

R/W = 0

D/A ADD10 SCLREL

A5 A6

A7 A4 A3 A2 A1 A0

R/W

(D) (D) (D) (A)

6

バス待機中。スレーブはデータ受信準備完了状態。

6

(S) (Q)

送信する。

I

2

C™ (Inter -Integrated Circuit™) 19

19-24:ジェネラルコール アドレス検出のタイミング図(GCEN = 1)

19.7.3.6 全てのアドレスを受信する(IPMI動作)

一部のI2Cシステム プロトコルは、スレーブに対してバス上の全てのメッセージに応答する事 を要求します。例えばIPMI (Intelligent Platform Management Interface)バスは、分散型ネット ワーク内でI2Cノードをメッセージ リピータとして使います。ノードが全てのメッセージをリ ピートするには、スレーブ モジュールがデバイスアドレスに関係なく全てのメッセージを受け 入れる必要があります。

IPMIモードを有効にするには、IPMIENビット(I2CxCON<11>)をセットします(図19-25参 照)。これにより、A10MおよびGCENビット(I2CxCON<10>とI2CxCON<7>)の状態または

I2CxADDレジスタに書き込まれた値に関係なく、全てのアドレスが受け入れられます。

19-25: IPMIアドレス検出のタイミング図(IPMIEN = 1) SCLx (Master)

SDAx (Master) SDAx (Slave) SI2CxIF Interrupt

3 4

1 2

STARTビット検出時にアドレス検出を有

1

I2C™-Bus State (D) (D) (D) (A)

0 0

0 0 0 0 0

D/A

I2CRCV RBF R/W

全て「0」のアドレスとR/W = 0によりジェ 2

アドレス一致によりD/Aステータスビット

3 GCSTATステータスビットを

R/Wステータスビットをクリアする。

4

スレーブが割り込みを生成する。

5

バス待機中。スレーブはデータ受信準備完 5

GCSTAT

スレーブがACKを生成する。

アドレスをI2CxRCVレジスタに読み込む。

R/W = 0

(S) (Q)

効にする。

ネラルコールである事が示される。

をクリアし、

セットする。

了状態になる。

Note 1: マスタ動作を実行する場合、IPMIENビット(I2CxCON<11>)がクリアされている 事が必要です。

2: IPMIモードは10ビット アドレッシングをサポートしません。

3: IPMIアドレッシング モードを有効にした場合、スレーブは、マスタから受信した アドレスバイト内のR/Wビット(I2CxSTAT<2>)の値が「1」であれば、メッセー ジを無視します。通常の場合、IPMIモードでこのような動作が必要になる事はあ りません(マスタが送信するアドレスバイトのR/Wビットの値は通常「0」であ るため)。

SCLx (Master) SDAx (Master) SDAx (Slave) SI2CxIF Interrupt

STARTビット検出時にアドレス検出を有効

1

I2C™-Bus State (D) (D) (D) (A)

D/A I2CxRCV R/W

アドレスバイトの内容に関係なくアドレスは 2

アドレス一致によりD/Aステータ

R/Wステータスビットをセット/クリアする。

3

スレーブが割り込みを生成する。

スレーブがACKを生成する。

アドレスをI2CxRCVレジスタに読み込む。

(S)

R/W

(Q)

にする。

一致する。

スビットをクリアする。

ドキュメント内 dsPIC33E FRM - Section #. Title (ページ 31-46)

関連したドキュメント