I2Cのタイミング:その定義と仕様の提示方法(Part 2)

I2Cのタイミング:その定義と仕様の提示方法(Part 2)

著者の連絡先情報

Hamza (Sal) Afzal

Sal Afzal

はじめに

本稿では、I2Cのタイミング仕様について説明します。I2Cの規格は多くのメーカーが採用していますが、そのタイミング仕様については必ずしも同じようには提示されていません。そのため、この点について詳しく解説します。なお、I2Cに関する基本情報やプロトコルの詳細については、「I2C Primer: What is I2C? (Part 1)」をご覧ください。

I2Cでは、物理的な2線式のインターフェースを介してデータの転送を行います。そのインターフェースは、単方向のシリアル・クロック(SCL)ラインと双方向のデータ(SDA)ラインで構成されます。通信速度は、Standard Modeが100Kbps、Fast Modeが400Kbps、Fast Mode Plusが1Mbps、High Speed Modeが3.4Mbpsです。I2Cの規格では、それぞれのデータ・レートに対して固有のタイミング仕様が定義されています。データ転送を正しく行うためには、マスタとスレーブがその仕様に従っている必要があります。また、I2Cに対応するデバイスは、選択されたデータ・レートでデータの送受信を行う際、タイミング仕様に従った状態で最大ビット・レートを実現しなければなりません。所定のデータ・レートで正しくデータを転送するためには、セットアップ時間やホールド時間など、細かいタイミング仕様に従う必要があります。以下では、それらの仕様について説明します。

図1は、NXP Semiconductorsの「I2Cバス仕様およびユーザーマニュアル」から抜粋したものです。この図には、Fast Modeで動作するデバイスの様々なタイミング仕様が示されています。アナログ・デバイスの「LTCシリーズ」の場合、I2Cに対応するデバイスの大多数がFast Modeをサポートしています。そこで、ここではFast Modeのタイミング図だけを使用して説明を行うことにします。ただ、以下に示す内容は他のモードでも同様になります。また、I2Cに対応するLTCシリーズのデバイスは、一般的にスレーブとして機能します。そのため、以下では、各仕様がスレーブ・デバイスにどのように適用されるのかということに焦点を絞って解説を進めます。

図1. I2CのFast Modeにおけるタイミング仕様

立上がり時間と立下がり時間

立上がり時間trとは、SDAまたはSCLの立上がりエッジが最大振幅の30%から70%に達するまでにかかる時間のことです。一方、立下がり時間tfは、SDA/SCLの立下がりエッジが最大振幅の70%から30%に達するまでにかかる時間として定義されます(図2)。

図2. 立上がり時間と立下がり時間

セットアップ時間とホールド時間

データのサンプリングを実施する際には、それ以前にデータが安定した状態で保持されていなければなりません。データが安定してからサンプリングが実施されるまでの期間をセットアップ時間と呼びます。通常、セットアップ時間は、SDAの状態が切り替わった時点からSCLの立上がりエッジまでの時間となります。一方、ホールド時間とは、サンプリングが開始された後にデータが安定した状態に維持されていなければならない時間のことです。通常、ホールド時間とは、SDAの状態が切り替わった時点からSCLの立下がりエッジまでの時間のことを指します。セットアップ時間とホールド時間の期間は、データが安定していることが重要です。安定していない場合、データを正しくサンプリングすることはできません。

I2Cの規格では、セットアップ時間/ホールド時間の最小値(動作速度モードによって異なります)が、スタート・コンディション、ストップ・コンディション、データ・ビットに対して定められています。I2Cに対応するスレーブ・デバイスの仕様は、入力データを認識できるようにするために、それらのパラメータの値の範囲内で定義されます。

スタート・コンディションのセットアップ時間とホールド時間

スタート・コンディションは、SCLがハイの間に生じるSDAのローへの変化(SCLがローに遷移する前にSDAがローに遷移するとき)として定義されています(図3)。

図3. スタート・コンディションとストップ・コンディション

スタート・コンディションのホールド時間tHD;STAとは、SCLがローに切り替わる前にデータがローでなければならない最小時間のことです。SDAがハイからローに遷移する際に最大振幅の30%に達してから、SCLがハイからローに遷移する際に最大振幅の70%に達するまでの時間として測定されます(図4)。

図4. (リピート)スタート・コンディションのセットアップ時間とホールド時間

スタート・コンディションのセットアップ時間tSU;STAは、リピート・スタート・コンディションにおいてのみ考慮されるタイミング仕様です。これは、リピート・スタートを開始する前にSDAのラインがハイを維持しなければならない最小時間のことを指します。SCLがローからハイに遷移する際に最大振幅の70%に達してから、SDAがハイからローへ遷移する際に最大振幅の70%に達するまでの時間として測定されます。

ストップ・コンディションのセットアップ時間

ストップ・コンディションでは、SCLがハイに遷移した後にSDAがハイに遷移します(図3)。ストップ・コンディションにはホールド時間の要件はありません。しかし、最小セットアップ時間はやはり必要になります。

ストップ・コンディションのセットアップ時間tSU;STOは、SCLの立上がりエッジが最大振幅の70%に到達してから、SDAの立上がりエッジが最大振幅の30%に達するまでの時間として測定されます(図5)。

図5. ストップ・コンディションのセットアップ時間

データのセットアップ時間

データのセットアップ時間tSU;DATとは、SDAが安定したレベルに達してからSCLが遷移するまでの最小時間のことです。SDAの立下がりエッジが最大振幅の30%に達するか、または立上がりエッジが最大振幅の70%に達してから、SCLの立上がりエッジが最大振幅の30%に達するまでの時間として測定されます(図6)。

図6. データのセットアップ時間

データの有効時間

データの有効性は、データとクロックが遷移する度に測定されます。I2Cの仕様では、個々の速度に対し、最大限に許容されるデータの有効時間tVD;DATが定められています。tVD;DATは、SDAの立下がりエッジが最大振幅の30%に達するか、または立上がりエッジが最大振幅の70%に達してから、SCLの立下がりエッジが最大振幅の30%に達するまでの時間として測定されます。これとは別に、アクノリッジの有効時間tVD;ACKも定義されています。これは、8番目のクロック・ビットの立下がりエッジでだけ測定されるという点を除き、データの有効時間と同じ方法で測定されます(図1)。

バッファ時間

バッファ時間tBUFとは、ストップ・コンディションとスタート・コンディションの間でバスがフリーになる時間のことです。tBUFの間は、バス上の他のデバイスはフリーのバスを検出してデータの送信を試みることができます。多くの場合、スレーブ・デバイスでは、バスがフリーであることが必要な最小限の時間としてtBUFが規定されます(図7)。ストップ・コンディションとスタート・コンディションの間に、それまで別のデバイスと通信していたマスタが、このバッファ時間の経過を待つことなくスレーブ・デバイスとの通信を開始しようとしたとします。その場合、スレーブ・デバイスは新しいスタート・コンディションを、別のトランザクションとして区別することができません。結果として、スレーブ・デバイスは応答しない可能性があります。

図7. バッファ時間

ここまで、様々なタイミング仕様について、その定義を示してきました。続いては、それらがI2Cの仕様においてどのように規定されているのか確認してみましょう。図8は、NXPのI2Cバス仕様およびユーザーマニュアルから抜粋したものです。

図8. NXPが提示しているI2Cのタイミング仕様

この表には、ICの設計者がバスに関する要件を満たすICを設計できるようにするためのパラメータが定義されています。例えば、Fast ModeのI2Cに対応するICは、少なくとも0.6マイクロ秒のスタート・コンディションのホールド時間を認識できるように設計する必要があります。より短いホールド時間を認識するように設計することも可能ですが、まずは0.6マイクロ秒のタイミングを認識できるようにすることが最小限必要になります。

この仕様を基に、メーカーは自社のICについて、I2Cとの互換性を確保するための仕様を定義します。以下、2つの例をご覧いただきましょう。

I2Cのスレーブのタイミング仕様――2つの提示方法

LTC2493」は、分解能が24ビットのシグマ・デルタ型A/Dコンバータです。同ICでは、I2Cのタイミング仕様を図9のように規定しています。

図9. LTC2493におけるI2Cのタイミング仕様

一方、-48Vに対応するホット・スワップ・コントローラ「LTC4261」の場合、I2Cのタイミング仕様は図10のように規定されています。

図10. LTC4261におけるI2Cのタイミング仕様

両者の違いにお気づきでしょうか。どちらのICも同じ仕様なのですが、異なる形で示されていることがわかります。このことは混乱を招く要因になり得ますが、両者の違いは簡単に説明することができます。

LTC2493のタイミング仕様は、ファームウェアの設計者向けのものとして定義されています。言うなれば、設計者が行うべき作業そのものを伝える形になっています。例えば、リピート・スタート・コンディションの最小セットアップ時間は600ナノ秒と規定されています。この規定は、マスタは少なくとも600ナノ秒のセットアップ時間でパルスを供給しなければならないということを意味します。I2Cの仕様をそのまま転記したものであり、ファームウェアの設計者に対して信号のタイミングを指示していることになります。

一方、LTC4261では、ICの視点から仕様が示されています。つまり、ファームウェアの設計者に対し、ICの能力を伝える役割を果たしているということです。例えば、リピート・スタート・コンディションの最小セットアップ時間は、標準値が30ナノ秒で、最大値が600ナノ秒だと記載されています。これは2つの事柄を示しています。1つは、LTC4261は600ナノ秒以下の最小セットアップ時間を保証しているということです(つまり、仕様の必要最小限の要件を満たします)。もう1つは、実際には最小で30ナノ秒のセットアップ時間を認識し、タイミングの面で更に大きなマージンを設けることが可能であるということです。

このように、タイミング仕様としては、数値が同じであっても異なる形で提示することができます。ここで例にとった2つのICは、どちらもI2Cの規格に準拠しており、そのタイミング要件を満たしています。