20. I2C コントローラ 11? 2012? cv_54020-1.2 cv_54020-1.2 I2C コントローラは、ボード上の集積回路との間の通信リンクを提供しています。温 度センサ、および電圧レベル変換などのようなアプリケーションから、EEPROM、A/D と D/A コンバータ、コーデック、および多くのマイクロプロセッサの種類に使用さ れ、シリアル・データ・ライン(SDA)とシリアル・クロック(SCL)のシンプルな 2 線式のバスで構成されています。† ハード・プロセッサ・システム(HPS)は、I2C バスとシリアルに通信するため、シ ステム・ソフトウェアをイネーブルするための 4 つの I2C コントローラを提供してい ます。各 I2C コントローラは、マスタ・モードまたはスレーブ・モードで動作でき て、100 キロビット / 秒(Kbps)までの標準モード、または最大 400 Kbps までの高速 モードをサポートしています。これらの I2C コントローラは、Synopsys® DesignWare® APB I2C(DW_apb_i2c)コントローラのインスタンスです。 1 各 I2C コントローラは、マスタ・モードまたはスレーブ・モードで動作するようにプ ログラムする必要があります。マスタとスレーブが同時に動作することはサポート されていません。† I2C コントローラの機能 I2C コントローラは、次の機能があります。 ■ 400 Kbps までの最大クロック速度です。 ■ 次の I2C の動作のいずれかです。 ■ I2C システム内のマスタであり、マスタとしてプログラムされます。† ■ I2C システム内のスレーブであり、スレーブとしてプログラムされます。† ■ 7 ビットまたは 10 ビットのアドレッシングです。† ■ 7 ビットおよび 10 ビットのアドレッシング・モードの両方で、リードおよびライ トの組み合わせた形式のトランザクションの混合です。† ■ バルク送信モードです。† ■ 送信および受信のバッファです。† ■ すべてのバス速度で待っているビットとバイトを処理します。† ■ DMA ハンドシェーキング・インタフェースです。† © 2012? Altera Corporation. All rights reserved. ALTERA, ARRIA, CYCLONE, HARDCOPY, MAX, MEGACORE, NIOS, QUARTUS and STRATIX words and logos are trademarks of Altera Corporation and registered in the U.S. Patent and Trademark Office and in other countries. All other words and logos identified as trademarks or service marks are the property of their respective holders as described at www.altera.com/common/legal.html. Altera warrants performance of its semiconductor products to current specifications in accordance with Altera's standard warranty, but reserves the right to make changes to any products and services at any time without notice. Altera assumes no responsibility or liability arising out of the application or use of any information, product, or service described herein except as expressly agreed to in writing by Altera. Altera customers are advised to obtain the latest version of device specifications before relying on any published information and before placing orders for products or services. Portions © 2011 Synopsys, Inc. Used with permission. All rights reserved. Synopsys & DesignWare are registered trademarks of Synopsys, Inc. All documentation is provided "as is" and without any warranty. Synopsys expressly disclaims any and all warranties, express, implied, or otherwise, including the implied warranties of merchantability, fitness for a particular purpose, and non-infringement, and any warranties arising out of a course of dealing or usage of trade. ISO 9001:2008 Registered †Paragraphs marked with the dagger (†) symbol are Synopsys Proprietary. Used with permission. Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Subscribe 第 20 章 : I2C コントローラ I2C コントローラのブロック図およびシステム統合 20–2 I2C コントローラのブロック図およびシステム統合 I2C コントローラは、スレーブ・インタフェース、I2C インタフェース、およびそれ ら 2 つのインタフェース間でデータをバッファリングするための FIFO ロジックから 構成されます。† ホスト・プロセッサは、32 ビットのスレーブ・インタフェースを介して I2C コント ローラに関するデータ、制御、およびステータスの情報にアクセスします。図 20–1 に、I2C コントローラのブロック図を示します。 図 20‒1. I2C コントローラのブロック図 I2C Controller Tx & Rx FIFO MPU Interrupt Controller IRQ I2 C Interface (to I/O Pins) Tx & Rx Shift Control Rx Filter DMA Controller DMA Interface Clock Manager Register Block Reset Manager Slave Interface L4 Peripheral Bus I2C コントローラは、以下のモジュールとインタフェースで構成されています。 ■ マスタがデータを直接読み出しまたは書き込みをするコントロールおよびステー タス・レジスタ(CSR)および DMA をアクセスすることができ、CSR のアクセス と DMA 転送のスレーブ・インタフェースです。 ■ ステータス・レベルと一緒に、Rx FIFO と Tx FIFO バッファのレジスタ・バンクとコ ントローラを保持する送信データおよび受信データ用 2 つの FIFO バッファです。 ■ パラレル - シリアルおよびシリアル - パラレル変換するためのシフト・ロジック です。 ■ Rx シフト – デザインにデータを受信し、バイト形式でそれを抽出します。 ■ Txシフト – I2Cバス上の転送のためにCPUによって供給されたデータを提示しま す。 Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–3 ■ I2C プロトコルの実装を担当するコントロール・ロジックです。 ■ CPU を介さずにデータ転送を自動化するために、DMA コントローラにハンド シェーキング信号を生成する DMA インタフェースです。† ■ 実際の割り込みと割り込みフラグを生成する割り込みコントローラで、それらを 設定したりクリアしたりできます。† ■ バス内の開始条件と停止条件(例えば、開始、停止、およびアービトレーショ ン・ロスト)などのイベントを検出するための受信フィルタです。† I2C コントローラの機能の説明 この項では、I2C コントローラの機能動作を説明します。 機能の使用 I2C コントローラは、標準モード(データ・レートが 0 ~ 100 Kbps)または高速モー ド(データ・レートが 400 Kbps 以下)で動作することができます。さらに、高速 モード・デバイスでは下位互換性があります。インスタンスの場合、高速モード・ デバイスは、0 ~ 100 Kbps の I2C バス・システム内の標準モード・デバイスと通信す ることができます。ただし、標準モード・デバイスでは、上位互換性はなく、それ らはより高い転送速度に従うことができないため、予期不可能な状態が発生します。 したがって、高速モード I2C バス・システムに組み込まれるべきではありません。 ユーザーは、どの I2C コントローラも I2C バスに取り付けることができ、すべてのデ バイス間と情報を送受信して、任意のマスタとやりとりすることができます。バス 上に少なくとも 1 つのマスタ(マイクロコントローラや DSP など)が必要で、複数 のマスタの場合もあり、所有権の調停が必要になります。複数のマスタおよびアー ビトレーションについては、この章の後半で説明されています。 2012 年 11 月 Altera Corporation Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–4 動作 ユーザーは、ソフトウェアを介してどちらかのモードにするために、I2C コントロー ラを制御することができます。 ■ 他の I2C スレーブとの通信する I2C マスタのみ;または ■ 1 つ以上の I2C マスタとの通信する I2C スレーブのみ。 マスタはクロックを生成してデータ転送を制御します。スレーブは、マスタとの間 での送信または受信のうちのいずれかを行います。データの確認はデータを受信し たデバイスによって送信され、マスタまたはスレーブのどちらか一方です。前述し たように、I2C プロトコルは、複数のマスタが I2C バス上に存在することを可能にし、 バス権を決定するために、アービトレーション手順を使用します。† 各スレーブには、システム設計者によって決定される固有のアドレスがあります。 マスタがスレーブと通信する場合には、マスタがデータを送信するかスレーブから データを受信するか決定するスレーブのアドレスとコントロール・ビット(R/W)を 続いて、マスタは START/RESTART 条件を送信します 。次に、スレーブがアドレスの 後に応答(ACK)パルスを送信します。† マスタ(マスタ・トランスミッタ)がスレーブ(スレーブ・レシーバ)に書き込む 場合、レシーバは、1 バイトのデータを受信します。マスタが STOP 条件で送信を終 了するまで、このトランザクションは続行されます。マスタがスレーブ(マスタ・ レシーバ)から読み出す場合、スレーブ(スレーブ・トランスミッタ)は 1 バイト のデータをマスタに送信し、次に、マスタは ACK パルスを使用してトランザクショ ンを通知します。このトランザクションは、最終バイトの受信後のトランザクショ ンの未確認(NACK)によってマスタが送信を終了するまで継続し、その後、マスタ は RESTART 条件を発行した後に STOP 条件またはアドレスを他のスレーブに発行し ます。† 図 20–2 に、I2C バス上のデータ転送の動作を示します。 図 20‒2. I2C バス上のデータ転送 ACK from Receiver SCL LSB MSB SDA S or R Start or Restart Condition 1 2 7 8 P or R ACK from Slave 9 Byte Complete Interrupt within Slave 1 2 3-8 9 SCL Held Low while Servicing Interrupts R or P Stop & Restart Condition I2C コントローラは、同期シリアル・インタフェースです。SDA ラインは双方向信号 であり、STOP、START、および RESTART 条件を除いて、SCL ラインが Low の間のみ 変更します。出力ドライバは、バス上でワイヤ AND 関数を実行するためのオープ ン・ドレインまたはオープン・コレクタです。バス上のデバイスの最大数は、400 pF の最大容量の仕様のみによって制限されます。データはバイト・パッケージで送信 されます。† Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–5 START および STOP の生成 マスタとして動作している場合、送信 FIFO にデータを格納すると、I2C コントローラ が I2C バス上で START 条件を生成するようになります。空への送信 FIFO を許可する と、I2C コントローラは I2C バス上で STOP 条件を生成します。† スレーブとして動作しているときは、I2C コントローラは、プロトコルに従って、 START および STOP 条件を生成しません。しかし、リード・リクエストが I2C コント ローラに対して行われる場合、リード・データが供給されるまで SCL ラインを Low に保持します。リード・データがスレーブ I2C コントローラに提供されるか、または I2C コントローラのスレーブが IC_ENABLE レジスタに 0 を書き込むことによってディ セーブルされるまで I2C バスをストールします。† 組み合わせ形式 I2C コントローラは、7 ビットおよび 10 ビットのアドレッシング・モードの両方で混 合のリードおよびライトの組み合わせ形式のトランザクションをサポートしていま す。† I2C コントローラは、混合アドレスおよび混合アドレス形式をサポートしません。つ まり、10 ビットのアドレス・トランザクションに続く 7 ビットのアドレス・トラン ザクション(またはその逆)の組み合わせ形式のトランザクションです。† 組み合わせ形式の転送を開始するために、IC_CON レジスタの IC_RESTART_EN ビット が 1 に設定される必要があります。この値を設定し、マスタとして動作させる場合、 I2C コントローラは I2C 転送を完了したとき、送信 FIFO をチェックし、次の転送を実 行します。この転送の方向が前回の転送と異なる場合、組み合わせ形式は、転送を 発行するために使用されます。現在の I2C 転送が完了したときに送信 FIFO が空の場 合、STOP が発行されて START 条件に続いて次の転送が発行されます。 プロトコルの詳細 この項では、I2C コントローラのプロトコルについて説明します。 START および STOP の条件 バスがアイドル状態のとき、SCL と SDA 信号の両方は、バス上のプルアップ抵抗を 介して High にプルアップされます。マスタがバス上で送信を開始する場合、マスタ は START 条件を発行します。SCL が 1 のとき、これは SDA 信号の High から Low への 遷移であると定義されます。マスタが送信を終了する場合、マスタは STOP 条件を発 行します。これは、SCL が 1 のとき、SDA ラインの Low から High への遷移であると 定義されます。† 図 20–3 に、START 条件と STOP 条件のタイミングを示します。データがバス上で送 信されている場合、SCL が 1 のときに、SDA ラインを安定する必要があります。† 図 20‒3. START および STOP 条件のタイミング図 † SDA SCL S P Start Condition Data Change Allowed 2012 年 11 月 Altera Corporation Data Line Stable Data Valid Data Change Allowed Stop Condition Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–6 1 図 20–3 に示すように、START または STOP 条件の信号遷移は、I2C バスを駆動するマス タの出力信号で観察されたものが反映されています。不等ライン遅延が不正確な SDA または SCL のタイミングの関係で発生する可能性があるため、スレーブの入力 信号で、SDA または SCL 信号を観察する際に注意が必要です。† スレーブ・プロトコルのアドレス 7 ビットのアドレス形式と 10 ビットのアドレス形式の 2 つのアドレス形式がありま す。 7 ビットのアドレス・フォーマット 7 ビットのアドレス形式の間に、図 20–4 に示すように、最初のバイトの最初の 7 ビット(ビット 7:1)は、R/W ビットのスレーブ・アドレスと LSB ビット(ビット 0)を設定します。ビット 0(R/W)が 0 に設定されている場合、マスタはスレーブ に書き込みます。ビット 0(R/W)が 1 に設定されている場合、マスタはスレーブか ら読み出します。† 図 20‒4. 7 ビットのアドレス・フォーマット † MSB S LSB A6 A5 A4 A3 A2 A1 A0 R/W ACK Slave Address S: Start Condition R/W: Read/Write Pulse ACK: Acknowledge (sent by slave) 10 ビットのアドレス・フォーマット 10 ビット・アドレッシングの間、2 つのバイトは、10 ビットのアドレスを設定する ために転送されます。最初の 5 ビット(ビット 7:3)は、スレーブ・アドレス・ビッ ト 9:8 を設定し、LSB ビット(ビット 0)は R/W ビットであり、これによって次の 2 ビット(2:1)に続く、10 ビットの転送であることをスレーブに通知します。転送さ れた 2 つ目のバイトは、スレーブ・アドレスのビット 7:0 に設定されます。図 20–5 は、10 ビットのアドレス形式を示します。† 図 20‒5. 10 ビットのアドレス・フォーマット † S 1 1 1 1 0 A9 A8 R/W ACK A7 A6 A5 A4 A3 A2 A1 A0 ACK Reserved for 10-Bit Address S: Start Condition R/W: Read/Write Pulse ACK: Acknowledge (sent by slave) Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–7 表 20–1 は、特殊な目的と予約の最初のバイト・アドレスを定義しています。† 表 20‒1. 最初のバイトでのビットの I2C 定義 † スレーブ・ア ドレス R/W ビット 説明 0000 000 0 ゼネラル・コール・アドレスです。I2C コントローラは、受信 バッファにデータを配置し、ゼネラル・コール割り込みを発 行します。にデータを配置します。 0000 000 1 START バイトです。詳細は、20–9 ページの「START BYTE 転送 プロトコル」を参照してください。 0000 001 X CBUS アドレスです。I2C コントローラはこれらのアクセスを 無視します。 0000 010 X 予約済み。 0000 011 X 予約済み。 0000 1XX X 未使用。 1111 1XX X 予約済み。 1111 0XX X 10 ビットのスレーブ・アドレッシングです。 表 20‒1 の注: (1) 「X」は気にしないことを示します。 プロトコルの送信および受信 マスタは、マスタ・トランスミッタまたはマスタ・レシーバのどちらか一方として 動作し、バスとのデータ送信とデータ受信を開始することができます。スレーブは、 それぞれスレーブ・トランスミッタまたはスレーブ・レシーバのどちらか一方とし て動作し、バスとのデータの送信とデータの受信のために、マスタからの要求に応 答します。† マスタ・トランスミッタとスレーブ・レシーバ すべてのデータは、データ転送ごとに転送されるバイト数を制限せずに、バイト形 式で送信されます。マスタがアドレスと R/W ビットを送信する、またはマスタがス レーブへのデータのバイトを送信した後、スレーブ・レシーバはアクノリッジ確認 信号(ACK)で応答する必要があります。スレーブ・レシーバが ACK パルスで応答 しない場合には、マスタは STOP 条件を発行することによって転送を中止します。ス レーブは、マスタが転送を中断できるように、SDA ラインを High のままにしま す。† 2012 年 11 月 Altera Corporation Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–8 図 20–6 に示すように、マスタ・トランスミッタがデータを送信する場合、データの すべてのバイトが受信された後、スレーブ・レシーバは、ACK パルスでマスタ・ト ランスミッタに応答します。† 図 20‒6. マスタ · トランスミッタのプロトコル † 7-Bit Address S Slave Address R/W A Data A A Slave Address Second Byte Data A/A P 0 (Write) 10-Bit Address S Slave Address First 7 Bits 11110xxx R/W A Data A/A P 0 (Write) S: Start Condition P: Stop Condition R/W: Read/Write Pulse A: Acknowledge (SDA Low) A: No Acknowledge (SDA High) From Master to Slave From Slave to Master マスタ · レシーバおよびスレーブ・トランスミッタ 図 20–7 に示すように、マスタがデータを受信している場合、最後のバイトを除い て、データのバイトが受信された後、マスタは ACK パルスを使用してスレーブ・ト ランスミッタに応答します。これは、これが最後のバイトであることをマスタ・レ シーバによってスレーブ・トランスミッタに通知する方法です。スレーブ・トラン スミッタは、マスタが STOP 条件を発行できるように、未確認(NACK)を検出後に SDA ラインを放棄します。† マスタが STOP 条件でバスを放棄しない場合、マスタは RESTART 条件を発行するこ とができます。それは ACK パルス後に発生することを除いて、START 条件と同じで す。マスタ・モードで動作すると、I2C コントローラは、異なる方向の転送を使用し て同じスレーブとの通信を行うことができます。I2C コントローラがサポートする組 み合わせ形式のトランザクションについて詳しくは、20–5 ページの「組み合わせ形 式」を参照してください。† Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 1 20–9 IC_TAR のターゲット・スレーブ・アドレス・レジスタが再プログラムされる前に、 I2C コントローラは、シリアル・ポート (I2C_DYNAMIC_TAR_UPDATE = 1)上で非アク ティブでなければなりません。† 図 20‒7. マスタ・レシーバのプロトコル † 7-Bit Address S Slave Address R/W A Data A A Slave Address Second Byte Data A P A R Slave Address First 7 bits R/W 11110xxx 1 (Read) 1 (Read) 10-Bit Address Slave Address First 7 bits S R/W 11110xxx 0 (Write) A Data A P From Master to Slave S: Start Condition R: Restart Condition P: Stop Condition R/W: Read/Write Pulse A: Acknowledge (SDA Low) A: No Acknowledge (SDA High) From Slave to Master START BYTE 転送プロトコル START BYTE 転送プロトコルは、オンボード専用の I2C ハードウェア・モジュールを 持たないシステム用に設定されています。I2C コントローラがスレーブとして設定さ れる場合、常にサポートされた最高速度で I2C バスをサンプルするため、START BYTE 転送が必要ありません。しかし、I2C コントローラがマスタとして設定される場合、 それは、スレーブ・デバイスがそれを必要とすると、各転送の開始時に START BYTE 転送の生成をサポートしています。このプロトコルは、図 20–8 に示すように、1 に 続いて送信されている 7 つのゼロで構成されます。これは、マイクロコントローラ が 0 を検出するまで、バスをポーリングしているプロセッサがアドレス・フェーズ をアンダー・サンプルできるようにします。マイクロコントローラが 0 を検出する と、アンダー・サンプリング・レートからマスタの正しいレートに切り替わりま す。† 図 20‒8. START BYTE 転送 † SDA Dummy Acknowledge (High) SCL S 1 2 7 8 9 Sr ACK Start Byte 00000001 START BYTE は、次の手順があります。† 1. マスタは START 条件を生成します。 2. マスタは START バイト(0000 0001)を送信します。† 3. マスタは ACK クロック・パルスを送信します。 (バス上で使用されるバイト処理 形式に準拠するようにのみ存在)† 2012 年 11 月 Altera Corporation Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–10 4. ACK 信号を 0 に設定するスレーブはありません。† 5. マスタは RESTART (R)条件を生成します。† ハードウェアのレシーバは、予約されたアドレスであり、RESTART 条件が生成され た後にリセットされているため、START BYTE に応答しません。† 複数のマスタ・アービトレーション I2C コントローラのバス・プロトコルでは、複数のマスタが同じバス上に存在するこ とができます。同じ I2C バス上に 2 つのマスタが存在する場合、両方が同時に START 条件を生成することによって同時にバスを制御しようとする場合、アービトレー ション手順があります。マスタ(例えば、マイクロコントローラ)にバスの制御が ある場合、最初のマスタが STOP 条件を送信してバスがアイドル状態になるまで、他 のマスタが制御をすることはできません。† SCL ラインが 1 の間に、アービトレーションは SDA ライン上で行われます。他のマ スタが 0 を送信しながら 1 を送信するマスタは、アービトレーションを失い、その データの出力ステージをオフにします。アービトレーションを失ったマスタは、バ イト転送が終了するまでのクロックを生成し続けることができます。マスタの両方 が同じスレーブ・デバイスをアドレスする場合、アービトレーションはデータ・ フェーズに行くことができます。† それは別のマスタにアービトレーションを失ったことを検出すると、I2C コントロー ラは SCL の生成を停止します。† 図 20–9 に、2 つのマスタがバス上でアービトレーションされたときのタイミングを 示します。 図 20‒9. 複数のマスタ・アービトレーション † DATA1 1 MSB DATA1 Loses Arbitration Matching Data DATA2 MSB 0 SDA Mirrors DATA2 SDA MSB SCL SDA Lines Up with DATA1 Start Condition バス・コントロールは、アドレスまたはマスタ・コードおよび競合するマスタに よって送信されたデータによって決定されるので、バスには、中心的なマスタも優 先順位による順序はありません。 アービトレーションは、以下の条件の間で許可されていません。† Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–11 ■ A RESTART 条件とデータ・ビットの間 † ■ A STOP 条件とデータ・ビットの間 † ■ A RESTART 条件と STOP 条件の間 i スレーブはアービトレーション・プロセスに関与していません。† クロックの同期化 2 つ以上のマスタが同時にバスの情報を転送しようとすると、SCL クロックをアービ トレーションして同期する必要があります。すべてのマスタは、メッセージを転送 するために独自のクロックを生成します。データは、SCL クロックの High 期間中で のみ有効です。クロック同期化は、SCL 信号にワイヤ AND 接続を使用して実行され ます。マスタが SCL クロックを 0 に遷移すると、マスタは、SCL クロックの Low 時 間のカウントを開始し、次のクロック周期の最初で SCL クロック信号を 1 に遷移し ます。しかし、他のマスタが 0 に SCL ラインを保持している場合、マスタは、SCL クロック・ラインが 1 に遷移するまで HIGH 待ち状態に入ります。† 次に、すべてのマスタは自分の High 時間をカウント・オフして、最短 High 時間を持 つマスタは SCL ラインを 0 に遷移します。また、マスタは Low 時間をカウントして、 最長 Low 時間を持つマスタは、他のマスタを強制的に High 待ち状態に入ります。そ のため、図 20–10 に示すように、同期化された SCL クロックが生成されます。必要 に応じて、スレーブは I2C バス上のタイミングを遅くする SCL ラインを Low に保持 することができます。† 図 20‒10. 複数のマスタ · クロックの同期 † Wait State Start Counting High Period CLKA CLKB SCL SCL Low Transition Resets All Clocks; Start Counting Their Low Periods 2012 年 11 月 Altera Corporation SCL Transitions High When All Clocks Are in a High State Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–12 クロック周波数のコンフィギュレーション I2C コントローラをマスタとして構成する場合、すべての I2C バス・トランザクショ ンが適切な I/O タイミングを確保するために実行できる前に、SCL カウント・レジス タを設定する必要があります。† 次の 4 つの SCL カウント・レジスタがあります。 1 ■ 標準速度の I2C クロック SCL High カウント、IC_SS_SCL_HCNT † ■ 標準速度の I2C クロック SCL Low カウント、IC_SS_SCL_LCNT † ■ 高速度 I2C クロック SCL High カウント、IC_FS_SCL_HCNT † ■ 高速度 I2C クロック SCL Low カウント、IC_FS_SCL_LCNT † これらのレジスタは、I2C マスタとして動作するための SCL のタイミング要件を決定す るためにのみ使用されているので、I2C コントローラは、I2C スレーブとしてのみ動 作するように有効になっている場合、SCL カウント・レジスタのいずれかをプログ ラムする必要はありません。† 最小の High と Low のカウント I2C コントローラが送信転送および受信転送の両方で I2C マスタとして動作する場合、 SCL の High カウント・レジスタの許容される最小値が 6 である間に、SCL の Low カ ウント・レジスタにプログラムできる最小値は 8 になります。† Low カウント・レジスタの 8 の最小値は、SCL のネガティブ・エッジ後に SDA を駆 動するための I2C コントローラに必要な時間のためです。High カウント・レジスタの 6 の最小値は、SCL の High 期間中に SDA をサンプルする I2C コントローラに必要な時 間のためです。† I2C コントローラは、SCL クロックの Low 期間を生成するために、Low カウント・レ ジスタの値に 1 サイクルが追加されます。 I2C コントローラは、SCL クロックの High 期間を生成するために、High カウント・レ ジスタの値に 7 サイクルを追加します。これは、以下の要因によるものです。† ■ SCL ラインに適用されるデジタル・フィルタリングは 4 つの l4_sp_clk サイクルの 遅延が発生します。このフィルタリングは、メタステーブルの除去および、SDA と SCL のエッジで 2 アウトオフ 3 多数決処理が含まれています。† ■ SCL は、I2C コントローラによって 1 を 0 に駆動されるたびに、つまり SCL の High 時間 が完了すると、3 つの l4_sp_clk サイクルの内部ロジック・レイテンシが発生し ます。† その結果、最小 SCL の High 時間は 13(13)l4_sp_clk 期間(6+1+3+3)であり、I2C コントローラが対応可能な最小の SCL の Low 時間は 9(9)l4_sp_clk 期間(8+1)で す。† High カウントと Low カウントの計算 以下の計算は、I2C コントローラ内の各スピード・モードの SCL による High と Low の 数の計算方法の例を示しています。 Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–13 適切な SCL クロックの High 時間と Low 時間を設定するために必要な l4_sp_clk ク ロック・パルスの適切な数を計算する式は、次のとおりです。† 式 20‒1. IC_HCNT = ceil(MIN_SCL_HIGHtime*OSCFREQ) IC_LCNT = ceil(MIN_SCL_LOWtime*OSCFREQ) MIN_SCL_HIGHtime = minimum high period MIN_SCL_HIGHtime = 4000 ns for 100 kbps 600 ns for 400 kbps 60 ns for 3.4 Mbs, bus loading = 100pF 160 ns for 3.4 Mbs, bus loading = 400pF MIN_SCL_LOWtime = minimum low period MIN_SCL_LOWtime = 4700 ns for 100 kbps 1300 ns for 400 kbps 120 ns for 3.4Mbs, bus loading = 100pF 320 ns for 3.4Mbs, bus loading = 400pF OSCFREQ = l4_sp_clk clock frequency (Hz) For example: OSCFREQ = 100 MHz I2Cmode = fast, 400 kbps MIN_SCL_HIGHtime = 600 ns MIN_SCL_LOWtime = 1300 ns IC_HCNT = ceil(600 ns * 100 MHz) IC_HCNTSCL PERIOD = 60 IC_LCNT = ceil(1300 ns * 100 MHz) IC_LCNTSCL PERIOD = 130 Actual MIN_SCL_HIGHtime = 60*(1/100 MHz) = 600 ns Actual MIN_SCL_LOWtime = 130*(1/100 MHz) = 1300 ns † SDA ホールド時間 I2C プロトコル仕様では、標準モードと高速モードの SDA 信号では 300 ns のホール ド時間を必要とします。SCL 信号と SDA 信号上のボード遅延は、I2C マスタでホール ド時間の要件が I2C スレーブではなく I2C マスタで満たされている(またはその逆) ことを意味します。各アプリケーションは、異なるボード遅延が発生するため、I2C コントローラは、SDA ホールド時間の動的な調整を可能にするためにソフトウェア・ プログラム可能なレジスタの IC_SDA_HOLD が含まれています。† 2012 年 11 月 Altera Corporation Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラの機能の説明 20–14 DMA コントローラ・インタフェース データ読み出し準備ができている場合、または送信 FIFO がデータを必要としている 場合、I2C コントローラは、そのことを示す DMA シグナリングをサポートしていま す。このサポートでは、2 つの DMA チャネル(1 つは送信データ用で、もう 1 つは 受信データ用)を必要とします。I2C コントローラは、シングル DMA 転送とバースト DMA 転送をサポートしています。システム・ソフトウェアは、スレッショルド・レ ジスタに適切な値をプログラミングすることによって、DMA バースト・モードを選 択できます。FIFO スレッショルド・レジスタ値の推奨設定はハーフ・フルです。 I2C コントローラ上で DMA コントローラのインタフェースをイネーブルするために、 DMA コントロール・レジスタ(DMACR)ビットに書き込む必要があります。DMACR レジスタの TDMAE ビット・フィールドに 1 を書き込むと、I2C コントローラはハン ドシェイク・インタフェースを送信可能になります。DMACR レジスタの RDMAE ビッ ト・フィールドに 1 を書き込むと、I2C コントローラはハンドシェイク・インタ フェースを受信可能になります。† f DMA コントローラについて詳しくは、Cyclone V デバイス・ハンドブック Volume 3 の 「DMA Controller」の章を参照してください。 クロック 各 I2C コントローラは、標準モードおよび高速モードで転送する l4_sp_clk クロック に接続されています。クロック入力はクロック・マネージャによって駆動されます。 f 詳細は、Cyclone V デバイス・ハンドブック Volume 3 の「Clock Manager」の章を参照し てください。 リセット 各 I2C コントローラは、独立したリセット信号があります。リセット・マネージャは コールド・リセットまたはウォーム・リセット時に信号を駆動します。 f 詳細は、Cyclone V デバイス・ハンドブック Volume 3 の「Reset Manager」の章を参照し てください。 インタフェース・ピン I2C コントローラのすべてのインスタンスは、マルチプレクサ・ピンを介して外部の ピンに接続します。マルチプレクサ・ピンは、すべてのインスタンスが同時に独立 して機能することを可能にします。ピンは、プルアップ抵抗に接続する必要があり、 I2C バスのキャパシタンスは 400 pF を超えることはできません。 表 20–2 に、I2C コントローラ・インタフェースの I/O ピンの使用を示します。 表 20‒2. I2C コントローラ・インタフェースのピン ピン名 信号幅 方向 説明 SCL 1 ビット 双方向 シリアル・クロック。 SDA 1 ビット 双方向 シリアル・データ。 Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラのプログラミング・モデル 20–15 I2C コントローラのプログラミング・モデル この項では、2 つのマスタとスレーブの動作モードに基づいて、I2C コントローラ用 のプログラミング・モデルについて説明します。† 1 (同時に両方を行うこと 各 I2C コントローラは、I2C マスタのみまたは I2C スレーブのみ はできない)として動作するように設定する必要があります。IC_CON レジスタの ビット 6(IC_SLAVE_DISABLE)とビット 0(IC_MASTER_MODE)は、それぞれ 0 と 1 に 設定されないことを確認します。† スレーブ・モードの動作 この項では、スレーブ・モードの手順について説明します。† 初期コンフィギュレーション I2C コントローラをスレーブとして使用するには、次の手順を実行します。† 1. IC_ENABLE レジスタのビット 0 に 0 を書き込むことによって、I2C コントローラを ディセーブルします。† 2. スレーブ・アドレスを設定するために、IC_SAR レジスタ(ビット 9:0)に書き込 みます。これは、I2C コントローラが応答するアドレスです。† 1 I2C コントローラのスレーブ・アドレスのリセット値は 0x55 です。0x55 をス レーブ・アドレスとして使用している場合、安全にこの手順を省略できま す。 3. サポートされるアドレッシングのタイプ(ビット 3 を設定することによって、7 ビットまたは 10 ビット)を指定するために、IC_CON レジスタに書き込みます。 ビット 6(IC_SLAVE_DISABLE)に 0、およびビット 0(MASTER_MODE)に 0 を書き 込むことによって、スレーブ専用モードで I2C コントローラをイネーブルします。 † 1 スレーブおよびマスタは、7 ビットまたは 10 ビットのアドレッシングと同 じタイプでプログラムされる必要はありません。インスタンスの場合、ス レーブは 7 ビットのアドレッシングでプログラムされ、マスタは 10 ビッ トのアドレッシングでプログラム(またはその逆)できます。† 4. IC_ENABLE レジスタのビット 0 に 1 を書き込むことによって、I2C コントローラを イネーブルします。† シングル・バイト用のスレーブ・トランスミッタの動作 バス上の別の I2C マスタ・デバイスが I2C コントローラを対処し、データを要求する 場合、I2C コントローラは、スレーブ・トランスミッタとして動作し、次の手順が発 生します。† 1. 他の I2C マスタ・デバイスは、I2C コントローラの IC_SAR レジスタのスレーブ・ アドレスと一致するアドレスを持っている I2C 転送を開始します。† 2. I2C コントローラは送信されたアドレスを認識して、それがスレーブ・トランス ミッタとして動作していることを示すために、転送の方向を認識します。† 2012 年 11 月 Altera Corporation Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラのプログラミング・モデル 20–16 3. I2C コントローラは、RD_REQ 割り込み(IC_RAW_INTR_STAT レジスタのビット 5) をアサートし、ソフトウェアが応答するのを待ちます。† RD_REQ 割り込みがマスクされている場合は、IC_INTR_MASK レジスタ(M_RD_REQ ビット・フィールド)のビット 5 が 0 に設定されているため、CPU が IC_RAW_INTR_STAT レジスタの定期的なリードを実行するために指示することを 推奨します。† a. IC_RAW_INTR_STAT レジスタ(R_RD_REQ ビット・フィールド)のビット 5 が 1 に設定されるリードは、アサートされている RD_REQ 割り込みと同等のものと して扱われなければなりません。† b. 次に、ソフトウェアによって I2C 転送を満たすために動作する必要がありま す。† c. 使用するタイミング間隔は、I2C コントローラが処理できる最速の SCL クロッ ク周期の 10 倍でなければなりません。例えば、400 kbps に対してタイミング 間隔は 25 us です。† 1 I2C バス上で転送されるデータのシングル・バイトに必要な時間であるた め、ここでは 10 の値が推奨されます。† 4. リード要求を受信する前に TX FIFO 内にデータが残っている場合、I2C コントロー ラは、TX FIFO から古いデータをフラッシュするために、TX_ABRT 割り込み (IC_RAW_INTR_STAT レジスタのビット 6)をアサートします。† 1 TX_ABRTイベントが発生するたびに I2C コントローラの TX FIFOがフラッシュ / リセット状態に強制されるので、TX FIFO への書き込みが試みられる前 に、ソフトウェアは IC_CLR_TX_ABRT レジスタを読み出すことによって I2C コントローラをこの状態からリリースする必要があります。詳細は、レジ スタ・マップの C_RAW_INTR_STAT レジスタの説明を参照してください。† TX_ABRT 割り込みがマスクされている場合には、IC_INTR_MASK[6] レジスタ (M_TX_ABRT ビット・フィールド)が 0 に設定されているので、CPU が IC_RAW_INTR_STAT レジスタの定期的な読み出しを実行することを推奨します。† a. ビット 6(R_TX_ABRT)が 1 に設定される読み出しは、アサートされている TX_ABRT 割り込みと同等のものとして扱われなければなりません。† b. ソフトウェアからそれ以上の動作は必要ありません。† c. 使用するタイミング間隔は、IC_RAW_INTR_STAT[5] レジスタの前の手順で説 明したのと同様である必要があります。† 5. ソフトウェアは、書き込まれるべきデータを IC_DATA_CMD レジスタの DAT ビット に書き込み、ビット 8 に 0 を書き込みます。† 6. ソフトウェアは、動作を進める前に IC_RAW_INTR_STAT レジスタの RD_REQ と TX_ABRT 割り込み(それぞれビット 5 とビット 6)をクリアする必要があります。† RD_REQ および / または TX_ABRT 割り込みがマスクされている場合、 R_RD_REQ または R_TX_ABRT ビットのいずれかが 1 として読み出されていると、IC_RAW_INTR_STAT レ ジスタのクリアがすでに実行されたようになります。† 7. I2C コントローラはバイトを送信します。† Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラのプログラミング・モデル 20–17 8. マスタは、RESTART 条件を発行することによって I2C バスを保持する、または STOP 条件を発行することによってバスを解放することができます。† シングル・バイト用のスレーブ・レシーバの動作 バス上の別の I2C マスタ・デバイスが I2C コントローラを対処し、データを送信して いる場合、I2C コントローラは、スレーブ・レシーバとして動作し、次の手順が発生 します。† 1. 他の I2C マスタ・デバイスは、I2C コントローラの IC_SAR レジスタのスレーブ・ アドレスと一致するアドレスを持っている I2C 転送を開始します。† 2. I2C コントローラは送信されたアドレスを認識して、それがスレーブ・レシーバ として動作していることを示すために、転送の方向を認識します。† 3. I2C コントローラは、送信されたバイトを受信して、受信バッファに格納しま す。† 1 RX FIFO がバイトがプッシュされている時に完全にデータで満たされている 場合は、オーバーフローが発生し、I2C コントローラは、後続の I2C 転送が 継続されます。NACK が生成されないため、ソフトウェアは 、I2C コント ローラ(IC_INTR_STAT レジスタの R_RX_OVER ビットによる)で示されて いるときにオーバーフローを認識し、失われたデータから回復するために 適切な行動を取る必要があります。したがって、リモート送信マスタに圧 力を再適用する方法はないため、後者のオーバーフローする前に、RX FIFO にサービスを提供するためにソフトウェア上でリアル・タイムの制約があ ります。† 4. I2C コントローラは RX_FULL 割り込み(IC_RAW_INTR_STAT[2] レジスタ)をア サートします。I † RX_FULL 割り込みがマスクされている場合には、IC_INTR_MASK[2] レジスタが 0 に 設定されている、または IC_TX_TL が 0 より大きい値に設定されているため、CPU が IC_STATUS レジスタの定期的なリードを実行することを推奨します。ビット 3 (RFNE)が 1 に設定される IC_STATUS レジスタの読み出しは、ソフトウェアに よってアサートされている RX_FULL 割り込みと同等のものとして扱われなければ なりません。† 5. ソフトウェアは IC_DATA_CMD レジスタ(ビット 7:0)からバイトを読み出すこと ができます。† 6. 他のマスタは、RESTART 条件を発行することによって I2C バスを保持する、また は STOP 条件を発行することによってバスを解放することができます。 † 2012 年 11 月 Altera Corporation Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラのプログラミング・モデル 20–18 バルク転送用のスレーブ転送の動作 標準の I2C プロトコルでは、すべてのトランザクションはシングル・バイトのトラン ザクションであり、プログラマは、スレーブの TX FIFO に 1 バイトを書き込むことに よって、リモート・マスタのリード・リクエストに応答します。スレーブ(スレー ブ・トランスミッタ)がリモート・マスタ(マスタ・レシーバ)からのリード・リ クエスト(RD_REQ)で発行された場合、最低でスレーブ・トランスミッタの TX FIFO に少なくとも 1 つのエントリがあり必要があります。I2C コントローラは、後続の リード・リクエストがより多くのデータを要求するために割り込みを発生させずに、 そのデータを受信できるように、TX FIFO 内により多くのデータを処理するためにデ ザインされます。究極的には、TX FIFO にある唯一のエントリに制限がある場合、 データ割り込み中に発生する重要なレイテンシの可能性を排除します。† I2C コントローラがスレーブ・トランスミッタとして動作しているときにのみ、この モードが発生します。リモート・マスタがスレーブ・トランスミッタによって送信 されたデータを認識しており、スレーブの TX FIFO 内にデータが存在しない場合、I2C コントローラは、リード・リクエストの割り込み(RD_REQ)を発生してデータがリ モート・マスタに送信される前に TX FIFO に書き込まれるデータを待機します。† RD_REQ 割り込みがマスクされている場合、IC_INTR_STAT レジスタのビット 5 (M_RD_REQ)が 0 に設定されているため、CPU が IC_RAW_INTR_STAT レジスタの定期 的な読み出しを実行することを推奨します。ビット 5(R_RD_REQ)が 1 に設定され た IC_RAW_INTR_STAT の読み出しは、この項で参照される RD_REQ 割り込みと同等の ものとして扱われなければなりません。† RD_REQ 割り込みはリード・リクエストに応じて発生し、割り込みサービス処理ルー チン(ISR)を終了するとき割り込みと同様にクリアする必要があります。ISR は、 TX FIFO に 1 バイトまたは 1 バイト以上のいずれかを書き込むことができます。マス タにこれらのバイトの送信中に、マスタが最後のバイトを確認する場合、マスタが データを要求しているため、スレーブは再び RD_REQ を発行する必要があります。† リモート・マスタが n バイトのパケットを要求していることをプログラマが事前に 知っている場合、他のマスタが I2C コントローラに対処してデータを要求するとき、 TX FIFO は n 個のバイトで書き込まれている可能性があって、リモート・マスタは データの連続ストリームとして受信します。例えば、リモート・マスタがデータ送 信を確認していて TX FIFO に使用可能なデータがある限り、I2C コントローラ・ス レーブはリモート・マスタに対してデータを送信し続けます。RD_REQ を再発行する 必要はありません。† リモート・マスタが I2C コントローラから n バイトを受信することになっているの に、プログラマが TX FIFO に n より大きいバイト数を書き込んでいる場合、要求され ている n バイトをスレーブが送信し終わったとき、TX FIFO をクリアして余分なバイ トを無視します。† この例では、I2C コントローラは、TX FIFO のクリアを示すために送信中止 (TX_ABRT)イベントを生成します。ACK/NACK が期待されているときに、NACK を受 信した場合、リモート・マスタは、必要となるすべてのデータを持っています。こ のとき、TX FIFO に残っているデータを消去するためにスレーブのステート・マシン 内にフラグが発生します。このフラグは、FIFO が存在して TX FIFO の内容がその時点 でクリアされているプロセッサ・バス・クロック・ドメインに転送されます。 † マスタ・モードの動作 この項では、マスタ・モードの手順について説明します。† Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラのプログラミング・モデル 20–19 最初のコンフィギュレーション マスタ・モード動作の場合、ターゲット・アドレスとアドレス形式は、I2C コント ローラをディセーブルすることなくダイナミックに変更できます。スレーブにとっ てアドレスが変更される前にコンポーネントをディセーブルする必要があるため、 I2C コントローラがマスタとして動作しているときのみこの機能を適用できます。マ スタとして I2C コントローラを使用するには、次の手順を実行します。† 1. IC_ENABLE レジスタに 0 を書き込むことで I2C コントローラをディセーブルしま す。† 2. スレーブ動作(ビット 2:1)用にサポートされている最大速度モードを設定する ために、また、I2C コントローラは、デバイスがスレーブ(ビット 3)であると き、7 ビットと 10 ビットのどちらのアドレス指定モードで転送を開始するかを指 定するために、IC_CON レジスタに書き込みます。† 3. アドレス指定が必要な I2C デバイスのアドレスを IC_TAR レジスタに書き込みま す。I2C で実行されるのがゼネラル・コールと START BYTE のどちらなのか表示し ます。I2C コントローラのマスタで開始された転送の目的の速度、つまり 7 ビット または 10 ビットのアドレス指定は、IC_10BITADDR_MASTER ビット・フィールド (12 ビット)によって制御されます。† 4. IC_ENABLE レジスタに 1 を書き込むことで I2C コントローラをイネーブルします。 5. この時点で、IC_DATA_CMD レジスタに転送方向および送信されるデータを書き込 みます。I2C コントローラがイネーブルされる前に IC_DATA_CMD レジスタが書き 込まれる場合、I2C コントローラがイネーブルされていなければ、バッファがク リアされた時点で、データとコマンドが失われます。† 1 複数の I2C 転送では、I2C トランザクションの間に TX FIFO が空になっていないことな ど、TX FIFO に対して追加の書き込みを実行します。任意のステージ(または任意の 段階で)TX FIFO が完全に空の状態であれば、TX FIFO に対するさらなる書き込みは独 立した I2C トランザクションとなります。 † ダイナミックな IC_TAR または IC_10BITADDR_MASTER の更新 I2C コントローラは、IC_TAR レジスタの IC_TAR(ビット 9:0)および IC_10BITADDR_MASTER(ビット 12)のビット・フィールドをサポートしています。次 の条件が満たされていると、IC_TAR レジスタにダイナミックに書き込むことができ ます。† 2012 年 11 月 Altera Corporation Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラのプログラミング・モデル 20–20 ■ I2C コントローラがイネーブルされていない場合(IC_ENABLE=0) 。† ■ I2C コントローラがイネーブルされている場合(IC_ENABLE=1)。また、I2C コント ローラが任意の Master(TX、RX)動作(IC_STATUS[5]=0)に従事されていない。 さらに I2C コントローラが Master モード (IC_CON[0]=1)で動作するようにイ ネーブルされている。その上、TX FIFO に(IC_STATUS[2]=1)にエントリがない 場合。† マスタ送信およびマスタ受信 I2C コントローラは、ダイナミックな読み出しや書き込みの切り替えをサポートして います。データを送信するためには、I2C の Rx/Tx データ・バッファとコマンド・レ ジスタ(IC_DATA_CMD)の下位バイトに書き込まれるデータを書き込みます。I2C のラ イト動作では、CMD ビット [8] は 0 を書き込む必要があります。その後、 IC_DATA_CMD レジスタの下位バイトに「 don't cares」を書き込むによってリード・コ マンドが発行されることがあり、CMD ビットに 1 を書き込む必要があります。マス タ・モードでの I2C コントローラは、送信 FIFO 内にコマンドがある限り、転送を開 始し続けます。送信 FIFO が空になると、現行の転送を完了した後、I2C コントローラ は STOP 条件を挿入します。† I2C コントローラのディセーブル IC_ENABLEレジスタが1から0に設定された応答としてハードウェアが完全にシャット ダウンしたとき、ソフトウェアが明確に決定できるようにレジスタの IC_ENABLE_STATUS が追加されます。† 1. I2C コントローラによってサポートされ、システムで使用されている最高の I2C 転 送速度用のシグナリング期間の 10 倍に等しいタイマ間隔(ti2c_poll)を定義し ます。例えば、最高の I2C 転送モードが 400 Kbps である場合、ti2c_poll は 25 us になります。† 2. 任意の繰り返しポーリング動作がこの最大値を超えるとエラーが報告されるよう にするため、最大のタイムアウト・パラメータ、MAX_T_POLL_COUNT を定義しま す。† 3. ソフトウェアによって開始される任意のさらなる I2C マスタ・トランザクション を防ぐブロッキング・スレッド / プロセス / 関数を実行しますが、保留中の転送 が完了できます。 1 I2C コントローラが I2C スレーブのみとして動作するようにプログラムされ ている場合、この手順は無視可能です。† 4. 変数 POLL_COUNT はゼロに初期化されます。† 5. IC_ENABLE を 0 に設定します。† 6. IC_ENABLE_STATUS レジスタを読み出し、IC_EN ビット(ビット 0)をテストしま す。1 によって POLL_COUNT をインクリメントします。POLL_COUNT >= MAX_T_POLL_COUNT の場合、関連するエラー・コードで終了します。† 7. IC_ENABLE_STATUS[0] が 1 の場合、ti2c_poll をスリープし、前のステップに進 みます。それ以外の場合は、関連する成功コードで終了します。† Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラのプログラミング・モデル 20–21 DMA コントローラの動作 I2C コントローラ上で DMA コントローラのインタフェースをイネーブルするために、 DMA コントロール・レジスタ(IC_DMA_CR)を書き込む必要があります。IC_DMA_CR レジスタの TDMAE ビット・フィールドに 1 を書き込むと、I2C コントローラはハンド シェイク・インタフェースを送信可能になります。IC_DMA_CR レジスタの RDMAE ビット・フィールドに 1 を書き込むと、I2C コントローラはハンドシェイク・インタ フェースを受信可能になります。† f DMA コントローラについて詳しくは、Cyclone V デバイス・ハンドブック Volume 3 の 「DMA Controller」の章を参照してください。 I2C コントローラの RX バッファおよび TX バッファの両方の FIFO バッファのデプス (FIFO_DEPTH)は 64 エントリです。 送信 FIFO アンダーフロー I2C シリアル転送中、送信 FIFO バッファ内のエントリ数が DMA 送信データ・レベ ル・レジスタ(IC_DMA_TDLR)(ウォーターマーク・レベルとしても知られている) の値以下になると送信 FIFO バッファ・リクエストが DMA コントローラになされま す。DMA コントローラは、DMA バースト長として指定された長さのデータのバース トを送信 FIFO バッファに書き込むことによって応答します。† f DMA コントローラについて詳しくは、Cyclone V デバイス・ハンドブックの Volume 3 の 「DMA Controller」の章を参照してください。 送信 FIFO が連続的にシリアル転送を実行できるように、十分な頻度で DMA からデー タをフェッチする必要があります。つまり、FIFO バッファが空になり始めたら、別 の DMA リクエストがトリガーされる必要があります。そうしないと、FIFO はデータ (アンダーフロー)が不足になるため、I2C バス上で STOP が挿入されることになりま す。この状態を回避するために、ウォーターマーク・レベルを正しく設定する必要 があります。† 送信ウォーターマーク・レベル 以下のような仮定がなされた例を考えます。† DMA バースト長 = FIFO_DEPTH - IC_DMA_TDLR † ここで DMA バーストで転送されるデータ・アイテムの数は、送信 FIFO バッファの空 スペースに等しいとします。次の 2 種類のウォーターマーク・レベルの設定を考え ます。† ■ 2012 年 11 月 ケース 1:IC_DMA_TDLR = 16: † ■ 送信 FIFO ウォーターマーク・レベル = IC_DMA_TDLR = 16: † ■ DMA バースト長 = FIFO_DEPTH - IC_DMA_TDLR = 48: † ■ I2C 送信 FIFO_DEPTH = 64: † ■ ブロック・トランザクションのサイズ = 240: † Altera Corporation Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラのプログラミング・モデル 20–22 図 20–11 に、ウォーターマーク・レベルが 16 に等しいときの送信 FIFO バッファを示 します。 図 20‒11. 送信 FIFO ウォーターマーク・レベル = 16 Transmit FIFO Buffer FIFO_DEPTH = 64 FIFO_DEPTH - IC_DMA_TDLR = 48 Empty Transmit FIFO Watermark Level Data In IC_DMA_TDLR = 16 DMA Controller Full Data Out 必要なバースト・トランザクションの数は、バーストあたりのデータ・アイテム 数で割ったブロック・サイズに等しくなります。 ブロック・トランザクションのサイズ /DMA バースト長 = 240/48 = 5 DMA ブロック転送のバースト・トランザクションの数は 5 です。しかし、ウォー ターマーク・レベルの IC_DMA_TDLR は、非常に低いです。したがって、I2C シリ アル送信ラインがデータを送信する必要がある場合、送信アンダーフローの確率 は高いですが、送信 FIFO バッファに残っているデータはありません。これが発生 するのは、FIFO バッファが空になる前に、DMA が DMA リクエストを処理する時 間がなかったためです。 ■ ケース 2:IC_DMA_TDLR = 48 † ■ 送信 FIFO ウォーターマーク・レベル = IC_DMA_TDLR = 48 † ■ DMA バースト長 = FIFO_DEPTH - IC_DMA_TDLR = 16 † ■ I2C 送信 FIFO_DEPTH = 64 † ■ ブロック・トランザクションのサイズ = 240 † 図 20–12 に、ウォーターマーク・レベルが 48 に等しいときの送信 FIFO バッファを示 します。 図 20‒12. 送信 FIFO ウォーターマーク・レベル = 48 Transmit FIFO Buffer FIFO_DEPTH = 64 Empty Transmit FIFO Watermark Level FIFO_DEPTH - IC_DMA_TDLR = 16 Data In Full Data Out DMA Controller IC_DMA_TDLR = 48 Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラのプログラミング・モデル 20–23 ブロック内のバースト・トランザクションの数:† ブロック・トランザクションのサイズ /DMA バースト長 = 240/16 = 15 † このブロック転送では、DMA ブロック転送の 15 個のデスティネーション・バー スト・トランザクションがあります。しかし、ウォーターマーク・レベル、 IC_DMA_TDLR は高いです。したがって、I2C 送信 FIFO バッファが空になる前に、DMA コントローラがデスティネーション・バースト・トランザクション・リクエスト を処理するための十分な時間を持っているので、I2C の送信アンダーフローの確 率は低いです。† したがって、第 2 のケースは、ブロックあたりのバースト・トランザクションを 犠牲にすることで低い確率のアンダーフローとなっています。このケースでは、 第 1 に対して、ブロックあたりのバーストは潜在的に多くなり、バス使用率も悪 くなります。† したがって、ウォーターマーク・レベルの選択目標は、アンダーフロー状態の確率 を許容レベルに維持しながら、同時にブロックごとのトランザクションの数を最小 限に抑えることです。実際には、この値は、I2C 送信データのレートと、DMA がデス ティネーション・バースト・リクエストに応答できるレートの、これら 2 つのレー トの比の関数になります。† 送信 FIFO バッファ・オーバーフロー デスティネーション・バースト・リクエストを処理するのに十分なスペースが送信 FIFO バッファにない場合、DMA リクエストをトリガするウォーターマーク・レベル より大きい値に DMA トランザクションのバースト長を設定すると、オーバーフロー を引き起こす可能性があります。したがって、オーバーフローを防止するために、 次式が満たされている必要があります。† DMA バースト長 <= FIFO_DEPTH - IC_DMA_TDLR ケース 2:IC_DMA_TDLR = 48 では、バースト・リクエストが行われた時の送信 FIFO 内 のスペースの量は、DMA バースト長に等しくなります。したがって、バースト・ト ランザクションの完了時に、送信 FIFO がフルである可能性がありますが、オーバー フローはしていません。† したがって、最適な動作のために、DMA バースト長は送信 DMA リクエストをトリ ガーする FIFO レベルに設定される必要があります。つまり、以下のようになります。 DMA バースト長 = FIFO_DEPTH - IC_DMA_TDLR この式に従うことにより、ブロック転送に必要な DMA のバースト数を減少させ、バ スの使用率が向上させます。† 1 I2C コントローラが正常に転送中に I2C シリアル送信ライン上の 1 つ以上のデータ・ア イテムを送信した場合、送信 FIFO は、DMA バースト転送の終了時にフルにはなりま せん。† 受信 FIFO バッファ・オーバーフロー I2C シリアル転送中、受信 FIFO 内のエントリ数が DMA 受信データ・レベル・レジス タつまり IC_DMA_RDLR + 1 以上になるときはいつでも受信 FIFO リクエストが行われ ます。これは、ウォーターマーク・レベルとして知られています。DMA は、受信 FIFO からデータのバーストをフェッチすることによって応答します。† 2012 年 11 月 Altera Corporation Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ I2C コントローラのプログラミング・モデル 20–24 受信 FIFO が連続的にシリアル転送を実行できるように、十分な頻度で DMA からデー タをフェッチする必要があります。つまり、FIFO バッファがフィルを開始する場合 は、別の DMA 転送が要求されます。そうしないと、FIFO がデータでいっぱいになっ てしまいます(オーバーフロー)。この状態を回避するために、ウォーターマーク・ レベルを正しく設定する必要があります。† 受信ウォーターマーク・レベル 前述の送信ウォーターマーク・レベルの選択と同様に、受信ウォーターマーク・レ ベルである IC_DMA_RDLR + 1 は、図 20–13 示すようにオーバーフローの確率が最小限 になるように設定する必要があります。オーバーフローが発生する確率に対して、 ブロックごとに必要な DMA バースト・トランザクション数がトレードオフの関係に なります。† 受信 FIFO バッファ・アンダーフロー ウォーターマーク・レベルより大きいソース・トランザクションのバースト長を設 定すると、ソース・バースト・リクエストを処理するために十分なデータがないた め、アンダーフローを引き起こす可能性があります。そのため、アンダーフローを 避けるために次式に従う必要があります。† DMA バースト長 = IC_DMA_RDLR + 1 受信 FIFO 内のデータ・アイテムの数がバースト・リクエストが行われた時のソー ス・バースト長に等しい場合には、バースト・トランザクションの完了時に、受信 FIFO が空になる可能性はありますがアンダーフローにはなりません。最適な動作の ために、DMA バースト長は、IC_DMA_RDLR + 1 のウォーターマーク・レベルに設定す る必要があります。† この式に従うことにより、ブロック転送に必要な DMA のバースト数を減少させ、バ スの使用率が向上させます。† 1 I2C コントローラがバースト中に I2C シリアル受信ライン上で 1 つ以上のデータ・アイ テムを正常に受信した場合、受信 FIFO は、ソース・バースト・トランザクションの 終了時に空にはなりません。† 図 20–13 に、受信 FIFO バッファを示します。 図 20‒13. 受信 FIFO バッファ Receive FIFO Buffer Empty Data Out Transmit FIFO Watermark Level Full DMA Controller IC_DMA_RDLR + 1 Data In Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Altera Corporation 第 20 章 : I2C コントローラ I2C コントローラのアドレス・マップおよびレジスタの定義 20–25 I2C コントローラのアドレス・マップおよびレジスタの定義 f アドレス・マップとレジスタ定義は、このハンドブックのボリュームに付属の hps.html ファイルにあります。ファイルを開くには、リンクをクリックします。 モジュールの説明とベース・アドレスを表示するには、以下のモジュールのインス タンスのいずれかをスクロールして、リンクをクリックします。 ■ i2c0 ■ i2c1 ■ i2c2 ■ i2c3 次に、レジスタとフィールドの説明を表示するには、レジスタ名をスクロールして、 クリックします。レジスタのアドレスは、各モジュール・インスタンスのベース・ アドレスからの相対的なオフセットです。 f すべてのモジュールのベース・アドレスは、Cyclone V デバイス・ハンドブック Volume 3 の 「Introduction to the Hard Processor System」の章に記載されています。 改訂履歴 表 20–3 に、このドキュメントの改訂履歴を示します。 表 20‒3. 改訂履歴 バー ジョン 日付 変更内容 2012 年 11 月 1.2 マイナーな更新。 2012 年 5 月 1.1 プログラミング・モデル、アドレス・マップおよびレジスタの定義、クロック、 およびリセットの項を追加。 2012 年 1 月 1.0 初版。 2012 年 11 月 Altera Corporation Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 20–26 Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 第 20 章 : I2C コントローラ 改訂履歴 2012 年 11 月 Altera Corporation