20. I2C コントローラ

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