(57)【特許請求の範囲】
【請求項１】
ステートの切り替え制御により、デフォルト状態においてＯＴＧ（On-The-Go）規格のホストとして動作する第１のデバイス及びデフォルト状態においてＵＳＢのペリフェラルとして動作する第２のデバイスの動作制御を行うステートコントローラを含むデータ転送制御装置のクロック制御回路であって、
前記データ転送制御装置の各回路ブロックに供給されるクロックの基準クロックを生成する発振回路と、
前記発振回路の発振動作を制御する出力制御信号を生成するクロック出力制御回路とを含み、
前記クロック出力制御回路は、
前記第１及び第２のデバイスのステート毎に少なくとも前記発振回路の発振制御を行うか否かを示すクロック制御パターンに対応したクロックコマンドが設定されるクロックコマンドレジスタを含み、
前記ステートコントローラによって検出されたステートの遷移条件を処理部に対して割り込み信号により通知し、
前記処理部が、該遷移条件に基づいて前記ステートコントローラに対して遷移先のステートを指定すると共に、該遷移先のステートに対応して前記クロックコマンドを前記クロックコマンドレジスタに設定し、
前記クロック出力制御回路は、
前記クロックコマンドレジスタに設定された前記クロックコマンドに基づいて前記出力制御信号を生成すると共に、前記第２のデバイスのステート遷移においてアイドルステートのとき、前記出力制御信号に基づいて、前記発振回路の発振動作を停止させる発振制御を行うことを特徴とするクロック制御回路。
【請求項２】
ステートの切り替え制御により、デフォルト状態においてＯＴＧ（On-The-Go）規格のホストとして動作する第１のデバイス及びデフォルト状態においてＵＳＢのペリフェラルとして動作する第２のデバイスの動作制御を行うステートコントローラを含むデータ転送制御装置のクロック制御回路であって、
前記データ転送制御装置の各回路ブロックに供給されるクロックの基準クロックを生成する発振回路と、
前記発振回路の発振出力を制御する出力制御信号を生成するクロック出力制御回路とを含み、
前記クロック出力制御回路は、
前記第１及び第２のデバイスのステート毎に少なくとも前記発振回路の発振制御を行うか否かを示すクロック制御パターンに対応したクロックコマンドが設定されるクロックコマンドレジスタを含み、
前記ステートコントローラによって検出されたステートの遷移条件を処理部に対して割り込み信号により通知し、
前記処理部が、該遷移条件に基づいて前記ステートコントローラに対して遷移先のステートを指定すると共に、該遷移先のステートに対応して前記クロックコマンドを前記クロックコマンドレジスタに設定し、
前記クロック出力制御回路は、
前記クロックコマンドレジスタに設定されたクロックコマンドに基づいて前記出力制御信号を生成すると共に、前記第２のデバイスがペリフェラルとして動作するステートにおいて接続相手からのデータ転送がサスペンドになったとき、前記出力制御信号に基づいて、前記発振回路の発振動作を停止させる発振制御を行い、
前記第１のデバイスのステート遷移において接続相手からのデータ転送がサスペンドになったとき、前記発振回路の発振制御を省略することを特徴とするクロック制御回路。
【請求項３】
請求項２において、
前記第１のデバイスがペリフェラルとして動作するステートにおいて接続相手からのデータ転送がサスペンドになったとき、前記接続相手とのデータ信号線の状態であるラインステートに基づいて生成されたレジュームトリガ信号に基づいて、前記発振回路を起動させる起動回路を含むことを特徴とするクロック制御回路。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記クロック出力制御回路は、
前記第２のデバイスのステート遷移においてアイドルステートのとき、前記出力制御信号に基づいて、前記発振回路の発振出力を用いて生成される前記ステートコントローラへのクロックの出力停止又はその周波数を低減する出力制御を行うことを特徴とするクロック制御回路。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記クロック出力制御回路は、
前記第２のデバイスがペリフェラルとして動作するステートにおいて接続相手からのデータ転送がサスペンドになったとき、前記出力制御信号に基づいて、前記発振回路の発振出力を用いて生成される前記ステートコントローラへのクロックの出力停止又はその周波数を低減する出力制御を行い、
前記第１のデバイスのステート遷移において接続相手からのデータ転送がサスペンドになったとき、前記ステートコントローラへのクロックの出力制御を省略することを特徴とするクロック制御回路。
【請求項６】
請求項１乃至５のいずれか記載のクロック制御回路と、
前記ステートの遷移条件を検出して該遷移条件を処理部に通知すると共に、ホスト及びペリフェラルのステートの切り替え制御を行うステートコントローラと、
前記ステートコントローラからの指示によりホストとして動作するための動作制御を行うホストコントローラと、
前記ステートコントローラからの指示によりペリフェラルとして動作するための動作制御を行うペリフェラルコントローラと、
を含むことを特徴とするデータ転送制御装置。
【請求項７】
請求項６記載のデータ転送制御装置と、
前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置と、
を含むことを特徴とする電子機器。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、クロック制御回路、データ転送制御装置及び電子機器に関する。
【０００２】
【背景技術及び発明が解決しようとする課題】
近年、パーソナルコンピュータと周辺機器（広義には電子機器）とを接続するためのインタフェース規格として、ＵＳＢ（Universal Serial Bus）規格が注目を集めている。ところが、ＵＳＢ規格では必ずホストが必要であり、これまで周辺機器間でＵＳＢ規格のデータ転送を行うことができなかった。そこでＵＳＢ２．０規格の追加規格として、「ＵＳＢ  Ｏｎ−Ｔｈｅ−Ｇｏ（ＯＴＧ）１．０」規格（以下では、ＯＴＧ規格と略す。）が策定され、周辺機器間でもＵＳＢ規格のデータ転送を行うことができる。
【０００３】
ＯＴＧ規格では、ＵＳＢ規格におけるデバイスとして動作するペリフェラルに、ホストとして動作するために必要なホスト機能を持たせることができる。これによって、従来のＵＳＢ規格におけるデバイスだった周辺機器同士を相互に接続することができ、従来のＵＳＢ規格におけるホストを介することなく、データ転送を行うことができる。
【０００４】
そのためＯＴＧ規格では、デュアルロールデバイス（Dual-role Device）が規定される。デュアルロールデバイスとなる機器は、ホストとしてもペリフェラルとしても動作することができるようになる。デュアルロールデバイスとなる場合、例えばＯＴＧ規格において示されるステート遷移により制御が行われる。したがって、ＯＴＧ規格では数多くのステートが存在し、各ステートに対応した信号状態の生成や検出の制御を行う必要がある。
【０００５】
ところが、ステートごとに使用される機能ブロックが異なり、全機能ブロックが未使用の場合にまで発振回路を動作させると消費電力の増大を招く。したがって、ステートごとに、所与のブロック単位でクロック供給制御を行うと共に、各ブロックに供給されるクロックの基準クロックを生成するための発振回路の制御を行って、低消費電力化を図ることが望ましい。しかしながら、この場合数多くのステートが存在するため、遷移後のステートにおいて、使用する機能ブロックと未使用の機能ブロックとを判別してクロック供給制御や発振制御を行うと、処理の複雑化を招く。
【０００６】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、簡素化された発振制御やクロック供給制御により低消費電力化を図るクロック制御回路、データ転送制御装置及び電子機器を提供することにある。
【０００７】
【課題を解決するための手段】
上記課題を解決するために本発明は、デフォルト状態においてホストとして動作する第１のデバイスのステート遷移又はデフォルト状態においてペリフェラルとして動作する第２のデバイスのステート遷移により、少なくともホスト及びペリフェラルのステートの切り替え制御を行うステートコントローラを含むデータ転送制御装置のクロック制御回路であって、前記データ転送制御装置の各部に供給されるクロックの基準クロックを生成する発振回路と、前記発振回路の発振動作を制御する出力制御信号を生成するクロック出力制御回路とを含み、前記クロック出力制御回路は、前記第２のデバイスのステート遷移においてアイドルステートのとき、前記出力制御信号に基づいて、前記発振回路の発振動作を停止させる発振制御を行うクロック制御回路に関係する。
【０００８】
ここで、第１のデバイスは、デフォルト状態においてホストとして動作するデバイスということができる。或いは、データ転送を行う相手方の電源を用いることなく自己の電源を用いて（セルフパワー電源で）データ転送を行うデバイスといってもよい。また第２のデバイスは、デフォルト状態においてペリフェラルとして動作するデバイスということができる。或いは、自己の電源又はデータ転送を行う相手方の電源を用いて（バスパワー電源で）データ転送を行うデバイスといってもよい。例えば、データ転送に先立って、第１又は第２のデバイスのいずれかに設定するようにしてもよい。
【０００９】
またホストとは、データ転送制御の主導権を有するデバイスの機能をいう。またペリフェラルは、データ転送制御の主導権がなく、ホストからの指示に従うデバイスの機能をいう。
【００１０】
本発明においては、第１又は第２のデバイスのステート遷移により、少なくともホスト及びペリフェラルのステートの切り替え制御を行うステートコントローラを含むデータ転送制御装置において、発振回路の発振制御を行う。第１のデバイスでは、ホストとしてデータ転送制御を行うため、アイドルステートにおいても、各部に供給するクロックの基準クロックを生成することが望ましい。一方、第２のデバイスでは、デフォルト状態としてペリフェラルとして動作するため、アイドルステートにおいて、ホストからの指示がない限りデータ転送を行うことができず、無駄な電力を消費してしまう。したがって、第２のデバイスのアイドルステートにおいて発振回路の発振動作を停止させることで、必要なデータ転送制御を行う一方で、不要な消費電力を効率的に削減することができる。
【００１１】
また本発明は、デフォルト状態においてホストとして動作する第１のデバイスのステート遷移又はデフォルト状態においてペリフェラルとして動作する第２のデバイスのステート遷移により、少なくともホスト及びペリフェラルのステートの切り替え制御を行うステートコントローラを含むデータ転送制御装置のクロック制御回路であって、前記データ転送制御装置の各部に供給されるクロックの基準クロックを生成する発振回路と、前記発振回路の発振出力を制御する出力制御信号を生成するクロック出力制御回路とを含み、前記クロック出力制御回路は、前記第２のデバイスのペリフェラルのステート遷移において接続相手からのデータ転送がサスペンドになったとき、前記出力制御信号に基づいて、前記発振回路の発振動作を停止させる発振制御を行い、前記第１のデバイスのステート遷移においてサスペンドステートのとき、前記発振回路の発振制御を省略するクロック制御回路に関係する。
【００１２】
本発明によれば、第２のデバイスがペリフェラルとして動作中に接続相手からのデータ転送がサスペンドになったとき、第２のデバイスとしては接続相手からの指示がない限りデータ転送制御を行うことができないため、不要な発振動作を停止させることができる。また、第１のデバイスのサスペンドステートにおいては、ホストとしてステート切り替え制御を行う必要があるため、ステートコントローラへのクロックの基準クロックを生成する発振回路の発振制御を行わない。これにより、ホスト及びペリフェラルのステート切り替え制御を行うと共に、不要な消費電力を削減することができる。
【００１３】
また本発明に係るクロック制御回路は、前記第１のデバイスのペリフェラルのステート遷移において接続相手からのデータ転送がサスペンドになったとき、前記接続相手とのデータ信号線の状態であるラインステートに基づいて生成されたレジュームトリガ信号に基づいて、前記発振回路を起動させる起動回路を含むことができる。
【００１４】
本発明において、前記第１のデバイスのペリフェラルのステート遷移において接続相手からのデータ転送がサスペンドになったとき、ホストからの指示がない限りデータ転送制御を行うことができない。この場合に、ラインステートの変化に基づくステート遷移に時間的な制約が厳しくても、ハードウェア的に入力されるトリガ信号に基づいて、発振回路を起動させることができる。これにより、ファームウェアにより発振制御を行う一方で、時間的な制約が厳しいタイミングではハードウェアにより制御することができ、ステート遷移制御を柔軟にして多様なデータ転送制御に対応することができるようになる。
【００１５】
また本発明に係るクロック制御回路は、前記クロック出力制御回路は、少なくとも前記発振回路の発振制御を行うか否かを示すクロック制御パターンに対応したクロックコマンドが設定されるクロックコマンドレジスタと、前記クロックコマンドレジスタの設定内容を監視するためのクロックモニタレジスタとを含み、前記クロックコマンドレジスタは、前記レジュームトリガ信号、又は前記第１又は第２のデバイスのステート遷移に応じて生成されたクロックコマンドを用いて設定され、前記出力制御信号は、前記クロックコマンドレジスタの設定内容を用いて生成されてもよい。
【００１６】
本発明によれば、クロック制御パターンを用いて簡素な回路で発振制御を行うようにしたので、ステートを遷移後に発振制御の可否を判別する処理を不要とすることができ、処理の簡素化を図ることができる。
【００１７】
また本発明に係るクロック制御回路は、前記クロック出力制御回路は、前記第２のデバイスのステート遷移においてアイドルステートのとき、前記出力制御信号に基づいて、前記発振回路の発振出力を用いて生成される前記ステートコントローラへのクロックの出力停止又はその周波数を低減する出力制御を行うことができる。
【００１８】
本発明におていは、第１のデバイスでは、ホストとしてデータ転送制御を行うため、アイドルステートにおいても、ステートコントローラにクロックを供給することが望ましい。一方、第２のデバイスでは、デフォルト状態としてペリフェラルとして動作するため、アイドルステートにおいて、ホストからの指示がない限りデータ転送を行うことができず、無駄な電力を消費してしまう。したがって、第２のデバイスのアイドルステートにおいてステートコントローラに供給されるクロック出力の停止又はクロック周波数の低減を行うことで、不要な消費電力を削減することができる。
【００１９】
また本発明に係るクロック制御回路は、前記クロック出力制御回路は、前記第２のデバイスのペリフェラルのサスペンドステートのとき、前記出力制御信号に基づいて、前記発振回路の発振出力を用いて生成される前記ステートコントローラへのクロックの出力停止又はその周波数を低減する出力制御を行い、前記第１のデバイスのステート遷移においてサスペンドステートのとき、前記ステートコントローラへのクロックの出力制御を省略することができる。
【００２０】
本発明によれば、第２のデバイスがペリフェラルとして動作中に接続相手からのデータ転送がサスペンドになったとき、第２のデバイスとしては接続相手からの指示がない限りデータ転送制御を行うことができないために不要なステートコントローラの動作を停止させることができる。また、第１のデバイスのサスペンドステートにおいては、ホストとしてステート切り替え制御を行う必要がある。そのため、ホスト及びペリフェラルのステート切り替え制御を行うと共に、不要な消費電力を削減することができる。
【００２１】
また本発明に係るクロック制御回路は、前記第１のデバイスは、ＵＳＢ（Universal Serial Bus）のＯＴＧ（On-The-Go）規格のＡデバイスであり、前記第２のデバイスは、ＵＳＢのＯＴＧ規格のＢデバイスであり、前記ステートコントローラは、ＵＳＢのＯＴＧ規格にしたがって、ホスト及びペリフェラルのステートの切り替え制御を行うことができる。
【００２２】
本発明によれば、ＵＳＢのＯＴＧ規格による携帯機器を用いたＵＳＢ転送に伴う消費電力を、簡素な処理で低減することができる。
【００２３】
また本発明は、ＵＳＢ（Universal Serial Bus）のＯＴＧ（On-The-Go）規格のステート切り替え制御を行うステートコントローラを含むデータ転送制御装置のクロック制御回路であって、前記データ転送制御装置の各部に供給されるクロックの基準クロックを生成する発振回路と、前記発振回路の発振動作を制御する出力制御信号を生成するクロック出力制御回路とを含み、前記クロック出力制御回路は、Ｂデバイスのアイドルステートのとき、前記出力制御信号に基づいて、前記発振回路の発振動作を停止させる発振制御を行うクロック制御回路に関係する。
【００２４】
また本発明に係るクロック制御回路は、ＵＳＢ（Universal Serial Bus）のＯＴＧ（On-The-Go）規格のステート切り替え制御を行うステートコントローラを含むデータ転送制御装置のクロック制御回路であって、前記データ転送制御装置の各部に供給されるクロックの基準クロックを生成する発振回路と、前記発振回路の発振出力を制御する出力制御信号を生成するクロック出力制御回路とを含み、前記クロック出力制御回路は、Ｂデバイスのペリフェラルとして動作中に接続相手からのデータ転送がサスペンドになったとき、前記出力制御信号に基づいて、前記発振回路の発振動作を停止させる発振制御を行い、Ａデバイスのサスペンドステートのとき、前記発振回路の発振制御を省略するクロック制御回路に関係する。
【００２５】
なお、ステートコントローラは、ＵＳＢのＯＴＧ規格を発展させた規格のステート切り替え制御を行うようにすることができる。
【００２６】
また本発明に係るデータ転送制御装置は、上記のいずれか記載のクロック制御回路と、ホスト及びペリフェラルのステートの切り替え制御を行うステートコントローラと、ホストとして動作するための動作制御を行うホストコントローラと、ペリフェラルとして動作するための動作制御を行うペリフェラルコントローラとを含むことができる。
【００２７】
本発明によれば、処理を簡素化して低消費電力化を図るデータ転送制御装置を提供することができる。
【００２８】
また本発明に係る電子機器は、上記記載のデータ転送制御装置と、前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置とを含むことができる。
【００２９】
本発明によれば、処理を簡素化して低消費電力化を図るデータ転送制御装置を含む電子機器を提供することができる。
【００３０】
【発明の実施の形態】
以下、本発明の好適な実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成の全てが本発明の必須構成要件であるとは限らない。
【００３１】
１．  ＯＴＧ（On-The-Go）規格
１．１  ＡデバイスとＢデバイス
まず、ＯＴＧ規格について簡単に説明する。
【００３２】
ＵＳＢ（Universal Serial Bus）規格は、ホスト（host）（例えばパーソナルコンピュータ）と１又は複数のペリフェラル（peripheral）（例えば周辺機器）との間のデータ転送を行うための規格であり、ホスト側でデータ転送制御が行われる。その一方で、ＵＳＢ規格においてペリフェラルであった携帯機器等において処理するデータ量が増大し、ホストを介在させることなく、低消費電力でＵＳＢ規格のデータ転送する要求が高まっている。
【００３３】
このような背景の下、ＯＴＧ規格はＵＳＢ２．０規格の追加規格として策定された。ＯＴＧ規格では、コネクタの小型化や、ホストとして動作するために必要なホスト機能をペリフェラルに持たせるデュアルロールデバイス等についての規格が新たに盛り込まれている。
【００３４】
ＯＴＧ規格によるデータ転送を行う場合、例えば図１（Ａ）に示すように、その両端にＭｉｎｉ−Ａプラグ（plug）及びＭｉｎｉ−Ｂプラグが設けられたＵＳＢケーブルにより、ホストとペリフェラルとが接続される。Ｍｉｎｉ−Ａプラグは、Ｍｉｎｉ−Ａレセプタクル（receptacle）及びＭｉｎｉ−ＡＢレセプタクルに挿入可能な構造を有している。Ｍｉｎｉ−Ｂプラグは、Ｍｉｎｉ−Ｂレセプタクル及びＭｉｎｉ−ＡＢレセプタクルに挿入可能な構造を有している。デュアルロールデバイスの場合、Ｍｉｎｉ−ＡＢレセプタクルを備えておく必要がある。
【００３５】
ところで、ＵＳＢ規格では、ＶＢＵＳ（電源）、ＧＮＤ（グラウンド）及び２本のデータ信号線（Ｄ＋、Ｄ−）のみでホストとペリフェラルとを接続することができる。ＶＢＵＳは、ホスト側から供給される。データ信号線Ｄ＋、Ｄ−は、差動で用いられる。
【００３６】
ＯＴＧ規格では、図１（Ｂ）に示すようにＭｉｎｉ−Ａプラグが接続されたデュアルロールデバイスは、Ａデバイス（A-Device）となる。Ａデバイスは、セッション開始時においてホストとして動作し、所与の条件の下で、Ｂデバイスに対してホスト機能を譲ることができる。一方、Ｍｉｎｉ−Ｂプラグが接続されたデュアルロールデバイスは、Ｂデバイス（B-Device）となる。Ｂデバイスは、セッション開始時においてペリフェラルとして動作し、Ａデバイスからホストとして動作することが許可される。なおＡデバイスが、ＶＢＵＳを供給する。
【００３７】
デュアルロールデバイスにおいて、Ｍｉｎｉ−ＡＢレセプタクルに挿入されたプラグの種類を判別するため、図１（Ｃ）に示すように、これまでのコネクタの端子（ＶＢＵＳ、Ｄ−、Ｄ＋、ＧＮＤ）の他に、ＩＤ端子が定義されている。Ｍｉｎｉ−ＡプラグではＩＤ端子がＧＮＤに接続され、Ｍｉｎｉ−ＢプラグではＩＤ端子がオープン状態である。
【００３８】
図２に、ＵＳＢケーブルが接続されたデュアルロールデバイスの例を模式的に示す。
【００３９】
Ｍｉｎｉ−Ａプラグが接続されたデュアルロールデバイス１０と、Ｍｉｎｉ−Ｂプラグが接続されたデュアルロールデバイス２０とは、ＵＳＢケーブルを介して接続されている。デュアルロールデバイス１０、２０は、ＩＤ検出回路１２、２２を含む。ＩＤ検出回路１２、２２は、それぞれＩＤ端子と電気的に接続される信号線をプルアップし、該信号線の電圧に応じて、ＩＤ端子が接地されているか否かを検出する。図２におけるＩＤ検出回路１２は、ＩＤ端子に接続される信号線が接地されるため、Ｍｉｎｉ−Ａプラグであることを検出することができる。一方、ＩＤ検出回路２２は、ＩＤ端子に接続される信号線がプルアップされるため、Ｍｉｎｉ−Ｂプラグであることを検出する。
【００４０】
デュアルロールデバイス１０では、ホスト及びペリフェラルとして動作するため、データ信号線Ｄ＋をプルアップするためのプルアップ抵抗Ｒ１と、データ信号線Ｄ＋をプルダウンするためのプルダウン抵抗Ｒ２とを有している。プルアップ抵抗Ｒ１は、プルアップのオン／オフを切り替えるために、スイッチ回路ＳＷ１を介して電源電圧線に接続される。プルダウン抵抗Ｒ２は、プルダウンのオン／オフを切り替えるために、スイッチ回路ＳＷ２を介して接地線に接続される。スイッチ回路ＳＷ１、ＳＷ２については、いずれか一方がオンのとき、他方がオフとなるように排他的に制御される。
【００４１】
デュアルロールデバイス２０も同様に、データ信号線Ｄ＋をプルアップするためのプルアップ抵抗Ｒ３と、データ信号線Ｄ＋をプルダウンするためのプルダウン抵抗Ｒ４とを有している。プルアップ抵抗Ｒ３は、プルアップのオン／オフを切り替えるために、スイッチ回路ＳＷ３を介して電源電圧線に接続される。プルダウン抵抗Ｒ４は、プルダウンのオン／オフを切り替えるために、スイッチ回路ＳＷ４を介して接地線に接続される。スイッチ回路ＳＷ３、ＳＷ４については、いずれか一方がオンのとき、他方がオフとなるように排他的に制御される。
【００４２】
デュアルロールデバイス１０、２０では、データ信号線Ｄ−はプルダウンされている。
【００４３】
またデュアルロールデバイス１０、２０は、共にＡデバイスになり得るため、ＶＢＵＳに電流を供給する電源制御回路ＶＢＡ、ＶＢＢを含む。図２では、デュアルロールデバイス１０が、電源制御回路ＶＢＡによりＶＢＵＳに電流を供給する。
【００４４】
１．２  ＳＲＰ（Session Request Protocol）
ＯＴＧ規格では、バス上でやり取りがないとき、ＡデバイスがＶＢＵＳへの電流供給を停止することができる。したがって、バッテリで動作する携帯機器等がホストとして動作した場合でも無駄な電力消費を削減し、低消費電力化を図ることができるようになっている。この状態でＢデバイスがセッションを開始してデータ転送を行う場合、ＳＲＰと呼ばれる手順にしたがってＡデバイスに対しＶＢＵＳへの電流供給を要求することができる。ここで、セッションとはＶＢＵＳの電圧が所与の閾値電圧を越えている期間をいう。
【００４５】
図３に、図２に示したデュアルロールデバイスの構成を参照しながら、ＦＳモードにおけるＳＲＰの実行手順を説明するための図を示す。
【００４６】
ＦＳモードでは、ホスト側のデータ信号線Ｄ＋はプルダウンされ（スイッチ回路ＳＷ１がオフ、スイッチ回路ＳＷ２がオン）、ペリフェラル側のデータ信号線Ｄ＋はプルアップされている（スイッチ回路ＳＷ３がオン、スイッチ回路ＳＷ４がオフ）。
【００４７】
バス上のやり取りがなくＡデバイスがＶＢＵＳへの電流供給を停止すると（Ｓ１０）、ＶＢＵＳの電圧が下がり「Ｖｂ＿ｓｅｓｓ＿ｖｌｄ」レベル（B-Device Session Valid未満）となる（Ｓ１１）。Ｂデバイスは、これを検出すると、スイッチ回路ＳＷ３によりデータ信号線Ｄ＋のプルアップ抵抗を無効にする（Ｓ１２）。これにより、データ信号線のラインステートは「ＳＥ０」状態（ＦＳモードでは、データ信号線Ｄ＋が「Ｌ」レベル、データ信号線Ｄ−が「Ｌ」レベルの状態）となる（Ｓ１３）。
【００４８】
ＶＢＵＳの電圧が「Ｖｂ＿ｓｅｓｓ＿ｅｎｄ」（B-Device Session End）より小さく、かつラインステートの「ＳＥ０」状態が２ｍｓ以上継続すると、ＢデバイスがＳＲＰを開始（initiate）することができる。ＳＲＰは、データラインパルシング（Data-line Pulsing）又はＶＢＵＳパルシング（VBUS Pulsing）により行うことができる。データラインパルシングは、ラインステートを「ＳＥ０」状態、「Ｊ」状態（ＦＳモードでは、データ信号線Ｄ＋が「Ｈ」レベル、データ信号線Ｄ−が「Ｌ」レベルの状態）、「ＳＥ０」状態に遷移させる方法である。ＶＢＵＳパルシングは、ＢデバイスからＶＢＵＳに電流を供給し、ＶＢＵＳの電圧を「Ｌ」レベル（Vb_sess_vld未満）、「Ｈ」レベル（Va_sess_vldより大）、「Ｌ」レベルの状態に遷移させる方法である（Ｓ１４、Ｓ１５）。
【００４９】
Ａデバイスは、データ信号線又はＶＢＵＳの電圧を監視して、いずれかの方法によりＳＲＰが行われたことを検出すると、ＡデバイスがＶＢＵＳへの電流供給を開始する（Ｓ１６）。これにより、ＶＢＵＳの電圧が「Ｖｂ＿ｓｅｓｓ＿ｖｌｄ」以上となる（Ｓ１７）。
【００５０】
Ｂデバイスは、ＶＢＵＳの電圧が「Ｖｂ＿ｓｅｓｓ＿ｅｎｄ」以上になったことを検出すると、スイッチ回路ＳＷ３によりデータ信号線Ｄ＋のプルアップ抵抗を有効にして（Ｓ１８）、ラインステートを「Ｊ」状態に遷移させ（Ｓ１９）、ペリフェラルとして動作開始する。
【００５１】
Ａデバイスは、ラインステートが「Ｊ」状態になったことを検出すると、ホストとして動作開始する（Ｓ２０）。
【００５２】
１．３  ＨＮＰ（Host Negotiation Protocol）
ＯＴＧ規格では、接続されたプラグによりＡデバイスかＢデバイスかが決まるが、そのプラグを差し替えることなく、ホスト機能とペリフェラル機能とを交換することができる。ＨＮＰは、このホスト機能とペリフェラル機能とを交換するための手順である。
【００５３】
図４に、図２に示したデュアルロールデバイスの構成を参照しながら、ＦＳモードにおけるＨＮＰの実行手順を説明するための図を示す。
【００５４】
Ａデバイスがホストとして動作し、Ｂデバイスがペリフェラルとして動作し、ＨＮＰがイネーブルの状態であるものとする。
【００５５】
Ａデバイスがバスの使用を終了すると（Ｓ３０）、ラインステートをアイドル状態（ＦＳモードでは、「Ｊ」状態）にする（Ｓ３１）。
【００５６】
Ｂデバイスは、３ｍｓ以上「Ｊ」状態であることを検出すると、スイッチ回路ＳＷ３によりデータ信号線Ｄ＋のプルアップ抵抗を無効にして（Ｓ３２）、ラインステートを「ＳＥ０」状態にする（Ｓ３３）。Ａデバイスは、ラインステートが「ＳＥ０」状態であることを検出すると、スイッチ回路ＳＷ１によりデータ信号線Ｄ＋のプルアップ抵抗を有効（プルダウン抵抗を無効）にする（Ｓ３４）。これにより、ラインステートが「Ｊ」状態となるので（Ｓ３５）、Ａデバイスはペリフェラルとして動作を開始し、Ｂデバイスはラインステートが「Ｊ」状態であることを検出してホストとして動作を開始することができる（Ｓ３６）。
【００５７】
Ｂデバイスが、ホストとしてバスの使用を終了すると（Ｓ３７）、スイッチ回路ＳＷ３、ＳＷ４によりラインステートをアイドル状態にする（Ｓ３８）。Ａデバイスは、これを検出するとデータ信号線Ｄ＋のプルアップ抵抗を無効にして（Ｓ３９）、ラインステートを「ＳＥ０」状態に遷移させる（Ｓ４０）。Ｂデバイスは、ラインステートが「ＳＥ０」状態であることを検出すると、スイッチ回路ＳＷ３によりデータ信号線Ｄ＋のプルアップ抵抗を有効（プルダウン抵抗を無効）にする（Ｓ４１）。これにより、ラインステートが「Ｊ」状態となるので（Ｓ４２）、Ｂデバイスはペリフェラルとして動作を開始し、Ａデバイスはラインステートが「Ｊ」状態であることを検出してホストとして動作を開始することができる（Ｓ４３）。
【００５８】
このようなプロトコルによるデータ転送制御は、それぞれの状態を規定したステート間を遷移条件にしたがって遷移させることで、実現することができる。
【００５９】
以下では、Ａデバイス及びＢデバイスのステート遷移について説明する。
【００６０】
１．４  Ａデバイスのステート遷移
図５に、Ａデバイスのステート遷移を説明するための図を示す。
【００６１】
Ａデバイスは、ａ＿ｉｄｌｅステートが開始ステートである（ＳＴ１）。
【００６２】
デュアルロールデバイスのＭｉｎｉ−ＡＢレセプタクルに、ＵＳＢケーブルのＭｉｎｉ−Ａプラグが挿入されていないとき、プルアップされたＩＤ端子は「Ｈ」レベル（id）となるため、ｂ＿ｉｄｌｅステートに遷移する（ＳＴ２）。すなわち、デュアルロールデバイスでは、デフォルトでＢデバイスとなる。一方、Ｍｉｎｉ−Ａプラグが挿入されると、ＩＤ端子が「Ｌ」レベル（id/）となるためａ＿ｉｄｌｅステートとなる（ＳＴ１）。
【００６３】
ａ＿ｉｄｌｅステートでは、ＶＢＵＳへの電流供給が停止される。またデータ信号線Ｄ＋のプルアップが無効化（オフ）される（プルダウンが有効化される。より具体的には、スイッチ回路ＳＷ１がオフ、スイッチ回路ＳＷ２がオン）。したがって、ラインステートは「ＳＥ０」状態となる。上位アプリケーションからＶＢＵＳの電圧を落とす要求がないとき（a_bus_drop/）であって、ＵＳＢ転送を行いたいとき（a_bus_req）又はＢデバイスからのＳＲＰを検出したとき（a_srp_det）、ａ＿ｗａｉｔ＿ｖｒｉｓｅステートに遷移する（ＳＴ３）。
【００６４】
ａ＿ｗａｉｔ＿ｖｒｉｓｅステートでは、ＶＢＵＳへの電流供給が開始され、ＶＢＵＳの電圧が上がる。Ｍｉｎｉ−Ａプラグが抜かれたとき（id）、上位アプリケーションからＶＢＵＳの電圧を落とす要求があったとき（a_bus_drop）、ＶＢＵＳの電圧が所与の閾値電圧を越えたとき（a_vbus_vld）、又は当該ステートに規定時間以上経過したとき（a_wait_vrise_tmout）、ａ＿ｗａｉｔ＿ｂｃｏｎステートに遷移する（ＳＴ４）。
【００６５】
ａ＿ｗａｉｔ＿ｂｃｏｎステートでは、Ａデバイス側のデータ信号線Ｄ＋のプルアップがオフとなる。このときＢデバイスによりデータ信号線Ｄ＋のプルアップが有効化（オン）（Ｂデバイスのスイッチ回路ＳＷ３がオン、スイッチ回路ＳＷ４がオフ）され、データ信号線Ｄ＋が「Ｈ」レベルになったとき（ラインステートが「Ｊ」状態）（b_conn）、ａ＿ｈｏｓｔステートに遷移する（ＳＴ５）。なお、Ｍｉｎｉ−Ａプラグが抜かれたとき（id）、上位アプリケーションからＶＢＵＳの電圧を落とす要求があったとき（a_bus_drop）、又は当該ステートで規定時間以上経過したとき（a_wait_bcon_tmout）、ａ＿ｗａｉｔ＿ｖｆａｌｌステートに遷移する（ＳＴ６）。また、何らかの原因で、ＶＢＵＳの電圧が所与の閾値電圧を下回ったとき（a_vbus_vld/）、ａ＿ｖｂｕｓ＿ｅｒｒステートに遷移する（ＳＴ７）。
【００６６】
すなわちデュアルロールデバイスは、デフォルト状態ではＢデバイスであるため、Ａデバイスについては、ａ＿ｗａｉｔ＿ｂｃｏｎステートまで、データ信号線Ｄ＋はプルダウンされた状態のままである。ａ＿ｗａｉｔ＿ｖｒｉｓｅステートにおいてＶＢＵＳへの電流供給が開始されると、Ｂデバイスのプルアップがオンとなる。これにより、データ信号線Ｄ＋がプルダウンされた状態であるＡデバイスはホストとして動作し、データ信号線Ｄ＋がプルアップされた状態であるＢデバイスはペリフェラルとして動作する。
【００６７】
ａ＿ｈｏｓｔステートでは、ＡデバイスがＵＳＢ規格のホストとして動作する。より具体的には、ホストとしてペリフェラルをエニュメレート（enumerate）するため、バスリセットするためのリセット信号として、「ＳＥ０」状態にデータ信号線を駆動する。そして、所与の規定時間だけその状態を継続させることにより、ペリフェラルではリセット処理が行われる。その後、ホストは、コントロール転送を用いて、コンフィギュレーション情報の転送やアドレスの割り当てなどを行い、ＵＳＢ転送を開始する。当該ステートにおいて、ホストになったがバスを使わなくなったとき（a_bus_req/）、又はサスペンド状態への遷移要求があるとき（a_suspend_req）、ａ＿ｓｕｓｐｅｎｄステートに遷移する（ＳＴ８）。また、Ｍｉｎｉ−Ａプラグが抜かれたとき（id）、ラインステートが「Ｊ」状態から「ＳＥ０」の状態になったとき（b_conn/）、又は上位アプリケーションからＶＢＵＳの電圧を落とす要求があったとき（a_bus_drop）、ａ＿ｗａｉｔ＿ｂｃｏｎステートに遷移する（ＳＴ９）。また、何らかの原因で、ＶＢＵＳの電圧が所与の閾値電圧を下回ったとき（a_vbus_vld/）、ａ＿ｖｂｕｓ＿ｅｒｒステートに遷移する（ＳＴ１０）。
【００６８】
ａ＿ｓｕｓｐｅｎｄステートでは、ＳＯＦ（Start Of Frame）パケットの送出が停止される。このとき、Ｂデバイスはペリフェラルとして動作しており、Ｂデバイスではｂ＿ｐｅｒｉｐｈｅｒａｌステートのままである。このとき、ＡデバイスがＢデバイスに対して上述のＨＮＰを許可し（a_set_b_hnp_en）、Ｂデバイスにおいてプルアップがオフされてラインステートが「ＳＥ０」状態になると（b_conn/）、ａ＿ｐｅｒｉｐｈｅｒａｌステートに遷移する（ＳＴ１１）。また、Ａデバイスがバスを使用したいとき（a_bus_req）、又はＢデバイスがラインステートを「Ｋ」状態にしたとき（b_bus_resume）、ａ＿ｈｏｓｔステートに遷移する（ＳＴ１２）。更にまたＡデバイスがＢデバイスに対して上述のＨＮＰを許可せず（a_set_b_hnp_en/）、Ｂデバイスにおいてプルアップがオフされてラインステートが「ＳＥ０」状態になると（b_conn/）、ａ＿ｗａｉｔ＿ｂｃｏｎステートに遷移する（ＳＴ１３）。更にまたＭｉｎｉ−Ａプラグが抜かれたとき（id）、上位アプリケーションからＶＢＵＳの電圧を落とす要求があったとき（a_bus_drop）、又はａ＿ｓｕｓｐｅｎｄステートで規定時間以上経過したとき（a_aidl_bdis_tmout）、ａ＿ｗａｉｔ＿ｖｆａｌｌステートに遷移する（ＳＴ１４）。また、何らかの原因で、ＶＢＵＳの電圧が所与の閾値電圧を下回ったとき（a_vbus_vld/）、ａ＿ｖｂｕｓ＿ｅｒｒステートに遷移する（ＳＴ１５）。
【００６９】
ａ＿ｐｅｒｉｐｈｅｒａｌステートでは、Ａデバイスではプルアップをオンにし、Ｂデバイスでは後述するようにＡデバイスからＨＮＰのイネーブルによりＢデバイス側のプルアップがオフされるため、Ａデバイスがペリフェラルとなり、Ｂデバイスがホストになる。ホストとなったＢデバイスがデータ転送を終えた場合のようにＢデバイスがバスを使わないとき（b_bus_suspend）、ａ＿ｗａｉｔ＿ｂｃｏｎステートに遷移する（ＳＴ１６）。ａ＿ｗａｉｔ＿ｂｃｏｎステートでは、上述したようにＡデバイスのプルアップがオフされる。また、ａ＿ｐｅｒｉｐｈｅｒａｌステートにおいて、Ｍｉｎｉ−Ａプラグが抜かれたとき（id）、又は上位アプリケーションからＶＢＵＳの電圧を落とす要求があったとき（a_bus_drop）、ａ＿ｗａｉｔ＿ｖｆａｌｌステートに遷移する（ＳＴ１７）。また、何らかの原因で、ＶＢＵＳの電圧が所与の閾値電圧を下回ったとき（a_vbus_vld/）、ａ＿ｖｂｕｓ＿ｅｒｒステートに遷移する（ＳＴ１８）。
【００７０】
ａ＿ｂｕｓ＿ｅｒｒステートでは、過電流状態となるため、例えばファームウェアによりＶＢＵＳの電圧を落とすように要求される。このようなステートにおいては、Ｍｉｎｉ−Ａプラグが抜かれたとき（id）、又は上位アプリケーションからＶＢＵＳの電圧を落とす要求があったとき（a_bus_drop）、ａ＿ｗａｉｔ＿ｖｆａｌｌステートに遷移する（ＳＴ１９）。
【００７１】
ａ＿ｗａｉｔ＿ｖｆａｌｌステートでは、ＶＢＵＳへの電流供給が停止される。Ｍｉｎｉ−Ａプラグが抜かれたとき（id）、バスを使いたいとき（a_bus_req）、又はＶＢＵＳの電圧が所与の閾値電圧を下回った状態で（a_sess_vld/）Ｂデバイスにおいてプルアップがオフされてラインステートが「ＳＥ０」状態になると（b_conn/）、ａ＿ｉｄｌｅステートに遷移する（ＳＴ２０）。
【００７２】
１．５  Ｂデバイスのステート遷移
図６に、Ｂデバイスのステート遷移を説明するための図を示す。
【００７３】
Ｂデバイスは、ｂ＿ｉｄｌｅステートが開始ステートである（ＳＴ３０）。
【００７４】
ｂ＿ｉｄｌｅステートでは、ＶＢＵＳへの電流供給は停止される。したがって、ＶＢＵＳの電圧は、所与の閾値電圧を下回る。またデータ信号線Ｄ＋のプルアップがオフされる。このとき、Ｍｉｎｉ−Ａプラグが挿入されると、ＩＤ端子が「Ｌ」レベル（id/）となるためａ＿ｉｄｌｅステートとなる（ＳＴ３１）。またＶＢＵＳの電圧が所与の閾値電圧を越えると（b_sess_vld）、ｂ＿ｐｅｒｉｐｈｅｒａｌステートに遷移する（ＳＴ３２）。
【００７５】
ｂ＿ｐｅｒｉｐｈｅｒａｌステートでは、データ信号線Ｄ＋のプルアップがオンとなるため、Ａデバイスのａ＿ｗａｉｔ＿ｂｃｏｎステートにおいてｂ＿ｃｏｎｎの検出を行うことができる。ｂ＿ｐｅｒｉｈｅｒａｌステートでは、Ａデバイスからの要求に応答して、ペリフェラルとして動作する。Ｂデバイスがホストになるときは、Ａデバイスがａ＿ｓｕｓｐｅｎｄになったことを検出し（a_bus_suspend）、Ｂデバイスの上位アプリケーションからのホスト動作要求（b_bus_req）があって、かつＡデバイスからＨＮＰをイネーブルに設定されているとき（b_hnp_en）、ｂ＿ｗａｉｔ＿ａｃｏｎステートに遷移する（ＳＴ３３）。またｂ＿ｐｅｒｉｐｈｅｒａｌステートにおいて、Ｍｉｎｉ−Ａプラグが挿入されたとき（id/）、又はＶＢＵＳの電圧が所与の閾値電圧を下回ったとき（b_sess_vld/）、ｂ＿ｉｄｌｅステートに遷移する（ＳＴ３４）。この結果、ｂ＿ｉｄｌｅステートにおいてプルアップがオフされ、例えばＡデバイスはａ＿ｗａｉｔ＿ｖｆａｌｌステートからａ＿ｉｄｌｅステートに遷移することができる。
【００７６】
ｂ＿ｗａｉｔ＿ａｃｏｎステートでは、Ｂデバイスのデータ信号線Ｄ＋のプルアップがオフされ、Ａデバイス側でデータ信号線Ｄ＋がプルアップされるのを待つ。そして、Ａデバイス側でデータ信号線Ｄ＋のプルアップがオンされると（a_conn）、ｂ＿ｈｏｓｔステートに遷移する（ＳＴ３５）。またｂ＿ｗａｉｔ＿ａｃｏｎステートにおいて、Ａデバイスがラインステートを「Ｋ」状態にしたことを検出したとき（a_bus_resume）、又はｂ＿ｗａｉｔ＿ａｃｏｎステートで規定時間以上経過すると（b_ase0_brst_tmout）、ｂ＿ｐｅｒｉｐｈｅｒａｌステートに遷移する（ＳＴ３６）。また、Ｍｉｎｉ−Ａプラグが挿入されたとき（id/）、又はＶＢＵＳの電圧が所与の閾値電圧を下回るとき（b_sess_vld/）、ｂ＿ｉｄｌｅステートに遷移する（ＳＴ３７）。
【００７７】
ｂ＿ｈｏｓｔステートでは、ホスト処理が行われる。すなわち、バスリセットを行って、ＳＯＦパケットの生成を開始する。Ａデバイスは、ホストとして動作するＢデバイスからの要求に応答することになる。Ｂデバイスが、ホストとして転送するデータがなくなりバスを使用しないとき（b_bus_req/）、又はＡデバイスにおいてプルアップがオフされたことが検出されたとき（a_conn/）、ｂ＿ｐｅｒｉｐｈｅｒａｌに遷移する（ＳＴ３８）。このとき、Ａデバイスは、Ｂデバイスのｂ＿ｂｕｓ＿ｓｕｓｐｅｎｄとして検出することができ、Ａデバイスではａ＿ｐｅｒｉｐｈｅｒａｌステートからａ＿ｗａｉｔ＿ｂｃｏｎステートに遷移する。この結果、Ａデバイスのプルアップがオフされる。ｂ＿ｐｅｒｉｐｈｅｒａｌステートでは、Ｂデバイスはプルアップがオンされる。また、ｂ＿ｈｏｓｔステートにおいて、Ｍｉｎｉ−Ａプラグが挿入されたとき（id/）、又はＶＢＵＳの電圧が所与の閾値電圧を下回るとき（b_sess_vld/）、ｂ＿ｉｄｌｅステートに遷移する（ＳＴ３９）。
【００７８】
Ｂデバイスは、Ａデバイスがサスペンド状態のときＳＲＰによりセッション開始を要求することができる。すなわち、ｂ＿ｉｄｌｅステートにおいて、Ｂデバイスの上位アプリケーションからのバス使用要求があり（b_bus_req）、ＶＢＵＳの電圧がＢデバイスのセッション終了閾値電圧を下回った状態で（b_sess_end）、かつラインステートが「ＳＥ０」の状態で規定時間以上経過したとき（b_se0_srp）、ｂ＿ｓｒｐ＿ｉｎｉｔステートに遷移する（ＳＴ４０）。
【００７９】
ｂ＿ｓｒｐ＿ｉｎｉｔステートでは、ＳＲＰによりセッション開始をＡデバイスに対して要求する。ＢデバイスがＳＲＰを終了したとき（b_srp_done）、又はＭｉｎｉ−Ａプラグが挿入されたとき（id/）、ｂ＿ｉｄｌｅステートに遷移する（ＳＴ４１）。
【００８０】
２．  データ転送制御装置
次に、上述したステート遷移によりホスト機能及びペリフェラル機能を切り替えてＵＳＢ転送のデータ転送制御を行うＯＴＧデバイスコントローラＩＣ（広義にはデータ転送制御装置）について説明する。
【００８１】
図７に、ＯＴＧデバイスコントローラＩＣの機能ブロック図を示す。
【００８２】
ＯＴＧデバイスコントローラＩＣ２００は、ＯＴＧコントローラ（広義には、ステートコントローラ）２１０、ＨＣ２２０、ＰＣ２３０、レジスタ部２４０、パケットバッファ２５０、バッファコントローラ２６０、ホスト／ペリフェラル切り替え回路２７０、トランシーバ２８０、ＣＰＵインタフェース（InterFace：Ｉ／Ｆ）２９０、ＤＭＡハンドラ２９２、クロックコントローラ（広義にはクロック制御回路）２９４、テストモジュール２９６を含む。
【００８３】
ＯＴＧコントローラ２１０は、データライン及びＶＢＵＳの状態を監視しながら図５及び図６に示したステート遷移により、各ステートに応じたコントロール信号を生成し、例えばホスト及びペリフェラルの切り替え制御を行ってデータライン制御を行う。
【００８４】
このようなＯＴＧコントローラ２１０は、ＯＴＧ管理回路２１２、ＩＤ検出回路２１４、ＶＢＵＳ検出回路２１６、ラインステート検出回路２１８を含む。ＯＴＧ管理回路２１２は、デュアルロールデバイスとして機能するためのＯＴＧステート（図５及び図６に示す各ステート）の管理を行う。より具体的には、ＯＴＧ管理回路２１２は、ＣＰＵから設定されたＯＴＧステートに対応したＯＴＧステートコマンドに基づいて、当該ＯＴＧステートに対応したコントロール信号を生成する。ＩＤ検出回路２１４は、図２に示したようにＩＤ端子の状態を検出する。ＶＢＵＳ検出回路２１６は、ＶＢＵＳの状態が、ＯＴＧステートに応じた検出条件を満たしたか否かを検出する。ラインステート検出回路２１８は、トランシーバ２８０から通知されるラインステートが、ＯＴＧステートに応じた検出条件を満たしたか否かを検出する。
【００８５】
ＩＤ信号は、ＩＤ端子に接続される信号である。ＩＤ検出回路２１４は、ＩＤ信号によりＡデバイスかＢデバイスかを判別することができる。
【００８６】
１．０Ｖレベル検出信号ＣＯＭＰＩＮ１０は、ＶＢＵＳ／２の電圧が１．０Ｖ以上であるか否かを示す検出信号である。２．２Ｖレベル検出信号ＣＯＭＰＩＮ２２は、ＶＢＵＳ／２の電圧が２．２Ｖ以上であるか否かを示す検出信号である。ＶＢＵＳ検出回路２１６は、１．０Ｖレベル検出信号ＣＯＭＰＩＮ１０又は２．２Ｖレベル検出信号ＣＯＭＰＩＮ２２を参照することで、ＶＢＵＳの状態が、所与のステートにおける検出条件を満たすか否かを検出することができる。
【００８７】
ＶＢＵＳドライブ信号ＢＵＳＰＷＲＳＥＬは、５Ｖ電源使用時において、ＶＢＵＳに供給する電流の８ｍＡ又は５００ｍＡのいずれかに切り替えるためのイネーブル信号である。ＶＢＵＳドライブ信号ＶＢＵＳＤＲＶ５は、５Ｖ電源でＶＢＵＳに電流を供給するためのイネーブル信号である。ＶＢＵＳドライブ信号ＶＢＵＳＤＲＶ３は、３．３Ｖ電源でＶＢＵＳに電流を供給するためのイネーブル信号である。Ｒｐｕイネーブル信号ｘＲＰＵＥＮは、データ信号線Ｄ＋のプルアップのイネーブル信号である。Ｒｐｄイネーブル信号ＲＰＤＥＮは、データ信号線Ｄ＋のプルダウンのイネーブル信号である。
【００８８】
ＯＴＧ管理回路２１２は、当該ＯＴＧステートに対応して、コントロール信号（ＶＢＵＳドライブ信号ＢＵＳＰＷＲＳＥＬ、ＶＢＵＳＤＲＶ５、ＶＢＵＳＤＲＶ３、Ｒｐｕイネーブル信号ｘＲＰＵＥＮ、Ｒｐｄイネーブル信号ＲＰＤＥＮ、ＨＣイネーブル信号ＨＣＥｎｂ、ＰＣイネーブル信号ＰＣＥｎｂなど）を生成することができる。
【００８９】
ＨＣ２２０は、ＯＴＧコントローラ２１０からのＨＣイネーブル信号ＨＣＥｎｂによりイネーブルにされたときホスト機能の動作制御を行う。ＨＣ２２０のステート制御は、ＣＰＵ（ファームウェア）により行うことができる。より具体的には、ファームウェアが、種々のイベント（例えばＯＴＧステートａ＿ｈｏｓｔに遷移したことを示すイベント）をトリガとしてホストのステート遷移を行い、ホストの遷移先のステート（Ｓｕｓｐｅｎｄ、Ｒｅｓｅｔ、Ｏｐｒａｔｉｏｎａｌ、Ｒｅｓｕｍｅ）に対応したＨＣステートコマンドを所与のコントロールレジスタに設定することによって各ステートにおけるＵＳＢデータライン状態（「Ｊ」、「Ｋ」、「ＳＥ０」）の生成をＨＣに指示することができる。ＨＣ２２０は、設定されたステートコマンドに応じて、データライン状態の生成を行う。当該ステートにおいて時間制限（タイムアウト条件）がある場合にはファームウェアが時間計測を行ってステート遷移制御を行うことができる。ＨＣ２２０がＡデバイスでイネーブルにされたとき、図８に示すようなフローでホストのステート遷移を行う。「Ｏｐｅｒａｔｉｏｎａｌ」ステートにおいて、ＵＳＢ転送が行われる。またＨＣ２２０がＢデバイスでイネーブルにされたとき、図９に示すようなフローでホストのステート遷移を行う。
【００９０】
ＰＣ２３０は、ＯＴＧコントローラ２１０からのＰＣイネーブル信号ＰＣＥｎｂによりイネーブルにされたときペリフェラル機能の動作制御を行う。ＰＣ２３０は、ＯＴＧコントローラ２１０によって検出されたラインステート等に基づくＯＴＧステートの遷移においてペリフェラルのとき、リセット検出、サスペンド検出及びレジューム検出を行い、割り込みによりＣＰＵに通知する。またＯＴＧステートの遷移においてホストのとき、リモートウェイクアップ検出が有効になる。ＨＣ２２０とＰＣ２３０とは、排他的にイネーブル制御される。
【００９１】
レジスタ部２４０は、ホスト及びペリフェラルとして動作制御するためのレジスタ群である。
【００９２】
パケットバッファ２５０は、ホスト又はペリフェラルとして転送されるパケットを蓄積するバッファである。
【００９３】
バッファコントローラ２６０は、ＣＰＵ  Ｉ／Ｆ２９０又はＤＭＡハンドラ２９２を介して入出力されるパケットバッファ２５０へのアクセスアドレスの管理や、ＵＳＢ転送を行う場合に入出力されるパケットバッファ２５０へのアクセスアドレスの管理の制御を行う。
【００９４】
ホスト／ペリフェラル切り替え回路２７０は、ラインステートコントローラ２７２、ＨＣ／ＰＣセレクタ２７４を含む。ラインステートコントローラ２７２は、トランシーバ２８０に対して信号ライン状態の生成の指示を行う。ＨＣ／ＰＣセレクタ２７４は、トランシーバ２８０と、ＨＣ２２０又はＰＣ２３０とを接続するための、経路切り替えを行う。
【００９５】
トランシーバ２８０は、ＵＳＢデータ信号の送受信、ＵＳＢデータライン状態の生成、パラレル／シリアル変換処理やビットスタッフィング／アンスタッフィング処理等を行う。ＵＳＢ正極信号ＤＰは、データ信号線Ｄ＋に出力される。ＵＳＢ負極信号ＤＭは、データ信号線Ｄ−に出力される。
【００９６】
ＣＰＵインタフェース２９０は、ＰＩＯ転送の制御を行うと共に、ＣＰＵへの割り込み信号を生成する。ＣＰＵアドレスＣＡ［７：０］は、ＣＰＵアドレスバスである。ＣＰＵデータＣＤ［１５：０］は、ＣＰＵデータバスであり、ＤＭＡデータバスと共用される。チップセレクトｘＣＳは、チップセレクト信号である。リードストローブｘＲＤは、ＣＰＵリートストローブであり、ＤＭＡリードストローブと共用される。ライトストローブｘＷＲは、ＣＰＵライトストローブであり、ＤＭＡライトストローブと共用される。ウェイト信号ｘＷＡＩＴは、ＣＰＵへのウェイト信号である。割り込み信号ｘＩＮＴは、ＣＰＵへの割り込み信号である。
【００９７】
ＤＭＡハンドラ２９２は、ＤＭＡ転送制御を行う。ＤＭＡ要求ｘＤＲＥＱは、ＤＭＡ転送要求信号である。ＤＭＡアクノリッジｘＤＡＣＫは、ＤＭＡ転送許可信号である。
【００９８】
クロックコントローラ（クロック制御回路）２９４は、上述した各機能ブロックに供給されるクロック信号の分配や動作制御を行う。クロックコントローラ２９４は、発振子入力ＸＩ及び発振子出力ＸＯに接続された発振子を用いた発振出力を、ＰＬＬ回路で逓倍してクロック信号を生成する。なお、クロックコントローラ２９４は、ＰＬＬフィルタＶＣにＰＬＬフィルタ回路を接続するようにしてもよいし、クロック選択信号ＣＬＫＳＥＬ［１：０］により外部クロック入力ＣＬＫＩＮからのクロック信号、又は発振子を使用したクロック信号のいずれかを選択することができるようにしてもよい。
【００９９】
テストモジュール２９６は、ＯＴＧデバイスコントローラＩＣ２００の各部の動作確認テストを行うためのモジュールである。テストイネーブルＴＥＳＴによりテストモードに設定されると、テストモードＴＩＮ［１：０］で選択されたテストモードでテストを行い、テストモニタＴＥＳＴＭＯＮを介して内部テストをモニタすることができる。
【０１００】
このような構成のＯＴＧデバイスコントローラＩＣ２００では、ＯＴＧコントローラ２１０によって検出された遷移条件が、ＣＰＵインタフェース２９０を介してＣＰＵに対し割り込み信号として通知され、ＣＰＵ（ファームウェア）にステート遷移を制御させる。そして、ＣＰＵにより、ＣＰＵインタフェース２９０を介して、遷移先のＯＴＧステートに対応したＯＴＧステートコマンドがＯＴＧコントローラ２１０に設定される。ＯＴＧコントローラ２１０は、設定されたＯＴＧステートコマンドに対応したコントロール信号を生成し、各機能ブロックを制御する。すなわち、各ステート間は、ファームウェアにより遷移制御される。上述したＨ／Ｗ割り込み信号又は上位アプリケーション（ソフトウェア）からの指示が、ステートの遷移条件となる。
【０１０１】
またＨＣ２２０において、ホスト機能を実行するための各ステートを遷移させる場合にも同様に制御することができる。より具体的には、ＨＣ２２０は、図８及び図９に示したように、ファームウェアによりＨＣステートのステート遷移制御を行う。そして、遷移先のＨＣステートに対応したＨＣステートコマンドが設定されたＨＣ２２０が、該ＨＣステートコマンドに応じたコントロール信号によりホスト制御を行う。
【０１０２】
こうすることで、図１０に示すように、ＨＮＰによりホスト機能及びペリフェラル機能を切り替えながらデュアルロールデバイスとしての動作を実現することができる。図１０では、割り込み信号により、ファームウェアがＯＴＧステートコマンド及びＨＣステートコマンドを設定して、デュアルロールデバイスの動作制御を行っている。
【０１０３】
３．  クロックコントローラ（クロック制御回路）
上述したＯＴＧデバイスコントローラＩＣ２００は、デュアルロールデバイスとしての機能を実現する場合に、図５及び図６に示すような複数のステート間の遷移を行って、ホスト機能とペリフェラル機能を切り替える。ところがＯＴＧデバイスコントローラＩＣ２００は、これら機能を排他的に切り替えるため、図７に示した各機能ブロックにクロックを定常的に供給することは消費電力の増大を招く。またステートによっては発振回路の発振動作を停止させて、より低消費電力化を図ることができる場合がある。
【０１０４】
そこでクロックコントローラ２９４は、ＯＴＧデバイスコントローラＩＣ２００の各部について共通にクロックを供給することができる複数の機能ブロックを制御単位とする回路ブロックごとに、ステート遷移に応じてその出力を停止させ、又はその周波数を低減させる出力制御可能なクロックを生成することができる。またクロックコントローラ２９４は、ステート遷移に応じて発振回路の発振動作を停止させる発振制御を行うことができる。
【０１０５】
更に、遷移後のステートにおいて、使用する機能ブロックと未使用の機能ブロックとを判別してクロック供給制御又は発振制御を行うと処理の複雑化を招く。その上、各ステートにおいても制御タイミングが異なり、遷移したステート内において一定の手続後にクロック供給制御又は発振制御を行う場合には、ハードウェアで制御することは困難である。そのためクロックコントローラ２９４では、ファームウェアにより回路ブロック単位に供給するか否か、及び発振制御を行うか否かを示すクロック制御パターン（少なくとも発振制御を行うか否かを示すクロック制御パターン）が設定され、該クロック制御パターンをデコードしてクロックの出力制御及び発振制御を行うことができるようになっている。こうすることで、多数のステート遷移により制御され、かつ各ステートに応じて使用する機能ブロック及び未使用の機能ブロックがある場合に、処理が簡素化されたクロック供給制御及び発振制御により無駄な電力消費を抑えることができる。
【０１０６】
３．１  構成の概要
図１１に、クロックコントローラ２９４に適用されるクロック制御回路の構成の概要を示す。
【０１０７】
クロック制御回路３００は、クロック生成回路３１０と、クロック出力制御回路３２０とを含む。
【０１０８】
クロック生成回路３１０は、発振回路３１２を含む。発振回路３１２は、外部に接続された発振子３１８の発振周波数に応じた発振クロック（広義には基準クロック）を生成する。発振クロックは、例えば回路ブロック単位に生成されるクロックの基準クロックとして用いられる。
【０１０９】
発振回路３１２は、発振イネーブル信号ＯＳＣｅｎ（広義には出力制御信号）により、発振動作を開始又は停止する。
【０１１０】
クロック出力制御回路３２０は、クロックコントロールレジスタ３２２、クロックモニタレジスタ３２４、クロックコマンドレジスタ３２６、クロックコマンドデコーダ３２８、起動回路３３０を含むことができる。
【０１１１】
クロックコントロールレジスタ３２２には、ファームウェアによりクロックコントロールデータが設定される。クロックコントロールデータとして、例えば発振回路を安定させるまでのウェイト数がある。
【０１１２】
クロックモニタレジスタ３２４には、クロック出力制御回路３２０によるクロック生成回路３１０の監視結果が設定される。この監視結果として、例えば起動回路３３０から出力される発振イネーブル信号ＯＳＣｅｎの状態が設定されたり、クロックコマンドデコーダ３２８から出力される出力制御信号の状態が設定されたりする。ファームウェアを処理するＣＰＵは、例えばクロックモニタレジスタ３２４から読み出されたクロックモニタデータを参照することができる。
【０１１３】
クロックコマンドレジスタ３２６には、ファームウェア若しくはハードウェアによりクロックコマンドが設定される。クロックコマンドは、少なくとも発振制御を行うか否かを示すクロック制御パターンである。クロック出力制御回路３２０がクロック生成回路３１０で生成された回路ブロック単位のクロックの出力制御を行う場合には、発振制御を行うか否か、回路ブロック単位にクロックの出力を制御するか否かを示す指示を、クロック制御パターンとして設定することができる。
【０１１４】
クロックコマンドデコーダ３２８は、クロックコマンドレジスタ３２６に設定されたクロック制御パターンをデコードして出力制御信号を生成する。この出力制御信号により、発振回路３１２の発振制御を行うことができる。この場合、発振回路３１２の内部の所与の発振ノードを固定するか否かを制御することで、発振開始及び停止の制御が可能となる。
【０１１５】
起動回路３３０は、トリガ信号が入力されると、発振回路３１２の発振動作を開始させる発振イネーブル信号ＯＳＣｅｎを出力する。起動回路３３０は、クロックコマンドデコーダ３２８のデコード結果を用いて、発振制御を行う。また起動回路３３０は、クロックコントロールレジスタ３２２の設定内容に基づき、発振制御を行うことができるようにしてもよい。
【０１１６】
なおクロック生成回路３１０では、ＰＬＬ回路を含むことができる。この場合、ＰＬＬ回路は、発振回路３１２の発振クロックを逓倍したＰＬＬクロックを生成する。各回路ブロックに供給されるクロックは、ＰＬＬクロックを用いて生成される。また起動回路３３０は、例えば発振回路ウェイクアップ回路を含むことができる。この場合、トリガ信号が入力されると発振回路３１２の発振動作を開始させ、発振回路ウェイクアップ回路により、発振回路３１２の発振動作が安定するまでの時間をカウントさせることができる。そして、タイムアウトになったときに、発振回路ウェイクアップ回路は、発振回路３１２の後段に接続されるＰＬＬ回路に対し、発振クロックが安定していることを通知することができる。以下では、ＰＬＬ回路を含む場合について説明する。
【０１１７】
ところで、ＯＴＧデバイスコントローラＩＣ２００では、ＵＳＢケーブルの接続により、セルフパワーで動作するＡデバイス（広義には、第１のデバイス）、又はバスパワーで動作可能なＢデバイス（広義には、第２のデバイス）のいずれかに設定される。更にＡデバイス及びＢデバイスのいずれかに設定された後に、ホスト（データ転送制御の主導権を有するホスト）機能及びペリフェラル（データ転送制御の主導権を有しないペリフェラル）機能の切り替え制御が行われる。そのため、ＯＴＧデバイスコントローラＩＣ２００の各部に対し、複雑なステート遷移に応じたクロック供給制御を行うことは、重要な課題となる。以下では、ＯＴＧデバイスコントローラＩＣ２００のクロック供給制御について詳細に説明する。
【０１１８】
３．２  回路ブロック
図１２に、クロック制御回路３００が適用されるクロックコントローラ２９４の出力制御単位である回路ブロックの一例を説明するための図を示す。
【０１１９】
ここでは、図７に示すＯＴＧデバイスコントローラＩＣ２００の機能ブロックと同一部分には同一符号をしている。
【０１２０】
本実施形態では、ＯＴＧデバイスコントローラＩＣ２００を例えば５つの回路ブロックに分割し、各回路ブロック単位にクロックを生成すると共に出力制御を行う。より具体的には、クロックコントローラ２９４は、トランシーバクロックＸｃｖｒ＿ＣＬＫ、ＨＣクロックＨＣ＿ＣＬＫ、ＰＣクロックＰＣ＿ＣＬＫ、メインクロックＭａｉｎ＿ＣＬＫ、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫを生成する。トランシーバクロックＸｃｖｒ＿ＣＬＫは、トランシーバ２８０に供給される。ＨＣクロックＨＣ＿ＣＬＫは、ＨＣ２２０に供給される。ＰＣクロックＰＣ＿ＣＬＫは、ＰＣ２３０に供給される。メインクロックＭａｉｎ＿ＣＬＫは、レジスタ部２４０、パケットバッファ２５０、バッファコントローラ２６０及びＤＭＡハンドラ２９２に供給される。ＯＴＧコントローラ２１０は、ＯＴＧコントローラ２１０、ホスト／ペリフェラル切り替え回路２７０及びＣＰＵインタフェース２９０に供給される。
【０１２１】
３．３  クロック制御パターン
図１３に、クロック制御パターンの一例を示す。
【０１２２】
クロック制御パターンは、図５及び図６に示したＯＴＧステートに応じて、回路ブロック単位に出力制御を行うか否かを示す。
【０１２３】
ＯＴＧデバイスコントローラＩＣ２００では、ファームウェアでステート遷移制御が行われる。そして、遷移先のステートに応じたステートコマンドがＯＴＧコントローラ２１０に設定され、該ステートコマンドをデコードして当該ステートの制御を行うコントロール信号が生成される。そのためＯＴＧデバイスコントローラＩＣ２００では、原則としてファームウェアによりステートコマンドが設定されるため、ステートに応じたコントロール信号を生成するＯＴＧコントローラ２１０と、該ステートに対応したステートコマンドを設定するためのＣＰＵインタフェース２９０とに対してはクロック供給を行う必要がある。したがって、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫは、ほとんどのステートで供給される。
【０１２４】
また、各ステートにおいて少なくとも１つの回路ブロックに対してクロックを供給する場合には、発振回路の発振動作を行う必要がある。一方、全回路ブロックに対してクロックを供給する必要がないステートでは、発振回路の発振動作を停止させることで、低消費電力化を図ることができる。
【０１２５】
Ａデバイスに設定された場合、ａ＿ｉｄｌｅステートでは、ＶＢＵＳへの電流供給が行われず、かつデータ信号線Ｄ＋、Ｄ−が駆動されない。しかしながらＡデバイスとしては、接続相手のＢデバイスからのＳＲＰを検出する必要があるため、ＯＴＧコントローラ２１０及びＣＰＵインタフェース２９０にクロックを供給しておく必要がある。そこで、ａ＿ｉｄｌｅステートでは、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫのみ供給する。
【０１２６】
ａ＿ｗａｉｔ＿ｖｒｉｓｅステートはＶＢＵＳの電圧が所与の閾値電圧に達するのを待つステートであり、ａ＿ｗａｉｔ＿ｂｃｏｎステートはＢデバイスでデータ信号線がプルアップされるのを待つステートである。そのため、両ステートではＯＴＧコントローラ２１０及びＣＰＵインタフェース２９０にクロックを供給しておく必要がある。
【０１２７】
ａ＿ｈｏｓｔステートでは、ＨＣ２２０によりホスト動作が行われる。したがって、ホスト機能と排他的に切り替えられるペリフェラル機能の動作制御を行うＰＣ２３０についてはクロックを供給する必要がない。そのためａ＿ｈｏｓｔステートでは、ＰＣクロックＰＣ＿ＣＬＫのみ供給を停止させることにより、低消費電力化を図ることができる。
【０１２８】
ａ＿ｓｕｓｐｅｎｄステートでは、ＢデバイスはＳＲＰやＨＮＰを開始することができる。そのため、ＯＴＧコントローラ２１０及びＣＰＵインタフェース２９０にクロックを供給しておく必要がある。
【０１２９】
ａ＿ｐｅｒｉｐｈｅｒａｌステートでは、ＰＣ２３０によりペリフェラル動作が行われる。したがって、ペリフェラル機能と排他的に切り替えられるホスト機能の動作制御を行うＨＣ２２０についてはクロックを供給する必要がない。そのためａ＿ｐｅｒｉｐｈｅｒａｌステートでは、ＨＣクロックＨＣ＿ＣＬＫのみ供給を停止させることにより、低消費電力化を図ることができる。
【０１３０】
ａ＿ｗａｉｔ＿ｖｆａｌｌステートは、ＶＢＵＳの電圧が所与の閾値電圧を下回るのを待つステートである。そのため、ＯＴＧコントローラ２１０及びＣＰＵインタフェース２９０にクロックを供給しておく必要がある。
【０１３１】
ａ＿ｖｂｕｓ＿ｅｒｒステートでは、過電流によりＶＢＵＳの電圧が下がるのを待つステートである。そのため、ＯＴＧコントローラ２１０及びＣＰＵインタフェース２９０にクロックを供給しておく必要がある。
【０１３２】
一方、Ｂデバイスに設定された場合、ｂ＿ｉｄｌｅステートは、ＵＳＢケーブルが接続されていないときのデフォルトのステートである。したがって、データ転送制御を行うことなく電流が消費されてしまう事態を回避するため、ＯＴＧデバイスコントローラＩＣ２００の各部へのクロックの供給を停止する。ｂ＿ｉｄｌｅステートから他のステートに遷移するときは、まず、遷移条件に対応した割り込み（例えば、後述するＣｈａｎｇｅＩＤ割り込みやＣｒｏｓｓ４４Ｖ割り込み）をトリガとして発振回路及びＰＬＬ回路の動作を開始させる。その後、クロックが安定して供給されてＯＴＧコントローラ２１０及びＣＰＵインタフェース２９０にステートコマンドを設定可能になった後に、遷移先のステートに対応したステートコマンドが設定される。
【０１３３】
ｂ＿ｓｒｐ＿ｉｎｉｔステートでは、ＢデバイスがＳＲＰを開始するステートである。ｂ＿ｓｒｐ＿ｉｎｉｔステートでは、ＳＲＰによりデータラインパルシング及びＶＢＵＳパルシングを行うために、ＯＴＧコントローラ２１０及びＣＰＵインタフェース２９０にクロックを供給しておく必要がある。
【０１３４】
ｂ＿ｐｅｒｉｐｈｅｒａｌステートでは、ＰＣ２３０によりペリフェラル動作が行われる。したがって、ペリフェラル機能と排他的に切り替えられるホスト機能の動作制御を行うＨＣ２２０についてはクロックを供給する必要がない。そのためｂ＿ｐｅｒｉｐｈｅｒａｌステートでは、ＨＣクロックＨＣ＿ＣＬＫのみ供給を停止させることにより、低消費電力化を図ることができる。
【０１３５】
ところが、ｂ＿ｐｅｒｉｈｅｒａｌステートであっても、ＵＳＢ２．０規格によれば、ダウンストリームデバイス（the downstream device）としてのＢデバイスは、接続相手であるアップストリームデバイス（the upstream device）としてのＡデバイスが３ｍｓ以上バスをサスペンド状態にしたことを検出すると、ＡデバイスはＵＳＢホストのサスペンド状態となる。この場合、ホストとして動作するＡデバイスがＵＳＢサスペンド状態であるため、Ｂデバイスは動作することができないため、全てのブロックへのクロックの供給を停止させることで、低消費電力化を図ることができる。
【０１３６】
ｂ＿ｗａｉｔ＿ａｃｏｎステートは、ＨＮＰによりＡデバイスがペリフェラルになるのを待つステートである。したがって、ＯＴＧコントローラ２１０及びＣＰＵインタフェース２９０のみクロックを供給させればよい。しかしながら、ｂ＿ｗａｉｔ＿ａｃｏｎステートは、通常の場合、ｂ＿ｐｅｒｉｈｅｒａｌステートからｂ＿ｈｏｓｔステートへの遷移途中である。そこで、ｂ＿ｗａｉｔ＿ａｃｏｎステートの期間が短い場合には、ｂ＿ｐｅｒｉｐｈｅｒａｌステートと同じクロック供給制御を行う方が制御が簡素化される。したがって、図１３ではｂ＿ｐｅｒｉｐｈｅｒａｌステートと同じクロック制御パターンになっている。
【０１３７】
ｂ＿ｈｏｓｔステートでは、ＨＣ２２０によりホスト動作が行われる。しかしながら、ホスト機能と排他的に切り替えられるペリフェラル機能の動作制御を行うＰＣ２３０についてはクロックを供給する必要がない。そのためｂ＿ｈｏｓｔステートでは、ＰＣクロックＰＣ＿ＣＬＫのみ供給を停止させることにより、低消費電力化を図ることができる。
【０１３８】
その他、テストモードでは全機能ブロックについて所与の検査を行うために、全機能ブロックにクロックが供給される。
【０１３９】
以上のようにＡデバイス及びＢデバイスの各ステートについて、回路ブロック単位でクロック制御を行う場合、クロック制御パターンは、Ｗａｉｔモード、Ｈｏｓｔモード、Ｐｅｒｉｐｈｅｒａｌモード、ＡｌｌＳｌｅｅｐモード、ＡｌｌＡｃｔｉｖｅモードの５パターンである。
【０１４０】
Ｗａｉｔモードでは、ＯＴＧコントローラ２１０、ＣＰＵインタフェース２９０及びホスト／ペリフェラル切り替え回路２７０にのみクロック（ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫ）が供給される。
【０１４１】
Ｈｏｓｔモードでは、ＯＴＧコントローラ２１０、ＣＰＵインタフェース２９０及びホスト／ペリフェラル切り替え回路２７０及びＨＣ２２０にクロック（ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫ、ＨＣクロックＨＣ＿ＣＬＫ）が供給される。
【０１４２】
Ｐｅｒｉｐｈｅｒａｌモードでは、ＯＴＧコントローラ２１０、ＣＰＵインタフェース２９０及びホスト／ペリフェラル切り替え回路２７０及びＰＣ２３０にのみクロック（ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫ、ＰＣクロックＰＣ＿ＣＬＫ）が供給される。
【０１４３】
ＡｌｌＳｌｅｅｐモードでは、全機能ブロックのみならず、発振回路及びＰＬＬ回路の発振動作も停止される。
【０１４４】
ＡｌｌＡｃｔｉｖｅモードでは、全機能ブロックに対してクロックが供給される。
【０１４５】
このような５パターンのいずれかのパターンが、クロック制御パターンとしてファームウェアによりクロック制御回路３００に設定される。クロック制御回路３００では、クロック制御パターンをデコードして回路ブロック単位で、クロックの出力制御が行われる。
【０１４６】
３．４  具体的な構成例
図１４に、クロックコントローラ２９４の詳細な構成例を示す。
【０１４７】
ただし、図１１に示すクロック制御回路３００と同一部分には同一符号を付し、適宜説明を省略する。
【０１４８】
クロック生成回路３１０は、発振回路３１２、ＰＬＬ回路３１４、クロック分配制御回路３１６を含む。
【０１４９】
クロック生成回路３１０では、発振回路３１２から発振クロックＸＣＬＫが出力され、ＰＬＬ回路３１４において発振クロックＸＣＬＫを逓倍したＰＬＬクロックＰＬＬ＿ＣＬＫが生成される。ＰＬＬクロックＰＬＬ＿ＣＬＫは、クロック分配制御回路３１６に供給される。
【０１５０】
クロック分配制御回路３１６は、ＰＬＬクロックＰＬＬ＿ＣＬＫを用いて、回路ブロック単位にクロック（図１４ではトランシーバＸｃｖｒ＿ＣＬＫ、ＨＣクロックＨＣ＿ＣＬＫ、ＰＣクロックＰＣ＿ＣＬＫ、メインクロックＭａｉｎ＿ＣＬＫ、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫ）を生成する。クロック分配制御回路３１６は、Ｘｃｖｒ＿ＣＬＫ生成回路３５０、ＨＣ＿ＣＬＫ生成回路３５２、ＰＣ＿ＣＬＫ生成回路３５４、Ｍａｉｎ＿ＣＬＫ生成回路３５６、ＯＴＧＣ＿ＣＬＫ生成回路３５８を含む。Ｘｃｖｒ＿ＣＬＫ生成回路３５０は、ＰＬＬクロックＰＬＬ＿ＣＬＫを用いて所与の周波数のトランシーバクロックＸｃｖｒ＿ＣＬＫを生成すると共に、クロックコマンドデコーダ３２８からの出力制御信号ＸｃｖｒＳｌｅｅｐに基づいてトランシーバクロックＸｃｖｒ＿ＣＬＫの停止又はその周波数を低減する出力制御を行う。ＨＣ＿ＣＬＫ生成回路３５２は、ＰＬＬクロックＰＬＬ＿ＣＬＫを用いて所与の周波数のＨＣクロックＨＣ＿ＣＬＫを生成すると共に、クロックコマンドデコーダ３２８からの出力制御信号ＨＣＳｌｅｅｐに基づいてＨＣクロックＨＣ＿ＣＬＫの出力制御を行う。ＰＣ＿ＣＬＫ生成回路３５４は、ＰＬＬクロックＰＬＬ＿ＣＬＫを用いて所与の周波数のＰＣクロックＰＣ＿ＣＬＫを生成すると共に、クロックコマンドデコーダ３２８からの出力制御信号ＰＣＳｌｅｅｐに基づいてＰＣクロックＰＣ＿ＣＬＫの出力制御を行う。Ｍａｉｎ＿ＣＬＫ生成回路３５６は、ＰＬＬクロックＰＬＬ＿ＣＬＫを用いて所与の周波数のメインクロックＭａｉｎ＿ＣＬＫを生成すると共に、クロックコマンドデコーダ３２８からの出力制御信号ＭａｉｎＳｌｅｅｐに基づいてメインクロックＭａｉｎ＿ＣＬＫの出力制御を行う。ＯＴＧＣ＿ＣＬＫ生成回路３５８は、ＰＬＬクロックＰＬＬ＿ＣＬＫを用いて所与の周波数のＯＴＧＣクロックＯＴＧＣ＿ＣＬＫを生成すると共に、クロックコマンドデコーダ３２８からの出力制御信号ＯＴＧＣＳｌｅｅｐに基づいてＯＴＧＣクロックＯＴＧＣ＿ＣＬＫの出力制御を行う。
【０１５１】
クロック出力制御回路３２０の起動回路３３０は、発振回路起動タイマ３６０、ＰＬＬ回路起動タイマ３６２、発振回路ウェイクアップ（OSCWakeUp）回路３６４、ＰＬＬ回路ウェイクアップ（PLLWakeUp）回路３６６を含む。
【０１５２】
発振回路起動タイマ３６０は、クロックコントロールレジスタ３２２に設定されたウェイト数を発振出力安定期間とし、タイマ起動後、該ウェイト数分を経過したときに、ＰＬＬ回路起動信号を出力し、ＰＬＬ回路３１４のＰＬＬ発振を開始させると共にＰＬＬ回路起動タイマ３６２を起動させる。
【０１５３】
ＰＬＬ回路起動タイマ３６２は、クロックコントロールレジスタ３２２に設定されたウェイト数をＰＬＬ発振出力安定期間とし、タイマ起動後、該ウェイト数分を経過したときに、ＰＬＬ回路ウェイクアップ信号をＰＬＬウェイクアップ回路３６６に出力する。
【０１５４】
発振回路ウェイクアップ回路３６４には、クロックコマンドデコーダ３２８から出力される発振回路発振イネーブル信号が入力される。発振回路発振イネーブル信号によりイネーブル状態になった発振回路ウェイクアップ回路３６４は、レジュームトリガ信号により起動され、発振イネーブル信号ＯＳＣｅｎを発振回路３１２に出力する。より具体的には、発振回路発振イネーブル信号によりイネーブル状態になった発振回路ウェイクアップ回路３６４は、リモートウェイクアップ（RemoteWakeUp）トリガ又はローカルウェイクアップ（LocalWakeUp）トリガにより起動され、発振イネーブル信号ＯＳＣｅｎを発振回路３１２に出力する。リモートウェイクアップトリガは、Ａデバイスが、ａ＿ｓｕｓｐｅｎｄステートからａ＿ｈｏｓｔステートに遷移するとき、Ｂデバイスがラインステートを「Ｋ」状態にしたことを検出したときにアクティブとなる。ローカルウェイクアップトリガは、ＣｈａｎｇｅＩＤ割り込み、ＤｅｔｎｏｎＪ割り込み又はＣｒｏｓｓ４４Ｖ割り込みが発生したときにアクティブとなる。ここでＣｈａｎｇｅＩＤ割り込みは、例えばｂ＿ｉｄｌｅステートからａ＿ｉｄｌｅステートに遷移するときに、Ｍｉｎｉ−Ａプラグが挿入されたときのようにＩＤ端子の変化をトリガとして発生する。ＤｅｔｎｏｎＪ割り込みは、ｂ＿ｉｄｌｅステートからｂ＿ｐｅｒｉｐｈｅｒａｌステートに遷移するときに、ラインステートが「Ｊ」状態でないことを検出したときに発生する。Ｃｒｏｓｓ４４Ｖ割り込みは、ＡデバイスにおいてＶＢＵＳの電圧が所与の閾値電圧が４．４Ｖを境に変化したときに発生する。
【０１５５】
ＰＬＬ回路ウェイクアップ回路３６６には、クロックコマンドデコーダ３２８から出力されるＰＬＬ回路発振イネーブル信号が入力される。ＰＬＬ回路発振イネーブル信号によりイネーブル状態になったＰＬＬ回路ウェイクアップ回路３６６は、ＰＬＬ回路起動タイマ３６２からのＰＬＬ回路ウェイクアップ信号により起動され、ＰＬＬ回路出力イネーブル信号を生成する。
【０１５６】
クロックコントロールレジスタ３２２には、書き込みイネーブル信号ＣＰＵ＿Ｃｔｌ＿ｗｒに基づき、ファームウェアにより発振回路又はＰＬＬ回路のウェイト数がＣＰＵ＿ＷＤａｔａとして設定される。
【０１５７】
クロックコマンドレジスタ３２６には、ファームウェアからの書き込みイネーブル信号ＣＰＵ＿Ｃｍｄ＿ｗｒ又はＯＴＧコントローラ２１０からの書き込みイネーブル信号ＯＴＧＣ＿Ｃｍｄ＿ｗｒに基づき、ファームウェアからのクロックコマンド又はＯＴＧコントローラ２１０からのクロックコマンドが設定される。なお、書き込みイネーブル信号ＯＴＧＣ＿Ｃｍｄ＿ｗｒには、ラインステートの監視結果に基づいて生成されるトリガ信号（例えば、上述のリモートウェイクアップトリガやローカルウェイクアップ）も含まれる。
【０１５８】
クロックモニタレジスタ３２４には、発振回路ウェイクアップ回路３６４から出力される発振イネーブル信号ＯＳＣｅｎの状態がＥｎＯＳＣとして割り当てられているビットフィールドに設定される。また発振回路起動タイマ３６０から出力されるＰＬＬイネーブル信号ＰＬＬｅｎの状態が、ＥｎＰＬＬとして割り当てられているクロックモニタレジスタ３２４のビットフィールドに設定される。更にＰＬＬ回路ウェイクアップ回路３６６から出力されるＰＬＬ回路出力イネーブル信号の状態が、ＰＬＬＣｌｋＡｃｔｉｖｅとして割り当てられているクロックモニタレジスタ３２４のビットフィールドに設定される。更にまた、クロックコマンドデコーダ３２８から出力されるクロック分配制御信号ＯＴＧＣＳｌｅｅｐの状態が、ＣＰＵＣｌｋＡｃｔｉｖｅとして割り当てられているクロックモニタレジスタ３２４のビットフィールドに設定される。このようなクロックコマンドレジスタ３２６の内容は、ファームウェアからの読み出しイネーブル信号ＣＰＵ＿Ｍｏｎ＿ｒに基づき、ＣＰＵ＿ＲＤａｔａとして読み出される。
【０１５９】
クロックコマンドデコーダ３２８は、クロックコマンドレジスタ３２６に設定されたクロックコマンドをデコードして、発振回路発振イネーブル信号、ＰＬＬ回路発振イネーブル信号、クロック分配制御信号ＸｃｖｒＳｌｅｅｐ、ＨＣＳｌｅｅｐ、ＰＣＳｌｅｅｐ、ＭａｉｎＳｌｅｅｐ、ＯＴＧＣＳｌｅｅｐ（広義には出力制御信号）を生成する。クロック分配制御信号は、それぞれＸｃｖｒ＿ＣＬＫ生成回路３５０、ＨＣ＿ＣＬＫ生成回路３５２、ＰＣ＿ＣＬＫ生成回路３５４、Ｍａｉｎ＿ＣＬＫ生成回路３５６、ＯＴＧＣ＿ＣＬＫ生成回路３５８に供給される。
【０１６０】
次にこのような構成のクロックコントローラ２９４の動作について説明する。
【０１６１】
図１５はリセット後のデフォルト状態から、Ｂデバイスのアイドル状態に遷移するときのクロック供給制御の動作タイミングの一例である。クロックコントローラ２９４は、リセットされると、クロックコマンドレジスタ３２６に、内部状態の初期化のため全機能ブロックにクロックを供給するＡｌｌＡｃｔｉｖｅモードに対応するクロックコマンドが設定される。これにより、クロック分配制御信号（広義には出力制御信号）ＸｃｖｒＳｌｅｅｐ、ＨＣＳｌｅｅｐ、ＰＣＳｌｅｅｐ、ＭａｉｎＳｌｅｅｐ、ＯＴＧＣＳｌｅｅｐがそれぞれ「Ｌ」レベルとしてデコード出力される。そして、発振回路発振イネーブル信号及びＰＬＬ回路発振イネーブル信号（広義には出力制御信号）が、それぞれイネーブル状態としてデコード出力される。したがって、発振回路及びＰＬＬ回路が発振動作を行い、ＰＬＬクロックＰＬＬ＿ＣＬＫを出力する。そして、クロック分配制御回路３１６からトランシーバクロックＸｃｖｒ＿ＣＬＫ、ＨＣクロックＨＣ＿ＣＬＫ、ＰＣクロックＰＣ＿ＣＬＫ、メインクロックＭａｉｎ＿ＣＬＫ、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫが出力される。
【０１６２】
その後、Ｂデバイスのアイドル状態になると、ファームウェアはクロックコマンドレジスタ３２６に、ＡｌｌＳｌｅｅｐモードに対応するクロックコマンドが設定される。これにより、クロック分配制御信号（広義には出力制御信号）ＸｃｖｒＳｌｅｅｐ、ＨＣＳｌｅｅｐ、ＰＣＳｌｅｅｐ、ＭａｉｎＳｌｅｅｐ、ＯＴＧＣＳｌｅｅｐがそれぞれ「Ｈ」レベルとしてデコード出力される。したがって、クロック分配制御回路３１６からトランシーバクロックＸｃｖｒ＿ＣＬＫ、ＨＣクロックＨＣ＿ＣＬＫ、ＰＣクロックＰＣ＿ＣＬＫ、メインクロックＭａｉｎ＿ＣＬＫ、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫの出力が停止される。そして、ＰＬＬ回路発振イネーブル信号及び発振回路発振イネーブル信号（広義には出力制御信号）がディセーブル（ｄｉｓａｂｌｅ）状態としてデコードされるため、発振動作を停止する。
【０１６３】
図１６は、テスト状態において、ＰＬＬ回路の出力を停止させるときのクロック供給制御の動作タイミングの一例である。ファームウェアによりＡｌｌＡｃｔｉｖｅモードに対応して設定されていたクロックコマンドレジスタに、ＰＬＬ回路出力イネーブル信号をディセーブルにするためのクロックコマンドが設定される。この場合、ＰＬＬ回路発振イネーブル信号をディセーブルにすると、ＰＬＬ回路出力イネーブル信号がディセーブルになる。そして、発振回路３１２の発振出力を除く全クロックの出力を停止している。
【０１６４】
なお上述したクロックコマンドは、遷移制御された遷移先のステートに対応するステートコマンドと同一タイミングで設定するようにしてもよいし、互いに時間差を設けて設定するようにしてもよく、遷移制御されるステートにおいて任意のタイミングで設定することができる。
【０１６５】
図１７及び図１８に、このようなクロック制御回路がクロックコントローラとして適用されたＯＴＧデバイスコントローラＩＣ２００を用いたデータ転送制御の一例を示す。
【０１６６】
ここでは、デフォルト状態のｂ＿ｉｄｌｅステートからＡデバイスとしてａ＿ｈｏｓｔステートに遷移するまでの間で行われるファームウェアの処理と、接続相手とのやり取りを示している。
【０１６７】
Ｃｏｎｎｅｃｔ（Ｊ）Ｄｅｔは、接続相手と接続されたか否かを検出するためにラインステートが「Ｊ」状態であることを検出する機能をいう。Ｄｉｓｃｏｎｎｅｃｔ（ＳＥ０）Ｄｅｔは、接続相手と切断されたか否かを検出するためにラインステートが「ＳＥ０」状態であることを検出する機能をいう。
【０１６８】
上述したようにデュアルロールデバイスは、デフォルト状態ではｂ＿ｉｄｌｅステートである。このときＣＰＵ（ファームウェア）により、ＡｌｌＳｌｅｅｐモードに対応するクロックコマンドが、クロックコマンドレジスタに設定される。これにより、図１５に示すように全クロックの出力が停止される。
【０１６９】
その後、接続相手にはＭｉｎｉ−Ｂプラグが挿入され、ＯＴＧデバイスコントローラＩＣ２００にＭｉｎｉ−Ａプラグが挿入されると、ＩＤ信号が変化したことを示すＣｈｎａｇｅＩＤ割り込みがＣＰＵ（ファームウェア）に通知される。なお、ＣＰＵに通知される割り込み信号は、ＣＰＵにより非アクティブになるように制御される。
【０１７０】
ＣＰＵは、図５に示したように、遷移先のステートがａ＿ｉｄｌｅステートであると判断して、ＯＴＧステートコマンドを設定する。したがって、ＯＴＧデバイスコントローラＩＣ２００では、ａ＿ｉｄｌｅステートにおけるコントロール信号に基づいて各ブロックが制御される。更にＣＰＵは、図１３に示すようにａ＿ｉｄｌｅステートにおけるクロック制御パターンをＷａｉｔモードであると判断し、Ｗａｉｔモードに対応するクロックコマンドを、クロックコマンドレジスタに設定する。これにより、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫのみ出力が開始され、ＯＴＧコントローラ２１０、ＣＰＵインタフェース２９０及びホスト／ペリフェラル切り替え回路２７０に対してクロックが供給される。
【０１７１】
続いて、上位アプリケーションからバスの使用要求があると（ａ＿ｂｕｓ＿ｒｅｑ）、ＣＰＵは、遷移先のステートがａ＿ｗａｉｔ＿ｖｒｉｓｅステートであると判断して、ＯＴＧステートコマンドを設定する。更にＣＰＵは、図１３に示すようにａ＿ｗａｉｔ＿ｖｒｉｓｅステートにおけるクロック制御パターンがＷａｉｔモードであると判断し、Ｗａｉｔモードに対応するクロックコマンドをクロックコマンドレジスタに設定する。この場合、各クロックの出力状態は、ａ＿ｉｄｌｅステートのときと変わらない。
【０１７２】
ａ＿ｗａｉｔ＿ｖｒｉｓｅステートに対応したステートコマンドが設定されてａ＿ｗａｉｔ＿ｖｒｉｓｅステートに遷移すると、ＣＰＵは２００ｍｓのタイマを起動する。そして、ＶＢＵＳの電圧が所与の閾値電圧を越えたことが検出されると、Ｃｒｏｓｓ４４Ｖ割り込みにより、当該ステートにおけるタイマを停止すると共に、遷移先のステートがａ＿ｗａｉｔ＿ｂｃｏｎステートであると判断して、ＯＴＧステートコマンドを設定する。なお、ＣＰＵは起動したタイマが２００ｍｓになってタイムアウトとなった場合にも、ａ＿ｗａｉｔ＿ｂｃｏｎステートに遷移するものと判断し、ａ＿ｗａｉｔ＿ｂｃｏｎステートに対応するＯＴＧステートコマンドを設定することができる。更にＣＰＵは、図１３に示すようにａ＿ｗａｉｔ＿ｂｃｏｎステートにおけるクロック制御パターンがＷａｉｔモードであると判断し、Ｗａｉｔモードに対応するクロックコマンドをクロックコマンドレジスタに設定する。この場合、各クロックの出力状態は、ａ＿ｗａｉｔ＿ｖｒｉｓｅステートのときと変わらない。
【０１７３】
ａ＿ｗａｉｔ＿ｂｃｏｎステートに遷移すると、ＣＰＵは２００ｍｓのタイマを起動する。そして、ラインステートが「Ｊ」状態であることを規定時間、検出するとＣｈａｎｇｅＣｏｎｎＳｔａｔ割り込みにより、タイマを停止すると共に、遷移先のステートがａ＿ｈｏｓｔステートであると判断して、ＯＴＧステートコマンドを設定する。更にＣＰＵは、図１３に示すようにａ＿ｈｏｓｔステートにおけるクロック制御パターンがＨｏｓｔモードであると判断し、Ｈｏｓｔモードに対応するクロックコマンドをクロックコマンドレジスタに設定する。これにより、図１６に示すように、ＨＣクロックＨＣ＿ＣＬＫ、メインクロックＭａｉｎ＿ＣＬＫ及びトランシーバクロックＸｃｒｖ＿ＣＬＫの出力が開始される。
【０１７４】
３．５  他の構成例
クロック制御回路は、図１４に示すように全クロック制御パターンに対応してクロックコマンドを設定する必要はなく、少なくとも１つのクロック制御パターンに対応するクロックコマンドを設定することができればよい。
【０１７５】
図１９に、図１４に示すクロックコントローラの別の構成例を示す。
【０１７６】
ただし、図１４に示すクロックコントローラ２９４と同一部分には同一符号を付し、適宜説明を省略する。
【０１７７】
クロックコマンドデコーダ４００は、クロックコマンドレジスタ４０２に設定されたクロックコマンドをデコードして、出力制御信号を生成する。図１９では、出力制御信号として、クロック分配制御信号としてのＯＴＧＣＳｌｅｅｐと、発振回路発振イネーブル信号とＰＬＬ回路発振イネーブル信号とが生成される。
【０１７８】
クロックコントロールレジスタ４０４には、ファームウェア若しくはＯＴＧコントローラ２１０等のハードウェアにより、クロックコントロールデータが設定される。クロックコントローラ３９０では、図２０に示すようにクロックコントロールレジスタとして、発振ウェイト数として発振回路ウェイクアップタイムＯＳＣＷａｋｅＵｐＴｉｍｅ［１：０］、ＰＬＬ発振ウェイト数としてＰＬＬ回路ウェイクアップタイムＰＬＬＷａｋｅＵｐＴｉｍｅ［１：０］、回路ブロック単位にクロック供給制御を行うクロック分配制御信号ＸｃｖｒＳｌｅｅｐ、ＨＣＳｌｅｅｐ、ＰＣＳｌｅｅｐ、ＭａｉｎＳｌｅｅｐが生成される。
【０１７９】
クロックコマンドレジスタ４０２には、図２０に示すように、ファームウェア若しくはＯＴＧコントローラ２１０等のハードウェアにより、クロックコマンドが設定される。
【０１８０】
クロックモニタレジスタ４０６には、図２０に示すように、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫの供給有無、ＰＬＬクロックＰＬＬ＿ＣＬＫの出力有無、ＰＬＬ回路の有効／無効ＥｎＰＬＬ、発振回路の有効／無効ＥｎＯＳＣが設定される。
【０１８１】
このように、少なくとも１つのクロック制御パターンを用いてクロック供給制御を行うことにより、処理を簡素化し、無駄な電力消費を抑えることができる。またクロックコントロールレジスタを用いて回路ブロック単位にクロック供給制御を併用して行うことで、より細かなクロック供給制御が可能となる。
【０１８２】
図２１及び図２２に、クロックコントローラ３９０の動作タイミングの例を示す。
【０１８３】
例えばクロックコマンドが「５５ｈ」のときＯＳＣウェイクアップ、［ａａｈ］のときＯＳＣスリープ、「３ｃｈ」のときＰＬＬウェイクアップ、「ｃ３ｈ」のときＰＬＬスリープ、「６９ｈ」のときＯＴＧＣ＿ＣＬＫのウェイクアップ、「９６ｈ」のときＯＴＧＣ＿ＣＬＫスリープとする。
【０１８４】
図２１はリセット後のデフォルト状態から、Ｂデバイスのアイドル状態に遷移するときのクロック供給制御の動作タイミングの一例である。クロックコントローラ３９０は、リセットされると、クロックコマンドレジスタ４０２に「００ｈ」が設定され、全クロックの出力が行われる。その後、ＣＰＵ（ファームウェア）は、クロックコントロールレジスタ４０４により、クロック分配制御信号Ｘｃｖｒ＿Ｃｌｅｅｐ、ＨＣＳｌｅｅｐ、ＰＣＳｌｅｅｐ、ＭａｉｎＳｌｅｅｐを「Ｈ」レベルにして、ＨＣクロックＨＣ＿ＣＬＫ、ＰＣクロックＰＣ＿ＣＬＫ、メインクロックＭａｉｎ＿ＣＬＫ、トランシーバクロックＸｃｖｒ＿ＣＬＫの出力を停止する。
【０１８５】
続いて、Ｂデバイスのアイドル状態になると、ファームウェアは、クロックコマンドレジスタ４０２に「６９ｈ」、「ｃ３ｈ」、「ａａｈ」、「００ｈ」を順次設定して、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫ、ＰＬＬクロックＰＬＬ＿ＣＬＫ、発振クロックＸＣＬＫの順に出力を停止させる。
【０１８６】
図２２は、テスト状態において、ＰＬＬ回路の出力を停止させるときのクロック供給制御の動作タイミングの一例である。クロックコントローラ３９０は、テスト状態において、ファームウェアによりクロックコマンドレジスタ４０２に「００ｈ」が設定され、全クロックの出力が行われる。その後、ＰＬＬ回路を停止させる場合、ＣＰＵ（ファームウェア）は、クロックコントロールレジスタ４０４により、クロック分配制御信号ＨＣＳｌｅｅｐ、ＰＣＳｌｅｅｐ、ＭａｉｎＳｌｅｅｐ、Ｘｃｖｒ＿Ｃｌｅｅｐを「Ｈ」レベルにして、ＨＣクロックＨＣ＿ＣＬＫ、ＰＣクロックＰＣ＿ＣＬＫ、メインクロックＭａｉｎ＿ＣＬＫ、トランシーバクロックＸｃｖｒ＿ＣＬＫの出力を停止する。
【０１８７】
続いて、ファームウェアは、クロックコマンドレジスタ４０２に「６９ｈ」、「ｃ３ｈ」、「００ｈ」を順次設定して、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫ、ＰＬＬクロックＰＬＬ＿ＣＬＫ、発振クロックＸＣＬＫの順に出力を停止させる。
【０１８８】
図２３に、図１９に示すクロックコントローラを適用したＯＴＧデバイスコントローラＩＣのデータ転送制御の一例を示す。
【０１８９】
ここでは、電源投入後からデフォルト状態であるｂ＿ｉｄｌｅステートを経て、からＡデバイスとしてａ＿ｈｏｓｔステートに遷移するまでのシーケンスを示す。
【０１９０】
電源投入後の初期状態では、ＡｌｌＡｃｔｉｖｅモードにより全回路ブロックに対してクロックが供給される。
【０１９１】
その後、ファームウェアによりクロックコントロールレジスタ４０４に対し、図２０に示す発振回路ウェイクアップタイムＯＳＣＷａｋｅＵｐＴｉｍｅ［１：０］及びＰＬＬ回路ウェイクアップタイムＰＬＬＷａｋｅＵｐＴｉｍｅ［１：０］が設定される。
【０１９２】
そして、ファームウェアは、プラグのＩＤ端子の電圧から、デフォルトのＢデバイスのｂ＿ｉｄｌｅステートに遷移し、該ステートに対応するＯＳＣステートコマンドをＯＴＧコントローラに設定する。更に、ファームウェアは、ＡｌｌＳｌｅｅｐモードに移行させるため、クロックコントローラレジスタ４０４に対しクロック分配制御信号ＸｃｖｒＳｌｅｅｐ、ＨＣＳｌｅｅｐ、ＰＣＳｌｅｅｐ、ＭａｉｎＳｌｅｅｐがイネーブルとなるように設定すると共に、クロックコマンドレジスタに対して、発振回路発振イネーブル信号、ＰＬＬ回路発振イネーブル信号及びクロック分配制御信号ＯＴＧＣＳｌｅｅｐがディセーブルになるようにクロックコマンドを設定する。
【０１９３】
その後、接続相手にはＭｉｎｉ−Ｂプラグが挿入され、ＯＴＧデバイスコントローラＩＣにＭｉｎｉ−Ａプラグが挿入されると、ＩＤ信号が変化したことを示すＣｈｎａｇｅＩＤ割り込みがＣＰＵ（ファームウェア）に通知される。なお、ＣＰＵに通知される割り込み信号は、ＣＰＵにより非アクティブになるように制御される。
【０１９４】
そのときまでに、発振回路ウェイクアップタイムＯＳＣＷａｋｅＵｐＴｉｍｅ［１：０］及びＰＬＬ回路ウェイクアップタイムＰＬＬＷａｋｅＵｐＴｉｍｅ［１：０］に設定されたタイムアウト時間が経過後、発振回路及びＰＬＬ回路の供給が開始される。
【０１９５】
そして、ＣＰＵは、図５に示したように、遷移先のステートがａ＿ｉｄｌｅステートであると判断して、ＯＴＧステートコマンドを設定する。したがって、ＯＴＧデバイスコントローラＩＣでは、ａ＿ｉｄｌｅステートにおけるコントロール信号に基づいて各ブロックが制御される。更にＣＰＵは、図１３に示すようにａ＿ｉｄｌｅステートにおけるクロック制御パターンのＷａｉｔモードに対応して、コントロールデータをクロックコマンドレジスタに設定すると共に、クロックコマンドをクロックコマンドレジスタに設定する。これにより、ＯＴＧＣクロックＯＴＧＣ＿ＣＬＫのみ出力が開始され、ＯＴＧコントローラ２１０、ＣＰＵインタフェース２９０及びホスト／ペリフェラル切り替え回路２７０に対してクロックが供給される。
【０１９６】
図２４乃至図２６に、発振回路の発振制御の一例を示す。
【０１９７】
図２４は、Ｂデバイスのアイドル状態からＢデバイスのペリフェラル状態に遷移するときの発振回路の発振制御のタイミングの一例である。
【０１９８】
ＯＴＧデバイスコントローラＩＣが、Ｂデバイスとしてｂ＿ｉｄｌｅステートのとき、ＯＴＧコントローラにおいてラインステートが「Ｊ」状態でなくなったことを検出すると、ファームウェアの処理中に、ハードウェア割り込み（ＤｅｔＮｏｎＪ）が発生する。そして、ファームウェアは、ｂ＿ｉｄｌｅステートｂ＿ｐｅｒｉｐｈｅｒａｌへのステート遷移を行う。更にファームウェアは、クロックコマンドとしてＰｅｒｉｐｈｅｒａｌモードを設定する。
【０１９９】
割り込みＤｅｔＮｏｎＪを検出したＯＴＧコントローラからクロックコントローラ３９０にレジュームトリガ信号が入力されると、発振回路発振イネーブル信号によりイネーブル状態となった発振回路ウェイクアップ回路３６４は、発振イネーブル信号ＯＳＣｅｎを「Ｈ」レベル２設定し、発振回路３１２の発振動作を開始させる。
【０２００】
発振回路起動タイマ３６０では、クロックコントロールレジスタ４０４の発振回路ウェイクアップタイムＯＳＣＷａｋｅＵｐＴｉｍｅ［１：０］に設定されたタイムアウト時間の計時を開始する。そしてタイムアウト時間経過後、ＰＬＬ回路起動信号をＰＬＬ回路起動タイマ３６２に出力すると共に、ＰＬＬイネーブル信号ＰＬＬｅｎによりＰＬＬ回路３１４のＰＬＬ発振を開始させる。クロックコマンドとしてクロックコマンドレジスタ４０２に設定されたＰＬＬ回路発振イネーブル信号によりイネーブル状態となっているＰＬＬ回路起動タイマ３６２は、ＰＬＬ回路ウェイクアップタイムＰＬＬＷａｋｅＵｐＴｉｍｅ［１：０］に設定されたタイムアウトの計時を行う。
【０２０１】
そしてタイムアウト時間経過後、ＰＬＬ回路出力イネーブル信号によりＰＬＬ回路３１４からＰＬＬクロックＰＬＬ＿ＣＬＫを出力させる。
【０２０２】
続いて、クロックコマンドレジスタ又はクロックコントロールレジスタにより、クロック分配制御信号ＰＣＳｌｅｅｐ、ＭａｉｎＳｌｅｅｐ、ＸｃｖｒＳｓｌｅｅｐ、ＯＴＧＣＳｌｅｅｐによりペリフェラル動作に必要な各部にクロック供給を開始する。
【０２０３】
図２５は、Ａデバイスのサスペンド状態からＡデバイスのホスト状態に遷移するときの発振回路の発振制御のタイミングの一例である。
【０２０４】
ＯＴＧデバイスコントローラＩＣが、Ａデバイスとしてａ＿ｓｕｓｐｅｎｄステートのとき、ＯＴＧコントローラにおいてラインステートが「Ｋ」状態であることを検出すると、リモートウェイクアップトリガ信号を生成する。これにより、クロックコマンドレジスタに対しＨｏｓｔモードに対応するクロックコマンドが設定される。その結果、ＰＣクロックＰＣ＿ＣＬＫは停止状態のまま、ＨＣクロックＨＣ＿ＣＬＫ、メインクロックＭａｉｎ＿ＣＬＫ、トランシーバクロックＸｃｖｒ＿ＣＬＫの出力が開始される。
【０２０５】
このように、ハードウェアの検出結果をトリガとして、クロックコマンドを設定するようにしたので、例えば９００μｓという短い期間内にステート遷移を行う必要がある場合にも容易に対応することができる。
【０２０６】
図２６は、ＰＬＬ停止状態からテスト動作状態に遷移するときの発振回路の発振制御のタイミングの一例である。
【０２０７】
ＰＬＬ停止モードのとき、例えば発振回路起動タイマ３６０に対しハードウェアからレジュームトリガ信号が入力されると、発振回路ウェイクアップ回路３６４において、発振回路ウェイクアップタイムＯＳＣＷａｋｅＵｐＴｉｍｅで設定された期間経過後に、ＰＬＬ回路起動信号が出力されて、ＰＬＬイネーブル信号ＰＬＬｅｎがＰＬＬ回路３１４に対し出力される。これにより、ＰＬＬ回路起動タイマ３６２は、ＰＬＬ回路ウェイクアップタイムＰＬＬＷａｋｅＵｐＴｉｍｅで設定された期間経過後に、ＰＬＬ回路ウェイクアップ信号を出力する。その結果、ＰＬＬ回路出力イネーブル信号がアクティブとなる。
【０２０８】
４．  電子機器
次に本実施形態のクロック制御回路が適用されたデータ転送制御装置を含む電子機器の例について説明する。
【０２０９】
例えば図２７（Ａ）に電子機器の１つであるプリンタの内部ブロック図を示し、図２８（Ａ）にその外観図を示す。ＣＰＵ（マイクロコンピュータ）５１０はシステム全体の制御などを行う。操作部５１１はプリンタをユーザが操作するためのものである。ＲＯＭ５１６には、制御プログラム、フォントなどが格納され、ＲＡＭ５１７はＣＰＵ５１０のワーク領域として機能する。ＤＭＡＣ５１８は、ＣＰＵ５１０を介さずにデータ転送を行うためのＤＭＡコントローラである。表示パネル５１９はプリンタの動作状態をユーザに知らせるためのものである。
【０２１０】
ＵＳＢを介してパーソナルコンピュータなどの他のデバイスから送られてきたシリアルの印字データは、データ転送制御装置５００によりパラレルの印字データに変換される。そして、変換後のパラレル印字データは、ＣＰＵ５１０又はＤＭＡＣ５１８により、印字処理部（プリンタエンジン）５１２に送られる。そして、印字処理部５１２においてパラレル印字データに対して所与の処理が施され、プリントヘッダなどからなる印字部（データの出力処理を行う装置）５１４により紙に印字されて出力される。
【０２１１】
図２７（Ｂ）に電子機器の１つであるデジタルカメラの内部ブロック図を示し、図２８（Ｂ）にその外観図を示す。ＣＰＵ５２０はシステム全体の制御などを行う。操作部５２１はデジタルカメラをユーザが操作するためのものである。ＲＯＭ５２６には制御プログラムなどが格納され、ＲＡＭ５２７はＣＰＵ５２０のワーク領域として機能する。ＤＭＡＣ５２８はＤＭＡコントローラである。
【０２１２】
ＣＣＤなどからなる撮像部５２２により撮影対象の画像が読み取られ、読み取られた画像のデータは画像処理部５２４により処理される。そして、処理後の画像データは、ＣＰＵ５２０又はＤＭＡＣ５２８によりデータ転送制御装置５００に送られる。データ転送制御装置５００は、このパラレルの画像データをシリアルデータに変換し、ＵＳＢを介してパーソナルコンピュータなどの他のデバイスに送信する。
【０２１３】
図２７（Ｃ）に電子機器の１つであるＣＤ−ＲＷドライブの内部ブロック図を示し、図２８（Ｃ）にその外観図を示す。ＣＰＵ５３０はシステム全体の制御などを行う。操作部５３１はＣＤ−ＲＷをユーザが操作するためのものである。ＲＯＭ５３６には制御プログラムなどが格納され、ＲＡＭ５３７はＣＰＵ５３０のワーク領域として機能する。ＤＭＡＣ５３８はＤＭＡコントローラである。
【０２１４】
レーザ、モータ、光学系などからなる読み取り＆書き込み部（データの取り込み処理を行う装置又はデータの記憶処理を行うための装置）５３３によりＣＤ−ＲＷ５３２から読み取られたデータは、信号処理部５３４に入力され、エラー訂正処理などの所与の信号処理が施される。そして、信号処理が施されたデータが、ＣＰＵ５３０又はＤＭＡＣ５３８によりデータ転送制御装置５００に送られる。データ転送制御装置５００は、このパラレルのデータをシリアルデータに変換し、ＵＳＢを介してパーソナルコンピュータなどの他のデバイスに送信する。
【０２１５】
一方、ＵＳＢを介して他のデバイスから送られてきたシリアルのデータは、データ転送制御装置５００によりパラレルのデータに変換される。そして、このパラレルデータは、ＣＰＵ５３０又はＤＭＡＣ５３８により信号処理部５３４に送られる。そして、信号処理部５３４においてこのパラレルデータに対して所与の信号処理が施され、読み取り＆書き込み部５３３によりＣＤ−ＲＷ５３２に記憶される。
【０２１６】
なお、図２７（Ａ）、（Ｂ）、（Ｃ）において、ＣＰＵ５１０、５２０、５３０の他に、データ転送制御装置５００でのデータ転送制御のためのＣＰＵを別に設けるようにしてもよい。
【０２１７】
本実施形態のデータ転送制御装置を電子機器に用いれば、ホスト動作を行うパーソナルコンピュータと接続することなく、ＵＳＢ転送を行うことができる。特に携帯型の電子機器に用いることによって、ユーザはパーソナルコンピュータを持ち歩く必要がなくなり、手軽にＵＳＢ転送を行うことができる。例えば、パーソナルコンピュータを介することなく、プリンタや、ＣＤ−ＲＷとの間でＵＳＢ転送を行うことができる。
【０２１８】
また本実施形態のデータ転送制御装置を電子機器に用いれば、ＣＰＵ上で動作するファームウェアの処理負荷が軽減され、安価なＣＰＵを用いることが可能になる。更に、データ転送制御装置の低コスト化、小規模化を図れるため、電子機器の低コスト化、小規模化も図れるようになる。
【０２１９】
なお本実施形態のデータ転送制御装置を適用できる電子機器としては、上記以外にも例えば、種々の光ディスクドライブ（ＣＤ−ＲＯＭ、ＤＶＤ）、光磁気ディスクドライブ（ＭＯ）、ハードディスクドライブ、ＴＶ、ＶＴＲ、ビデオカメラ、オーディオ機器、電話機、プロジェクタ、パーソナルコンピュータ、電子手帳、ワードプロセッサなど種々のものを考えることができる。
【０２２０】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０２２１】
また、本発明は、ＯＴＧ規格でのデータ転送に適用されることが特に望ましいが、これに限定されるものではない。例えばＯＴＧ規格と同様の思想に基づく規格やＯＴＧ規格を発展させた規格におけるデータ転送にも本発明は適用できる。
【０２２２】
更にまた回路ブロックの分割方法は、上述の機能ブロックの分割方法に限定されるものではない。ＯＴＧデバイスコントローラＩＣの各機能ブロックの動作周波数、レイアウト配置及び回路規模に応じて複数の回路ブロックに適宜分割することができる。
【０２２３】
更にＯＴＧ規格のデータ転送として図１３に示すクロック制御パターンでクロック供給制御を行うものとして説明したが、これに限定されるものではない。より多くのクロック制御パターンを設けることで、より細かなクロック供給制御を行うことができるようになる。
【０２２４】
更に上述した実施形態において、転送に先立ってＭｉｎｉ−Ａプラグが挿入されたデバイスをＡデバイス、Ｍｉｎｉ−Ｂプラグが挿入されたデバイスをＢデバイスであるものとして説明したが、転送制御中に、Ａデバイス及びＢデバイスを入れ替え、例えばＶＢＵＳの供給源を切り替えるようにした場合でも、本発明は適用できる。
【図面の簡単な説明】
【図１】図１（Ａ）は、その両端にＭｉｎｉ−Ａプラグ及びＭｉｎｉ−Ｂプラグを有するＵＳＢケーブルの概要を示す模式図である。図１（Ｂ）は、Ａデバイス及びＢデバイスについて説明するための図である。図１（Ｃ）は、端子表を示す図である。
【図２】ＵＳＢケーブルが接続されたデュアルロールデバイスの例を模式的に示す図である。
【図３】ＳＲＰについて説明するための図である。
【図４】ＨＮＰについて説明するための図である。
【図５】Ａデバイスのステート遷移を説明するための図である。
【図６】Ｂデバイスのステート遷移を説明するための図である。
【図７】ＯＴＧデバイスコントローラＩＣの機能ブロック図である。
【図８】ＯＴＧデバイスコントローラＩＣがＡデバイスのとき、ＨＣで行われるステート遷移の一例を示すフロー図である。
【図９】ＯＴＧデバイスコントローラＩＣがＢデバイスのとき、ＨＣで行われるステート遷移の一例を示すフロー図である。
【図１０】ＯＴＧデバイスコントローラＩＣによるＨＮＰの動作タイミングの一例を示すタイミングチャートである。
【図１１】クロック制御回路の構成の概要を示すブロック図である。
【図１２】回路ブロック単位に供給されるクロックについて説明するための図である。
【図１３】クロック制御パターンの一例を示す図である。
【図１４】クロックコントローラの詳細な構成例を示す回路図である。
【図１５】リセット後のデフォルト状態から、Ｂデバイスのアイドル状態に遷移するときのクロック供給制御の動作タイミングの一例を示すタイミングチャートである。
【図１６】テスト状態において、ＰＬＬ回路の出力を停止させるときのクロック供給制御の動作タイミングの一例を示すタイミングチャートである。
【図１７】ＯＴＧデバイスコントローラＩＣ２００を用いたデータ転送制御の一例の前半部を示すシーケンス図である。
【図１８】ＯＴＧデバイスコントローラＩＣ２００を用いたデータ転送制御の一例の後半部を示すシーケンス図である。
【図１９】クロックコントローラの別の詳細な構成例を示す回路図である。
【図２０】クロックモニタレジスタ、クロックコントロールレジスタ、クロックコマンドレジスタのレジスタマップの一例を示す図である。
【図２１】リセット後のデフォルト状態から、Ｂデバイスのアイドル状態に遷移するときのクロック供給制御の動作タイミングの一例を示すタイミングチャートである。
【図２２】テスト状態において、ＰＬＬ回路の出力を停止させるときのクロック供給制御の動作タイミングの一例を示すタイミングチャートである。
【図２３】図１９に示すクロックコントローラを適用したＯＴＧデバイスコントローラＩＣのデータ転送制御の一例を示すシーケンス図である。
【図２４】Ｂデバイスのアイドル状態からＢデバイスのペリフェラル状態に遷移するときの発振回路の発振制御のタイミングの一例を示すタイミングチャートである。
【図２５】Ａデバイスのサスペンド状態からＡデバイスのホスト状態に遷移するときの発振回路の発振制御のタイミングの一例を示すタイミングチャートである。
【図２６】ＰＬＬ停止状態からテスト動作状態に遷移するときの発振回路の発振制御のタイミングの一例を示すタイミングチャートである。
【図２７】図２７（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の内部ブロック図の例である。
【図２８】図２８（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の外観図の例である。
【符号の説明】
１０、２０  デュアルロールデバイス（Dual-Role Device）
１２、２２、２１４  ＩＤ検出回路
２００  ＯＴＧデバイスコントローラＩＣ
２１０  ＯＴＧコントローラ
２１２  ＯＴＧ管理回路
２１６  ＶＢＵＳ検出回路
２１８  ラインステート検出回路
２２０  ホストコントローラ（ＨＣ）
２３０  ペリフェラルコントローラ（ＰＣ）
２４０  レジスタ部
２５０  パケットバッファ（ＦＩＦＯ）
２６０  バッファコントローラ
２７０  ホスト／ペリフェラル切り替え回路
２７２  ラインステートコントローラ
２７４  ＨＣ／ＰＣセレクタ
２８０  トランシーバ
２９０  ＣＰＵインタフェース
２９２  ＤＭＡハンドラ
２９４、３９０  クロックコントローラ
２９６  テストモジュール
３００  クロック制御回路
３１０  クロック生成回路
３１２  発振回路
３１４  ＰＬＬ回路
３１６  クロック分配制御回路
３１８  発振子
３２０  クロック出力制御回路
３２２、４０４  クロックコントロールレジスタ
３２４、４０６  クロックモニタレジスタ
３２６、４０２  クロックコマンドレジスタ
３２８、４００  クロックコマンドデコーダ
３３０  起動回路
３５０  Ｘｃｖｒ＿ＣＬＫ生成回路
３５２  ＨＣ＿ＣＬＫ生成回路
３５４  ＰＣ＿ＣＬＫ生成回路
３５６  Ｍａｉｎ＿ＣＬＫ生成回路
３５８  ＯＴＧＣ＿ＣＬＫ生成回路
３６０    発振回路起動タイマ
３６２  ＰＬＬ回路起動タイマ
３６４  発振回路ウェイクアップ回路
３６６  ＰＬＬ回路ウェイクアップ回路
５００  データ転送制御装置
５１０、５２０、５３０  ＣＰＵ
５１１、５２１、５３１  操作部
５１２  印字処理部
５１４  印字部
５１６、５２６、５３６  ＲＯＭ
５１７、５２７、５３７  ＲＡＭ
５１８、５２８、５３８  ＤＭＡＣ
５１９  表示パネル
５２２  撮像部
５２４  画像処理部
５３２  ＣＤ−ＲＷ
５３３  読み取り＆書き込み部
５３４  信号処理部
【図１】
0003685150.tif 000002
【図２】
0003685150.tif 000003
【図３】
0003685150.tif 000004
【図４】
0003685150.tif 000005
【図５】
0003685150.tif 000006
【図６】
0003685150.tif 000007
【図７】
0003685150.tif 000008
【図８】
0003685150.tif 000009
【図９】
0003685150.tif 000010
【図１０】
0003685150.tif 000011
【図１１】
0003685150.tif 000012
【図１２】
0003685150.tif 000013
【図１３】
0003685150.tif 000014
【図１４】
0003685150.tif 000015
【図１５】
0003685150.tif 000016
【図１６】
0003685150.tif 000017
【図１７】
0003685150.tif 000018
【図１８】
0003685150.tif 000019
【図１９】
0003685150.tif 000020
【図２０】
0003685150.tif 000021
【図２１】
0003685150.tif 000022
【図２２】
0003685150.tif 000023
【図２３】
0003685150.tif 000024
【図２４】
0003685150.tif 000025
【図２５】
0003685150.tif 000026
【図２６】
0003685150.tif 000027
【図２７】
0003685150.tif 000028
【図２８】
0003685150.tif 000029