16
AN-1159 アプリケーション・ノート Cortex-M3 ベースの高精度アナログ・マイクロコントローラ ADuCxxx ファミリー) I 2 C 互換インターフェース 著者: Bridget Dowling Rev. A アナログ・デバイセズ社は、提供する情報が正確で信頼できるものであることを期していますが、その情報の利用に関して、あるいは利用によって 生じる第三者の特許やその他の権利の侵害に関して一切の責任を負いません。また、アナログ・デバイセズ社の特許または特許の権利の使用を明示 的または暗示的に許諾するものでもありません。仕様は、予告なく変更される場合があります。本紙記載の商標および登録商標は、それぞれの所有 者の財産です。※日本語版資料は REVISION が古い場合があります。最新の内容については、英語版をご参照ください。 ©2015 Analog Devices, Inc. All rights reserved. 社/〒105-6891 東京都港区海岸 1-16-1 ニューピア竹芝サウス "⼂㠂 ⬩嵔䨊 電話 0354028200 大阪営業所/〒532-0003 大阪府大阪市淀川区宮原 3-5-36 新大阪トラストタワー 電話 0663506868 日本語参考資料 最新版英語アプリケーションはこちら はじめに このアプリケーション・ノートでは、アナログ・デバイセズの Cortex-M3 ベースの高精度マイクロコントローラ・ファミリー ADuCxxx ファミリー)を使用した I 2 CInter-Integrated Circuit) 互換インターフェースのハードウェア・マスターとハードウェ ア・スレーブの実装について説明します。 このアプリケーション・ノートには、I 2 C インターフェースを 使ってマスターとスレーブが相互に通信する方法を示すコード 例も記載してあります。次の例が含まれています。 マスターの送信と受信 スレーブの送信と受信 スレーブ・モードでの DMA 転送(送信と受信) マスター・モードでの DMA 転送(送信と受信) コンパニオン・コードについては、http://www.analog.com/jp/AN-1159 コンパニオン・コード zip ファイルをご覧ください。 I 2 C バスの主な特長は、 シリアル・データ・ライン(SDA)とシリアル・クロッ ク・ライン(SCL)の 2 本のバス・ラインのみが必要です。 これらのラインは双方向であるので、マスターとスレーブ はトランスミッタまたはレシーバとして動作可能です。 I 2 C マスターは複数のスレーブ・デバイスと通信すること ができます。各スレーブ・デバイスは固有のアドレスを持 つため、マルチスレーブ環境においても常にマスターと各 スレーブとの間で固有の関係が成立します。 調停機能を使うと、同じ I 2 C バス上に複数のマスターが存 在できます。 マスターとスレーブは、最大 400 kbps で送受信できます。 内蔵フィルタ機能により SDA ラインと SCL ラインで 50 ns 以下のスパイクを除去し、データ・インテグリティを維持 します。 複数デバイスの代表的な I 2 C 接続を図 1 に示します。 SCL SDA SDA SCL 3.3V MASTER SLAVE 1 SLAVE 2 SDA SCL PULL-UP RESISTOR PULL-UP RESISTOR 10882-001 1.シングル・マスター・マルチ・スレーブ I 2 C のブロック図

AN-1159: Cortex-M3 ベースの高精度アナログ・マ …...AN-1159 アプリケーション・ノート Cortexベース-M3の高精度アナログ・マイクロコントローラ

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

  • AN-1159 アプリケーション・ノート

    Cortex-M3 ベースの高精度アナログ・マイクロコントローラ(ADuCxxx ファミリー) の I2C 互換インターフェース

    著者: Bridget Dowling

    Rev. A

    アナログ・デバイセズ社は、提供する情報が正確で信頼できるものであることを期していますが、その情報の利用に関して、あるいは利用によって

    生じる第三者の特許やその他の権利の侵害に関して一切の責任を負いません。また、アナログ・デバイセズ社の特許または特許の権利の使用を明示

    的または暗示的に許諾するものでもありません。仕様は、予告なく変更される場合があります。本紙記載の商標および登録商標は、それぞれの所有

    者の財産です。※日本語版資料は REVISION が古い場合があります。最新の内容については、英語版をご参照ください。

    ©2015 Analog Devices, Inc. All rights reserved.

    本 社/〒105-6891 東京都港区海岸 1-16-1 ニューピア竹芝サウスタワービル 電話 03(5402)8200

    大阪営業所/〒532-0003 大阪府大阪市淀川区宮原 3-5-36 新大阪トラストタワー 電話 06(6350)6868

    日本語参考資料

    最新版英語アプリケーションはこちら

    はじめに

    このアプリケーション・ノートでは、アナログ・デバイセズの

    Cortex-M3 ベースの高精度マイクロコントローラ・ファミリー(ADuCxxx ファミリー)を使用した I2C(Inter-Integrated Circuit)互換インターフェースのハードウェア・マスターとハードウェ

    ア・スレーブの実装について説明します。

    このアプリケーション・ノートには、I2C インターフェースを使ってマスターとスレーブが相互に通信する方法を示すコード

    例も記載してあります。次の例が含まれています。

    • マスターの送信と受信• スレーブの送信と受信• スレーブ・モードでの DMA 転送(送信と受信)• マスター・モードでの DMA 転送(送信と受信)

    コンパニオン・コードについては、http://www.analog.com/jp/のAN-1159 コンパニオン・コード zip ファイルをご覧ください。

    I2C バスの主な特長は、

    • シリアル・データ・ライン(SDA)とシリアル・クロック・ライン(SCL)の 2 本のバス・ラインのみが必要です。これらのラインは双方向であるので、マスターとスレーブ

    はトランスミッタまたはレシーバとして動作可能です。

    • I2C マスターは複数のスレーブ・デバイスと通信することができます。各スレーブ・デバイスは固有のアドレスを持

    つため、マルチスレーブ環境においても常にマスターと各

    スレーブとの間で固有の関係が成立します。

    • 調停機能を使うと、同じ I2C バス上に複数のマスターが存在できます。

    • マスターとスレーブは、最大 400 kbps で送受信できます。• 内蔵フィルタ機能により SDA ラインと SCL ラインで 50 ns

    以下のスパイクを除去し、データ・インテグリティを維持

    します。

    複数デバイスの代表的な I2C 接続を図 1 に示します。

    SCL

    SDA SDA

    SCL

    3.3V

    MASTER SLAVE 1

    SLAVE 2SDA

    SCL

    PULL-UPRESISTOR

    PULL-UPRESISTOR

    1088

    2-00

    1

    図 1.シングル・マスター・マルチ・スレーブ I2C のブロック図

    http://www.analog.com/jp/http://www.analog.com/jp/ADUC7023?doc=AN-1159.pdfhttp://www.analog.com/media/en/technical-documentation/application-notes/AN-1159.pdf

  • アプリケーション・ノート AN-1159

    Rev. A - 2/16 -

    目次 はじめに .............................................................................................. 1 改訂履歴 .............................................................................................. 2 I2C の基礎 ............................................................................................ 3 代表的な I2C タイミング図 ............................................................... 6

    Cortex-M3ベースの MicroConverter の I2Cの実装 ....................... 7 マスター送信 .................................................................................. 9 スレーブ受信 ................................................................................ 10

    マスター受信 ................................................................................ 11 スレーブ送信 ................................................................................ 12 DMA モード、マスター送信 ...................................................... 13 DMA モード、マスター受信 ...................................................... 14 DMA モード、スレーブ送受信 .................................................. 15 コンパニオン・コード ................................................................ 16

    改訂履歴

    12/13—Rev. 0 to Rev. A Changes to Figure 16 .......................................................................... 13 Changes to Figure 19 .......................................................................... 15 9/12—Revision 0: Initial Version

  • アプリケーション・ノート AN-1159

    Rev. A - 3/16 -

    I2C の基礎

    MSB

    STARTBIT

    SCL

    ACKBIT

    ACKBIT

    STOPBIT

    SLAVE ADDRESSSDA

    MSBLSB LSB

    DATA

    1 17 8 89 923 TO 6 2 TO 7

    R/W

    1088

    2-00

    2

    図 2.代表的な I2C 転送シーケンス

    I2C インターフェースの概要 I2C は、Philips Semiconductors 社(現在の NXP Semiconductors社)が開発した 2線式シリアル通信システムで、複数のマスターと複数のスレーブを 2 本の線(SCL と SDA)で接続することができます。I2C インターフェースでは、少なくとも 1 つのマスターと 1 つのスレーブが存在する必要があります。

    SCL 信号は、マスターとスレーブの間のデータ転送を制御します。転送される各データ・ビットに対して 1 個のクロック・パルスを発生します。SCL 信号は常にマスターからスレーブへ送信します。ただし、スレーブは次の送信を開始できない場合、

    このラインをロー・レベルにすることができます。これはクロ

    ック・ストレッチと呼ばれます。

    SDA 信号は、データの送信または受信に使います。SDA 入力は、SCL がハイの間安定している必要があります。SCL がハイの間に SDA ラインが変化すると、スタート条件またはストップ条件と見なされます。代表的な転送シーケンスを図 2 に示します。

    スタート条件 I2C インターフェースの代表的なデータ転送シーケンスは、スタート条件で開始されます。スタート条件は、単に SCL をハイに保ったまま SDA ラインをハイからローへ変化させます (図 3参照)。スタート条件は常にマスターが発行します。スタート (およびストップ) 条件は、SCL ラインがハイの間に SDA ラインを変化させてもよい唯一のときです。通常のデータ転送では

    (スレーブ・アドレシングも含む)、SDA ライン上のデータは、SCL ラインがハイの状態で安定している必要があります。

    SCL

    SDA

    START

    1088

    2-00

    3

    図 3. I2C のスタート条件

    ストップ条件 データ転送シーケンスは、ストップ条件で停止します。ストッ

    プ条件は、SCL がハイの間に SDA ラインがローからハイへ変化することであると定義されます (図 4 参照)。

    SCL

    SDA

    STOP

    1088

    2-00

    4

    図 4.I2C のストップ条件

    ストップ条件は常にマスターが生成します。データ・シーケン

    スが終了した場合、またはスレーブ・デバイスからマスターが

    NACK を受信した場合に、マスターはストップ条件を送信します。ストップ条件を受信すると、スレーブ・デバイスがリセッ

    トされ、スレーブ・アドレス待ちの状態に戻ります。

    ストップ条件で割込みを発生するように I2C インターフェースを設定することができます。

    スレーブ・アドレス スタート条件の後、マスターは 8 個の SCL パルスと一緒に、最上位ビット(MSB)を先頭にして SDA ラインに 1 バイトを送信します。このバイトの最初の 7 ビットは、7 ビットのスレーブ・アドレスです。この 7 ビット・アドレスがスレーブ・デバイスのアドレス (すなわち、4 つのスレーブ・アドレスのうちの 1 つ)に一致した場合にのみ、スレーブはマスターに応答します。8 番目のビットすなわち最下位ビット (LSB)は、R/W ステータス・ビットです。R/W ステータス・ビットはメッセージの方向を指定します。このビットがローの場合、マスターは

    選択したスレーブにデータを書込みます。このビットがセット

    されていると、マスターはスレーブからのデータ受信を期待し

    ます。いずれのケースもマスターがクロックを発生します。

    スレーブが正しいアドレスを受信すると、すなわちマスターか

    らの 7ビットの MSB が、I2CADR0 メモリ・マップド・レジスタ (MMR)の 7 ビットの MSB と一致すると、スレーブは有効な

    ACK を返すため SCL ラインをローにして、I2CSSTA のフラグをセットします。

    スレーブはすべての I2C スレーブ・アドレシングの操作を自動的にハードウェアで行いますが、スレーブ・アドレスを正しく

    出力するのはマスターの役割です。

  • アプリケーション・ノート AN-1159

    Rev. A - 4/16 -

    アクノリッジ(ACK/ナック(NACK) スレーブ・アドレスがマスターから送られたアドレスに一致す

    ると、スレーブは自動的にアクノリッジ(ACK)を送信します。そうでない場合は、ナック(NACK)を送信します。ACK は、9 番目のクロック・パルスのときの SDA ラインのロー・レベルとして検出されます。NACK は、9 番目のクロック・パルスのときの SDA ラインのハイ・レベルとして検出されます(図 5 参照)。

    データ転送時、ACK または NACK は常にレシーバが生成しますが、ACK に必要とされるクロック・パルスは常にマスターが生成することに注意してください。トランスミッタは ACK クロック・パルスの間、SDA ラインを解放する(ハイにする) 必要があります。有効な ACK の場合、レシーバは SDA ラインをローにする必要があります。

    受信時、ACK と NACK は各バイトの最後に、ハードウェアにより自動的に生成されます。

    マスターがスレーブ・レシーバから NACK を受信した場合 (スレーブがスレーブ・アドレスまたは送信されたデータに応答

    しない場合)、マスターはストップ条件を生成し、転送を停止

    する必要があります (データ転送のセクション参照)。

    マスター・レシーバは、スレーブから送信された最終バイトの

    後にナック (NACK) を生成して、データ・シーケンスの終わりをスレーブ・トランスミッタに通知する必要があります。ス

    レーブが NACK を受信すると、スレーブは SDA ラインを解放して、マスターがストップ条件を生成できるようにします。

    NACK を強制するように、スレーブを設定することもできます。

    データ転送 I2C 割込みサービス・ルーチン (ISR)またはポーリング方式では、スレーブはマスターから送信された R/W ビットの状態に応じて送信または受信を決定します。次にスレーブは、マスター

    から送信された各クロックでビットを送信または受信します。

    マスターとの間でスレーブがデータを送信/受信するために 9 個のクロック (データに 8 個と ACK に 1 個)を供給するのはマスターの役割です。スレーブによって有効なデータ・バイトが

    送信または受信されるごとに I2C 割込みビットがセットされます。

    ここでも、スレーブ・トランスミッタ/マスター・レシーバ・システムでは、スレーブから送信された最後のバイトの後でマス

    ターが NACK を送信して、マスターがデータ・シーケンスの終わりをスレーブへ通知する必要があることに注意してください。

    スレーブが NACK を受信すると、スレーブは SDA ラインを解放して、マスターがストップ条件を生成できるようにします。

    マスターがデータ転送をアボートする場合、またはバス上の別

    のマスターのデータ転送に割込む場合、マスターはスタート条

    件を送信し、その後にストップ条件を送信して、これを行うこ

    とができます。

    SDA FLOATS (HIGH) FOR NACK

    RECEIVER PULLS SDA LOW FOR ACK

    TRANSMITTER RELEASES SDA

    CLOCK PULSE FOR ACKNOWLEDGE

    7 8 9

    DATA OUTPUT BYRECEIVER

    DATA OUTPUT BYTRANSMITTER DATA LSB

    MASTER CLOCK

    1088

    2-00

    5

    図 5.I2C バス上のアクノリッジ(ACK)とナック(NACK)

  • アプリケーション・ノート AN-1159

    Rev. A - 5/16 -

    繰り返しスタート条件

    繰り返しスタート条件は、ストップ条件が送信されることなく

    2 つ目のスタート条件がスレーブへ送信されたときに発生します。これにより、マスターはバス制御を放棄することなく R/W ビットを変更することにより、転送方向を変更できるようにな

    ります。

    転送シーケンスの例を図 6 に示します。これは一般に、デバイスへ送られた最初のデータが読出し対象のレジスタ・アドレス

    を設定する場合に使用されます。“繰り返しスタート + スレーブ・アドレス ” が受信されると、割込みが発生します。I2CxSSTA MMR のステータス・ビットを使用することにより、これを“スタート + スレーブ・アドレス” から区別することができます。

    図 6 に示すシーケンスを使用することにより、ADuCxxx ファミリーはマスター・モードで直接 I2C 繰り返しスタート・シーケンスを発生することができます。

    クロック・ストレッチ

    I2C 通信では、マスター・デバイスがクロック速度を決定します。RS-232 とは異なり、I2C バスではマスターとスレーブが既定のボー・レートに正確に同期しなくて済むように、専用のク

    ロック信号を使用しています。

    ただし、マスターによって与えられるクロック速度で I2C スレーブが動作できないために、少し速度を下げる必要がある場合

    があります。これは、クロック・ストレッチと呼ばれるメカニ

    ズムで実行されます。

    I2C スレーブがバス速度を下げる必要がある場合、クロックをロー・レベルに保持することができます。これに対して、マス

    ターはクロック信号をハイ状態に解放した後に、クロック信号

    をリードバックして、ラインが実際にハイになるまで待つ必要

    があります。

    MSB

    STARTBIT

    SCL

    ACKBIT

    ACKBIT

    SLAVE ADDRESSSDA

    MSBLSB LSB

    DATA

    1 17 8 89 923 TO 6 2 TO 7

    R/W

    MSB

    STARTBIT

    ACKBIT

    ACKBIT

    STOPBIT

    SLAVE ADDRESS

    MSBLSB LSB

    DATA

    1 17 8 89 923 TO 6 2 TO 7

    R/W

    1088

    2-00

    6

    図 6. I2C 繰り返しスタート・シーケンス

    I2cFifoFlush(MASTER, ENABLE);

    I2cFifoFlush(MASTER, DISABLE);

    NVIC_DisableIRQ(I2CM_IRQn);

    I2cMWrCfg(0xA0); // configure to send slave address

    I2cTx(MASTER, ucStartAddress); // send slave address

    while ((I2cSta(MASTER)& I2CMSTA_TXFSTA_EMPTY) != I2CMSTA_TXFSTA_EMPTY){} {}

    // wait for the Tx FIFO to empty

    I2cMRdCfg(0xA0, ucLength , DISABLE);

    // sends out the read condition, this function sets the read bit

    NVIC_EnableIRQ(I2CM_IRQn);

  • アプリケーション・ノート AN-1159

    Rev. A - 6/16 -

    代表的な I2C タイミング図 表 1 と表 2 に、Cortex-M3 ベースの高精度アナログ・マイクロコンバータに実装されている I2C バスの代表的なタイミングを示します。各I2C バス・ラインの容量負荷 Cb は、I2C バス仕様によると最大 400 pF です。

    SCL と SDA の内部プルアップは、ソフトウェアからディスエーブルする必要があることに注意してください。

    表 1. 高速モード(400 kHz)での I2C タイミング

    Parameter Description Min Max Unit tL Clock low pulse width 1300 ns tH Clock high pulse width 600 ns tSHD Start condition hold time 600 ns tDSU Data setup time 100 ns tDHD Data hold time 0 ns tRSU Setup time for repeated start 600 ns tPSU Stop condition setup time 600 ns tBUF Bus-free time between a stop condition and a start condition 1.3 μs tR Rise time for both clock and data 20 + 0.1 Cb 300 ns tF Fall time for both clock and data 20 + 0.1 Cb 300 ns tSUP Pulse width of spike suppressed 0 50 ns

    表 2. 標準モード(100 kHz)での I2C タイミング

    Parameter Description Min Max Unit tL Clock low pulse width 4.7 µs tH Clock high pulse width 4.0 µs tSHD Start condition hold time 4.7 µs tDSU Data setup time 250 ns tDHD Data hold time 0 µs tRSU Setup time for repeated start 4.0 µs tPSU Stop condition setup time 4.0 µs tBUF Bus-free time between a stop condition and a start condition 4.7 µs tR Rise time for both clock and data 1 µs tF Fall time for both clock and data 300 ns

    MSB LSB ACK MSB

    1982 TO 7

    1

    P S S(R)

    tR

    tF

    tRSU

    tDSUtDSUtPSU

    tBUF

    tH

    tF

    tR

    tDHDtDHD

    tSHD

    tSUPtL

    tSUP

    STOPCONDITION

    STARTCONDITION

    REPEATEDSTART

    SDA (I/O)

    SCL (I)

    1088

    2-00

    7

    図 7. I2C 互換インターフェースのタイミング

  • アプリケーション・ノート AN-1159

    Rev. A - 7/16 -

    Cortex-M3 ベースの MicroConverter の I2C の実装 Cortex-M3 ベースの ADuCxxx ファミリーは、フル・ハードウェアのマスター I2C ポートとスレーブ I2C ポートを内蔵しています。

    I2C ペリフェラル・インターフェースは、合計 19 個のレジスタから構成されています(マスター用に 9 個、スレーブ用に 9 個、マスターとスレーブの共用に 1 個)。これらの一覧を表 3 に示します。

    表 3.I2C レジスタ

    Registers Master Slave Shared Receive I2CMRX I2CSRX I2CFSTA Transmit I2CMTX I2CSTX I2CFSTA Status I2CMSTA I2CSSTA Control I2CMCON I2CSCON Address/ID I2CADR0/

    I2CADR1 I2CID0/I2CID1/ I2CID2/I2CID3

    Clock I2CDIV Other I2CMRXCNT

    I2XMCRXCNT I2CALT

    すべてのレジスタとビットの説明は、デバイス・ユーザー・ガ

    イドに記載されています。

    幾つかの特定機能は、このアプリケーション・ノートで詳しく

    説明しています。

    通信速度の設定 I2CDIV は 16 ビット・レジスタで、2 つの 8 ビット値 HIGH とLOW を格納します。このレジスタ値が I2C バスの速度を次式に従って設定します。

    fI2CSCL = fPERIPH/(LOW + HIGH + 3)

    ここで、 fPERIPH は I2C ペリフェラル・クロック。 HIGH = I2CDIV[15:8]。I2C バス・クロックのハイ・レベル区間は、(HIGH + 2) ÷ I2C ペリフェラル・クロックで決定されます。LOW = I2CDIV[7:0]。I2C バス・クロックのロー・レベル区間は、(LOW + 1) ÷ I2C ペリフェラル・クロックで決定されます。

    したがって、100 kHz 動作の場合、I2C ペリフェラル・クロック = 16 MHz で、LOW = 0x4F、HIGH = 0x4E。400 kHz の場合、LOW = 0x13、HIGH = 0x12。

    ADuCM360 固有の部分 ADuCM360 では、I2C ペリフェラル・クロックは次式で与えられます。

    fPERIPH = fUCLK ÷ (CLKSYSDIV × I2CCLK)

    ここで、 UCLK はシステム・クロックであり、16 MHz。 CLKSYSDIV は、CLKSYSDIV[0] ビットの設定に応じて 1 または 2。 I2CCD はクロック分周値であり、CLKCON1[8:6] ビットにより 1 ~ 7 の値に設定されます。

    I2C ペリフェラル・クロックはデフォルトでディスエーブルされており、CLKDIS[2]で最初にイネーブルする必要があります。これは、デバイスの消費電力を最適化するためのものです。詳

    細については、AN-1111 アプリケーション・ノート「Options for Minimizing Power Consumption When Using the ADuCM360/ADuCM361」を参照してください。

    次のフローチャートでは、I2C ペリフェラル・クロックがイネーブルされ、設定済みであると想定しています。

    FIFO の使用 I2C ハードウェア・インターフェースは、I2C 機能あたり 4 個の2 バイト FIFO を内蔵しています。

    • マスター受信 • マスター送信 • スレーブ受信 • スレーブ送信

    これらの各々は、受信/送信するバイトの残りのビットを保持するシフトレジスタを内蔵しています。

    送信 FIFO データを送信するときは、I2CSTX/I2CMTX レジスタへロードする必要があります。

    OUT

    I2CSTX

    BYTE 1 BYTE 0

    1088

    2-00

    8

    図 8. 送信 FIFO

    Tx レジスタへのバイト書込みは、 FIFO のバイト 1 への書込みと等価です (図 8 参照)。

    • バイト 0 がエンプティの場合、バイト 1 内のバイトが自動的にバイト 0 へプッシュされます。これはユーザーから見えません。I2CFSTA レジスタは、FIFO に 1 バイトが存在するとき表示します。

    • バイト 0 が既にフルの場合、バイトはバイト 1 に留まります。Tx に再度書込みを行うと、バイト 1 が上書きされます。

    バイト 0 のシフトレジスタ (OUT)への移動もユーザーから見えませんが、スレーブ側で有効な通信が必要です。 FIFO はフルでない場合、 TXREQ ビット( I2CMSTA[2]/ I2CSSTA[2])をセットします。これらのビットがイネーブルされていると、割込みが発生します。

    I2CFSTA レジスタの送信 FIFO フラッシュ・ビットをセットすると、FIFO がエンプティになります。

    受信 FIFO データを受信するときは、データはバイト 0 に到着します。

    • バイト 1 がエンプティの場合、バイト 0 が自動的にバイト 1 へシフトされます。

    • バイト 1 が既にフルの場合、I2CSRX が読出されるまで(バイト 1 の読出しと等価 )、バイト 0 はそこに留まります。

    • FIFO がフルのとき他のデータが到着すると、スレーブはそのデータに対して NACK を送信し、I2CSSTA[4](マスターの場合は I2CMSTA[9] )をセットします。

    FIFO がエンプティでない場合、RXREQ ビット(I2CMSTA[3]/ I2CSSTA[3])をセットします。これらのビットがイネーブルされていると、割込みが発生します。

    http://www.analog..com/jp/ADUC?doc=AN-1159.pdfhttp://www.analog.com/jp/ADucm360?doc=AN-1159.pdfhttp://www.analog.com/AN-1111?doc=AN-1159.pdfhttp://www.analog.com/AN-1111?doc=AN-1159.pdfhttp://www.analog.com/AN-1111?doc=AN-1159.pdf

  • アプリケーション・ノート AN-1159

    Rev. A - 8/16 -

    IN

    I2CSRX

    BYTE 1 BYTE 0

    1088

    2-00

    9

    図 9. 受信 FIFO

    DMA チャンネルの使用 DMA コントローラの次の 4 チャンネルが I2C インターフェースに割当てられています。

    • マスター受信 • マスター送信 • スレーブ受信 • スレーブ送信

    送信の場合は送信 FIFO に空きがあるとき、受信の場合は受信 FIFO にバイトが存在するとき、I2C ペリフェラルは DMA 要求を発生します。

    メモリからすべてのバイトが送信 FIFO へ転送されたとき、または DMA チャンネルに割り当てられたメモリがフルのとき、 DMA 転送が終了して、割込みが発生します。

    I2C ステータス・ビットの TXREQ と RXREQ は DMA モードでセットされた場合、割込みは生成しませんが、トランザクショ

    ン終了を表す TCOMP ビットは割込みを発生させることができるので、 DMA モードで使用することができます。

    I2C 低レベル関数 コード開発を簡単化するため、低レベル関数のセットが I2cLibに用意されています。これらの関数を表 4 に示します。これらは、CD/DVD のドキュメント・フォルダで詳しく説明しています。

    各シナリオのフローチャートは、これらの低レベル関数を使用

    しています。

    表 4.I2C 低レベル関数

    Master Configuration Description int I2cMCfg(int iDMACfg, int iIntSources, int iConfig); Configure I2C master int I2cBaud(int iHighPeriod, int iLowPeriod); Configures I2C baud rate int I2cMWrCfg(unsigned int uiDevAddr); Configures slave address int I2cMRdCfg(unsigned int uiDevAddr, int iNumBytes, int iExt); Configures slave address, number of bytes to read int I2cMRdCnt(void); Read the counter of bytes received by the master Slave Configuration Description int I2cSCfg(int iDMACfg, int iIntSources, int iConfig); Configures I2C slave int I2cSIDCfg(int iSlaveID0, int iSlaveID1, int iSlaveID2, int iSlaveID3); Configure the slave addresses int I2cSGCallCfg(int iHWGCallAddr); Setup the hardware general call Common Functions Description int I2cRx(int iMode); Reads the Rx register of the slave or master int I2cTx(int iMode, int iTx); Writes in the Tx register of the slave or master int I2cStr(int iMode, int iStretch); Configures clock stretching int I2cFifoFlush(int iMode, int iFlush); Flush slave or master Tx FIFO int I2cSta(int iMode); Reads the status of the slave or master

  • アプリケーション・ノート AN-1159

    Rev. A - 9/16 -

    マスター送信 バイトを送信するには、データを先に送信 FIFO へロードします。スレーブのアドレスは、I2CADR0 レジスタで指定します。データ書込みの場合は、アドレス・レジスタの書込み(W)ビットをゼロに設定します。I2CADR0 レジスタに書込みを行うと、スタート条件が自動的に発生します。

    送信 FIFO がエンプティであるか、またはフルではなく、かつI2CMSTA のビット 2 がセットされた場合、送信されたバイトの先頭クロックで I2C 割込みが発生し、マスターがバイトを送信したことを示します。これにより、ユーザーはバイトを FIFOに追加することができます。 FIFO のステータスは、I2CMSTA[1:0]または I2CFSTA レジスタでチェックすることができます。

    転送を開始するとき FIFO に 1 バイトしか存在しない場合、最初の I2C 割込みは送信されたアドレスの先頭クロックで発生します。FIFO に 2 バイト存在する場合は、送信された最初のバイトの先頭クロックで割込みが発生します。

    送信 FIFO のフルが維持されない場合、送信割込みは各クロック・エッジで発生します。最後のバイトの最終ビットが送信さ

    れた後に、TXUR ビットがセットされます。TXUR がセットさ

    れてから½ クロック・サイクル以内に、すなわちスレーブ・アクノリッジ・ビットの間にデータが FIFO にロードされないと、マスターは自動的に送信を終了します。

    ストップ条件は、最終バイト送信の 5.1 µs 後に自動的に発生します。

    I2CMCON MMR の TXREQ 割込みイネーブル・ビット (I2CMCON[5])をクリアする必要があります。そうしないと、ストップ条件が発生するまで、送信割込みが連続して発生しま

    す。

    割込みがイネーブルされている場合 (I2CMCON[8])、ストップ条件が発生すると、TCOMP ビットも割込みを発生します。これにより、例えば低消費電力モードになる前に、I2C ペリフェラルを安全にターンオフすることができます。

    スレーブからのデータ要求にマスターが応答する例を図 10 に示します。

    //ENABLE I2C on GPIODioCfg(pADI_GPx,0xXXXX);DioPul(pADI_GPx,0xXX);

    //COPY MASTER STATUS REGISTERuiStatus = I2cSta(MASTER);

    //DISABLE TX INTERRUPTI2cMCfg(0,I2CMCON_IENTX_DIS,I2CMCON_MAS);

    //RETURN FROM HANDLER

    //SET UP I2C MASTER MODE, 100kHzI2cMCfg(0,I2CMCON_IENTX,I2CMCON_MAS);I2cBaud(0xXX,0xXX);

    //CHECK FOR TX INTERRUPTif((uiStatus & I2CMSTA_TXREQ) == I2CMSTA_TXREQ)

    //PLACE DATA IN TX FIFOI2cTx(MASTER,0xXX);

    //ENABLE MASTER I2C INTERRUPTNVIC_EnableIRQ(I2CM_IRQn);

    //PLACE FIRST TWO BYTES IN TX FIFOI2cTx(MASTER,0xXX);

    //SET UP DEVICE ADDRESSI2cMWrCfg(0xA0);

    MOREDATA TO

    TRANSMIT?Y

    N

    I2C MASTER INITIALIZATION I2C MASTER INTERRUPT HANDLER

    1088

    2-01

    0

    図 10.マスター送信のフローチャート

  • アプリケーション・ノート AN-1159

    Rev. A - 10/16 -

    スレーブ受信 I2C スレーブがデータを受信するとき、各バイトの 8 番目のクロックが受信された後で割込みが発生します。3 番目のバイトが受信される前に FIFO が読出されていない場合、RXOF、I2CSSTA[4]がセットされて、受信 FIFO のオーバーフローを表示します。このとき、FIFO を読出すことができます。9 番目のクロックの立上がりエッジの前に FIFO が読出されない場合、スレーブ・インターフェースは自動的に NACK を出力します。

    FIFO からデータを読出すときは、I2CRX レジスタを使います。RXREQ、I2CSSTA[3]は、スレーブがデータを受信したことを表示します。I2CSRX を読出すだけでこのビットはクリアされま

    す。割込みがイネーブルされていて RXREQ がセットされると、I2C 割込みが連続して発生します。

    マスターは最後のデータを送信した後、自動的にストップ条件

    を送信します。スレーブはストップ条件を検出し I2CSSTA[10]をセットします。IENSTOP、I2CSCON[8]がセットされている場合、このビットは割込みを発生することができます。

    スレーブがマスターからバイトを受信するフローチャートを図

    11 に示します。図 12 に、ステータス・ビットがセットされるタイミングと割込みが発生するタイミングを示します。

    //ENABLE I2C on GPIODioCfg(pADI_GPx,0xXXXX);DioPul(pADI_GPx,0xXX);

    //RETURN FROM HANDLER

    //COPY SLAVE STATUS REGISTERuiStatus = I2cSta(SLAVE);

    //SET UP I2C SLAVE MODEI2cSCfg(0,I2CSCON_IENRX,I2CSCON_SLV);I2cSIDCfg(0xA0,0,0,0);

    //WAIT FOR MASTER

    //CHECK FOR RX INTERRUPTif((uiStatus&I2CSSTA_RXREQ)==I2CSSTA_RXREQ)

    //READ DATA FROM FIFOucDat[i] = I2cRx(SLAVE);

    //ENABLE SLAVE I2C INTERRUPTNVIC_EnableIRQ(I2CS_IRQn);

    I2C SLAVE INITIALIZATION I2C SLAVE INTERRUPT HANDLER

    1088

    2-0 1

    1

    図 11.スレーブ受信のフローチャート

    STA

    RT

    DEVICEADDRESS W

    RIT

    E

    WORD ADDRESS (n) DATA (n)

    SDA LINE

    MS

    B

    LSB

    R/W

    AC

    K

    LSB

    AC

    K

    MS

    B

    AC

    K

    DATA (n + 1)

    AC

    K

    DATA (n + x) STO

    P

    AC

    K

    START BITSET

    RECEIVEINTERRUPT

    RECEIVEINTERRUPT

    RECEIVEINTERRUPT

    RECEIVEINTERRUPT

    STOP BITSET

    1088

    2-01

    2

    図 12.スレーブ受信の例

  • アプリケーション・ノート AN-1159

    Rev. A - 11/16 -

    マスター受信 マスター・モードでは、スレーブからのデータ読出しに同様の

    方法を使います。まず、I2CMRXCNT レジスタを使って読出すバイト数を設定します。これは、スレーブから読出すバイト数 + 1 を示します。これは 8 ビット・レジスタであるため、一度に256 バイトを受信することができます。大きな転送にはEXTEND オ プ シ ョ ン を 使 用 す る こ と が で き ま す 。I2CMCRXCNT には、マスターが受信した現在のバイト数が表示されます。

    データの受信を開始するためには、 I2CADR0 レジスタの読出し(R)ビットをセットします。これにより、I2CADR0 レジスタで設定したアドレスと R/W ビットの条件の下で発生したスタート条件から転送が開始されます。各バイトが受信された後

    (9 番目のクロックすなわち ACK または NACK の後)、割込みが発生します。RXREQ、I2CMSTA[3]がセットされて、1 バイ

    トが受信されたことを示します。I2CMRX を読出すだけでこのビットはクリアされます。

    マスターがこれ以上データを受信する必要がない場合、受信し

    た最後のバイトに対して NACK を自動的に発生します。これにより、スレーブにバイト送信の停止を通知して、マスターがス

    トップ条件を発生できるようにします。

    受信されたデータが時間内に読出されず、FIFO がフルになると、マスターは受信された余分なデータに対して NACK を送信します。

    マスターがスレーブからバイトを受信するフローチャートを図

    13 に示します。

    //ENABLE I2C on GPIOsDioCfg(pADI_GPx,0xXXXX);DioPul(pADI_GPx,0xXX);

    //COPY MASTER STATUS REGISTERuiStatus = I2cSta(MASTER);

    //SET UP I2C MASTER MODE, 100kHzI2cMCfg(0,I2CMCON_IENRX,I2CMCON_MAS);I2cBaud(0x4E,0x4F);

    //CHECK FOR RX INTERRUPTif((uiStatus & I2CMSTA_RXREQ)==I2CMSTA_RXREQ)

    //READ DATA FROM FIFOdat[i] = I2cRx(MASTER);

    //ENABLE MASTER I2C INTERRUPTNVIC_EnableIRQ(I2CM_IRQn);

    //SET UP SLAVE ADDRESS andNUMBER OF BYTES TO BE RECEIVEDI2cMRdCfg(0xA0,nbByte,DISABLE);

    //RETURN FROM HANDLER

    //WAIT FOR FIRST BYTE TO BE RECEIVED

    I2C MASTER INITIALIZATION I2C MASTER INTERRUPT HANDLER

    1088

    2-01

    3

    図 13.マスター受信のフローチャート

  • アプリケーション・ノート AN-1159

    Rev. A - 12/16 -

    スレーブ送信 スレーブはデータ送信が要求されるたびに割込みを発生します。

    最初はアドレスの ACK 後に発生、すなわち FIFO のバイト 0 の送信中に発生します。データはスレーブ送信 FIFO に予めロードされている必要があります。そうしないと、マスターからの

    最初の読出し要求で NACK が発生します。FIFO に予め 2 セットのデータがロードされている場合、アドレスの ACK の後に 1つの割込みが発生し、その後送信された各バイトの ACK の後に発生します。FIFO に予めロードされているのが 1 セットのデータのみである場合、アドレスの ACK の後に 2 つの割込みが発生し、FIFO は最初のデータを送信した後にエンプティになります。

    バイトが送信された後、マスターがデータの要求を続ける限り

    割込みが発生します。

    送信 FIFO に空きがある場合、またはバイトがマスターへ送信されるごとに、TXREQ、I2CSSTA[2]がセットされます。送信するデータがなくなった場合、送信割込みをディスエーブルする

    ことが可能で、ストップ条件を検出したとき (I2CSSTA[10])再度イネーブルすることができます。IENSTOP、I2CSCON[8]がセットされていると、STOP 検出は割込みを発生することができます。

    スレーブがマスターからのバイト要求に応答するフローチャー

    トの例を図 14 に示します。図 15 に、ステータス・ビットがセットされるタイミングと割込みが発生するタイミングを示しま

    す。

    //ENABLE I2C on GPIOsDioCfg(pADI_GPx,0xXXX);DioPul(pADI_GPx,0xXX);

    //SET UP I2C MASTER MODEI2cSCfg(0,I2CSCON_IENTX| I2CSCON_STOP,I2CSCON_SLV);I2cSIDCfg(0xA0,0,0,0);

    //ENABLE SLAVE I2C INTERRUPTNVIC_EnableIRQ(I2CS_IRQn);

    //PLACE 1 OR 2 BYTES IN TX FIFOI2cTx(SLAVE,0xXX);

    //WAIT FOR MASTER

    //PLACE DATA IN TX FIFOI2cTx(SLAVE,0xXX);MOREDATA? Y

    N

    I2C SLAVE INITIALIZATION

    //COPY SLAVE STATUS REGISTERuiStatus = I2cSta(SLAVE);

    //CHECK FOR STOP INTERRUPTif((uiStatus & I2CSSTA_STOP)==I2CSSTA_STOP)

    //ENABLE TX INTERRUPTI2cSCfg(0,I2CSCON_IENTX,I2CSCON_SLV);

    //PLACE 1 OR 2 BYTES IN TX FIFOI2cTx(SLAVE,0xXX);

    //RETURN FROM HANDLER

    //CHECK FOR TX INTERRUPTif((uiStatus & I2CSSTA_TXREQ==I2CSSTA_TXREQ)

    //DISABLE TX INTERRUPTI2cSCfg(0,I2CSCON_IENTX_DIS,I2CSCON_SLV);

    I2C SLAVE INTERRUPT HANDLER

    1088

    2-01

    4

    図 14.スレーブ送信のフローチャート

    REA

    D

    DEVICEADDRESS

    SDA LINE

    AC

    K

    NO

    AC

    K

    AC

    K

    AC

    K

    AC

    K

    STO

    P

    R/W DATA (n + 2) DATA (n + x)DATA (n + 1)DATA (n)

    TRANSMITINTERRUPT(S)

    TRANSMITINTERRUPT

    TRANSMITINTERRUPT

    TRANSMITINTERRUPT

    START BIT SET STOP BIT SET 1088

    2-01

    5

    図 15.スレーブ送信の例

  • アプリケーション・ノート AN-1159

    Rev. A - 13/16 -

    DMA モード、マスター送信 I2C 転送は、マスターからのスレーブ・アドレスの送信で開始されます。I2CMCON MMR の TXDMA をセットして、DMA 送信モードが設定されると、I2C ペリフェラルがすべて設定されたとき、すなわちボー・レート、スレーブ・アドレス、DMA 送信要求が設定され、さらに DMA コントローラが設定されてイネーブルされたとき、転送が開始されます。転送の開始前に、I2C マスター送信 DMA チャンネルも NVIC でイネーブルする必要があります。

    メモリから FIFO へすべてのバイトが転送されたとき DMA 転送は完了します。これは、最後の 2 バイトが FIFO に残り、終わり

    から 3 番目のバイトの送信中を意味します(図 17 参照)。ここで、DMA コントローラの中で、DMA チャンネルが自動的にディスエーブルされますが、FIFO がフルでない場合、I2C ペリフェラルは DMA 要求を DMA コントローラに送信して割込みを発生させます。このため、DMA コントローラで I2C 要求をマスクして重複割込みを避ける必要があります(DMARMSKSET)。

    新しい転送を開始するときは、DMA コントローラを再設定/再イネーブルする必要があります。

    I2C マスター送信 DMA 転送のフローチャートを図 16 に示します。

    //ENABLE I2C on GPIODioPul(pADI_GPx,0xXX);DioCfg(pADI_GPx,0xXXXX);

    //SET UP DMA DESCRIPTORS 6pADI_DMA->DMAPDBPTR = (unsignedint)&dmaChanDesc;

    //SET UP I2C MASTER IN TRANSMIT MODE FOR DMA TRANSFERI2cMCfg(I2CMCON_TXDMA,0,I2CMCON_MAS);I2cBaud(0x4E,0x4F);I2cMWrCfg(0xA0);

    //ENABLE MASTER I2C DMA INTERRUPTNVIC_EnableIRQ(DMA_I2CM_TX_IRQn);

    //WAIT FOR COMPLETION OF TRANSFER

    //CONFIGURE DMA CONTROLLERpADI_DMA->DMAENSET = DMAENSET_I2CMTX;pADI_DMA->DMACFG = DMACFG_ENABLE_EN;

    //INITIATE NEW TRANSFERpADI_DMA->DMARMSKCLR| = DMARMSKCLR_I2CMTX;I2cMWrCfg(0xA0);

    I2C MASTER INITIALIZATION

    //MASK I2C MASTER DMA TRANSMIT REQUESTpADI_DMA->DMARMSKSET| = DMARMSKSET_I2CMTX;

    //REFRESH DMA DESCRIPTOR 6I2CMTxDmaDesc->ctrlCfg.n_minus_1 = DMA_TX_COUNT-1;I2CMTxDmaDesc->ctrlCfg.cycle_ctrl = 1;

    //ENABLE DMA CHANNEL FOR NEXT TRANSFERpADI_DMA->DMAENSET| = DMAENSET_I2CMTX;

    //RETURN FROM HANDLER

    I2C MASTER TRANSMIT DMA INTERRUPT HANDLER

    1088

    2-01

    6

    図 16.マスター送信 DMA 転送のフローチャート

    SDA LINE

    AC

    K

    NO

    AC

    K

    AC

    K

    AC

    K

    AC

    K

    STO

    P

    DATA (n – 1) DATA (n)DATA (n – 2)DATA (n – 3)

    I2C MASTER TRANSMITDMA INTERRUPT 10

    882-

    017

    図 17.マスター送信 DMA 割込み

  • アプリケーション・ノート AN-1159

    Rev. A - 14/16 -

    DMA モード、マスター受信 I2CMCON MMR の RXDMA をセットすると、I2C ペリフェラルで DMA 転送がイネーブルされます。DMA コントローラが設定されイネーブルされ、かつ I2C ペリフェラルがフルに設定されたとき、すなわちボー・レート、スレーブ・アドレス、DMA 送信要求が設定されたとき、転送が開始されます。転送の開始前

    に、I2C マスター送信 DMA チャンネルも NVIC でイネーブルする必要があります。

    DMA コントローラで予定したすべてのバイトが受信されたとき、DMA 転送が完了します。I2C マスター I2CMRXCNT MMR も同じバイト数に設定される必要があります。

    DMA 転送が完了すると、 DMA コントローラで対応するチャンネルが自動的にディスエーブルされます。新しい転送を開始す

    るには、DMA コントローラを再設定/再イネーブルする必要があります。I2CADR0 MMR にスレーブ・アドレスを再度書込むと、新しい転送が開始されます。

    マスターがスレーブからデータを受信する DMA 転送のフローチャートを図 18 に示します。

    //ENABLE I2C on GPIODioCfg(pADI_GPx,0xXXXX);DioPul(pADI_GPx,0xXX);

    //SET UP DMA DESCRIPTORS 7pADI_DMA->DMAPDBPTR = (unsignedint)&dmaChanDesc;

    //SET UP I2C MASTER IN RECEIVE MODE FOR DMA TRANSFERI2cMCfg(I2CMCON_RXDMA,0,I2CMCON_MAS);I2cBaud(0x4E,0x4F);I2cMRdCfg(0xA0,DMA_RX_COUNT,0);

    //ENABLE MASTER I2C DMA INTERRUPTNVIC_EnableIRQ(DMA_I2CM_RX_IRQn);

    //WAIT FOR COMPLETION OF TRANSFER

    //CONFIGURE DMA CONTROLLERpADI_DMA->DMAENSET = DMAENSET_I2CMRX;pADI_DMA->DMACFG = DMACFG_ENABLE_EN;

    //INITIATE NEW TRANSFERI2cMRdCfg(0xA0,DMA_RX_COUNT,0);

    I2C MASTER INITIALIZATION

    //REFRESH DMA DESCRIPTOR 7I2CMRxDmaDesc->ctrlCfg.n_minus_1 = DMA_RX_COUNT-1;I2CMRxDmaDesc->ctrlCfg.cycle_ctrl = 1;

    //ENABLE DMA CHANNEL FOR NEXT TRANSFERpADI_DMA->DMAENSET| = DMAENSET_I2CMRX;

    //RETURN FROM HANDLER

    I2C MASTER RECEIVE DMA INTERRUPT HANDLER

    1088

    2-01

    8

    図 18.マスター受信 DMA 転送のフローチャート

  • アプリケーション・ノート AN-1159

    Rev. A - 15/16 -

    DMA モード、スレーブ送受信 I2CMCON MMR の TXDMA および/または RXDMA をセットすると、I2C ペリフェラルで DMA 転送が可能になります。I2C ペリフェラルをスレーブ・モードに設定し、I2C 割込みをディスエーブルします。NVIC と DMA コントローラを設定します。正しい I2C アドレスを受信すると、DMA 転送が開始され、データ・バイトのみがメモリへ転送されます。DMA 転送が完了すると、 DMA コントローラで対応するチャンネルが自動的にディスエー

    ブルされます。新しい転送を開始するときは、DMA コントローラのみを再設定する必要があります。図 19 に、スレーブが送信および受信する DMA 転送のフローチャートを示します。

    送信モードでの DMA 転送は、最終バイトから 3 番目の送信中に終了することに注意してください。これはマスター送信の場

    合と同様です。

    //ENABLE I2C on GPIODioCfg(pADI_GPx,0xXXXX);DioPul(pADI_GPx,0xXX);

    //SET UP DMA DESCRIPTORS 4 AND 5pADI_DMA->DMAPDBPTR = (unsignedint)&dmaChanDesc;

    //SET UP I2C SLAVE MODE FOR DMA TRANSFERI2cSCfg(I2CSCON_RXDMA|I2CSCON_TXDMA,0,I2CSCON_SLV);I2cSIDCfg(0xA0,0,0,0);

    //ENABLE SLAVE I2C DMA INTERRUPTNVIC_enableIRQ(DMA_I2CS_Tx_IRQn);NVIC_enableIRQ(DMA_I2CS_Rx_IRQn)

    //WAIT FOR MASTER

    //CONFIGURE DMA CONTROLLERpADI_DMA->DMAENSET = DMAENSET_I2CSRX|DMAENSET_I2CSTX;pADI_DMA->DMACFG = DMACFG_ENABLE_EN;

    I2C SLAVE INITIALIZATION

    //REFRESH DMA DESCRIPTOR 5I2CSRxDmaDesc->ctrlCfg.n_minus_1 = DMA_RX_COUNT-1;I2CSRxDm aDesc->ctrlCfg.cycle_ctrl = 1;

    //ENABLE DMA CHANNEL FOR NEXT TRANSFERpADI_DMA->DMAENSET| = DMAENSET_I2CSRX;

    //RETURN FROM HANDLER

    I2C SLAVE DMA INTERRUPT HANDLER(S)—EXAMPLE OF RX DMA

    1088

    2-01

    9

    図 19.スレーブ DMA 転送のフローチャート

  • アプリケーション・ノート AN-1159

    Rev. A - 16/16 -

    コンパニオン・コード コンパニオン・コードのリストと説明を表 5 に示します。

    表 5.コンパニオン・コード

    Mode/Flowchart Code Example/Tools Master Transmit I2Cmaster.c Slave Receive I2Cslave.c Master Receive I2Cmaster.c Slave Transmit I2Cslave.c DMA Mode, Master Transmit I2CmasterDMA.c DMA Mode, Master Receive I2CmasterDMA.c DMA Mode, Slave Receive and Transmit I2CslaveDMA.c I2C は、Philips Semiconductors 社(現在の NXP Semiconductors 社)が制定した通信プロトコルです。

    ©2015 Analog Devices, Inc. All rights reserved. 商標および登録商標は、それぞれの所有者の財産です。

    はじめに改訂履歴I2Cの基礎I2Cインターフェースの概要スタート条件ストップ条件スレーブ・アドレスアクノリッジ(ACK/ナック(NACK)データ転送繰り返しスタート条件クロック・ストレッチ

    代表的なI2C タイミング図Cortex-M3ベースのMicroConverterのI2Cの実装通信速度の設定ADuCM360固有の部分

    FIFOの使用送信 FIFO受信 FIFODMA チャンネルの使用I2C 低レベル関数

    マスター送信スレーブ受信マスター受信スレーブ送信DMA モード、マスター送信DMA モード、マスター受信DMA モード、スレーブ送受信コンパニオン・コード