26
cv_54020-1.2 © 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. †Paragraphs marked with the dagger (†) symbol are Synopsys Proprietary. Used with permission. Cyclone V デバイス・ハンドブック Volume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル 2012 年 11 月 Subscribe ISO 9001:2008 Registered 20. I 2 C コントローラ I 2 C 思執詞竺実鹿朔腰滋実詩琢昨邊G嘖0碕昨戻昨〛徳式執屍燦蛬盗裁崎哉擦際甑㏈ 燵止執支腰採皿索鴈坎鴫持識廸蜃作鷺昨皿妻作仔寺式師実斯辞執栽晒腰EEPROMA/D D/A 思執飼実祉腰思実視紫屍腰採皿索彌采昨爾使屍竺寺竺止紫支昨ⅺ廋削砺ぁ細 参腰斯式仔識質視実祉質鹿使執θSDAχ碕斯式仔識質屍竺紫屍θSCLχ昨斯執寺識作 2 n瑟昨飼旨埼├耨細参崎哉擦際甑雌実詩質寺竺止紫支質斯旨至痔θHPSχ朔腰I 2 C 飼旨碕斯式仔識削〛徳際傘冴薩腰斯 旨至痔質氏児詞司史仔燦使資実字識際傘冴薩昨 4 肴昨 I 2 C 思執詞竺実鹿燦蛬盗裁崎哉 擦際甑林 I 2 C 思執詞竺実鹿朔腰爾旨祉質示実詩擦冴朔旨鴫実字質示実詩埼湊転埼済 崎腰100 姿竺似紫詞 / Kbpsχ擦埼昨④╪示実詩腰擦冴朔鏘彳 400 Kbps 擦埼昨珽) 示実詩燦支治実詞裁崎哉擦際甑祭参晒昨 I 2 C 思執詞竺実鹿朔腰Synopsys ® DesignWare ® APB I 2 CθDW_apb_i2cχ思執詞竺実鹿昨使執旨祉執旨埼際甑 1 I 2 C 思執詞竺実鹿朔腰爾旨祉質示実詩擦冴朔旨鴫実字質示実詩埼湊転際傘皿妻削寺 竺市鹿痔際傘盻ギ歳再三擦際甑爾旨祉碕旨鴫実字歳輪迯削湊転際傘祭碕朔支治実詞 細参崎哉擦在珊甑 I 2 C コントローラの機能 I 2 C 思執詞竺実鹿朔腰逗昨㎏1歳再三擦際甑 400 Kbps 擦埼昨鏘彳屍竺紫屍)燵埼際甑 逗昨 I 2 C 昨湊転昨哉剤参栽埼際甑 I 2 C 斯旨至痔不昨爾旨祉埼再三腰爾旨祉碕裁崎寺竺市鹿痔細参擦際甑 I 2 C 斯旨至痔不昨旨鴫実字埼再三腰旨鴫実字碕裁崎寺竺市鹿痔細参擦際甑 7 似紫詞擦冴朔 10 似紫詞昨仔詩鴫紫斯執市埼際甑 7 似紫詞採皿索 10 似紫詞昨仔詩鴫紫斯執市質示実詩昨辿跏埼腰式実詩採皿索鹿使 詞昨0札淋撒在冴痂瑟昨詞鹿執孜屍斯辞執昨㊬淋埼際甑 飼識屍=徳示実詩埼際甑 =徳採皿索溜徳昨飼紫児仕埼際甑 際冊崎昨飼旨)燵埼瘤榊崎哉傘似紫詞碕飼使詞燦幣X裁擦際甑 DMA 雌執詩斯史実姿執市質使執祉児史実旨埼際甑11? 2012? cv_54020-1.2

20.I Cコントローラ...20–4 第20章:I2Cコントローラ I2Cコントローラの機能の説明 Cyclone V デバイス・ハンドブック 2012年11月 Altera Corporation

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

cv_54020-1.2

© 2012? Altera Corporation. All rights reserved. ALTERA, ARRare trademarks of Altera Corporation and registered in the U.Strademarks or service marks are the property of their respectivsemiconductor products to current specifications in accordanceservices at any time without notice. Altera assumes no responsdescribed herein except as expressly agreed to in writing by Alon any published information and before placing orders for pr

Portions © 2011 Synopsys, Inc. Used with permission. All rightis provided "as is" and without any warranty. Synopsys expressof merchantability, fitness for a particular purpose, and non-in

†Paragraphs marked with the dagger (†) symbol are Synopsys

Cyclone Vデバイス・ハンドブックVolume 3: ハード・プロセッサ・システムのテ2012 年 11 月

11? 2012?cv_54020-1.2

20. I2C コントローラ

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 ハンドシェーキング・インタフェースです。†

IA, CYCLONE, HARDCOPY, MAX, MEGACORE, NIOS, QUARTUS and STRATIX words and logos . Patent and Trademark Office and in other countries. All other words and logos identified as e holders as described at www.altera.com/common/legal.html. Altera warrants performance of its with Altera's standard warranty, but reserves the right to make changes to any products and ibility or liability arising out of the application or use of any information, product, or service tera. Altera customers are advised to obtain the latest version of device specifications before relying oducts or services.

s reserved. Synopsys & DesignWare are registered trademarks of Synopsys, Inc. All documentation ly disclaims any and all warranties, express, implied, or otherwise, including the implied warranties fringement, and any warranties arising out of a course of dealing or usage of trade.

Proprietary. Used with permission.

クニカル・リファレンス・マニュアル

Subscribe

ISO 9001:2008 Registered

20–2 第 20 章 : I2C コントローラI2C コントローラのブロック図およびシステム統合

I2C コントローラのブロック図およびシステム統合I2C コントローラは、スレーブ・インタフェース、I2C インタフェース、およびそれ

ら 2 つのインタフェース間でデータをバッファリングするための FIFO ロジックから

構成されます。 †

ホスト・プロセッサは、32 ビットのスレーブ・インタフェースを介して I2C コント

ローラに関するデータ、制御、およびステータスの情報にアクセスします。 図 20–1 に、 I2C コントローラのブロック図を示します。

I2C コントローラは、以下のモジュールとインタフェースで構成されています。

■ マスタがデータを直接読み出しまたは書き込みをするコントロールおよびステー

タス・レジスタ(CSR)および DMA をアクセスすることができ、CSR のアクセス

と DMA 転送のスレーブ・インタフェースです。

■ ステータス・レベルと一緒に、Rx FIFO と Tx FIFO バッファのレジスタ・バンクとコ

ントローラを保持する送信データおよび受信データ用 2 つの FIFO バッファです。

■ パラレル - シリアルおよびシリアル - パラレル変換するためのシフト・ロジック

です。

■ Rx シフト – デザインにデータを受信し、バイト形式でそれを抽出します。

■ Txシフト – I2Cバス上の転送のためにCPUによって供給されたデータを提示しま

す。

図20‒1. I2C コントローラのブロック図

I2C Interface(to I/O Pins)

MPU

IRQ

I2C Controller

Slave Interface

Register Block

Control

DMA Interface

Interrupt Controller

Rx Filter

Tx & Rx Shift

Tx & Rx FIFO

DMAController

ClockManager

ResetManager

L4 Peripheral Bus

Cyclone Vデバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–3I2C コントローラの機能の説明

■ 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–4 第 20 章 : I2C コントローラI2C コントローラの機能の説明

動作ユーザーは、ソフトウェアを介してどちらかのモードにするために、I2C コントロー

ラを制御することができます。

■ 他の I2C スレーブとの通信する I2C マスタのみ;または

■ 1 つ以上の I2C マスタとの通信する I2C スレーブのみ。

マスタはクロックを生成してデータ転送を制御します。スレーブは、マスタとの間

での送信または受信のうちのいずれかを行います。データの確認はデータを受信し

たデバイスによって送信され、マスタまたはスレーブのどちらか一方です。前述し

たように、I2C プロトコルは、複数のマスタが I2C バス上に存在することを可能にし、

バス権を決定するために、アービトレーション手順を使用します。†

各スレーブには、システム設計者によって決定される固有のアドレスがあります。

マスタがスレーブと通信する場合には、マスタがデータを送信するかスレーブから

データを受信するか決定するスレーブのアドレスとコントロール・ビット(R/W)を

続いて、マスタは START/RESTART 条件を送信します 。次に、スレーブがアドレスの

後に応答(ACK)パルスを送信します。 †

マスタ(マスタ・トランスミッタ)がスレーブ(スレーブ・レシーバ)に書き込む

場合、レシーバは、1 バイトのデータを受信します。マスタが STOP 条件で送信を終

了するまで、このトランザクションは続行されます。マスタがスレーブ(マスタ・

レシーバ)から読み出す場合、スレーブ(スレーブ・トランスミッタ)は 1 バイト

のデータをマスタに送信し、次に、マスタは ACK パルスを使用してトランザクショ

ンを通知します。このトランザクションは、 終バイトの受信後のトランザクショ

ンの未確認(NACK)によってマスタが送信を終了するまで継続し、その後、マスタ

は RESTART 条件を発行した後に STOP 条件またはアドレスを他のスレーブに発行し

ます。†

図 20–2 に、I2C バス上のデータ転送の動作を示します。

I2C コントローラは、同期シリアル・インタフェースです。 SDA ラインは双方向信号

であり、STOP、START、および RESTART 条件を除いて、SCL ラインが Low の間のみ

変更します。出力ドライバは、バス上でワイヤ AND 関数を実行するためのオープ

ン・ドレインまたはオープン・コレクタです。バス上のデバイスの 大数は、400 pFの 大容量の仕様のみによって制限されます。データはバイト・パッケージで送信

されます。 †

図20‒2. I2C バス上のデータ転送

MSBSDA

SCL 1S or R

Start or RestartCondition

Stop & RestartCondition

Byte CompleteInterrupt within

Slave

SCL Held Low whileServicing Interrupts

2 7 8 9 1 2 3 - 8 9 R or P

P or R

LSBACK

from Slave

ACKfrom Receiver

Cyclone Vデバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–5I2C コントローラの機能の説明

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 条件のタイミング図†

Data Line StableData Valid

SDA

SCL S

StartCondition

StopCondition

Data ChangeAllowed

Data ChangeAllowed

P

2012 年 11 月 Altera Corporation Cyclone Vデバイス・ハンドブックVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

20–6 第 20 章 : I2C コントローラI2C コントローラの機能の説明

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 に設定されている場合、マスタはスレーブか

ら読み出します。 †

10 ビットのアドレス・フォーマット10 ビット・アドレッシングの間、2 つのバイトは、10 ビットのアドレスを設定する

ために転送されます。 初の 5 ビット(ビット 7:3)は、スレーブ・アドレス・ビッ

ト 9:8 を設定し、LSB ビット(ビット 0)は R/W ビットであり、これによって次の 2ビット(2:1)に続く、10 ビットの転送であることをスレーブに通知します。転送さ

れた 2 つ目のバイトは、スレーブ・アドレスのビット 7:0 に設定されます。図 20–5は、10 ビットのアドレス形式を示します。†

図20‒4. 7 ビットのアドレス・フォーマット †

図 20‒5. 10 ビットのアドレス・フォーマット †

MSB

Slave Address

S

S: Start ConditionR/W: Read/Write PulseACK: Acknowledge (sent by slave)

A6 A5 A4 A3 A2 A1 A0 R/W ACK

LSB

1 1 1 1 0

Reserved for 10-Bit Address

S A6A7 A5 A4 A3 A2 A1 A0

S: Start ConditionR/W: Read/Write PulseACK: Acknowledge (sent by slave)

ACKACKR/WA8A9

Cyclone Vデバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–7I2C コントローラの機能の説明

表 20–1 は、特殊な目的と予約の 初のバイト・アドレスを定義しています。†

プロトコルの送信および受信マスタは、マスタ・トランスミッタまたはマスタ・レシーバのどちらか一方として

動作し、バスとのデータ送信とデータ受信を開始することができます。スレーブは、

それぞれスレーブ・トランスミッタまたはスレーブ・レシーバのどちらか一方とし

て動作し、バスとのデータの送信とデータの受信のために、マスタからの要求に応

答します。 †

マスタ・トランスミッタとスレーブ・レシーバすべてのデータは、データ転送ごとに転送されるバイト数を制限せずに、バイト形

式で送信されます。マスタがアドレスと R/W ビットを送信する、またはマスタがス

レーブへのデータのバイトを送信した後、スレーブ・レシーバはアクノリッジ確認

信号(ACK)で応答する必要があります。スレーブ・レシーバが ACK パルスで応答

しない場合には、マスタは STOP 条件を発行することによって転送を中止します。ス

レーブは、マスタが転送を中断できるように、SDA ラインを High のままにしま

す。†

表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」は気にしないことを示します。

2012 年 11 月 Altera Corporation Cyclone Vデバイス・ハンドブックVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

20–8 第 20 章 : I2C コントローラI2C コントローラの機能の説明

図 20–6 に示すように、マスタ・トランスミッタがデータを送信する場合、データの

すべてのバイトが受信された後、スレーブ・レシーバは、ACK パルスでマスタ・ト

ランスミッタに応答します。†

マスタ · レシーバおよびスレーブ・トランスミッタ図 20–7 に示すように、マスタがデータを受信している場合、 後のバイトを除い

て、データのバイトが受信された後、マスタは ACK パルスを使用してスレーブ・ト

ランスミッタに応答します。これは、これが 後のバイトであることをマスタ・レ

シーバによってスレーブ・トランスミッタに通知する方法です。スレーブ・トラン

スミッタは、マスタが STOP 条件を発行できるように、未確認(NACK)を検出後に

SDA ラインを放棄します。 †

マスタが STOP 条件でバスを放棄しない場合、マスタは RESTART 条件を発行するこ

とができます。それは ACK パルス後に発生することを除いて、START 条件と同じで

す。マスタ・モードで動作すると、I2C コントローラは、異なる方向の転送を使用し

て同じスレーブとの通信を行うことができます。I2C コントローラがサポートする組

み合わせ形式のトランザクションについて詳しくは、 20–5 ページの「組み合わせ形

式」 を参照してください。†

図20‒6. マスタ · トランスミッタのプロトコル†

0 (Write)

0 (Write)

Slave Address

Slave AddressFirst 7 Bits

Slave AddressSecond Byte

S

S

Data Data

Data P

PA

A A

A

11110xxx

R/W

R/W

A/A

A/A

From Master to Slave

From Slave to Master

S: Start ConditionP: Stop ConditionR/W: Read/Write PulseA: Acknowledge (SDA Low)A: No Acknowledge (SDA High)

7-Bit Address

10-Bit Address

Cyclone Vデバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–9I2C コントローラの機能の説明

1 IC_TAR のターゲット・スレーブ・アドレス・レジスタが再プログラムされる前に、

I2C コントローラは、シリアル・ポート (I2C_DYNAMIC_TAR_UPDATE = 1)上で非アク

ティブでなければなりません。 †

START BYTE 転送プロトコル START BYTE 転送プロトコルは、オンボード専用の I2C ハードウェア・モジュールを

持たないシステム用に設定されています。 I2C コントローラがスレーブとして設定さ

れる場合、常にサポートされた 高速度で I2C バスをサンプルするため、START BYTE転送が必要ありません。しかし、 I2C コントローラがマスタとして設定される場合、

それは、スレーブ・デバイスがそれを必要とすると、各転送の開始時に START BYTE転送の生成をサポートしています。このプロトコルは、図 20–8 に示すように、1 に

続いて送信されている 7 つのゼロで構成されます。これは、マイクロコントローラ

が 0 を検出するまで、バスをポーリングしているプロセッサがアドレス・フェーズ

をアンダー・サンプルできるようにします。マイクロコントローラが 0 を検出する

と、アンダー・サンプリング・レートからマスタの正しいレートに切り替わりま

す。†

START BYTE は、次の手順があります。 †

1. マスタは START 条件を生成します。

2. マスタは START バイト(0000 0001)を送信します。 †

3. マスタは ACK クロック・パルスを送信します。(バス上で使用されるバイト処理

形式に準拠するようにのみ存在) †

図20‒7. マスタ・レシーバのプロトコル †

0 (Write)

1 (Read)

Slave Address

Slave AddressFirst 7 bits

Slave AddressSecond Byte

S

S R

From Master to Slave

From Slave to Master

S: Start ConditionR: Restart ConditionP: Stop ConditionR/W: Read/Write PulseA: Acknowledge (SDA Low)A: No Acknowledge (SDA High)

Data Data

Data P

PA

A A

A

11110xxx

R/WSlave Address

First 7 bits AR/W

A

A

1 (Read)11110xxx

7-Bit Address

10-Bit Address

R/W

図20‒8. START BYTE 転送†

(High)

SDA

SCL S

Dummy Acknowledge

ACK

Start Byte 00000001

Sr1 2 7 8 9

2012 年 11 月 Altera Corporation Cyclone Vデバイス・ハンドブックVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

20–10 第 20 章 : I2C コントローラI2C コントローラの機能の説明

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. 複数のマスタ・アービトレーション †

MSBSDA

SCL

Matching Data

SDA Lines Up withDATA1 Start Condition

1

0MSBDATA2

SDA Mirrors DATA2

MSBDATA1 DATA1 Loses Arbitration

Cyclone Vデバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–11I2C コントローラの機能の説明

■ 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. 複数のマスタ ·クロックの同期 †

CLKB

CLKA

Wait State

SCL

SCL Low Transition ResetsAll Clocks; Start CountingTheir Low Periods

SCL Transitions HighWhen All Clocks Are in a High State

Start Counting High Period

2012 年 11 月 Altera Corporation Cyclone Vデバイス・ハンドブックVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

20–12 第 20 章 : I2C コントローラI2C コントローラの機能の説明

クロック周波数のコンフィギュレーションI2C コントローラをマスタとして構成する場合、すべての I2C バス・トランザクショ

ンが適切な I/O タイミングを確保するために実行できる前に、SCL カウント・レジス

タを設定する必要があります。 †

次の 4 つの SCL カウント・レジスタがあります。

■ 標準速度の 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 †

1 これらのレジスタは、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デバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–13I2C コントローラの機能の説明

適切な SCL クロックの High 時間と Low 時間を設定するために必要な l4_sp_clk クロック・パルスの適切な数を計算する式は、次のとおりです。 †

SDA ホールド時間I2C プロトコル仕様では、標準モードと高速モードの SDA 信号では 300 ns のホール

ド時間を必要とします。 SCL 信号と SDA 信号上のボード遅延は、I2C マスタでホール

ド時間の要件が I2C スレーブではなく I2C マスタで満たされている(またはその逆)

ことを意味します。各アプリケーションは、異なるボード遅延が発生するため、I2Cコントローラは、SDA ホールド時間の動的な調整を可能にするためにソフトウェア・

プログラム可能なレジスタの IC_SDA_HOLDが含まれています。†

式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 †

2012 年 11 月 Altera Corporation Cyclone Vデバイス・ハンドブックVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

20–14 第 20 章 : I2C コントローラI2C コントローラの機能の説明

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デバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–15I2C コントローラのプログラミング・モデル

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–16 第 20 章 : I2C コントローラI2C コントローラのプログラミング・モデル

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デバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–17I2C コントローラのプログラミング・モデル

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–18 第 20 章 : I2C コントローラI2C コントローラのプログラミング・モデル

バルク転送用のスレーブ転送の動作標準の 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デバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–19I2C コントローラのプログラミング・モデル

最初のコンフィギュレーションマスタ・モード動作の場合、ターゲット・アドレスとアドレス形式は、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–20 第 20 章 : I2C コントローラI2C コントローラのプログラミング・モデル

■ 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デバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–21I2C コントローラのプログラミング・モデル

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 種類のウォーターマーク・レベルの設定を考え

ます。 †

■ ケース 1:IC_DMA_TDLR = 16: †

■ 送信 FIFO ウォーターマーク・レベル = IC_DMA_TDLR = 16: †

■ DMA バースト長 = FIFO_DEPTH - IC_DMA_TDLR = 48: †

■ I2C 送信 FIFO_DEPTH = 64: †

■ ブロック・トランザクションのサイズ = 240: †

2012 年 11 月 Altera Corporation Cyclone Vデバイス・ハンドブックVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

20–22 第 20 章 : I2C コントローラI2C コントローラのプログラミング・モデル

図 20–11 に、 ウォーターマーク・レベルが 16 に等しいときの送信 FIFO バッファを示

します。

必要なバースト・トランザクションの数は、バーストあたりのデータ・アイテム

数で割ったブロック・サイズに等しくなります。

ブロック・トランザクションのサイズ /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‒11. 送信 FIFO ウォーターマーク・レベル = 16

FIFO_DEPTH = 64

DMAControllerTransmit FIFO

Watermark Level

Data In

Data Out

IC_DMA_TDLR = 16

FIFO_DEPTH - IC_DMA_TDLR = 48

Empty

Full

Transmit FIFO Buffer

図20‒12. 送信 FIFO ウォーターマーク・レベル = 48

FIFO_DEPTH = 64

DMAController

Transmit FIFOWatermark Level

Data In

Data OutIC_DMA_TDLR = 48

FIFO_DEPTH - IC_DMA_TDLR = 16

Transmit FIFO Buffer

Empty

Full

Cyclone Vデバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–23I2C コントローラのプログラミング・モデル

ブロック内のバースト・トランザクションの数:†

ブロック・トランザクションのサイズ /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–24 第 20 章 : I2C コントローラI2C コントローラのプログラミング・モデル

受信 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 バッファ

IC_DMA_RDLR + 1

DMAController

Data In

Data Out

Empty

Full

ReceiveFIFO Buffer

Transmit FIFOWatermark Level

Cyclone Vデバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル

第 20 章 : I2C コントローラ 20–25I2C コントローラのアドレス・マップおよびレジスタの定義

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 第 20 章 : I2C コントローラ改訂履歴

Cyclone Vデバイス・ハンドブック 2012 年 11 月 Altera CorporationVolume 3: ハード・プロセッサ・システムのテクニカル・リファレンス・マニュアル