(57)【要約】Ｉ２Ｃクロック生成器を、多様な方法を用いてインプリメントする。そのような方法の１つを使用して、Ｉ２Ｃバス上のクロック信号(110)を制御するためのステートマシンに配置される論理回路を用いる方法をインプリメントする。ステートマシンの第１の状態(202)は、クロックストレッチング遅延を実行するか否かを判定する。ステートマシンの第２の状態(206)は、前記Ｉ２Ｃバスが、標準クロックモードにおいてか、または、他の複数の高速クロックモードのうちの１つで動作するように設定されているか否かを判定する。ステートマシンの第３の状態(210)は、クロック信号を一方の２値論理状態で駆動させる前に、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、他方の２値論理状態で駆動させ、そして、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、前記一方の２値論理状態のままにする。
2009535677.tif 000002
【特許請求の範囲】
【請求項１】
クロック信号を有するＩ２Ｃバスに使用し、該Ｉ２Ｃバス上のクロック信号を制御するために論理回路を用いる方法であって、該論理回路は、当該方法をインプリメントするためにステートマシンに配置され：
前記ステートマシンの第１の状態において、クロックストレッチング遅延を実行するか否かを判定するステップと、
前記ステートマシンの第２の状態において、かつクロックストレッチング遅延を実行しないという判定に応答して、前記Ｉ２Ｃバスが、標準クロックモードにおいてか、またはファーストクロックモードを含む他の複数の高速クロックモードのうちの１つで動作するように設定されているか否かを判定するステップと、
前記ステートマシンの第３の状態において、かつデバイスが前記標準クロックモード又は前記ファーストクロックモードのいずれでも動作するようには設定されていないという判定に応答して、クロック信号を一方の２値論理状態で駆動させる前に、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、他方の２値論理状態に駆動させ、さらに、クロック信号を前記他方の２値論理状態で駆動させる前に、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、前記一方の２値論理状態のままにするステップと、
を含む、Ｉ２Ｃバスのクロック信号制御用論理回路の使用方法。
【請求項２】
前記複数の高速クロックモードが、ファーストクロックモード及びファーストプラスクロックモードを含む、請求項１に記載の方法。
【請求項３】
前記クロック信号を、前記Ｉ２Ｃバスと通信できるように結合される外部信号に同期させるステップをさらに含む、請求項１に記載の方法。
【請求項４】
前記ステートマシンの他の状態において、前記Ｉ２Ｃバス上での通信に応答してエラーを検出し、かつ対処するステップをさらに含む、請求項１に記載の方法。
【請求項５】
クロック信号を有するＩ２Ｃバスに使用し、該Ｉ２Ｃバス上のクロック信号を制御するための方法であって、当該方法は：
クロックストレッチング遅延を実行するか否かを判定するステップと；
クロックストレッチング遅延を実行しないという判定に応答して、前記Ｉ２Ｃバスが、標準クロックモードで動作するように設定されているか否かを判定するステップと；
デバイスが標準クロックモードで動作するように設定されていないという判定に応答して、前記Ｉ２Ｃバスが、ファーストクロックモードで動作するように設定されているか否かを判定するステップと；
デバイスがファーストクロックモードで動作するように設定されていないという判定に応答して、クロック信号をハイに駆動させる前に、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間ロウに駆動させ、さらに、クロック信号をロウに駆動させる前に、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、ハイのままとするステップと、
を含む、Ｉ２Ｃバスのクロック信号制御方法。
【請求項６】
Ｉ２Ｃバスのクロック信号を制御するための論理回路であって、当該論理回路は：
クロックストレッチング遅延を実行するか否かを判定するために第１の状態にて動作する第１の手段と；
クロックストレッチング遅延を実行しないという判定に応答して、前記Ｉ２Ｃバスが、標準クロックモードにおいてか、または、ファーストクロックモードを含む他の複数の高速クロックモードのうちの１つで動作するように設定されているか否かを判定するために第２の状態にて動作する第２の手段と；
デバイスが前記標準クロックモード又は前記ファーストクロックモードのいずれでも動作するように設定されていないという判定に応答して、クロック信号を、一方の２値論理状態で駆動させる前に、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、他方の２値論理状態で駆動させ、さらに、クロック信号を前記他方の２値論理状態に戻るように駆動させる前に、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、前記一方の２値論理状態のままにするために第３の状態にて動作する第３の手段と、
を含むステートマシン手段を備える、論理回路。
【請求項７】
Ｉ２Ｃバスのクロック信号を制御するための論理回路であって、当該論理回路は：
第１の状態では、クロックストレッチング遅延を実行するか否かを判定し；
クロックストレッチング遅延を実行しないという判定に応答して、第２の状態では、前記Ｉ２Ｃバスが、標準クロックモードにおいてか、または、ファーストクロックモードを含む他の複数の高速クロックモードのうちの１つで動作するように設定されているか否かを判定し；
前記デバイスが前記標準クロックモード又は前記ファーストクロックモードのいずれでも動作するように設定されていないという判定に応答して、第３の状態では、クロック信号を一方の２値論理状態で駆動させる前に、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、他方の２値論理状態で駆動させ、さらに、クロック信号を前記他方の２値論理状態に駆動する前に、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、前記一方の２値論理状態のままにさせる、
ように構成したステートマシンを備える、論理回路。
【請求項８】
前記複数の高速クロックモードが、ファーストクロックモード及びファーストプラスクロックモードを含む、請求項７に記載の論理回路。
【請求項９】
前記ステートマシンが、前記クロック信号を、前記Ｉ２Ｃバスと通信できるように結合される外部信号に同期させるようにも配置されている、請求項７に記載の論理回路。
【請求項１０】
前記ステートマシンが、該ステートマシンの他の状態では、前記Ｉ２Ｃバス上での通信に応答してエラーを検出し、かつ対処するようにも配置されている、請求項７に記載の論理回路。
【請求項１１】
前記複数の高速クロックモードが、ファーストクロックモード及びファーストプラスクロックモードを含み、前記ステートマシンが、前記Ｉ２Ｃバスと通信できるように結合される外部信号に前記クロック信号を同期させるようにも配置されており、さらに、前記ステートマシンが、前記ステートマシンの他の状態では、前記Ｉ２Ｃバス上での通信に応答してエラーを検出して対処するようにも配置されている、
請求項７に記載の論理回路。
【請求項１２】
前記クロック信号の駆動が、前記クロック信号をハイ電圧に駆動させる前に、前記クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間ロウ電圧に駆動し、さらに、前記クロック信号をロウ電圧に駆動する前に、前記クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間ハイ電圧のままとすることを含む、
請求項１１に記載の論理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２００６年３月３１日に先に出願した、米国特許仮出願第６０／７８８，５７０号、名称“State Machine for Generation of an I2C Clock”の優先権を主張するものである。
【０００２】
本発明は、概してＩ２Ｃクロックの生成に関し、より詳細には、ファーストプラスモード（Ｆａｓｔ−Ｐｌｕｓ  Ｍｏｄｅ）に対するＩ２Ｃクロックのインプリメンテーションに関する。
【背景技術】
【０００３】
電気システムでは、システムのコンポーネント間で情報を送信するのに、相互接続が用いられることがよくある。そのような相互接続は、一般に、ひとまとめにされた１つ以上の信号線で構成され、バスとしても知られている。システムのコンポーネントは、情報を送信するために、バスラインの電圧レベルを適切なレベルに駆動しなければならない。多くの場合、仕様によって、あるシステムにおいて電圧がどの程度高速又は低速に変化することができるかが決定されている。たとえば、システムの幾つかは、集積回路間（Inter-Integrated Circuit）バス、即ち、Ｉ２Ｃバスとして既知のバスプロトコルを使用している。
【０００４】
Ｉ２Ｃバスは、システム内の集積回路間の通信リンクを成す制御バスである。フィリップス社によって１９８０年代初期に開発された、ソフトウェアで規定されたプロトコルを伴うこの簡単な２線式のバスは、システム制御に対する世界的なデファクトスタンダードになるまで進化し、温度センサおよび電圧レベル変換器から、ＥＥＰＲＯＭ、汎用Ｉ／Ｏ、Ａ／ＤおよびＤ／Ａ変換器、ＣＯＤＥＣおよび全ての種類のマイクロプロセッサまでのあらゆるもので見受けられるようになった。名称を「Two-Wire Bus-System Comprising a Clock Wire and a Data Wire for Interconnecting a Number of Stations」とする、Moelands等の米国特許第４，６８９，７４０号には、クロックバスワイヤとデータバスワイヤとによって相互接続される多数のステーションを備えたコンピュータシステムが開示されており、これらのワイヤは、ステーションによってワイヤ上に生成される信号からワイヤードロジックバスを形成し、前記米国特許は、その全内容を参考文献として明細書に含めるものとする。Ｉ２Ｃデバイスのインプリメンテーションに関する他の情報は、Ｉ２Ｃの仕様である“The I2C Bus Specifications（バージョン２．１、２０００年１月）”でも見出すことができる。
【０００５】
Ｉ２Ｃバスによって、スペースをセーブし、かつ全体のコストを低減することもできる。Ｉ２Ｃ仕様を用いることにより、設計者は、ブロック図から最終的なハードウェアへと迅速に移行させることができ、新規のデバイス及び機能を、既存のバスインタフェースへ簡単に追加することができる。システムが数世代にわたって進化するにつれて、Ｉ２Ｃデバイスは、残りのシステムに影響を与えることなく、容易に追加したり又は除外したりすることができる。２線構造であるため配線が少なくなり、ＰＣＢを非常に小さくすることができる。配線が少なく、比較的簡単なプロトコルであるため、デバッグおよびテストもより簡単になる。
【０００６】
Ｉ２Ｃバスが２０年以上もの間存続していることには幾つかの理由がある。まず、近年導入されたハブ、バスリピータ、双方向性スイッチおよびマルチプレクサは、バスがサポートできるデバイスの数を増加させ、最大４００ｐＦというバス容量によって当初制限されていたデバイスの数を拡大させた。また、ソフトウェア制御の衝突検出およびアービトレーションによって、複雑なシステムにおいても、データの破損を回避し、パフォーマンスの信頼性が保証されている。さらに、パフォーマンスだけでなく、使い易くもある。２本のシンプルな線が、システムにおける全てのＩＣを接続する。任意のＩ２Ｃデバイスを共通のＩ２Ｃバスに取り付けることができ、さらに、任意のマスタデバイスが、任意のスレーブデバイスと情報をやり取りすることができる。ソフトウェア制御のアドレス指定スキームによって、アドレス復号ハードウェアの必要がなくなり、さらに、Ｉ２Ｃプロトコルによって既に規定されているため、外部制御ロジックを設計してデバックを行う必要もない。さらに、バスは、パフォーマンスと足並みをそろえ、現在では、増加し続けるクロック速度を用いてインプリメントされる、４つのレベルのデータ転送レートを提供する。例えば、クロック速度は、標準モードでは１００ＫＨｚまで、ファーストモード（Ｆａｓｔ  ｍｏｄｅ）では４００ＫＨｚまで、ファーストモードプラス（Ｆａｓｔ  Ｍｏｄｅ  Ｐｌｕｓ）では１ＭＨｚまで、ハイスピードモード（Ｈｉｇｈ−Ｓｐｅｅｄ  Ｍｏｄｅ）では３．４ＭＨｚまでとすることができる。ハイスピードモードはクロック速度を３．４ＭＨｚまでとすることができるも、標準、ファースト及びファーストプラスの各モードにとって不要な、追加のバスロジックを必要とする。
【０００７】
標準、ファースト及びファーストモードプラスの仕様では、オンチップＩ２ＣインタフェースがオープンドレインのＮＭＯＳプルダウンデバイスを含み、一方で、単一のプルアップ抵抗は、Ｉ２Ｃバス上の全てのデバイスに共通である。ファーストモードプラスの増大したバス速度を補償するために、この仕様では、４００ＫＨｚ〜１ＭＨｚの周波数を有するクロック信号を生成することを要求している。後方互換性を維持するために、標準モードとファーストモードとに互換性を有するクロック信号を生成する必要もある。
【０００８】
様々な方法で、標準及びファーストモードの仕様に互換性を有するクロック信号を生成することができる。そのような方法の１つは、フィリップス・セミコンダクタ社によって製造されているデバイスである、ＰＣＦ８５８４及びＰＣＡ９５６４によってインプリメントすることができる。これらのデバイスに関する詳細情報は、データシート「PCF8584 I2C Bus Controller（１９９７年１０月）」及び「PCA9564 Parallel Bus to I2C Controller（２００４年６月）」で見出すことができる。しかしながら、このようなデバイスは、ファーストプラスモードと互換性を有するクロック信号を生成する能力に欠けている。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
これら及び他の問題は、Ｉ２Ｃバスのクロック信号を生成する際に問題を呈する。したがって、Ｉ２Ｃバスに対してファーストプラスモードと互換性があるクロック信号を生成するのには改善の余地がある。
【課題を解決するための手段】
【００１０】
本発明の様々な態様は、上述した問題に対処し、かつ克服するやり方で、ファーストプラスモードに対するＩ２Ｃクロックを生成するための方法及び回路装置に向けられるものである。
【００１１】
本発明の一実施態様によれば、クロック信号を有するＩ２Ｃバスに使用するための方法をインプリメントする。本方法は、Ｉ２Ｃバス上のクロック信号を制御するのに論理回路を使用する。この論理回路は、ステートマシンに配置される。ステートマシンの第１の状態は、クロックストレッチング遅延をインプリメントするか否かを判定する。ステートマシンの第２の状態は、クロックストレッチング遅延をインプリメントしないという判定に応答して、Ｉ２Ｃバスが、標準クロックモードにおいてか、または他の複数の高速クロックモード（そのうちの１つは、ファーストクロックモードである）のうちの１つで動作するように設定されているか否かを判定する。ステートマシンの第３の状態は、デバイスが標準クロックモードでも、ファーストクロックモードでも動作するようには設定されていないという判定に応答して、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、一方の２値論理状態で駆動する。クロック信号は、それから、他方の２値論理状態で駆動させることができる。クロック信号は、一方の２値論理状態に戻るように駆動される前に、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、他方の２値論理状態のままである。
【００１２】
他の実施態様によれば、Ｉ２Ｃバスのクロック信号を制御するための論理回路をインプリメントする。この論理回路は、複数の状態をとるステートマシンを含む。このステートマシンの第１の状態は、クロックストレッチング遅延をインプリメントするか否かを判定する。クロックストレッチング遅延をインプリメントしないという判定に応答して、第２の状態は、Ｉ２Ｃバスが、標準クロックモードにおいてか、または他の複数の高速クロックモード（そのうちの１つは、ファーストクロックモードである）のうちの１つで動作するように設定されているか否かを判定する。デバイスが標準クロックモードでも、ファーストクロックモードでも動作するようには設定されていないという判定に応答して、第３の状態は、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、一方の２値論理状態で駆動する。クロック信号は、それから、クロック信号がその一方の２値論理状態に戻るように駆動される前に、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、他方の２値論理状態で駆動させることができる。
【００１３】
上述した本発明の概要は、本発明の各実施形態またはそのすべてのインプリメンテーションについて説明することを意図したものではない。本発明の利点および功績を、本発明をより完全に理解させるべく、添付図面とともに、以下の詳細な説明および請求の範囲を参照して明らかにする。
【００１４】
本発明は、本発明の多様な実施形態についての以下の詳細な説明を参酌して、関連する添付図面によってより完全に理解されるであろう。
【発明を実施するための最良の形態】
【００１５】
本発明は、多様な変更および代替物に従うものであるが、本発明の具体例を、図面において実施例として示し詳細に説明する。しかしながら、本発明を、記載する実施例に制限するものではないことを理解されたい。それどころか、添付の請求の範囲によって規定される本発明の範囲内での全ての変更、同等物および代替物をカバーするものである。
【００１６】
本発明は、Ｉ２Ｃファーストプラスモードのデバイスを含む多様なＩ２Ｃデバイス及び方法に適用可能である。しかしながら、本発明は必ずしもそのような用途に限られるわけではなく、本発明の様々な態様の正しい認識は、そのような環境における、実施例に関する説明を通じて最善のものが得られる。
【００１７】
本発明の一実施例によれば、ステートマシンを、約４００ＫＨｚ〜１ＭＨｚのクロック信号を生成するようにインプリメントする。ステートマシンの第１の状態は、クロックストレッチング遅延を実行するか否かを判定する。ステートマシンの第２の状態は、Ｉ２Ｃバスが、標準クロックモードにおいてか、またはファーストクロックモード若しくはファーストプラスクロックモードを含む他の複数のの高速クロックモードのうちの１つで動作するように設定されているか否かを判定する。デバイスが標準クロックモード又はファーストクロックモードのいずれかでも動作するようには設定されていない場合には、ステートマシンの第３の状態が、クロック信号を一方の２値論理状態で駆動させる前に、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、他方の２値論理状態に駆動させ、それから、クロック信号を、約０．５マイクロ秒以上で、約２．５マイクロ秒未満の間、一方の２値論理状態のままとする。デバイスは、４００ＫＨｚ〜１ＭＨｚのクロック信号を発生するために、これらの状態を繰返すことができる。
【００１８】
本発明の他の実施例によれば、ステートマシンは、Ｉ２ＣバスのトランザクションのためのＩ２Ｃクロック（ＳＣＬ）を生成する。ステートマシンは、通信を開始及び停止するために、それぞれ、Ｉ２ＣバスにＳＴＡＲＴ及びＳＴＯＰコンディションも生成する。ステートマシンは、そのクロックを、ＳＣＬラインの他のクロックと同期させる。ステートマシンは、クロックストレッチングも許容する。ステートマシンは、標準、ファースト及びファーストプラスモードの３つの異なるＩ２Ｃ周波数モードに対するタイミングをとることができる。ステートマシンは、プログラム可能で、かつエラー状態から適切に正常な状態に戻すのに用いられるタイムアウト機能を備える。ステートマシンは、タイムアウト機能をインプリメントするかどうかを判定するのに用いられるイネーブル信号に応答する。この機能がイネーブルになると、ステートマシンは、Ｉ２Ｃバスのエラーを示す前に、タイムアウト値に等しい期間待機する。
【００１９】
次に図面を参照するに、図１は、本発明の実施例による、標準、ファースト及びファーストプラスモードに対するＩ２Ｃシステムのブロック図を示す。Ｉ２Ｃデバイス１０２は、標準１０４、ファースト１０６及びファーストプラス１０８の３つのＩ２Ｃクロックモードをインプリメントする。これらのモードは、クロック信号１１０（ＳＣＬ）及びデータ信号１１２（ＳＤＡ）をＩ２Ｃバスに与える速度を決定する。標準モード１０４は、約１００ＫＨｚ未満のクロックを使用し、ファーストモード１０６は、約４００ＫＨｚ未満のクロックを使用し、さらに、ファーストプラスモード１０８は、約１ＭＨｚ未満のクロックを使用する。生成されたＳＣＬ１１０のクロックは、デバイス１１４によって受信され、ＳＤＡ１１２とともに、デバイス間でデータを転送するのに用いられる。
【００２０】
図２は、本発明の実施例による、ファーストモードプラスの仕様と互換性があるクロック信号を生成する方法のフローチャートである。図２は、判定ブロック２０４、２０６及び２１０と、出力モード２０２、２０８、２１２、２１４及び２１６とを示す。これらの状態及び判定ブロックは、たとえば、マスタＩ２Ｃデバイスのステートマシンによってインプリメントされる。このステートマシンは、プログラマブル・ロジック、個別の回路、プロセッサを介してインプリメントされるソフトウェア及び任意の同様の方法を用いてインプリメントすることができる。
【００２１】
ステートマシンは、デバイスがクロック信号の生成を要求していると判定すると、出力モード２０２に入る。このような判定はＩ２Ｃ仕様に基づいており、他のＩ２Ｃデバイスへの応答や、他のＩ２Ｃデバイスからのデータ要求のような状況を含む。出力モード２０２の期間中に、クロック信号は、論理ロウ値に駆動される。
【００２２】
判定ブロック２０４は、クロックストレッチングをインプリメントすべき期間中、論理ロー値を維持する。クロックストレッチングの必要がないと判定すると、判定ブロック２０６は、デバイスが標準モード用に設定されているか否かを判定する。デバイスが標準モード用に設定されている場合には、ステートマシンは、標準モードに対する遅延をインプリメントする出力モード２０８へ進む。そうでない場合には、ステートマシンは、デバイスがファーストモード用に設定されているか否かを判定する判定ブロック２１０へ進む。デバイスがファーストモード用に設定されている場合には、ステートマシンは、ファーストモードに対する遅延をインプリメントする出力モード２１２へ進む。そうでない場合には、ステートマシンは、ファーストプラスモードに対する遅延をインプリメントする出力モード２１４へ進む。適切なクロック遅延が完了すると、ステートマシンは、判定ブロック２０６及び２１０で判定されたモードに一致する期間中クロックをリリースする出力モード２１６へ進む。この全プロセスは、次に、ＳＣＬラインに対するクロック信号を生成するために繰返すことができる。
【００２３】
図２は、標準モードに対して順次インプリメントされる出力モード２０８、２１２及び２１４と、ファーストモードに対してインプリメントされる出力モード２１２及び２１４とを示す。例えば、標準モードで動作しているデバイスに対する全クロック遅延は、出力モード２０８、２１２及び２１４の遅延の総和となる。このような順次処理は、標準又はファーストモードに対する出力モード２１２及び２１４の遅延を再使用することによって、ステートマシンの複雑性を低減するのに特に有用である。他の実施態様では、例えば、各クロックモードに対する１つの出力モードにおける全遅延をインプリメントすることによって、各遅延を他の遅延と無関係にすることができる。
【００２４】
図３Ａ〜３Ｅは、本発明の実施例による、標準モード、ファーストモード及びファーストプラスモードの仕様と選択的に互換性があるクロック信号を生成するのに用いられるステートマシンの概略図である。ステートマシンは、Ｉ２ＣバスのトランザクションのためのＳＣＬクロックを生成する。ステートマシンは、通信を開始及び停止するために、それぞれＳＴＡＲＴ及びＳＴＯＰコンディションもＩ２Ｃバスに生成する。ステートマシンは、そのクロックをＳＣＬライン上の他のクロックと同期させる。ステートマシンは、クロックストレッチングも許容する。ステートマシンは、標準、ファースト及びファーストプラスモードの３つの異なるＩ２Ｃ周波数モードに対するタイミングをとることができる。ステートマシンは、様々な状態にわたって、１つ以上のカウンタを用いる。説明を簡単にするため、以下では、全体において１つのカウンタを用いる場合を記載するが、これは、複数のカウンタを様々な遅延に対して使用可能であることを制限するものではない。
【００２５】
状態遷移図は、３６の状態（Ｓ１〜Ｓ３６）を示しており、この図は、Ｉ２Ｃバスに正しくタイミングがとれた信号を生成するための事象が生じる順序を示している。以下に、多様な状態と、それらがどのようにして正確なＩ２Ｃ動作を行うかについて説明する。
【００２６】
Ｓ０-  リセットに応じて、ステートマシンは、状態Ｓ０へ進む。これは、ステートマシンのデフォルト状態である。この状態にある間に、ステートマシンがＩ２Ｃバス上のＳＴＡＲＴコンディションを検出した場合には、ステートマシンは、バスがビジーである（例えば、バスが他のマスタによって使用されている）ことを示す状態Ｓ１３へ進む。ステートマシンが、ＳＴＡＲＴコンディションを送信するための信号を受信した場合は、状態Ｓ１へ進む。
【００２７】
Ｓ１-  この状態にある間に、ステートマシンがＩ２Ｃバス上のＳＴＡＲＴコンディションを検出した場合には、ステートマシンは、バス・ビジー状態である状態Ｓ１３へ進む。そうでない場合には、ステートマシンは、ＳＣＬラインをチェックして、それがハイであるかを確認する。ＳＣＬラインのハイは、先のデバイスがＩ２Ｃバスをリリースしたことを示し、従って、ステートマシンは状態Ｓ２へ進む。タイムアウト動作がイネーブルになっており、さらにＳＣＬラインがロウである場合（すなわち、ＳＣＬラインが他のデバイスによってリリースされていない場合）には、ステートマシンは、タイムアウト期間のカウントを開始する。タイムアウト動作がイネーブルになっていない場合には、ステートマシンは、ＳＣＬラインがリリースされるか、またはバス上のＳＴＡＲＴコンディションが検出されるまで、状態Ｓ１にとどまる。タイムアウト期間の終了時にＳＣＬラインがまだロウである場合には、ステートマシンは、Ｉ２ＣバスのＳＣＬラインのエラーを示すために状態Ｓ１７へ進む。
【００２８】
Ｓ２-  ステートマシンがＳＴＡＲＴコンディションを検出した場合には、ステートマシンは、バス・ビジー状態である状態Ｓ１３へ進む。そうでない場合には、ステートマシンは、ＳＤＡラインをチェックする。ＳＤＡラインがハイである場合、すなわち、Ｉ２Ｃバスの他のいかなるデバイスもＩ２Ｃバスをロウにとどめていない場合には、ステートマシンは、状態Ｓ３へ進む。ＳＤＡラインがロウであることが検出された場合には、或るスレーブがそのラインをロウに引き下げていると想定されるため、ステートマシンは状態Ｓ１８へ進み、この状態にて、ステートマシン、ラインをロウにしている可能性のあるスタックスレーブ（stuck slave）を同期させるために９つのクロックパルスの送信を試みる。９つのクロックパルスの後に、ＳＤＡラインがまだスタック・ロウ（stuck low）である場合には、ステートマシンは、ＳＤＡラインにエラーがあることを示すために状態Ｓ１６へ進む。
【００２９】
Ｓ３-  状態Ｓ３において、ＳＤＡラインは、Ｉ２Ｃバス上にＳＴＡＲＴコンディションを生成するためにロウに引き下げられる。ステートマシンは、Ｉ２ＣバスのＳＤＡラインがロウとなったことを検出した後に状態Ｓ４へ進み、そうでない場合は、状態Ｓ３にとどまる。この検出により、ＳＤＡラインの電圧レベルがＩ２Ｃ仕様に従う十分に低い電圧に達したことを、確かめることができる。
【００３０】
Ｓ４-  カウンタは、ＳＴＡＲＴコンディションの対するホールド時間をカウントする。カウンタがカウントし終わる前にＳＣＬラインがロウになった場合には、ステートマシンは状態Ｓ１９へ進み、そうでない場合には、ステートマシンは、カウントの終了後に状態Ｓ５へ進む。
【００３１】
Ｓ５-  状態Ｓ５において、ＳＣＬラインはロウに引き下げられる。ステートマシンがＳＣＬラインのロウレベルを一旦検出すると、ステートマシンは、状態Ｓ２３へ進む。この検出により、ＳＣＬラインの電圧レベルがＩ２Ｃ仕様に従う十分に低い電圧に達したことを、確かめることができる。
【００３２】
Ｓ６-  状態Ｓ６において、カウンタは、ＳＣＬクロックのロウ期間をカウントする。カウントし終ると、ステートマシンは、状態Ｓ７へ進む。ＳＤＡエラーの場合（すなわち、ステートマシンが９つのクロックパルスを送信しており、ＳＤＡラインがまだロウのままである場合）には、ステートマシンは、ＳＤＡラインにエラーがあることを示すために状態Ｓ１６へ進む。
【００３３】
Ｓ７-  ステートマシンは、ＳＣＬクロックをストレッチする必要がある期間中、状態Ｓ７にとどまる。ステートマシンは、マスタのＩ２Ｃモード、すなわち標準モード、ファーストモードまたはファーストプラスモードに基づいて、次の状態へ進む。ステートマシンは、標準モードの場合には状態Ｓ３２へ、ファーストモードの場合には状態Ｓ３１へ、さらに、ファーストプラスモードの場合には状態Ｓ２７へ進む。
【００３４】
Ｓ８-  状態Ｓ８において、ＳＣＬラインはリリースされる。この状態は、マスタがアービトレーションを失ったか否かも判定する。アービトレーションが失われた場合には、ステートマシンは、状態Ｓ１３へ進む。タイムアウト動作がイネーブルになっている場合には、カウンタは、ＳＣＬラインのリリース後に開始するタイムアウト期間をカウントする。ＳＣＬラインがタイムアウト期間後にリリースされない場合には、ステートマシンは、ＳＣＬラインがスタック・ロウであることに問題があることを示す状態Ｓ１７へ進む。タイムアウト動作がイネーブルでなく、かつＳＣＬラインがスタック・ロウである場合には、ステートマシンは状態Ｓ８にとどまり、この状態を抜けるためには、外部的にリセットする必要がある。ＳＣＬラインが首尾良くリリースされた場合には、ステートマシンは、状態Ｓ２２へ進む。
【００３５】
Ｓ９-  この状態において、カウンタは、反復ＳＴＡＲＴコンディションに対するセットアップ時間をカウントする。そのカウントの終了時に、ステートマシンは、状態Ｓ３へ進む。
【００３６】
Ｓ１０-  この状態において、カウンタは、ＳＣＬクロックのハイ期間をカウントする。カウンタがカウントし終る前にＳＣＬラインがロウになった場合には、ステートマシンは、状態Ｓ１９へ進む。カウンタがカウントを終了した場合には、ステートマシンは、状態Ｓ５へ進む。
【００３７】
Ｓ１１-  状態Ｓ１１において、ステートマシンは、ＳＴＯＰコンディションに対するセットアップ時間をカウントする。カウンタがカウントし終る前にＳＣＬラインがロウとなった場合には、ステートマシンは、状態Ｓ１３、即ちバス・ビジー状態へ進む。このことは、マスタがＩ２ＣバスへのＳＴＯＰコンディションの送信を望んだにもかかわらず、一部の他のマスタが、ＳＣＬラインへのクロックパルスの送信の継続を望んでいることを意味する。カウンタが首尾良くカウントを終了した場合には、ステートマシンは次の状態Ｓ１２へ進む。
【００３８】
Ｓ１２-  この状態において、ＳＤＡラインは、Ｉ２Ｃバス上にＳＴＯＰコンディションを生成するためにリリースされる。ステートマシンは、次の状態Ｓ１３へ進む。
【００３９】
Ｓ１３-  状態Ｓ１３において、ステートマシンは、ＳＴＯＰコンディションを検出したか否かを確認するための検査を行う。ステートマシンがそれを検出した場合、状態Ｓ１４へ進む。ステートマシンがバス上のＳＴＯＰコンディションを検出せず、ＳＣＬ及びＳＤＡラインの双方がハイである場合には、マスタは、Ｉ２ＣバスにＳＴＡＲＴコンディションを送信することを望み、さらにタイムアウト機能がイネーブルにされ、ステートマシンは状態Ｓ２０へ進む。
【００４０】
Ｓ１４-  この状態において、カウンタは、ＳＴＯＰコンディションと次のＳＴＡＲＴコンディションとの間のバス・フリー時間をカウントする。カウンタがバス・フリー時間のカウントを終了する前に、ステートマシンがバス上のＳＴＡＲＴコンディションを検出した場合は、ステートマシンは、状態Ｓ１３のバス・ビジー状態へ進む。カウンタがバス・フリー時間のカウントを終了した場合には、ステートマシンは、状態Ｓ２４へ進む。
【００４１】
Ｓ１６-  状態Ｓ１６は、ＳＤＡラインがスタック・ロウであるＩ２Ｃバス上にエラー状態があることを示す。この場合に、ステートマシンは、状態Ｓ１６にとどまる。この状態から抜けるためには、外部的にリセットする必要がある。
【００４２】
Ｓ１７-  この状態は、ＳＣＬラインのスタック・ロウに問題があることを示す。ステートマシンは、それが外部的にリセットされるまで、この状態に永遠にとどまる。
【００４３】
Ｓ１８-  この状態において、カウンタは、９つのクロックパルスを送信するためにセットアップする。次の状態は、状態Ｓ１０である。
【００４４】
Ｓ１９-  状態Ｓ１９において、ステートマシンは、ＳＣＬクロックのロウ期間のカウントを新たに開始する準備を行う。ステートマシンが次に進む状態は、状態Ｓ２３である。
【００４５】
Ｓ２０-  状態Ｓ２０において、カウンタは、タイムアウト機能がイネーブルな場合にタイムアウト期間をカウントする。イネーブルでないときに、ステートマシンは、Ｓ１３のバス・ビジー状態に戻る。ステートマシンが、バス上のＳＴＯＰコンディションを検出した場合には、ステートマシンは、状態Ｓ２６へ進む。カウンタがタイムアウト期間のカウントを終了した場合、ステートマシンは、マスタがＳＴＡＲＴコンディションを送信することによってＩ２Ｃバスを制御することになる状態Ｓ３へ進む。ＳＣＬまたはＳＤＡのいずれかがロウとなった場合には、カウンタはカウントを停止し、ステートマシンは、状態Ｓ１３に戻る。
【００４６】
Ｓ２１-  この状態は、クロックに対して、内部保持時間をデータに提供するようないくつか状態の一部である。ステートマシンは、状態Ｓ６の次の状態へ進む。
【００４７】
Ｓ２２-  この状態において、ステートマシンは、次のＩ２Ｃ動作を決定する。制御信号がクロックパルスを送信する必要があることを示す場合には、ステートマシンは、状態Ｓ１０へ進む。制御信号がＳＴＯＰコンディションを送信する必要があることを示す場合には、ステートマシンは、状態Ｓ１１へ進む。制御信号が反復ＳＴＡＲＴコンディション件をＩ２Ｃバスに送信する必要があることを示す場合には、ステートマシンは、状態Ｓ９へ進む。
【００４８】
Ｓ２３-  この状態は、クロックに対して、データに対する内部ホールド時間を提供するような複数の状態の一部である。ステートマシンは、次の状態Ｓ２１へ進む。
【００４９】
Ｓ２４-  この状態は、Ｉ２Ｃバスがバス・フリー状態にあることを示す。ステートマシンがバス上のＳＴＡＲＴコンディションを検出した場合、ステートマシンは、バス・ビジー状態Ｓ１３へ進む。マスタが、Ｉ２ＣバスにＳＴＡＲＴコンディションの送信を望む場合には、ステートマシンは、状態Ｓ２５へ進む。
【００５０】
Ｓ２５-  この状態は、ＳＣＬラインがハイであるかどうかを確かめ、ハイである場合は状態Ｓ３へ進み、そうでない場合は、状態Ｓ１７へ進む。
【００５１】
Ｓ２６-  この状態は、タイムアウト・カウンタをリセットする。ここから、ステートマシンは、状態Ｓ１４へ進む。
【００５２】
Ｓ２７〜Ｓ３０-  これらの状態は、標準、ファースト及びファーストプラスモードに対するクロックに対して、データをセットアップする。単独でインプリメント（すなわち、状態３１〜３６なしで）する場合には、遅延は、ファーストプラスモードのクロックに対する遅延を示す。ステートマシンの次の状態は、Ｓ８である。
【００５３】
Ｓ３１-  この状態は、ファーストモードに対するクロックに対して、データのセットアップ時間を与える。ステートマシンの次の状態は、Ｓ２７である。
【００５４】
Ｓ３２〜Ｓ３６-  これらの状態は、標準モードのためのクロックに対して、データのセットアップ時間を与える。ステートマシンの次の状態は、Ｓ２７である。
【００５５】
上述及び図面に示す実施態様は単に例示にすぎず、本発明を制限するものではない。当業者は、上述の実施態様及び図面に基づいて、ここに例示した実施例及び応用例に厳密に従わずに様々な修正及び変更を行いえることに容易に認識するであろう。例えば、Ｉ２Ｃバス以外の用途を、類似の方法を用いて実施してもよい。そのような修正や変更は、添付の請求の範囲に記載される本発明の趣旨から逸脱しない。
【図面の簡単な説明】
【００５６】
【図１】本発明の実施例による、標準、ファースト及びファーストプラスモードに対して設定されるＩ２Ｃシステムのブロック図である。
【図２】本発明の実施例による、ファーストモードプラス仕様と互換性があるクロック信号を生成する方法のフローチャートである。
【図３】図３Ａ〜３Ｅは、本発明の実施例による、標準モード、ファーストモード及びファーストプラスモード仕様と選択的に互換性があるクロック信号を生成するのに用いられるステートマシンの概略図である。
【図１】
2009535677.tif 000003
【図２】
2009535677.tif 000004
【図３Ａ】
2009535677.tif 000005
【図３Ｂ】
2009535677.tif 000006
【図３Ｃ】
2009535677.tif 000007
【図３Ｄ】
2009535677.tif 000008
【図３Ｅ】
2009535677.tif 000009