58
© 2013 Microchip Technology Inc. DS61116E_JP - p. 24-1 24 I 2 C™ セクション 24. I 2 C™ (Inter-Integrated Circuit™) ハイライト 本セクションには下記の主要項目を記載しています。 24.1 概要 ............................................................................................................................. 24-2 24.2 制御 / ステータス レジスタ ......................................................................................... 24-4 24.3 I 2 C バスの特性 .......................................................................................................... 24-13 24.4 I 2 C 動作の有効化 ...................................................................................................... 24-17 24.5 シングルマスタ環境でマスタとして通信する .......................................................... 24-20 24.6 マルチマスタ環境でマスタとして通信する .............................................................. 24-33 24.7 スレーブとして通信する .......................................................................................... 24-36 24.8 I 2 C バス接続に関する注意事項 ................................................................................. 24-51 24.9 I 2 C 省電力モード中の動作 ........................................................................................ 24-53 24.10 リセットの影響 ......................................................................................................... 24-54 24.11 I 2 C のピン コンフィグレーション ............................................................................ 24-54 24.12 関連アプリケーション ノート .................................................................................. 24-55 24.13 改訂履歴 .................................................................................................................... 24-56 注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。

セクション 24. I2C™ (Inter-Integrated Circuit™)ww1.microchip.com/downloads/jp/DeviceDoc/61116E_JP.pdfレジスタ24-1: I2CXCON: I2C 制御レジスタ ビット レンジ

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • 注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。

    セクション 24. I2C™ (Inter-Integrated Circuit™)

    24

    I 2C™

    ハイライト

    本セクションには下記の主要項目を記載しています。

    24.1 概要 ............................................................................................................................. 24-224.2 制御 / ステータス レジスタ ......................................................................................... 24-424.3 I2C バスの特性 .......................................................................................................... 24-1324.4 I2C 動作の有効化 ...................................................................................................... 24-1724.5 シングルマスタ環境でマスタとして通信する .......................................................... 24-2024.6 マルチマスタ環境でマスタとして通信する .............................................................. 24-3324.7 スレーブとして通信する .......................................................................................... 24-3624.8 I2C バス接続に関する注意事項 ................................................................................. 24-5124.9 I2C 省電力モード中の動作 ........................................................................................ 24-5324.10 リセットの影響 ......................................................................................................... 24-5424.11 I2C のピン コンフィグレーション ............................................................................ 24-5424.12 関連アプリケーション ノート .................................................................................. 24-5524.13 改訂履歴 .................................................................................................................... 24-56

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-1

  • PIC32 ファミリ リファレンス マニュアル

    24.1 概要I2C (Inter-Integrated Circuit™) モジュールは他の周辺モジュールはまたマイクロコントローラ デバイスとの通信に使うシリアル インターフェイスです。通信相手の周辺モジュールにはシリ アル EEPROM、ディスプレイ ドライバ、A/D コンバータ等があります。I2C モジュールは I2C システム内で下記のように動作可能です。• スレーブデバイスとして• シングルマスタ システム内のマスタデバイスとして ( スレーブデバイスとして動作する場合

    もあり )• マルチマスタ システム内のマスタ / スレーブデバイスとして ( バス衝突検出とバス調停が可

    能 )I2C モジュールは、独立したマスタ I2C ロジックと I2C スレーブロジックを備え、各ロジック はそれぞれのイベントに基づいて割り込みを生成します。マルチマスタ システムでは、ソフト ウェアは単純にマスタ コントローラとスレーブ コントローラに分割されます。I2C マスタロジックがアクティブであればスレーブロジックもアクティブ状態を維持してバスの状態を監視し、シングルマスタまたはマルチマスタから受信する可能性のあるメッセージを監視します。マルチマスタ システムでバス調停が発生してもメッセージは失われません。マルチマスタ システムでは、システム内の他のマスタと競合するバス衝突を検出すると、BCOL 割り込みを生成してアプリケーションに知らせます。この場合、ソフトウェアはメッセージの送信を一度終了した後に再開できます。

    I2C モジュールは baud レート ジェネレータ (BRG) を備えます。I2C の BRG はデバイス内の他 のタイマリソースを消費しません。

    I2C の主な特長は以下の通りです。• 独立したマスタロジックとスレーブロジック• マルチマスタをサポート ( 調停によるメッセージの喪失を回避 )• 設定可能なアドレス マスキング機能を備えた 7 ビットおよび 10 ビット デバイスアドレス検

    出 ( スレーブモード時 )• I2C プロトコルで定義されているジェネラルコール アドレスの検出• スレーブへのデータ要求に対する応答時間を確保するための自動的な SCLx クロック スト

    レッチング

    • 100 kHz と 400 kHz のバス仕様をサポート• I2C 予約済みアドレス規則をサポート図 24-1 に I2C モジュールのブロック図を示します。

    Note: ファミリ リファレンス マニュアルの本セクションは、デバイス データシートの補 足を目的としています。本セクションの内容は PIC32 ファミリの一部のデバイスには対応していません。

    本書の内容がお客様のご使用になるデバイスに対応しているかどうかは、最新デバイス データシート内の「Inter-Integrated Circuit™ (I2C™)」の冒頭に記載して いる注意書きでご確認ください。

    デバイス データシートとファミリ リファレンス マニュアルの各セクションは、マ イクロチップ社のウェブサイト (http://www.microchip.com)からダウンロードできます。

    DS61116E_JP - p. 24-2 © 2013 Microchip Technology Inc.

    http://www.microchip.comhttp://www.microchip.com

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    図 24-1: I2C™ のブロック図

    I2CxRSR

    I2CxRCV

    InternalData Bus

    SCKx

    SDAx

    Shift

    Match Detect

    I2CxADD

    Start andStop bit Detect

    Clock

    Addr_Match

    ClockStretching

    I2CxTRNLSBShift

    Clock

    Write

    Read

    BRG Down Counter I2CxBRG

    ReloadControl

    Peripheral Bus Clock (PBCLK)

    Start, Restart,Stop bit Generate

    Write

    Read

    AcknowledgeGeneration

    CollisionDetect

    Write

    Read

    Write

    ReadI2C

    xCO

    N

    Write

    ReadI2C

    xSTA

    T

    cont

    rol l

    ogic

    Read

    LSB

    I2CxMSK

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-3

  • PIC32 ファミリ リファレンス マニュアル

    24.2 制御 / ステータス レジスタ

    I2C モジュールは下記の特殊機能レジスタ (SFR) を備えます。• I2CxCON: I2C™ 制御レジスタ

    このレジスタは I2C モジュールの動作を有効にします。

    • I2CxSTAT: I2C™ ステータス レジスタこのレジスタは I2C モジュールの動作状態を示すステータスフラグを格納します。

    • I2CxADD: I2C™ スレーブアドレス レジスタこのレジスタはスレーブデバイスのアドレスを保持します。

    • I2CxMSK: I2C™ アドレスマスク レジスタこのレジスタは、アドレス検出時に I2CxADD レジスタ内で無視する ( マスクする ) ビット位置を指定します。これにより、スレーブを複数のアドレスに応答させる事ができます。

    • I2CxBRG: I2C™ baud レート ジェネレータ レジスタこのレジスタは、I2C モジュールの baud レート ジェネレータ (BRG) 用のリロード値を保持 します。

    • I2CxTRN: I2C™ 送信データレジスタこれは読み出し専用の送信レジスタです。送信動作中に送信バイトがこのレジスタに書き込まれます。

    • I2CxRCV: I2C™ 受信データレジスタこの読み出し専用レジスタはバッファレジスタとして機能し、ここからデータバイトを読み出す事ができます。

    表 24-1 に、I2C モジュールに関連する全てのレジスタをまとめて示します。この表の後に各レジスタの詳細な説明を記載しています。

    Note: 各 PIC32 ファミリデバイスは 1 つまたは複数の I2C モジュールを備えています。ピン、制御 / ステータスビット、レジスタの名前に含まれる添え字「x」はモジュールの番号を表します。詳細は各デバイスのデータシートを参照してください。

    DS61116E_JP - p. 24-4 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    表 24-1: I2C™ 関連 SFR のまとめ

    レジスタ名Bit

    31/23/15/7Bit

    30/22/14/6Bit

    29/21/13/5Bit

    28/20/12/4Bit

    27/19/11/3Bit

    26/18/10/2Bit

    25/17/9/1Bit

    24/16/8/0

    I2CxCON(1,2,3) 31:24 — — — — — — — —

    23:16 — — — — — — — —

    15:8 ON — SIDL SCLREL STRICT A10M DISSLW SMEN

    7:0 GCEN STREN ACKDT ACKEN RCEN PEN RSEN SEN

    I2CxSTAT(1,2,3) 31:24 — — — — — — — —

    23:16 — — — — — — — —

    15:8 ACKSTAT TRSTAT — — — BCL GCSTAT ADD10

    7:0 IWCOL I2COV D/A P S R/W RBF TBF

    I2CxADD(1,2,3) 31:24 — — — — — — — —

    23:16 — — — — — — — —

    15:8 — — — — — — ADD

    7:0 ADD

    I2CxMSK(1,2,3) 31:24 — — — — — — — —

    23:16 — — — — — — — —

    15:8 — — — — — — MSK

    7:0 MSK

    I2CxBRG(1,2,3) 31:24 — — — — — — — —

    23:16 — — — — — — — —

    15:8 — — — — I2CxBRG

    7:0 I2CxBRG

    I2CxTRN(1,2,3) 31:24 — — — — — — — —

    23:16 — — — — — — — —

    15:8 — — — — — — — —

    7:0 I2CxTXDATA

    I2CxRCV 31:24 — — — — — — — —

    23:16 — — — — — — — —

    15:8 — — — — — — — —

    7:0 I2CxRXDATA

    Note 1: このレジスタに対応するクリアレジスタのアドレスは 0x4 バイト オフセットしています。クリアレジスタは、対応す るレジスタの名前の後に「CLR」を追加した名前を持ちます ( 例 : I2CxCONCLR)。クリアレジスタの任意のビットに

    「1」を書き込むと、対応するレジスタの対応するビットがクリアされます。クリアレジスタからの読み出しは無視されます。

    2: このレジスタに対応するセットレジスタのアドレスは 0x8 バイト オフセットしています。セットレジスタは、対応す るレジスタの名前の後に「SET」を追加した名前を持ちます ( 例 :I2CxCONSET)。セットレジスタの任意のビットに

    「1」を書き込むと、対応するレジスタの対応するビットがセットされます。セットレジスタからの読み出しは無視されます。

    3: このレジスタに対応する反転レジスタのアドレスは 0xC バイト オフセットしています。反転レジスタは、対応するレ ジスタの名前の後に「INV」を追加した名前を持ちます ( 例 : I2CxCONINV)。反転レジスタの任意のビットに「1」を 書き込むと、対応するレジスタの対応するビットが反転します。反転レジスタからの読み出しは無視されます。

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-5

  • PIC32 ファミリ リファレンス マニュアル

    レジスタ 24-1: I2CXCON: I2C™ 制御レジスタ ビットレンジ

    Bit31/23/15/7

    Bit30/22/14/6

    Bit29/21/13/5

    Bit28/20/12/4

    Bit27/19/11/3

    Bit26/18/10/2

    Bit25/17/9/1

    Bit24/16/8/0

    31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    23:16U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    15:8R/W-0 U-0 R/W-0 R/W-1 R/W-0 R/W-0 R/W-0 R/W-0

    ON(1) — SIDL SCLREL STRICT A10M DISSLW SMEN

    7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

    GCEN STREN ACKDT ACKEN RCEN PEN RSEN SEN

    凡例 :

    R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

    -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

    bit 31-16 未実装 :「0」として読み出しbit 15 ON: I2C イネーブルビット (1)

    1 = I2C モジュールを有効にし、SDAx および SCLx ピンをシリアルポート ピンとして設定する0 = I2C モジュールを無効にする (I2C ピンは PORT 機能によって制御される )

    bit 14 未実装 :「0」として読み出しbit 13 SIDL: アイドル中停止ビット

    1 = デバイスがアイドルに移行するとモジュールの動作を停止する0 = アイドル中もモジュールの動作を継続する

    bit 12 SCLREL: SCKx リリース制御ビットこのビットは I2C スレーブモード専用です。モジュールをリセット (ON = 0) すると、SCLREL ビットは

    「1」にセットされます。

    STREN = 0の場合 :1 = クロックをリリースする0 = クロックを LOW にする ( クロック ストレッチング )このビットはスレーブ送信の開始時に自動的に「0」にクリアされます。

    STREN = 1の場合 :1 = クロックをリリースする0 = クロックを LOW に保持する ( クロック ストレッチング )。ユーザはこのビットに「0」を書き込む事で、

    次の SCLx LOW を ストレッチできるこのビットはスレーブ送信の開始時またはスレーブ受信の終了時に自動的に「0」にクリアされます。

    bit 11 STRICT: I2C 予約済みアドレス規則イネーブルビット1 = 予約済みアドレス規則を有効にする。デバイスは予約済みアドレス空間内のアドレスに応答しない(ま

    たはそれらのアドレスを生成しない )。0 = I2C 予約済みアドレス規則を有効にしない

    bit 10 A10M: 10 ビット スレーブアドレス フラグビット1 = I2CxADD レジスタは 10 ビット スレーブアドレスを格納する0 = I2CxADD レジスタは 7 ビット スレーブアドレスを格納する

    bit 9 DISSLW: スルーレート制御ディセーブル ビット1 = スルーレート制御を無効にする ( 標準速度モード (100 kHz) および 1 MHz モード用 )0 = スルーレート制御を有効にする ( 高速モード (400 kHz) 用 )

    Note 1: 1:1のPBCLK分周比を使っている場合、周辺モジュールのONビットをクリアした命令の直後のSYSCLKサイクルでは、その周辺モジュールの SFR に対する読み出しまたは書き込みをユーザ ソフトウェアで実 行しないでください。

    DS61116E_JP - p. 24-6 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    bit 8 SMEN: SMBus 入力レベル ディセーブル ビット1 = SMBus 仕様に準拠したしきい値を持つ入力ロジックを有効にする0 = SMBus 仕様入力を無効にする

    bit 7 GCEN: ジェネラルコール イネーブルビット このビットは I2C スレーブモード専用です。1 = I2CSR にジェネラルコール アドレスを受信するとモジュールは割り込みを生成し、マスタから送信さ

    れるデータを待機する 0 = ジェネラルコールアドレスを無効にする

    bit 6 STREN: SCLx クロック ストレッチング イネーブルビット このビットは I2C スレーブモード専用です (SCLREL ビットと組み合わせて使用 )。1 = クロック ストレッチングを有効にする0 = クロック ストレッチングを無効にする

    bit 5 ACKDT: 肯定応答データビット このビットは I2C マスタモード専用です ( マスタ受信中に使用 )。このビットは受信終了時の肯定応答シー ケンスで返送する値を指定します。

    1 = NACK を送信する0 = ACK を送信する

    bit 4 ACKEN: 肯定応答シーケンス イネーブルビット このビットは I2C マスタモード専用です ( マスタ受信中に使用 )。1 = SDAxおよびSCLxピンで肯定応答シーケンスを開始し、ACKDTデータビットを送信する (このビット

    はモジュールによりクリアされる )0 = 肯定応答シーケンスを開始しない

    bit 3 RCEN: 受信イネーブルビット このビットは I2C マスタモード専用です。1 = I2Cで受信モードを有効にする (このビットは8ビットのデータバイトを受信し終えた時点でモジュー

    ルによりクリアされる )0 = 受信シーケンスを有効にしない

    bit 2 PEN: STOP 条件イネーブルビット このビットは I2C マスタモード専用です。1 = SDAx および SCLx ピンで STOP 条件を開始する ( このビットはモジュールによりクリアされる )0 = STOP 条件を開始しない

    bit 1 RSEN: 反復 START 条件イネーブルビット このビットは I2C マスタモード専用です。1 = SDAxおよびSCLxピンで反復START条件を開始する (このビットはモジュールによりクリアされる )0 = 反復 START 条件を開始しない

    bit 0 SEN: START 条件イネーブルビット このビットは I2C マスタモード専用です。1 = SDAx および SCLx ピンで START 条件を開始する ( このビットはモジュールによりクリアされる )0 = START 条件を開始しない

    レジスタ 24-1: I2CXCON: I2C™ 制御レジスタ ( 続き )

    Note 1: 1:1のPBCLK分周比を使っている場合、周辺モジュールのONビットをクリアした命令の直後のSYSCLKサイクルでは、その周辺モジュールの SFR に対する読み出しまたは書き込みをユーザ ソフトウェアで実 行しないでください。

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-7

  • PIC32 ファミリ リファレンス マニュアル

    レジスタ 24-2: I2CXSTAT: I2C™ ステータス レジスタ ビットレンジ

    Bit31/23/15/7

    Bit30/22/14/6

    Bit29/21/13/5

    Bit28/20/12/4

    Bit27/19/11/3

    Bit26/18/10/2

    Bit25/17/9/1

    Bit24/16/8/0

    31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    23:16U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    15:8R-0 R-0 U-0 U-0 U-0 R/W-0 R-0 R-0

    ACKSTAT TRSTAT — — — BCL GCSTAT ADD10

    7:0R/W-0 R/W-0 R-0 R/W-0 R/W-0 R-0 R-0 R-0

    IWCOL I2COV D/A P S R/W RBF TBF

    凡例 :

    R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

    -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

    bit 31-16 未実装 :「0」として読み出しbit 15 ACKSTAT: 肯定応答ステータスビット

    このビットは I2C マスタおよびスレーブモードの送信および受信に適用されます。1 = 肯定応答は受信しなかった0 = 肯定応答を受信した

    bit 14 TRSTAT: 送信ステータスビット このビットは I2C マスタモード専用です ( マスタ送信モードに適用 )。1 = マスタ送信を実行中 (8 ビット + ACK)0 = マスタ送信は実行中ではない

    bit 13-11 未実装 :「0」として読み出しbit 10 BCL: マスタバス衝突検出ビット

    このビットは I2C モジュールが無効 (ON = 0) になるとクリアされます。1 = マスタ動作中にバス衝突を検出した0 = バス衝突は検出していない

    bit 9 GCSTAT: ジェネラルコール ステータスビット このビットは STOP 検出時にクリアされます。1 = ジェネラルコール アドレスを受信した0 = ジェネラルコール アドレスは受信していない

    bit 8 ADD10: 10 ビットアドレス ステータスビット このビットは STOP 検出時にクリアされます。1 = 10 ビットアドレスが一致した0 = 10 ビットアドレスは一致していない

    bit 7 IWCOL: 書き込みコリジョン検出ビット1 = I2C モジュールがビジーであるため、I2CxTRN レジスタへの書き込みコリジョンが発生した

    ( このビットはソフトウェアでクリアする必要がある )0 = 書き込みコリジョンは発生していない

    bit 6 I2COV: I2C 受信オーバーフロー ステータスビット1 = I2CxRCV レジスタが先に受信したバイトをまだ保持している時に次のバイトを受信した送信モードでは I2COV は「ドントケア」です。このビットはソフトウェアでクリアする必要があります。0 =オーバーフローは発生していない

    bit 5 D/A: データ / アドレスビット このビットはスレーブモード動作にのみ適用されます。

    1 = 最後に受信または送信したバイトはデータであった0 = 最後に受信または送信したバイトはアドレスであった

    DS61116E_JP - p. 24-8 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    bit 4 P: STOP ビット このビットは START、リセット、STOP を検出すると更新され、 I2C モジュールが無効 (ON = 0) になると クリアされます。

    1 = STOP ビットを検出した0 = STOP ビットは検出していない

    bit 3 S: START ビット このビットは START、リセット、STOP を検出すると更新され、 I2C モジュールが無効 (ON = 0) になると クリアされます。

    1 = START ビット ( または反復 START ビット ) を検出した0 = START ビットは検出していない

    bit 2 R/W: 読み / 書き情報ビット このビットはスレーブモード動作にのみ適用されます。

    1 = 読み出し - スレーブからマスタへのデータ転送0 = 書き込み - マスタからスレーブへのデータ転送

    bit 1 RBF: 受信バッファフル ステータスビット1 = 受信は完了した (I2CxRCV レジスタはフル )0 = 受信は完了していない (I2CxRCV レジスタはエンプティ )

    bit 0 TBF: 送信バッファフル ステータスビット1 = 送信は完了していない (I2CxTRN レジスタはフル ) (8 ビットのデータが残っている )0 = 送信は完了した (I2CxTRN レジスタはエンプティ )

    レジスタ 24-2: I2CXSTAT: I2C™ ステータス レジスタ ( 続き )

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-9

  • PIC32 ファミリ リファレンス マニュアル

    レジスタ 24-3: I2CXADD: I2C™ スレーブアドレス レジスタ ビットレンジ

    Bit31/23/15/7

    Bit30/22/14/6

    Bit29/21/13/5

    Bit28/20/12/4

    Bit27/19/11/3

    Bit26/18/10/2

    Bit25/17/9/1

    Bit24/16/8/0

    31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    23:16U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    15:8U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0

    — — — — — — ADD

    7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

    ADD

    凡例 :

    R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

    -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

    bit 31-10 未実装 :「0」として読み出しbit 9-0 ADD: I2C スレーブデバイス アドレスビット

    このビットはマスタモードでもスレーブモードでも使います。

    レジスタ 24-4: I2CXMSK: I2C™ アドレスマスク レジスタ ビットレンジ

    Bit31/23/15/7

    Bit30/22/14/6

    Bit29/21/13/5

    Bit28/20/12/4

    Bit27/19/11/3

    Bit26/18/10/2

    Bit25/17/9/1

    Bit24/16/8/0

    31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    23:16U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    15:8U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0— — — — — — MSK(1)

    7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

    MSK(1)

    凡例 :

    R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

    -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

    bit 31-10 未実装 :「0」として読み出しbit 9-0 MSK: I2C アドレスマスク ビット (1)

    1 = アドレス検出シーケンスではこのビット位置を無視する0 = アドレス検出シーケンスではこのビット位置の一致が必要

    Note 1: MSK と MSK は I2C 10 ビットモードでのみ使います。

    DS61116E_JP - p. 24-10 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    レジスタ 24-5: I2CXBRG: I2C™ baud レート ジェネレータ レジスタ ビットレンジ

    Bit31/23/15/7

    Bit30/22/14/6

    Bit29/21/13/5

    Bit28/20/12/4

    Bit27/19/11/3

    Bit26/18/10/2

    Bit25/17/9/1

    Bit24/16/8/0

    31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    23:16U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    15:8U-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0

    — — — — I2CxBRG

    7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

    I2CxBRG

    凡例 :

    R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

    -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

    bit 31-12 未実装 :「0」として読み出しbit 11-0 I2CxBRG: I2C baud レート ジェネレータ値ビット

    これらのビットを使って周辺モジュール用クロックの分周機能を制御します。

    レジスタ 24-6: I2CXTRN: I2C™ 送信データレジスタ ビットレンジ

    Bit31/23/15/7

    Bit30/22/14/6

    Bit29/21/13/5

    Bit28/20/12/4

    Bit27/19/11/3

    Bit26/18/10/2

    Bit25/17/9/1

    Bit24/16/8/0

    31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    23:16U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    15:8U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    7:0R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

    I2CxTXDATA

    凡例 :

    R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

    -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

    bit 31-8 未実装 :「0」として読み出しbit 7-0 I2CxTXDATA: I2C 送信データ バッファビット

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-11

  • PIC32 ファミリ リファレンス マニュアル

    レジスタ 24-7: I2CxRCV: I2C™ 受信データレジスタ ビットレンジ

    Bit31/23/15/7

    Bit30/22/14/6

    Bit29/21/13/5

    Bit28/20/12/4

    Bit27/19/11/3

    Bit26/18/10/2

    Bit25/17/9/1

    Bit24/16/8/0

    31:24U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    23:16U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    15:8U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

    — — — — — — — —

    7:0R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0

    I2CxRXDATA

    凡例 :

    R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

    -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

    bit 31-8 未実装 :「0」として読み出しbit 7-0 I2CxRXDATA: I2C 受信データ バッファビット

    DS61116E_JP - p. 24-12 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    24.3 I2C バスの特性I2C バスは 2 線式シリアル インターフェイスです。図 24-2 に、I2C インターフェイスの代表例 として、 PIC32 デバイスと 24LC256 I2C シリアル EEPROM 間の I2C 接続回路を示します。

    図 24-2: I2C™ の代表的な接続ブロック図

    このインターフェイスは、信頼性の高いデータ送受信を保証する包括的なプロトコルを採用しています。通信中に一方のデバイスは「マスタ」として動作し、転送に必要なクロック信号を生成してバス上でデータ転送を開始します。他方のデバイスは、これに応答する「スレーブ」として動作します。クロックライン SCLx はマスタからスレーブに向けて出力されますが、スレーブが SCLx ラインを駆動する場合もあります。データライン SDAx は、マスタとスレーブ双方からの出力および入力として機能します。

    SDAx および SCLx ラインは双方向であるため、これらのラインを駆動するデバイス出力段は、バスのワイヤード AND 機能を実行するためにオープンドレイン出力である事が必要です。ラインをプルダウンしているデバイスが存在しない時に HIGH レベルを確保するために、外付けプルアップ抵抗を使います。

    I2C インターフェイス プロトコルでは、各デバイスにアドレスが割り当てられます。マスタは、 データ転送を開始する際に、まず転送先デバイスのアドレスを送信します。全てのデバイスは、そのアドレスが自身のアドレスに一致するかどうかを「listen」します。このアドレスの bit 0 は、マスタがスレーブデバイスに対して「読み出し」と「書き込み」のどちらを行うのかを指定します。データ転送中、マスタとスレーブは常に相対するモード ( 一方がトランスミッタであれば他方はレシーバ ) で動作します。つまり、マスタとスレーブは下記のいずれかの関係で動作します。

    • マスタがトランスミッタ、スレーブがレシーバ• スレーブがトランスミッタ、マスタがレシーバどちらの場合も、マスタが SCLx クロック信号を生成します。I2C 仕様 V2.1 で定義されている下記のモードと機能はサポートされません。• HS モードおよび F/S モードと HS モード間の切り換え• START バイト• CBUS 互換性• ジェネラルコール アドレスの第 2 バイト

    SCLX

    SDAX

    PIC32

    SDAX

    SCLX

    VDD VDD

    2.4 k 24LC256(typical)

    I2C™ SlaveDevice

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-13

  • PIC32 ファミリ リファレンス マニュアル

    24.3.1 バスプロトコル下記の I2C バスプロトコルが定義されています。• データ転送はバスがビジー状態ではない時にのみ開始できる• データ転送中、SCLx クロックラインが HIGH の時にデータラインの状態は変化してはなら

    ない (SCLx クロック ラインが HIGH の時にデータラインの状態が変化した場合、START 条 件または STOP 条件とみなす )

    上記に従う各種バス条件を、図 24-3 を使って説明します。

    図 24-3: I2C™ バスプロトコルに従うバスの状態

    24.3.1.1 データ転送の開始 (S)バスがアイドル状態の時に、クロック (SCLx) が HIGH を維持したまま SDAx ラインが HIGHから LOW に遷移すると、START 条件が発生します。全てのデータ転送を開始する前に START条件が必要です。

    24.3.1.2 データ転送の停止 (P)クロック (SCLx) が HIGH を維持したまま SDAx ラインが LOW から HIGH に遷移すると STOP条件が発生します。全てのデータ転送は STOP 条件によって終了します。

    24.3.1.3 データ転送の再開 (R)待機ステートの後、クロック (SCLx) が HIGH を維持したまま SDAx ラインが HIGH から LOWに遷移すると、反復 START 条件が発生します。反復 START により、マスタはバスの制御を中断する事なくバスの方向またはアドレス先スレーブデバイスを変更できます。

    24.3.1.4 データ有効 (D)START 条件の後、クロック信号の HIGH 期間中に SDAx ラインの状態が遷移しなければ、その時の SDAx ラインの状態が有効データとみなされます。SCLx クロック 1 周期あたり 1 ビットのデータが転送されます。

    24.3.1.5 肯定応答 (A) または否定応答 (N)全てのデータバイト送信には、レシーバからの肯定応答 (ACK) または否定応答 (NACK) が必要です。レシーバは SDAx ラインを LOW にする事によって ACK を返し、SDAx ラインを HIGHにする事によって NACK を返します。肯定応答は SCLx クロックの 1 周期を使う 1 ビットのデータ転送です。

    24.3.1.6 待機 / データ無効 (Q)データラインの状態は、クロック信号の LOW 期間中に変更する必要があります。デバイスは、SCLx ラインを LOW に駆動してクロックの LOW 期間を延長する ( バスを待機させる ) 事ができます。

    24.3.1.7 バスアイドル (I)STOP 条件の後と START 条件の前では、データラインとクロックラインの両方が HIGH 状態を維持します。

    AddressValid

    DataAllowed

    to Change

    StopCondition

    StartCondition

    SCLx

    SDAx

    (I) (S) (D) (A) or (N) (P) (I)

    Data or

    (Q)

    ACK/NACKValid

    NACK

    ACK

    DS61116E_JP - p. 24-14 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    24.3.2 メッセージ プロトコル代表的な I2C メッセージを図 24-4 に示します。この例の場合、メッセージは 24LC256 I2C シ リアル EEPROM から特定のバイトを読み出します。PIC32 デバイスはマスタとして動作し、24LC256 デバイスはスレーブとして動作します。図 24-4 には、マスタデバイスが駆動するデータとスレーブデバイスが駆動するデータを別々に示しています。これらを複合した SDAx ラインの状態は、マスタデータとスレーブデータのワイヤード AND となります。マスタデバイスはプロトコルを制御およびシーケンシングします。スレーブデバイスは特別に決められたタイミングでのみバスを駆動します。

    図 24-4: 代表的な I2C™ メッセージ : シリアル EEPROM の読み出し ( ランダムアドレス モード )

    24.3.2.1 メッセージの開始各メッセージは START 条件で始まり、STOP 条件で終わります。START 条件から STOP 条件までの間に転送するデータのバイト数は、マスタデバイスが決定します。システム プロトコル の定義に従い、メッセージの各バイトは特定の意味 ( デバイスアドレス、データバイト等 ) を持ちます。

    24.3.2.2 スレーブのアドレス指定図 24-4 に示すように、先頭バイトはデバイスアドレス バイトです。I2C メッセージは常にアド レスバイトで始まる必要があります。アドレスバイトはデバイスアドレスと R/W ビット(IC2xSTAT) を格納します。先頭バイトの R/W ステータスビットが「0」であれば、マスタはトランスミッタとして動作し、スレーブはレシーバとして動作します。

    24.3.2.3 スレーブの肯定応答レシーバとして動作するデバイスは、1 バイトを受信するたびに肯定応答信号「ACK」を返す必要があります。マスタデバイスは、この肯定応答ビットの転送用に 1 周期の SCLx クロックを生成する必要があります。

    24.3.2.4 マスタの送信この例の場合、アドレスバイトに続いてマスタがスレーブに送信する 2 つのバイトは、マスタが要求する EEPROM データバイトのアドレスを格納します。スレーブは、各データバイトに対して肯定応答を返す必要があります。

    24.3.2.5 反復 STARTこの時点で、スレーブの EEPROM は、マスタが要求するデータバイトのアドレスを取得済みです。しかし、最初に送信されたデバイス アドレスバイトの R/W ビットにより、マスタがト ランスミッタ、スレーブがレシーバとして指定されています。このため、スレーブからマスタへデータを送信するには、バスの方向を反転する必要があります。

    メッセージを終了する事なくバスの方向を変更するために、マスタは「反復 START」を送信します。これに続き、最初に送信したのと同じデバイスアドレスと、「1」にセットした R/W ビットを格納したアドレスバイトを送信し、スレーブがトランスミッタ、マスタがレシーバとして動作する事を指定します。

    24.3.2.6 スレーブの応答マスタはバスにクロックを供給し続けますが、SDAx ラインの駆動をリリースします。この間にスレーブが SDAx ラインを駆動してデータバイトを送信します。

    X

    Bus

    MasterSDAx

    Star

    t AddressByte

    EEPROM AddressHigh Byte

    EEPROM AddressLow Byte

    AddressByte

    DataByte

    S 1 0 1 0 A A A 02 1 0 R 1 0 1 0A A A 12 1 0 P

    SlaveSDAx

    Activity

    N

    AAAA

    Output

    Output

    Idle

    R/W

    ACK

    ACK

    ACK

    Res

    tart

    R/W

    ACK

    NAC

    KSt

    opId

    le

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-15

  • PIC32 ファミリ リファレンス マニュアル

    24.3.2.7 マスタの肯定応答マスタがスレーブから読み出している場合、マスタはメッセージの最終バイトで否定応答を返す (「NACK」を生成する ) 事によって、スレーブに対するデータ要求を終了する必要があります。マスタは、最終バイト以外の各データバイトに対しては肯定応答を返します。

    24.3.2.8 メッセージの停止マスタは STOP 条件を送信してメッセージを終了し、バスをアイドル状態に戻します。

    DS61116E_JP - p. 24-16 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    24.4 I2C 動作の有効化I2C モジュールは、全てのマスタおよびスレーブ機能を実装しており、ON ビット (I2CxCON)をセットすると有効になります。モジュールが有効になると、マスタ機能とスレーブ機能は同時に動作し、ソフトウェアまたはバスのイベントに従って応答します。

    有効になった直後の初期状態のモジュールは、SDAx ピンと SCLx ピンをリリースしてバスをアイドル状態にします。ソフトウェアで制御ビットをセットしてマスタイベントを開始しない限り、マスタ機能はアイドル状態に留まります。アクティブになったスレーブ機能はバスの監視を始めます。スレーブロジックがバス上で START イベントと有効なアドレスを検出すると、スレーブ トランザクションが始まります。

    24.4.1 I2C I/O の有効化バス動作には 2 本のピンを使います。1 本はクロック用の SCLx ピン、もう 1 本はデータ用のSDAx ピンです。モジュールを有効にした時に、そのモジュールよりも高い優先度を持つ他のモジュールがバスを制御していなければ、そのモジュールが SDAx ピンと SCLx ピンの制御を引き継ぎます。この際、モジュールがこれらのピンの状態と方向を変更するため、モジュールソフトウェアでこれらのピンのポート I/O 状態を変更する必要はありません。これらのピンは、初期化時に 3 ステートにされます ( リリースされます )。

    24.4.2 I2C 割り込みI2C モジュールは下記の 3 つの割り込み信号を生成します。• スレーブ割り込み• マスタ割り込み• バス衝突割り込みスレーブ割り込み、マスタ割り込み、バス衝突割り込み信号は SCLx の 9 番目のクロックパルスの立ち下がりエッジで HIGHに遷移し、少なくとも 1周辺モジュール用バスクロックで HIGHを維持します。これらの割り込みは対応する割り込みフラグビットをセットします。対応する割り込みイネーブルビットがあらかじめセットされており、かつ割り込み優先度が十分に高い場合、これらの割り込みは CPU に割り込みます。下記のマスタモード動作はマスタ割り込みを生成します。

    • START 条件 - SDAx 立ち下がりエッジ後 1 BRG 時間• 反復 START シーケンス - SDAx 立ち下がりエッジ後 1 BRG 時間• STOP 条件 - SDAx 立ち上がりエッジ後 1 BRG 時間• データバイトの受信時 - SCLx の 8 番目の立ち下がりエッジ ( スレーブから 8 ビットのデー

    タを受信後 )• ACK 送信シーケン中 – SCLx の 9 番目の立ち下がりエッジ ( スレーブに ACK または NACK

    を送信後 )• データバイトの送信時 – SCLx の 9 番目の立ち下がりエッジ ( スレーブから ACK を受信した

    かどうかに関係なく割り込みを生成 )• スレーブによる STOP 検出時 - スレーブが P ビット (I2CxSTAT) をセットした時下記のスレーブモード動作はスレーブ割り込みを生成します。

    • 有効なデバイスアドレス ( ジェネラルコールを含む ) を検出した時 - SCLx の 9 番目の立ち下 がりエッジ ( マスタに ACK を送信後 )STRICT ビット (I2CxCON) = 1または GCEN ビット (I2CxCON) = 1ではない場合、 アドレスは一致する必要があります。

    • データ受信時 – SCLx の 9 番目の立ち下がりエッジ ( マスタに ACK を送信後 )• データ送信時 – SCLx の 9 番目の立ち下がりエッジ ( マスタから ACK を受信したかどうかに

    関係なく割り込みを生成 )バス衝突イベントは下記の割り込みを生成します。

    • START シーケンス中 – START 条件よりも前に SDAx がサンプリングされた• START シーケンス中 – SDAx が「0」に遷移する前に SCLx が「0」に遷移した• START シーケンス中 – BRG がタイムアウトする前に SDAx が「0」に遷移した• 反復STARTシーケンス中 – SCLxがHIGHに遷移時にSDAxが「0」としてサンプリングされた• 反復 START シーケンス中 – SDAx が LOW に遷移する前に SCLx が LOW に遷移した• STOP シーケンス中 – SDAx をフロートした後に SDAx が LOW としてサンプリングされた• STOP シーケンス中 – SDAx が HIGH に遷移する前に SCLx が LOW に遷移した

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-17

  • PIC32 ファミリ リファレンス マニュアル

    24.4.3 I2C 送信レジスタと受信レジスタI2CxTRN レジスタには送信データが書き込まれます。このレジスタは、モジュールがマスタとしてスレーブにデータを送信する際、またはモジュールがスレーブとして応答データをマスタに送信する際に使います。メッセージの送信中に、I2CxTRN レジスタは各ビットをシフトアウトします。このため、バスがアイドル状態ではない時に I2CxTRN レジスタに書き込む事はできません。

    マスタまたはスレーブが受信したデータは、シフトレジスタ I2CxRSR にシフトインされます。ユーザ アプリケーションはこのシフトレジスタにアクセスできません。1 バイトを完全に受信 すると、そのバイトは I2CxRCV レジスタに移動します。受信動作では、I2CxRSR レジスタとI2CxRCV レジスタによって二重バッファレシーバが構成されます。これにより、受信済みデータバイトが読み出される前に次のバイトの受信を開始できます。

    ソフトウェアが I2CxRCV レジスタから受信済みバイトを読み出す前にモジュールが次のバイトを完全に受信すると、レシーバ オーバーフローが発生して I2COV ビット (I2CxSTAT) が セットされます。この場合、I2CxRSR レジスタ内のバイトは失われます。I2CxADD レジスタはスレーブデバイスのアドレスを保持します。10 ビット アドレッシング モードでは、レジスタ内の全てのビットを使います。7 ビット アドレッシング モードでは、 I2CxADD ビットだけを使います。A10M ビット (I2CxCON) は、スレーブアドレスのモード (10 ビットまたは 7 ビット ) を指定します。どちらのスレーブ アドレッシング モード でも、I2CxMSK レジスタを I2CxADD レジスタと組み合わせて使う事で、完全なアドレス一致から 1 つまたは複数のビット位置を除外 ( マスク ) できます。これにより、スレーブモードで動作中のモジュールを複数のアドレスに対して応答させる事ができます。

    24.4.4 I2C baud レート ジェネレータI2C マスタモード動作では、baud レート ジェネレータ (BRG) を使って SCLx クロック周波数 を 100 kHz、400 kHz、1 MHz のいずれかに設定します。I2CxBRG レジスタの値が BRG にリ ロードされます。I2CxTRN レジスタへの書き込みが発生すると、BRG は自動的にカウントを始めます。実行中の動作が完了すると ( すなわち、最後のデータビットを送信した後に ACK を受信すると )、内部クロックは自動的にカウントを停止し、SCLx ピンは最後の状態を保持します。

    24.4.5 I2C マスタモードでの baud レート ジェネレータI2C マスタモードでは、I2CxBRG レジスタの値が BRG にリロードされます。BRG にこの値がリロードされると、BRG は 0 までカウントダウンして停止します ( 次にリロードされるまで停止したまま )。I2C マスタモードでは、BRG は自動的にリロードされません。例えばクロック調停が発生している場合、SCLx ピンで HIGH を検出するまで BRG はリロードされません ( 図 24-6 参照 )。表 24-2 に、標準 baud レートに対応する I2CxBRG の設定とデバイス周波数の組み合わせを示します。

    BRG リロード値は式 24-1 を使って求まります。

    式 24-1: baud レート ジェネレータのリロード値の計算

    Note: I2CxBRG に 0x0 または 0x1 を設定する事は明示的に禁じられています。I2CxBRGに 0x0 または 0x1 を書き込むと、予測不可能な結果が生じます。

    I2CxBRG 12 FSCK

    ------------------------- TPGD– PBCLK 2–=

    DS61116E_JP - p. 24-18 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    図 24-5: baud レート ジェネレータのブロック図

    図 24-6: クロック調停が発生した場合の baud レート ジェネレータのタイミング

    表 24-2: I2C™ クロックレートと BRG の関係

    PBCLK I2CxBRG PGD(1) FSCK 近似値 (BRG のロールオーバーは 2 回 / サイクル )

    50 MHz 0x037 104 ns 400 kHz

    50 MHz 0x0F3 104 ns 100 kHz

    40 MHz 0x02C 104 ns 400 kHz

    40 MHz 0x0C2 104 ns 100 kHz

    30 MHz 0x020 104 ns 400 kHz

    30 MHz 0x091 104 ns 100 kHz

    20 MHz 0x015 104 ns 400 kHz

    20 MHz 0x060 104 ns 100 kHz

    10 MHz 0x009 104 ns 400 kHz

    10 MHz 0x02F 104 ns 100 kHz

    Note 1: パルスゴブラー遅延 (PGD) は 104 ns (typical) です。詳細は各デバイスのデータ シートを参照してください。

    Note: 式 24-1 と表 24-2 は、あくまでも設計のガイドラインとして提示しています。これらはシステム依存パラメータであるため、実際の baud レートは微妙に異なる可能性があります。実際の baud レートがシステム要件を満たす事を確認するためにテストが必要です。システム要件を満たさない場合、I2CxBRG の調整が必要かもしれません。

    BRG Down CounterSCL_OUT

    I2CxBRG

    SCLx

    ReloadControl

    Reload

    PBCLK

    SDAx

    SCLx

    SCLx de-asserted but slave holds

    DX-1DX

    BRG

    SCLx is sampled high, reload takesplace, and BRG starts its count.

    03 02 01 00 (hold off) 03 02

    Reload

    BRGValue

    SCLx low (clock arbitration)SCLx allowed to transition high

    BRG countsdown

    BRG countsdown

    BRG countsdown

    TOSC/2

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-19

  • PIC32 ファミリ リファレンス マニュアル

    24.5 シングルマスタ環境でマスタとして通信する一般的に I2C モジュールは、I2C を使ってシステム内の I2C 周辺モジュール (I2C シリアルメモリ等 ) と通信します。I2C システムでは、マスタがバス上の全てのデータ通信シーケンスを制御します。 以下の例では、PIC32 とその I2C モジュールがシステム内で唯一のマスタとして動 作します。このシングルマスタは SCLx クロックを生成し、メッセージ プロトコルを制御しま す。

    I2C モジュールは I2C メッセージ プロトコルの各部分を制御しますが、プロトコルの各部分を シーケンシングして完全なメッセージを構成するのはソフトウェアの役割です。

    シングルマスタ環境での代表的な動作として、I2C シリアル EEPROM から 1 バイトを読み出すメッセージ例を図 24-7 に示します。このメッセージを完了するために、ソフトウェアは下記の手順でプロトコルをシーケンシングします。

    1. ON ビット (I2CxCON) を「1」にセットしてモジュールを有効にする 2. SDAx と SCLx で START 条件を生成する3. 書き込み指示を含む I2C デバイスアドレス バイトをスレーブに送信する4. スレーブからの肯定応答を待機 / 確認する5. シリアルメモリ アドレスの上位バイトをスレーブに送信する6. スレーブからの肯定応答を待機 / 確認する7. シリアルメモリ アドレスの下位バイトをスレーブに送信する8. スレーブからの肯定応答を待機 / 確認する9. SDAx と SCLx で反復 START 条件を生成する10. 読み出し指示を含むデバイスアドレス バイトをスレーブに送信する11. スレーブからの肯定応答を待機 / 確認する12. マスタ受信を有効にしてシリアルメモリ データを受信する13. データバイトを最後まで受信したら ACK または NACK 条件を生成する14. SDAx と SCLx で STOP 条件を生成する

    図 24-7: 代表的な I2C™ メッセージ : シリアル EEPROM の読み出し ( ランダムアドレス モード )

    I2C モジュールは START および STOP ジェネレータ、データバイト送信、データバイト受信、肯定応答ジェネレータ、BRG を含むマスタモード通信をサポートします。一般的に、ソフトウェアは制御レジスタに書き込む事によって特定のステップを開始し、割り込みを待機するか状態をポーリングする事によってそのステップの完了を待機します。以下では、これらの各動作について詳細に説明します。

    Bus

    MasterSDAx

    Star

    t AddressByte

    EEPROM AddressHigh Byte

    EEPROM AddressLow Byte

    AddressByte

    DataByte

    S A A A 02 1 0 R 1 P

    SlaveSDAx

    Activity

    N

    AAAA

    Output

    Output

    Idle

    R/W

    ACK

    ACK

    ACK

    Res

    tart

    R/W

    ACK

    NA

    CK

    Stop

    Idle

    A3

    A4

    A5

    A6

    A A A2 1 0

    A3

    A4

    A5

    A6

    Note: I2C モジュールはイベントのキューを許容しません。例えばソフトウェアは、START条件を開始した後、START 条件が完了する前に I2CxTRN レジスタに書き込んで送信を開始する事はできません。この場合、I2CxTRN レジスタは書き込まれず、この書き込みが発生しなかった事を示す IWCOL ビット (I2CxSTAT) がセットされます。

    DS61116E_JP - p. 24-20 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    24.5.1 START バスイベントの生成STARTイベントを開始するには、ソフトウェアでSTARTイネーブルビット (SEN (I2CxCON)) をセットします。ソフトウェアは、START ビット (I2CxSTAT) をセットする前に STOP (P) ビット(I2CxSTAT)をチェックする事で、バスがアイドル状態であるかどうかを確認できます。図 24-8 に START 条件のタイミングを示します。• スレーブロジックは START 条件を検出すると S ビットをセットし、P ビットをクリアする• START 条件が完了すると SEN ビットは自動的にクリアされる• マスタ割り込みが生成される• START 条件の完了後、SDAx ラインと SCLx ラインは LOW (Q ステート ) を維持する

    24.5.1.1 IWCOL ステータスフラグSTARTシーケンスが完了する前にソフトウェアが I2CxTRNレジスタに書き込むと、IWCOビット (I2CxSTAT) がセットされます。この場合、書き込みは発生せず、送信バッファの内容は変更されません。

    図 24-8: マスタ START のタイミング図

    24.5.2 スレーブデバイスにデータを送信する図 24-9 に、マスタからスレーブへのデータ転送のタイミング図を示します。データバイト、7 ビット デバイスアドレス バイト、10 ビットアドレスの第 2 バイトは、値を I2CxTRN レジスタに 書き込めば単純に送信できます。このレジスタに書き込むと下記のプロセスが始まります。

    1. ソフトウェアが送信データバイトを I2CxTRN レジスタに書き込む。2. I2CxTRN レジスタへの書き込みにより、バッファフル フラグビット (TBF (I2CxSTAT))

    がセットされる。

    3. SDAx ピンにデータバイトをシフトアウトし、8 ビットの全てを送信する (SCLx の各立ち下がりエッジでアドレス / データの各ビットを SDAx ピンにシフトアウトする )。

    4. 9 番目の SCLx クロックで、モジュールはスレーブデバイスからの ACK ビットをシフトインし、その値を ACKSTAT ビット (I2CxSTAT) に書き込む。

    5. 9 番目の SCLx クロックサイクルの終了時に、モジュールはマスタ割り込みを生成する。モジュール自体はデータバイトの生成も検証も行いません。各バイトの内容と使用方法は、ソフトウェアが管理するメッセージ プロトコルの状態によって決まります。

    Note: イベントのキューは許容されないため、I2CxCON レジスタの下位 5 ビットへの書き込みは START 条件が完了するまで無効です。

    SCLx (Master)

    SDAx (Master)

    S

    SEN

    Master Interrupt

    TBRG

    1 2 3 4

    1TBRG

    2

    3

    4

    I2C™ Bus State (I) (Q)

    P

    (S) SEN に「1」を書き込むと START イベントが始まる。baud レート ジェネレータが 起動する。

    baud レート ジェネレータがタイムアウ トする。マスタ モジュールは SDAx を LOWに駆動する。baudレート ジェネレー タが再起動する。

    スレーブ モジュールは START を検出し、 S = 1 / P = 0に設定する。baud レート ジェネレータがタイムアウ トする。マスタ モジュールは SCLx を LOW に駆動し、割り込みを生成し、SENをクリアする。

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-21

  • PIC32 ファミリ リファレンス マニュアル

    24.5.2.1 7 ビットアドレスをスレーブに送信する7 ビット デバイスアドレスの送信では、1 バイトをスレーブに送信します。7 ビット アドレスバ イトは、7 ビットの I2C デバイスアドレスと R/W ビット (IC2xSTAT) を格納する必要があります。R/W ビットは、メッセージをスレーブに書き込む ( マスタからスレーブに送信する ) のか、それともスレーブから読み出す ( スレーブからマスタに送信する ) のかを指定します。

    24.5.2.2 10 ビットアドレスをスレーブに送信する10 ビット デバイスアドレスの送信では、2 バイトをスレーブに送信します。第 1 バイトは、10 ビッ ト アドレッシング モード用に予約された 5ビットの I2Cデバイスアドレスと 10ビットアドレスの 上位 2 ビットを格納します。スレーブは 10 ビットアドレスの残りの 8 ビットを格納した第 2 バイトを受信する必要があるため、第 1 バイトの R/W ビットは「0」( マスタ送信 / スレーブ受信 ) である事が必要です。引き続きメッセージデータをスレーブに向けて送信する場合、マスタはそのままデータの送信を続ける事ができます。しかし、マスタがスレーブからの応答を要求する場合、R/Wビットを「1」にセットした反復 START シーケンスを使ってメッセージの R/W ステータスを「スレーブからの読み出し」に変更する必要があります。

    24.5.2.3 スレーブから肯定応答を受信するSCLx クロックの 8 番目の立ち下がりエッジで TBF ビット (I2CxSTAT) がクリアされ、スレーブが肯定応答を送信できるよう、マスタは SDAx ピンのアサートを停止します。次いでマスタは 9 番目の SCLx クロックを生成します。アドレスが一致した場合、またはデータを正しく受信した場合、スレーブデバイスは 9 番目のビット時間で ACK ビットを返す事ができます。スレーブは、デバイスアドレスが一致する( ジェネラルコールを含む ) か、正常にデータを受信すると、肯定応答を送信します。ACKのステータスは、9番目のSCLxクロックの立ち下がりエッジで肯定応答ステータスビットACKSTAT (I2CxSTAT) に書き込まれます。その後モジュールはマスタ割り込みを生成し、 次のデータバイトが I2CxTRN レジスタに書き込まれるまでアイドル状態になります。

    24.5.2.4 ACKSTAT ステータスフラグマスタモードでもスレーブモードでも、ACKSTAT ビット (I2CxSTAT) は送信モードか受信モードかに関係なく 9 番目の SCLx クロックで更新されます。ACKSTAT は、通信相手から肯定応答 (ACK = 0) が返されると ( すなわち 9 番目のクロックパルスで SDAx が「0」であれば ) クリ アされ、否定応答 (ACK = 1) が返されると ( すなわち 9 番目のクロックパルスで SDAx が「1」で あれば ) セットされます。

    24.5.2.5 TBF ステータスフラグ送信の場合、TBF ビットは CPU が I2CxTRN レジスタに書き込むとセットされ、8 ビットの全てがシフトアウトされるとクリアされます。

    24.5.2.6 IWCOL ステータスフラグ実行中の送信が完了する前 ( モジュールがデータバイトをまだシフトアウト中である時 ) にソフトウェアが I2CXTRN レジスタに書き込みを試みた場合、IWCOL ビット (I2CxSTAT) がセットされ、バッファの内容は変更されません ( 書き込みは発生しません )。IWCOL ビットはソフトウェアでクリアする必要があります。

    Note 1: 7 ビット アドレッシング モードでは、I2C プロトコルを使用する各ノードに一意 のアドレスを設定する (I2CxADD レジスタに保存する ) 必要があります。

    2: アドレスバイトを送信する際、マスタはアドレスビット を 1 ビット左にシフトして bit 0 を R/W ビットとして構成する必要があります。

    Note 1: 10 ビット アドレッシング モードでは、I2C プロトコルを使用する各ノードに一意 のアドレスを設定する (I2CxADD レジスタに保存する ) 必要があります。

    2: アドレスバイトを送信する際、マスタはアドレスビット を 1 ビット左にシフトして bit 0 を R/W ビットとして構成する必要があります。

    Note: イベントのキューは許容されないため、I2CxCON レジスタの下位 5 ビットへの書き込みは送信状態が完了するまで無効です。

    DS61116E_JP - p. 24-22 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    図 24-9: マスタ送信のタイミング図

    24.5.3 スレーブデバイスからデータを受信する図 24-10 に、マスタ受信のタイミング図を示します。マスタは、R/W ビット (IC2xSTAT) を

    「1」にセットしてスレーブアドレスを送信した後に、スレーブデバイスからデータを受信できます。これは受信イネーブルビット RCEN (I2CxCON) をセットすると有効になります。マ スタロジックはクロックの生成を始め、SCLx クロックの各立ち下がりエッジの前で SDAx ラインをサンプリングし、そのデータを I2CxRSR レジスタにシフトインします。

    8 番目の SCLx クロックの立ち下がりエッジの後に下記のイベントが発生します。• RCEN ビットが自動的にクリアされる• I2CxRSR レジスタの内容が I2CxRCV レジスタに転送される• RBF フラグビット (I2CxSTAT) がセットされる• モジュールはマスタ割り込みを生成するRBF フラグビットは、CPU がバッファを読み出すと自動的にクリアされます。ソフトウェアは、データを処理した後に肯定応答シーケンスを実行できます。

    D7 D6 D5 D4 D3 D2 D1 D0

    SCLx (Master)

    SCLx (Slave)

    SDAx (Master)

    SDAx (Slave)

    TBF

    I2CxTRN

    Master Interrupt

    TBRG TBRG

    5 6 7 81 2 3 4

    I2CxTRNレジスタに書き込むとマスタ送信イベントが始まる。TBFビットがセットされる。1

    baudレート ジェネレータが起動する。I2CxTRNのMSBがSDAxを駆動する。SCLxはLOWを維持する。TRSTATビットがセットされる。2

    baudレート ジェネレータがタイムアウトする。SCLxをリリースする。baudレート ジェネレータが再起動する。3

    baudレート ジェネレータがタイムアウトする。SCLxがLOWに変化する。SCLxでLOWを検出すると、I2CxTRNの次のビットがSDAxを4

    SCLxがLOWの時、スレーブもSCLxをLOWに駆動して待機 (クロックのストレッチ )を開始できる。5

    マスタは既にSCLxをリリース済みであり、スレーブもSCLxをリリースして待機を終了できる。baudレート ジェネレータ6

    8番目のSCLxクロックの立ち下がりエッジで、マスタはSDAxをリリースする。TBFビットがクリアされる。スレーブはACK/NACKを駆動7

    9番目のSCLxクロックの立ち下がりエッジで、マスタは割り込みを生成する。SCLxは次のイベントまでLOWを維持する。 8スレーブはSDAxをリリースする。TRSTATビットがクリアされる。

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

    TRSTAT

    ACKSTAT ACK = 0 ACK = 0

    駆動する。

    が再起動する。

    する。

    Note: RCEN ビットをセットするには、I2CxCON の下位 5 ビットが「0」である事が必要です。これはマスタロジックが非アクティブである事を保証します。

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-23

  • PIC32 ファミリ リファレンス マニュアル

    24.5.3.1 RBF ステータスフラグデータ受信中に、デバイスアドレスまたはデータバイトが I2CxRSR レジスタから I2CxRCV レジスタに転送されると、RBF ビット (I2CxSTAT) がセットされます。このビットは、ソフトウェアが I2CxRCV レジスタを読み出すとクリアされます。

    24.5.3.2 I2COV ステータスフラグRBF ビットがセットされたまま ( つまり先に受信したバイトが I2CxRCV レジスタから読み出されていない状態 ) で、次のバイトを I2CxRSR レジスタに受信すると、I2COV ビット(I2CxSTAT) がセットされ、I2CxRSR レジスタ内のデータは失われます。I2COV ビットがセットされたままであっても、後続の受信は抑止されません。I2CxRCV レジスタを読み出して RBF ビットがクリアされると、次に I2CxRSR レジスタに受信したバイトはI2CxRCV レジスタに転送されます。

    24.5.3.3 IWCOL ステータスフラグ実行中の受信が完了する前 (I2CxRSR レジスタがデータバイトをまだシフトイン中である時 )にソフトウェアが I2CXTRN レジスタに書き込みを試みた場合、IWCOL ビット (I2CxSTAT)がセットされ、バッファの内容は変更されません ( 書き込みは発生しません )。

    図 24-10:マスタ受信のタイミング図

    Note: イベントのキューは許容されないため、I2CxCON レジスタの下位 5 ビットへの書き込みはデータ受信状態が完了するまで無効です。

    D7 D6 D5 D4 D3 D2 D1 D0

    SCLx (Master)

    SCLx (Slave)

    SDAx (Slave)

    SDAx (Master)

    RBF

    I2C™ Bus State

    Master Interrupt

    TBRG

    5 62 3 4

    RCENビットに「1」を書き込むとマスタ受信イベントが始まる。baudレート ジェネレータが起動する。SCLxはLOWを維持する。2

    baudレート ジェネレータがタイムアウトする。マスタはSCLxのリリースを試みる。 3

    スレーブはSCLxをリリースし、baudレート ジェネレータが再起動する。4

    baudレート ジェネレータがタイムアウトする。応答のMSBを I2CxRSRへシフトする。次のbaudインターバルの間SCLxをLOWに駆動5

    SCLxクロックの8番目の立ち下がりエッジで、I2CxRSRの内容を I2CxRCVに転送する。モジュールはRCENビットをクリアする。 6

    TBRG

    RCEN

    (D) (Q) (Q)(D)(Q)

    I2CxRCV

    RBFビットがセットされる。マスタは割り込みを生成する。

    (Q)

    1

    通常、スレーブはSCLxをLOWにクロック ストレッチングして、応答データを準備するための待機を要求できる。 1準備が完了すると、スレーブはSDAxで応答データのMSBを駆動する。

    (Q)

    する。

    DS61116E_JP - p. 24-24 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    24.5.4 肯定応答の生成肯定応答イネーブルビット ACKEN (I2CxCON) をセットすると、マスタ肯定応答シーケン スの生成が有効になります。

    図 24-11 に ACK シーケンス、図 24-12 に NACK シーケンスを示します。肯定応答データビット ACKDT (I2CxCON) は ACK または NACK のどちらかを指定します。ACKEN ビットは 2 baud 周期後に自動的にクリアされ、モジュールはマスタ割り込みを生成し ます。

    24.5.4.1 IWCOL ステータスフラグ肯定応答シーケンスの実行中にソフトウェアが I2CxTRN レジスタに書き込むと、IWCOL ビット (I2CxSTAT) がセットされます。この場合、書き込みは発生せず、送信バッファの内容は変更されません。

    図 24-11: マスタ肯定応答 (ACK) のタイミング図

    図 24-12:マスタ否定応答 (NACK) のタイミング図

    Note: ACKEN ビットをセットするには、I2CxCON の下位 5 ビットが「0」( マスタロジックが無効 ) である事が必要です。

    Note: イベントのキューは許容されないため、I2CxCON レジスタの下位 5 ビットへの書き込みは肯定応答状態が完了するまで無効です。

    SCLx (Master)

    SDAx (Master)

    ACKEN

    Master Interrupt

    TBRG

    1 2 3

    ACKEN = 1を書き込むとマスタ肯定応答イベントが始まる。 1

    TBRG

    ACKDT = 0を書き込んでACKの送信を指定する。

    SCLxでLOWを検出すると、モジュールはSDAxをLOWに駆動する。 2

    baudレート ジェネレータがタイムアウトする。モジュールはSCLxをリリー3

    baudレート ジェネレータがタイムアウトする。 4

    I2C™ Bus State (A) (Q)(Q)

    4

    baudレート ジェネレータが再起動する。

    baudレート ジェネレータが起動する。SCLxはLOWを維持する。

    モジュールはSCLxをLOWに駆動した後SDAxをリリースする。モジュールはACKENをクリアする。マスタは割り込みを生成する。

    (Q)

    ACKDT = 0

    スする。

    SCLx (Master)

    SDAx (Master)

    ACKEN

    TBRG

    1 2 3

    ACKEN = 1を書き込むとマスタ肯定応答イベントが始まる。 1

    TBRG

    ACKDT = 1を書き込んでNACKの送信を指定する。

    SCLxでLOWを検出すると、モジュールはSDAxをリリースする。2

    baudレート ジェネレータがタイムアウトする。モジュールはSCLxをリリー3

    baudレート ジェネレータがタイムアウトする。 4

    I2C™ Bus State (A) (I)(Q)

    4

    baudレート ジェネレータが再起動する。

    baudレート ジェネレータが起動する。

    モジュールはSCLxをLOWに駆動した後SDAxをリリースする。モジュールはACKENをクリアする。マスタは割り込みを生成する。

    ACKDT = 1

    スする。

    Master Interrupt

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-25

  • PIC32 ファミリ リファレンス マニュアル

    24.5.5 STOP バスイベントの生成STOP イネーブルビット PEN (I2CxCON) をセットすると、マスタ STOP シーケンスの生 成が有効になります。

    PEN ビットをセットすると、マスタは図 24-13 のように STOP シーケンスを生成します。• スレーブは、STOP 条件を検出すると STOP (P) ビット (I2CxSTAT) をセットし、START

    (S) ビット (I2CxSTAT) をクリアする• PEN ビットは自動的にクリアされる• モジュールはマスタ割り込みを生成する

    24.5.5.1 IWCOL ステータスフラグSTOP シーケンスの実行中にソフトウェアが I2CxTRN レジスタに書き込むと、IWCOL ビット(I2CxSTAT) がセットされます。この場合、書き込みは発生せず、送信バッファの内容は変更されません。

    図 24-13:マスタ STOP のタイミング図

    24.5.6 反復 START バスイベントの生成反復 START イネーブルビット RSEN (I2CxCON) をセットすると、マスタ反復 START シー ケンスの生成が有効になります ( 図 24-14 参照 )。

    反復 START 条件を生成するには、ソフトウェアで RSEN ビット (I2CxCON) をセットします。モジュールは SCLx ピンを LOW に駆動します。モジュールは、SCLx ピンで LOW を検出すると BRG の 1 カウント (TBRG) の間 SDAx ピンをリリースします。モジュールは、BRG がタイムアウトした時に SDAx で HIGH を検出すると SCLx ピンをリリースします。モジュールが SCLx ピンで HIGH を検出すると、BRG がリロードしてカウントを始めます。SDAx と SCLxは 1 TBRG の間 HIGH を維持する必要があります。これに続いて SDAx ピンは 1 TBRG の間 LOW に駆動され、SCLx は HIGH を維持します。反復 START シーケンスは下記の通りです。1. スレーブは、START 条件を検出すると S ビット (I2CxSTAT) をセットし、P ビット

    (I2CxSTAT) をクリアする。2. RSEN ビットは自動的にクリアされる。3. モジュールはマスタ割り込みを生成する。

    Note: PEN ビットをセットするには、I2CxCON レジスタの下位 5 ビットが「0」( マスタロジックが無効 ) である事が必要です。

    Note: イベントのキューは許容されないため、I2CxCON レジスタの下位 5 ビットへの書き込みは STOP 条件が完了するまで無効です。

    SCLx (Master)

    SDAx (Master)

    S

    PEN

    TBRG

    1 2 3 5

    PEN = 1を書き込むとマスタSTOPイベントが始まる。 1

    TBRG

    baudレート ジェネレータが起動する。モジュールはSDAxをLOWに

    baudレート ジェネレータがタイムアウトする。モジュールはSCLxを2baudレート ジェネレータが再起動する。

    baudレート ジェネレータがタイムアウトする。モジュールはSDAxを3

    スレーブロジックがSTOPを検出する。モジュールはP = 1、S = 0に設4

    I2C™ Bus State (I)

    P

    TBRG

    (Q)

    4

    baudレート ジェネレータが再起動する。

    baudレート ジェネレータがタイムアウトする。モジュールはPENを5マスタは割り込みを生成する。

    (Q) (P) 駆動する。

    リリースする。

    リリースする。

    定する。

    クリアする。

    Master Interrupt

    Note: RSEN ビットをセットするには、I2CxCON の下位 5 ビットが「0」( マスタロジックが無効 ) である事が必要です。

    DS61116E_JP - p. 24-26 © 2013 Microchip Technology Inc.

  • セクション 24. I2C™ (Inter-Integrated Circuit™) I 2C

    24

    24.5.6.1 IWCOL ステータスフラグ反復 START シーケンスの実行中にソフトウェアが I2CxTRN レジスタに書き込むと、IWCOLビット (I2CxSTAT) がセットされます。この場合、書き込みは発生せず、送信バッファの内容は変更されません。

    図 24-14:マスタ反復 START のタイミング図

    24.5.7 完全なマスタメッセージの作成24.5「シングルマスタ環境でマスタとして通信する」の冒頭で述べたように、ソフトウェアがメッセージ プロトコルに従ってメッセージを構成します。モジュールは I2C メッセージ プロ トコルの各部分を制御しますが、プロトコルのコンポーネントをシーケンシングして完全なメッセージを構成するのはソフトウェアの役割です。

    ソフトウェアは、モジュールの使用中にポーリングまたは割り込みを使えます。ここでは割り込みの使用例を示します。

    ソフトウェアはメッセージの処理中に SEN、RSEN、PEN、RCEN、ACKEN ビット (I2CxCONレジスタの下位 5 ビット ) と TRSTAT ビットを「ステート」フラグとして使えます。ステート番号とバス状態の割り当て例を表 24-3 に示します。

    ソフトウェアは START 命令を発行する事でメッセージを開始し、START に対応するステート番号を記録します。

    Note: イベントのキューは許容されないため、I2CxCON レジスタの下位 5 ビットへの書き込みは反復 START 条件が完了するまで無効です。

    SCLx (Master)

    SDAx (Master)

    S

    RSEN

    Master Interrupt

    TBRG

    1 2 3 5

    RSEN = 1を書き込むとマスタ反復STARTイベンが始まる。 1

    TBRG

    baudレート ジェネレータが起動する。モジュールはSCLxをLOWに駆

    baudレート ジェネレータがタイムアウトする。モジュールはSCLxをリ2baudレート ジェネレータが再起動する。

    baudレート ジェネレータがタイムアウトする。モジュールはSDAxを3

    スレーブロジックがSTARTを検出する。モジュールはS = 1、P = 0に設4

    I2C™ Bus State (Q)

    P

    TBRG

    (Q)

    4

    baudレート ジェネレータが再起動する。

    baudレート ジェネレータがタイムアウトする。モジュールはSCLxを5モジュールはRSENをクリアする。マスタは割り込

    (Q) SDAxをリリースする。(S) 動し、

    リースする。

    LOWに駆動する。

    定する。

    LOWに駆動する。みを生成する。

    表 24-3: マスタメッセージのプロトコル ステート ステート番号

    ( 参考例 )I2CxCON TRSTAT(I2CxSTAT) 状態

    0 00000 0 バスはアイドルまたは待機中1 00001 N/A START イベントを送信中2 00000 1 マスタが送信中3 00010 N/A 反復 START イベントを送信中4 00100 N/A STOP イベントを送信中5 01000 N/A マスタが受信中6 10000 N/A マスタ肯定応答

    Note: 表のステート番号の割り当てはあくまでも参考例です。ユーザ ソフトウェアはス テート番号を自由に割り当てる事ができます。

    © 2013 Microchip Technology Inc. DS61116E_JP - p. 24-27

  • PIC32 ファミリ リファレンス マニュアル

    各イベントの完了時に割り込みが生成されると、割り込みハンドラはステート番号をチェックします。START ステートの場合、割り込みハンドラは START シーケンスの実行を確認した後に、I2C アドレスを送信してマスタ送信イベントを開始し、ステート番号をマスタ送信に対応した番号に変更します。

    次の割り込みが発生すると、割り込みハンドラはそのステートを再びチェックし、マスタ送信が完了したかどうかを判定します。割り込みハンドラは、データの送信に成功した事を確認した後に、メッセージの内容に応じて次のイベントに移行します。このようにして割り込みハンドラは、メッセージの送信が完了するまで割り込みのたびにメッセージ プロトコルを処理しま す。

    図 24-7 に示したメッセージ シーケンスの詳細を図 24-15 に示します。7 ビット アドレッシン グ フォーマットを使うメッセージの簡単な例を図 24-16 に示します。10 ビット アドレッシン グ フォーマットを使ってスレーブにデータを送信するメッセージの例を図24-17に示します。 10ビット アドレッシング フォーマットを使ってスレーブからデータを受信するメッセージの 例を図 24-18 に示します。

    DS61116E_JP - p. 24-28 © 2013 Microchip Technology Inc.

  • © 2013 M

    icrochip Technology Inc.D

    S61116E_JP

    - p. 24-29

    セク

    ショ

    ン24. I 2C

    ™ (Inter-Integrated C

    ircuit™)

    1 2 3 4 5 6 7 8

    D3 D2 D1 D0D7 D6 D5 D4

    9

    N

    8 9

    ントが始まる。

    る。

    が始まる。ACKDT = 0に設定してNACKを送信する。

    トが始まる。

    リアルEEPROMのデバイスアドレス バイトを

    レジスタを読み出し、RBFフラグがクリアされる。

    I2C™ 24

    24-15:マスタメッセージ ( 代表的な I2C™ メッセージ : シリアル EEPROM の読み出し )

    1 SENビットをセットするとSTARTイベントが始まる。

    ACKDT

    ACKEN

    SEN

    SCLx

    SDAx

    SCLx

    SDAx

    I2CxTRN

    TBF

    I2CxRCV

    RBF

    Master

    ACKSTAT

    1 2 3 4 5 6 7 8

    A1 A0

    9

    A

    PEN

    RCEN

    1 2 3 4 5 6 7 8

    A11

    A10 A9

    A8

    1 2 3 4 5 6 7 8 9

    Ω1 1

    RSEN

    1 2 3 4 5 6 7 8 9

    1 32

    9

    AAA

    4 5 7

    2 I2CxTRNレジスタに書き込むとマスタ送信イベントが始まる。

    3 I2CxTRNレジスタに書き込むとマスタ送信イベントが始まる。

    4 -

    5

    I2CxTRNレジスタに書き込むとマスタ送信イベ6

    RCENビットをセットするとマスタ受信が始ま7

    9

    ACKENビットをセットするとSTARTイベント

    PENビットをセットするとマスタSTOPイベン

    このデータはシリアルEEPROMのデバイスアドレス バイト (R/Wビットはクリア = 書き込み

    このデータはEEPROMデータアドレスの第1バイトを格納する。

    読み出し指定 (セット )のR/Wビットを含むシ

    割り込みが発生するとソフトウェアは I2CxRCV

    0 0 A2 A7 A6 A5 A4 A2 A1 A0 A1 A0 R1 10 0 A20 0 0 0

    6

    I2CxTRNレジスタに書き込むとマスタ送信イベントが始まる。このデータはEEPROMデータアドレスの第2バイトを格納する。

    8

    RSENビットをセットすると反復STARTイベントが始まる。

    (Master)

    (Master)

    (Slave)

    (Slave)

    A3

    Master interrupt cleared

    Interrupt by user software.

    指定 )を格納する。

    再送信する。

  • PIC32

    ファ

    ミリ

    リフ

    ァレ

    ンス

    マニ

    ュア

    DS

    61116E_JP

    - p. 24-30©

    2013 Microchip Technology Inc.

    1 2 3 4 5 6 7 8

    D3 D2 D1 D0D7 D6 D5 D4

    9

    N

    97 8

    信イベントが始まる。

    が始まる。

    ベントが始まる。ACKDT = 0に設定してNACKを

    イベントが始まる。

    トはセット )を格納する。

    図 24-16:マスタメッセージ (7 ビットアドレス : 送受信 )

    1 SENビットをセットするとSTARTイベントが始まる。

    ACKDT

    ACKEN

    SEN

    SCLx

    SDAx

    SCLx

    SDAx

    I2CxTRN

    TBF

    I2CxRCV

    RBF

    Master

    ACKSTAT

    1 2 3 4 5 6 7 8

    A2 A1

    9

    A

    PEN

    RCEN

    1 2 3 4 5 6 7 8

    D7 D6 D5 D4 D3 D2 D1 D0

    1 2 3 4 5 6 7 8 9

    RSEN

    1 32

    9

    A

    4 5 6

    2 I2CxTRNレジスタに書き込むとマスタ送信イベントが始まる。

    3 I2CxTRNレジスタに書き込むとマスタ送信イベントが始まる。

    4 PENビットをセットするとマスタSTOPイベントが始まる。

    5 SENビットをセットするとSTARTイベントが始まる。

    6 I2CxTRNレジスタに書き込むとマスタ送

    7 RCENビットをセットするとマスタ受信

    8 ACKENビットをセットするとSTARTイ

    PENビットをセットするとマスタSTOP

    このデータはアドレスバイト (R/Wビットはクリア )を格納する。

    このデータはメッセージバイトを格納する。

    A7 A6 A5 A4 A3

    A

    A2 A1 RA7 A6 A5 A4 A3

    このデータはアドレスバイト (R/Wビッ

    9

    (Master)

    (Master)

    (Slave)

    (Slave)

    Master interrupt cleared

    Interrupt by user software.

    送信する。

  • © 2013 M

    icrochip Technology Inc.D

    S61116E_JP

    - p. 24-31

    セク

    ショ

    ン24. I 2C

    ™ (Inter-Integrated C

    ircuit™)

    2 3 4 5 6 7 8 9

    7

    ベントが始まる。

    D3 D2 D1 D07 D6 D5 D4

    A

    ベントが始まる。を格納する。

    ベントが始まる。を格納する。

    I2C™ 24

    24-17:マスタメッセージ (10 ビット送信 )

    1 SENビットをセットするとSTARTイベントが始まる。

    ACKDT

    ACKEN

    SEN

    SCLx

    SDAx

    SCLx

    SDAx

    I2CxTRN

    TBF

    I2CxRCV

    RBF

    Master

    ACKSTAT

    1 2 3 4 5 6 7 8

    A9 A8

    9

    A

    PEN

    RCEN

    1 2 3 4 5 6 7 8

    D3 D2 D1 D0D7 D6 D5 D4A7 A6 A5 A4 A3 A2 A1 A0

    1 2 3 4 5 6 7 8 9

    Ω01 1 1 1

    RSEN

    1 2 3 4 5 6 7 8 9

    1 32

    9

    A

    1

    AA

    4 5 6

    2 I2CxTRNレジスタに書き込むとマスタ送信イベントが始まる。

    3 I2CxTRNレジスタに書き込むとマスタ送信イベントが始まる。

    4 I2CxTRNレジスタに書き込むとマスタ送信イベントが始まる。

    PENビットをセットするとマスタSTOPイ

    このデータはアドレスの第1バイトを格納する。

    このデータはアドレスの第2バイトを格納する。

    このデータはメッセージデータの第1バイトを格納する。

    DD3 D2 D1 D0D7 D6 D5 D4

    5 I2CxTRNレジスタに書き込むとマスタ送信イこのデータはメッセージデータの第2バイト

    6 I2CxTRNレジスタに書き込むとマスタ送信イこのデータはメッセージデータの第3バイト

    7

    (Master)

    (Master)

    (Slave)

    (Slave)

    Master interrupt cleared

    Interrupt by user software.

  • PIC32

    ファ

    ミリ

    リフ

    ァレ

    ンス

    マニ

    ュア

    DS

    61116E_JP

    - p. 24-32©

    2013 Microchip Technology Inc.

    1 2 3 4 5 6 7 8

    D3 D2 D1 D0D7 D6 D5 D4

    9

    N

    8 9 10

    まる。

    ントが始まる。ACKDT = 1に設定してACKを送信する。

    まる。

    ントが始まる。ACKDT = 0に設定してNACKを送信する。

    ベントが始まる。

    RCVレジスタを読み出し、RBFフラグがクリアされる。

    図 24-18:マスタメッセージ (10 ビット受信 )

    1 SENビットをセットするとSTARTイベントが始まる。

    ACKDT

    ACKEN

    SEN

    SCLx

    SDAx

    SCLx

    SDAx

    I2CxTRN

    TBF

    I2CxRCV

    RBF

    Master

    ACKSTAT

    1 2 3 4 5 6 7 8

    A9 A8

    9

    A

    PEN

    RCEN

    1 2 3 4 5 6 7 8

    D3 D2 D1 D0D7 D6 D5 D4

    A7 A6 A5 A4 A3 A2 A1 A0

    1 2 3 4 5 6 7 8 9

    Ω01 1 1 1

    RSEN

    A9 A801 1 1 1 R

    1 2 3 4 5 6 7 8 9

    1 32

    9

    A

    AA

    4 5 6 7

    2 I2CxTRNレジスタに�