(57)【特許請求の範囲】
【請求項１】
バスを介したデータ転送のためのデータ転送制御装置であって、
ハブとの間で転送されるパケットが格納されるハブ専用データ記憶部と、
前記ハブの状態の変化の有無を問い合わせるトークンパケットを前記ハブに対して周期的に発行するパケット送信部と、
前記トークンパケットに対応して、前記ハブが返信した応答パケットを受信するパケット受信部と、
前記パケット受信部により受信された前記応答パケットを前記ハブ専用データ記憶部に書き込む制御を行うと共に前記ハブの状態が変化したことを示す割り込みを発生する制御を行う転送コントローラと、
を含むことを特徴とするデータ転送制御装置。
【請求項２】
請求項１において、
前記転送コントローラは、
前記応答パケットが、返信すべきデータがないことを示すＮＡＫパケットではないことを条件に、前記応答パケットを前記ハブ専用データ記憶部に書き込む制御を行うと共に前記ハブの状態が変化したことを示す割り込みを発生する制御を行うことを特徴とするデータ転送制御装置。
【請求項３】
請求項１又は２において、
各エンドポイントとの間で転送されるパケットが各パイプ領域に記憶される複数のパイプ領域が確保されるパケットバッファを含み、
前記ハブ専用データ記憶部の記憶領域は、
前記パケットバッファの記憶領域とは別の領域に設けられていることを特徴とするデータ転送制御装置。
【請求項４】
請求項１又は２において、
各エンドポイントとの間で転送されるパケットが各パイプ領域に記憶される複数のパイプ領域が確保されるパケットバッファと、
ハブ専用転送モード又は通常転送モードを指定するための設定データが設定される転送モード設定レジスタとを含み、
前記転送モード設定レジスタによりハブ専用転送モードが設定されたとき、エンドポイントであるハブとの間の転送に対して前記ハブ専用データ記憶部の記憶領域が割り当てられ、
前記転送モード設定レジスタにより通常転送モードが設定されたとき、エンドポイントであるハブとの間の転送に対して前記パケットバッファの記憶領域が割り当てられることを特徴とするデータ転送制御装置。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記ハブ専用データ記憶部を用いたデータ転送の開始を指定するための指定ビットを有する転送条件レジスタを含み、
前記指定ビットがアクティブのとき、前記パケット送信部が前記トークンパケットを発行することを特徴とするデータ転送制御装置。
【請求項６】
請求項５において、
前記指定ビットがアクティブになってから非アクティブになるまでの間、前記パケット送信部が前記トークンパケットを周期的に発行し続けることを特徴とするデータ転送制御装置。
【請求項７】
請求項１乃至６のいずれかにおいて、
ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）規格に準拠したデータ転送を行うことを特徴とするデータ転送制御装置。
【請求項８】
請求項１乃至６のいずれかにおいて、
ホストとして動作するホスト動作を制御するためのステートと、ペリフェラルとして動作するペリフェラル動作を制御するためのステートとを含む複数のステートの遷移によりホスト動作又はペリフェラル動作の制御を行うステートコントローラを含み、
前記転送コントローラが、
ホスト動作時において、ホストとしてデータ転送を行うホストコントローラと、
ペリフェラル動作時において、ペリフェラルとしてデータ転送を行うペリフェラルコントローラとを含み、
ホスト動作時には、各エンドポイントとの間で転送されるパケットが各パイプ領域に記憶される複数のパイプ領域がパケットバッファに確保され、前記ホストコントローラが、パイプ領域と該パイプ領域に対応するエンドポイントとの間でパケットを転送し、
ペリフェラル動作時には、ホストとの間で転送されるパケットが各エンドポイント領域に記憶される複数のエンドポイント領域がパケットバッファに確保され、前記ペリフェラルコントローラが、エンドポイント領域とホストとの間でパケットを転送し、
前記ホストコントローラが、
ホスト動作時に、前記パケット送信部により前記ハブに対して前記トークンパケットを周期的に発行し、該トークンパケットに対応した前記応答パケットが、返信すべきデータがないことを示すＮＡＫパケットではないことを条件に前記転送コントローラにより前記応答パケットを前記ハブ専用データ記憶部に書き込む制御を行うと共に前記ハブの状態が変化したことを示す割り込みを発生する制御を行うことを特徴とするデータ転送制御装置。
【請求項９】
請求項８において、
ＵＳＢのＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格に準拠したデータ転送を行うことを特徴とするデータ転送制御装置。
【請求項１０】
請求項１乃至９のいずれかのデータ転送制御装置と、
前記データ転送制御装置を制御するプロセッサと、
を含むことを特徴とする電子機器。
【請求項１１】
バスを介したデータ転送のためのデータ転送制御方法であって、
ハブの状態の変化の有無を問い合わせるトークンパケットを周期的に発行し、
前記トークンパケットに対応して、前記ハブからの応答パケットを受信し、
前記応答パケットが、返信すべきデータがないことを示すＮＡＫパケットではないことを条件に、前記応答パケットをハブ専用データ記憶部に書き込むと共に前記ハブの状態が変化したことを示す割り込みを発生することを特徴とするデータ転送制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ転送制御装置、電子機器及びデータ転送制御方法に関する。
【０００２】
【従来の技術】
従来より、パーソナルコンピュータと周辺機器（広義には電子機器）とを接続するためのインターフェース規格としてＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）が知られている。ＵＳＢ（高速シリアルバス）には、マウスやキーボードやプリンタ等の機器を同じ規格のコネクタで接続できると共に、いわゆるプラグ＆プレイやホットプラグも実現できるという利点がある。また、従来のＵＳＢ１．１の規格に対する互換性を持ちながら、ＵＳＢ１．１に比べて格段に高速な４８０Ｍｂｐｓ（ビット毎秒）（ＨＳモード）のデータ転送速度を実現できる規格としてＵＳＢ２．０規格が策定され、注目を浴びている。
【０００３】
【特許文献１】
特開平１０−３０３９４８号公報
【０００４】
【発明が解決しようとする課題】
ＵＳＢでは、パーソナルコンピュータに代表されるホストを中心とした接続形態（バストポロジ）が採用される。ホストは、バスに接続されるデバイスに関する情報（デバイスディスクリプタ）を取得し、デバイスに対して固有のアドレスを割り当てる。そしてホストは、デバイス間のデータ転送のスケジューリングを行って、各デバイスのエンドポイントとの間でデータ転送を行う。
【０００５】
またＵＳＢでは、ハブ（ＨＵＢ）を設けることにより、ホストと複数のデバイスとを接続することができる。ＵＳＢでは、いわゆるプラグ＆プレイやホットプラグを実現するため、電源投入後等にハブに新たにデバイスが接続されたりデバイスが抜かれた場合に、ホストがハブの状態を取得して、再度スケジューリング等を行う。このためホストは、他のデバイスと同様にハブとの間で論理的な通信路であるパイプを設定し、周期的にハブに対してその状態の変化を監視する。
【０００６】
しかしながら、ハブを監視するために設定されるパイプに対しても、他のデバイスとの間で設定されるパイプと同様にホスト上のリソースが割り当てられる。従って、ハブの状態の変化の頻度が低いにも関わらず、ハブを監視するためにホスト上の有限なリソースを用いることになり、リソースの有効活用を図ることができなかった。
【０００７】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、ハブが接続された場合でも効率的にリソースを活用することができるデータ転送制御装置、これを含む電子機器、及びデータ転送制御方法を提供することにある。
【０００８】
【課題を解決するための手段】
上記課題を解決するために本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、ハブとの間で転送されるパケットが格納されるハブ専用データ記憶部と、前記ハブの状態の変化の有無を問い合わせるトークンパケットを前記ハブに対して周期的に発行するパケット送信部と、前記トークンパケットに対応して、前記ハブが返信した応答パケットを受信するパケット受信部と、前記パケット受信部により受信された前記応答パケットを前記ハブ専用データ記憶部に書き込む制御を行うと共に前記ハブの状態が変化したことを示す割り込みを発生する制御を行う転送コントローラとを含むデータ転送制御装置に関係する。
【０００９】
また本発明に係るデータ転送制御装置では、前記転送コントローラは、前記応答パケットが、返信すべきデータがないことを示すＮＡＫパケットではないことを条件に、前記応答パケットを前記ハブ専用データ記憶部に書き込む制御を行うと共に前記ハブの状態が変化したことを示す割り込みを発生する制御を行ってもよい。
【００１０】
ここでハブは、複数のポートを有し、ポートにデバイスが接続される。このようなハブを介して複数のデバイスを接続することで、本発明に係るデータ転送制御装置と複数のデバイスとの間でデータ転送を行うことができる。
【００１１】
本発明においては、トークンパケットを発行してハブの状態の変化の有無を周期的に問い合わせる場合に、該ハブとの間の転送専用に用いられるハブ専用データ記憶部が設けられる。そして、ハブがトークンパケットに対応して返信した応答パケットを受信すると、該応答パケットがＮＡＫパケットであるか否かを判別し、ＮＡＫパケットではないと判別したとき、受信した応答パケットをハブ専用データ記憶部に書き込み、かつハブの状態が変化したことを示す割り込みを発生させる。従って、割り込みにより通知された処理部が、例えばハブ専用データ記憶部を読み出し、ハブの状態の変化を認識し、その変化に対応した設定をデータ転送制御装置に対して行うことができるようになる。
【００１２】
なお応答パケットがＮＡＫパケットのとき、受信した応答パケットに対する処理を行わなくてもよい。
【００１３】
本発明によれば、ハブの状態の変化を監視するための転送に対し、他のデバイスとの間の転送に対して確保されるリソースを割り当てることなく、専用のデータ記憶部が割り当てられる。ハブの状態の変化の頻度が低い場合、他のデバイスとの間の転送に確保可能なリソースを消費してしまうことなく、設定できる転送の自由度を低下させることがない。
【００１４】
また、ハブの状態の変化があったと判断されたときのみ、応答パケットをハブ専用データ記憶部に書き込むようにしたので、ハブ専用データ記憶部の記憶領域を最低限に抑えることができる。
【００１５】
また本発明に係るデータ転送制御装置では、各エンドポイントとの間で転送されるパケットが各パイプ領域に記憶される複数のパイプ領域が確保されるパケットバッファを含み、前記ハブ専用データ記憶部の記憶領域は、前記パケットバッファの記憶領域とは別の領域に設けられてもよい。
【００１６】
本発明によれば、ハブ専用データ記憶部が、各エンドポイントとの間で転送されるパケットが各パイプ領域に記憶される複数のパイプ領域が確保されるパケットバッファと物理的に異なるように構成したので、汎用的に用いられるパケットバッファの記憶領域を削減することなく、ハブの状態を監視するデータ転送制御装置を提供することができる。
【００１７】
また本発明に係るデータ転送制御装置では、各エンドポイントとの間で転送されるパケットが各パイプ領域に記憶される複数のパイプ領域が確保されるパケットバッファと、ハブ専用転送モード又は通常転送モードを指定するための設定データが設定される転送モード設定レジスタとを含み、前記転送モード設定レジスタによりハブ専用転送モードが設定されたとき、エンドポイントであるハブとの間の転送に対して前記ハブ専用データ記憶部の記憶領域が割り当てられ、前記転送モード設定レジスタにより通常転送モードが設定されたとき、エンドポイントであるハブとの間の転送に対して前記パケットバッファの記憶領域が割り当てられてもよい。
【００１８】
本発明においては、転送モード設定レジスタを設けてハブ専用転送モード又は通常転送モードを指定できるようにし、ハブ専用転送モードに指定されたときのみ、エンドポイントであるハブとの間の転送に対して前記ハブ専用データ記憶部の記憶領域が割り当てられる。これにより、ハブの監視のために固定的にリソースが割り当てられることなく、リソースを有効に活用してデータ転送の設定の自由度を向上させることができる。
【００１９】
また本発明に係るデータ転送制御装置では、前記ハブ専用データ記憶部を用いたデータ転送の開始を指定するための指定ビットを有する転送条件レジスタを含み、前記指定ビットがアクティブのとき、前記パケット送信部が前記トークンパケットを発行してもよい。
【００２０】
また本発明に係るデータ転送制御装置では、前記指定ビットがアクティブになってから非アクティブになるまでの間、前記パケット送信部が前記トークンパケットを周期的に発行し続けてもよい。
【００２１】
本発明によれば、転送条件レジスタに含まれる指定ビットを用いて、周期的にトークンパケットの発行を続けるようにしたので、頻度が低い割り込みに対する処理部の制御を簡素化できる。
【００２２】
また本発明に係るデータ転送制御装置では、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）規格に準拠したデータ転送を行ってもよい。
【００２３】
また本発明に係るデータ転送制御装置では、ホストとして動作するホスト動作を制御するためのステートと、ペリフェラルとして動作するペリフェラル動作を制御するためのステートとを含む複数のステートの遷移によりホスト動作又はペリフェラル動作の制御を行うステートコントローラを含み、前記転送コントローラが、ホスト動作時において、ホストとしてデータ転送を行うホストコントローラと、ペリフェラル動作時において、ペリフェラルとしてデータ転送を行うペリフェラルコントローラとを含み、ホスト動作時には、各エンドポイントとの間で転送されるパケットが各パイプ領域に記憶される複数のパイプ領域がパケットバッファに確保され、前記ホストコントローラが、パイプ領域と該パイプ領域に対応するエンドポイントとの間でパケットを転送し、ペリフェラル動作時には、ホストとの間で転送されるパケットが各エンドポイント領域に記憶される複数のエンドポイント領域がパケットバッファに確保され、前記ペリフェラルコントローラが、エンドポイント領域とホストとの間でパケットを転送し、前記ホストコントローラが、ホスト動作時に、前記パケット送信部により前記ハブに対して前記トークンパケットを周期的に発行し、該トークンパケットに対応した前記応答パケットが、返信すべきデータがないことを示すＮＡＫパケットではないことを条件に前記転送コントローラにより前記応答パケットを前記ハブ専用データ記憶部に書き込む制御を行うと共に前記ハブの状態が変化したことを示す割り込みを発生する制御を行ってもよい。
【００２４】
また本発明に係るデータ転送制御装置では、ＵＳＢのＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格に準拠したデータ転送を行ってもよい。
【００２５】
本発明によれば、いわゆるデュアルロール・デバイスの機能を実現することができる。そして、このようなデュアルロール・デバイスの機能を実現した上で、ハブの監視のために無駄にリソースを消費することがないデータ転送制御装置を提供することができる。
【００２６】
また本発明は、上記のいずれかのデータ転送制御装置と、前記データ転送制御装置を制御するプロセッサとを含む電子機器に関係する。
【００２７】
また本発明は、バスを介したデータ転送のためのデータ転送制御方法であって、ハブの状態の変化の有無を問い合わせるトークンパケットを周期的に発行し、前記トークンパケットに対応して、前記ハブからの応答パケットを受信し、前記応答パケットが、返信すべきデータがないことを示すＮＡＫパケットではないことを条件に、前記応答パケットを前記ハブ専用データ記憶部に書き込むと共に前記ハブの状態が変化したことを示す割り込みを発生するデータ転送制御方法に関係する。
【００２８】
【発明の実施の形態】
以下、本発明の好適な実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成のすべてが本発明の必須構成要件であるとは限らない。
【００２９】
１．  ＵＳＢのデータ転送
まず、ＵＳＢ（広義にはシリアルバス）のデータ転送について簡単に説明する。ＵＳＢではデータ転送の主導権をホストが有している。即ち、データ転送のトランザクションを起動するのはホストであり、データ転送に関する大部分の制御はホストが行う。従って、デバイス（ターゲット）はホストからの要求に対して単に応えるだけでよい。このため、デバイス側の処理、構成を簡素化でき、デバイスが内蔵するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）（広義にはプロセッサ）としても低価格なものを用いることが可能になる。
【００３０】
ＵＳＢでは、このようなホスト主導のデータ転送を実現するために、図１に示すようなエンドポイント（Ｅｎｄｐｏｉｎｔ）（ＥＰ０〜ＥＰ１５）がデバイス側に用意される。ＵＳＢでは、ホストと１つのデバイスとの間に、複数の論理的な通信路（パイプ）を持たせることができ、各パイプのデバイス側の端がエンドポイントと呼ばれる。各エンドポイントは、物理的には、少なくとも１パケット分のデータを格納できるＦＩＦＯメモリで実現される。
【００３１】
エンドポイントは、デバイスアドレスとエンドポイント番号とにより一義的にアドレス指定できる。即ちホストは、デバイスアドレスとエンドポイント番号とを指定することで、所望のエンドポイントへのデータ送信や、所望のエンドポイントからのデータ受信を自由に行うことができる。また、エンドポイントの構成の仕方はデバイス側の任意であり、エンドポイント番号の割り当てや、各エンドポイントに割り当てられる記憶領域のデータサイズ等は、エニュメレーション（ｅｎｕｍｅｒａｔｉｏｎ）処理時にホストが知ることができる。
【００３２】
２．  ＵＳＢのＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格
ＵＳＢでは、ホストに接続されていたデバイスにホスト機能を持たせることができるＯＴＧ規格と呼ばれるインターフェース規格が策定された。ＯＴＧ規格によれば、デバイス同士を接続してＵＳＢ規格に従ったデータ転送を行うことができる。例えばデジタルカメラとプリンタとをダイレクトに接続してデジタルカメラの画像を印刷することが可能となる。また、デジタルカメラやデジタルビデオカメラをストレージ装置に接続して、データを保存することが可能となる。
【００３３】
２．１  Ａデバイス、Ｂデバイス
ＯＴＧ規格では、コネクタの規格として、図２（Ａ）に示すようなＭｉｎｉ−Ａプラグ、Ｍｉｎｉ−Ｂプラグが定義されている。また、これらのＭｉｎｉ−Ａプラグ、Ｍｉｎｉ−Ｂプラグの両方を接続できるコネクタとして、Ｍｉｎｉ−ＡＢレセプタクル（ｒｅｃｅｐｔａｃｌｅ）が定義されている。
【００３４】
そして例えば図２（Ｂ）のように、ＵＳＢケーブルのＭｉｎｉ−Ａプラグに電子機器Ｐが接続され、Ｍｉｎｉ−Ｂプラグに電子機器Ｑが接続されると、電子機器ＰはＡデバイスに設定され、電子機器ＱはＢデバイスに設定される。一方、図２（Ｃ）に示すように、Ｍｉｎｉ−Ｂプラグ、Ｍｉｎｉ−Ａプラグが電子機器Ｐ、Ｑに接続されると、電子機器Ｐ、Ｑは、それぞれＢデバイス、Ａデバイスに設定される。
【００３５】
Ｍｉｎｉ−Ａプラグ内ではＩＤピンがＧＮＤに接続されており、Ｍｉｎｉ−Ｂプラグ内ではＩＤピンがフローティング状態になっている。電子機器は、内蔵するプルアップ抵抗を用いて、ＩＤピンの電圧レベルを検出することで、自身がＭｉｎｉ−Ａプラグに接続されたのか、或いはＭｉｎｉ−Ｂプラグに接続されたのかを判断する。
【００３６】
ＯＴＧ規格では、Ａデバイス（マスタ）が、電源（ＶＢＵＳ）を供給する側（供給元）になり、Ｂデバイス（スレーブ）が、電源の供給を受ける側（供給先）になる。またＡデバイスは、デフォルトでホストとなり、Ｂデバイスは、デフォルトでペリフェラル（周辺機器）になる。ペリフェラルは、ＵＳＢ２．０規格におけるデバイスとして動作する。
【００３７】
２．２  デュアルロール・デバイス
ＯＴＧ規格では、ホスト（簡易ホスト）としての役割とペリフェラルとしての役割の両方を持つことができるデュアルロール・デバイス（Ｄｕａｌ−Ｒｏｌｅ  Ｄｅｖｉｃｅ）が定義されている。
【００３８】
デュアルロール・デバイスは、ホストとしてホスト動作を行うことができ、またペリフェラルとしてペリフェラル動作を行うことができる。そして、デュアルロール・デバイスに接続された相手が、従来のＵＳＢ規格におけるホストやペリフェラルである場合には、デュアルロール・デバイスの役割は一意に定まる。つまり、接続相手がホストであれば、デュアルロール・デバイスはペリフェラルになり、接続相手がペリフェラルであれば、デュアルロール・デバイスはホストになる。
【００３９】
一方、接続相手がデュアルロール・デバイスである場合には、両方のデュアルロール・デバイスは、互いにホストとペリフェラルの役割を交換できる。
【００４０】
２．３  ＳＲＰ、ＨＮＰ
デュアルロール・デバイスは、図３（Ａ）、（Ｂ）に示すようなセッション開始要求手順ＳＲＰ（Ｓｅｓｓｉｏｎ  Ｒｅｑｕｅｓｔ  Ｐｒｏｔｏｃｏｌ）やホスト交換手順ＨＮＰ（Ｈｏｓｔ
Ｎｅｇｏｔｉａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）の機能を持つ。
【００４１】
ここでセッション開始要求手順ＳＲＰは、ＢデバイスがＡデバイスに対して、ＶＢＵＳ（電源）の供給を要求するプロトコルである。
【００４２】
ＯＴＧ規格では、バスを使用しないＡデバイスは、ＶＢＵＳの供給を停止できる。これにより、Ａデバイスが例えば小型の携帯機器であった場合に、無駄な電力消費を防止できる。そして、ＡデバイスがＶＢＵＳの供給を停止した場合に、ＢデバイスがＶＢＵＳを供給してもらいたい場合には、このＳＲＰを使用して、Ａデバイスに対してＶＢＵＳの供給の再開を要求する。
【００４３】
図３（Ａ）に、ＳＲＰの概要を示す。図３（Ａ）に示すように、Ｂデバイスは、データラインパルシング（Ｄａｔａ−ｌｉｎｅ  Ｐｕｌｓｉｎｇ）又はＶＢＵＳパルシングを行うことで、Ａデバイスに対してＶＢＵＳの供給を要求する。そして、ＡデバイスによるＶＢＵＳの供給の開始後に、Ｂデバイスのペリフェラル動作（ｐｅｒｉｐｈｅｒａｌ  ｏｐｅｒａｔｉｏｎ）と、Ａデバイスのホスト動作（ｈｏｓｔ  ｏｐｅｒａｔｉｏｎ）が開始する。
【００４４】
図２（Ａ）〜図２（Ｃ）で説明したように、デュアルロール・デバイス同士の接続では、Ｍｉｎｉ−Ａプラグが接続された側であるＡデバイスがデフォルトのホストとなり、Ｍｉｎｉ−Ｂプラグが接続された側であるＢデバイスがデフォルトのペリフェラルになる。そして、ＯＴＧでは、プラグの抜き差しを行わなくても、ホストとペリフェラルの役割を交換できる。ＨＮＰは、このホストとペリフェラルの役割を交換するためのプロトコルである。
【００４５】
図３（Ｂ）に、ＨＮＰの概要を示す。デフォルトのホストとして動作するＡデバイスが、バスの使用を終了すると、バスがアイドル状態になる。その後に、Ｂデバイスがデータ信号線ＤＰ（Ｄ＋）のプルアップ抵抗を無効にすると、Ａデバイスがデータ信号線ＤＰのプルアップ抵抗を有効にする。これにより、Ａデバイスの役割はホストからペリフェラルに変わり、ペリフェラルとしての動作を開始する。また、Ｂデバイスの役割はペリフェラルからホストに変わり、ホストとしての動作を開始する。
【００４６】
その後、Ｂデバイスがバスの使用を終了し、Ａデバイスがデータ信号線ＤＰのプルアップ抵抗を無効にすると、Ｂデバイスがデータ信号線ＤＰのプルアップ抵抗を有効にする。これにより、Ｂデバイスの役割はホストからペリフェラルに戻り、ペリフェラルとしての動作を再開する。また、Ａデバイスの役割はペリフェラルからホストに戻り、ホストとしての動作を再開する。
【００４７】
以上説明したＯＴＧによれば、携帯電話やデジタルカメラなどの携帯機器をＵＳＢのホストとして動作させ、携帯機器同士をポイント・ツー・ポイント（ピア・ツー・ピア）で接続してデータ転送を行うことが可能になる。これにより、ＵＳＢインターフェースに新たな付加価値を生むことができ、これまでに存在しなかったアプリケーションを創出できる。
【００４８】
３．  データ転送制御装置
図４に、本実施形態におけるデータ転送制御装置の構成の要部を示す。図４では、本実施形態におけるデータ転送制御装置１００を含む電子機器１０にハブ２００が接続されている。電子機器１０は、バス２０を介してハブ２００との間でデータ（パケット）転送を行う。このデータ転送は、電子機器１０に含まれるデータ転送制御装置１００によって制御される。ハブ２００は、各ポートが他の電子機器（周辺機器）に接続される複数のポートＰ１〜Ｐｎ（ｎは２以上の整数）を含み、電子機器１０と各ポートに接続される他の電子機器との間のデータ転送を実現させる。
【００４９】
電子機器１０は、処理部５０と、データ転送制御装置１００とを含む。処理部５０は、データ転送制御装置１００等の電子機器１０の全体を制御する。処理部５０は、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）等で構成されるアプリケーションデバイス（アプリケーション層のデバイス）、ＣＰＵ（広義にはプロセッサ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を含む。アプリケーションデバイスとしては、例えばハードディスクドライバや光ディスクドライブ等のメディアドライブを制御するデバイスや、プリンタやスキャナを制御するデバイスや、ＭＰＥＧエンコーダ、ＭＰＥＧデコーダ等を含むデバイス等がある。
【００５０】
データ転送制御装置１００を制御するファームウェア（プログラム）は、ＣＰＵ上で動作させることができる。処理部５０のＲＯＭは、制御プログラムや各種のデータを記憶する。処理部５０のＲＡＭは、ＣＰＵやデータ転送制御装置１００のワーク領域やデータ格納領域となる。
【００５１】
また電子機器１０は、表示部、操作部を含むことができる。電子機器１０の表示部は、種々の情報をユーザに対して表示出力する。操作部はユーザが電子機器を操作するためのものである。このような電子機器として、光ディスクドライバ（ＣＤ−ＲＯＭ、ＤＶＤ）、光磁気ディスク（ＭＯ）、ハードディスクドライブ、ＴＶ、ＴＶチューナ、ＶＴＲ、ビデオカメラ、オーディオ機器、電話機、プロジェクタ、パーソナルコンピュータ、電子手帳、ＰＤＡ、或いはワードプロセッサ等の種々のものがある。
【００５２】
データ転送制御装置１００は、ハブ専用データ記憶部１１０と、パケット送信部１２０と、パケット受信部１４０と、パケットバッファ１５０と、転送コントローラ１６０、トランシーバ部１６２とを含む。
【００５３】
処理部５０は、バス２０を介して接続されるデバイスとの間に論理的な通信路を設定する。即ち処理部５０は、デバイスとの間で行われる転送の種類、転送の方向、転送量等の設定を行う。図４に示すようにバス２０にハブ２００が接続される場合、処理部５０は、ハブ２００のポートに接続されるデバイスとの間に通信路を設定する。このため処理部５０は、ハブ２００のポートの状態を把握して各ポートに接続されるデバイスを認識する必要がある。
【００５４】
そこでデータ転送制御装置１００は、ハブ２００との間に監視用の通信路を設定し、ハブ２００に対してトークンパケット（広義にはトークン）を周期的に発行して、ハブ２００の状態を応答パケット（広義には応答データ）として取り込む。ここで、ハブ２００の状態とは、例えばハブ２００のポートの使用状態又はポートの接続状態ということができる。そして、処理部５０は、データ転送制御装置１００に取り込まれた応答パケットを解析して、ハブ２００の各ポートに接続されるデバイスを把握して通信路の設定を行う。
【００５５】
このとき、処理部５０は、設定した通信路の一端のハブ又はデバイス（エンドポイント）ごとにリソースを確保して、データ転送制御装置１００によるデータ転送を制御する。即ちデータ転送制御装置１００では、エンドポイントごとにパケットバッファ１５０の領域が確保される。
【００５６】
このようにしてリソースが割り当てられたデータ転送制御装置１００は、転送コントローラ１６０が制御するパケット送信部１２０及びパケット受信部１４０により、トランシーバ部１６２及びバス２０を介してエンドポイントとの間でデータ転送を行う。より具体的には、データ転送制御装置１００は、パケットバッファ１５０を用いてデータ転送を行う。パケットバッファ１５０には、各エンドポイントとの間で転送されるパケット（データ）が各パイプ領域に記憶される複数のパイプ領域が確保される。そして、データ転送制御装置１００は、エンドポイントごとにパケットバッファ１５０に設けられた領域にパケットの書き込み及び読み出しを行いながら、データ転送を行う。
【００５７】
これに対して、エンドポイントがハブ２００の場合、データ転送制御装置１００では、当該エンドポイントに対してハブ専用データ記憶部１１０が割り当てられる。ハブ専用データ記憶部１１０には、ハブ２００との間で設定された通信路を介してハブ２００との間で転送されるパケット（広義にはデータ）が格納される。
【００５８】
パケット送信部１２０は、トークンパケット生成部１２２、データパケット生成部１２４、ハンドシェークパケット生成部１２６を含む。パケット送信部１２０のトークンパケット生成部１２２は、トークン発行部として、ハブ２００の状態の変化の有無を問い合わせるトークンパケットをハブ２００に対して周期的に発行する。なお、データパケット生成部１２４は、データパケットを生成する。生成されたデータパケットは、パケット送信部１２０によりバス２０を介して送信される。ハンドシェークパケット生成部１２６は、ハンドシェークパケットを生成する。ハンドシェークパケットは、パケット送信部１２０によりバス２０を介して送信される。
【００５９】
ハブ２００は、バス２０を介してデータ転送制御装置１００からのトークンパケットを受信すると、該トークンパケットに対応した応答パケットを返信する。応答パケットは、ハブ２００の状態が変化したこと、又はハブ２００の状態が変化しないことを表わすデータを含む。なおハブ２００の状態が変化しないことを表わすデータとしては、ハブ２００が返信すべきデータがないことを示すＮＡＫパケットがある。
【００６０】
ハブ２００によって返信された応答パケットは、データ転送制御装置１００のトランシーバ部１６２を介してパケット受信部１４０により受信される。即ちパケット受信部１４０は、トークンパケットに対応し、ハブ２００によって返信された応答パケットを受信する。パケット受信部１４０によって受信された応答パケットは、転送コントローラ１６０によって解析される。
【００６１】
転送コントローラ１６０は、ハブ２００からの応答パケットが、ハブ２００の状態が変化しないことを表わすＮＡＫパケット（第１のパケット）であるか否かを判別する。応答パケットがＮＡＫパケットであると判別されたとき、転送コントローラ１６０は、ハブ２００の状態が変化していないと判断し、次回に発行されるトークンパケットに対応する応答パケットの受信を待つ。一方、応答パケットがＮＡＫパケットではないと判別されたとき、転送コントローラ１６０は、ハブ２００の状態が変化したと判断し、該応答パケットをハブ専用データ記憶部１１０に書き込む制御を行うと共に、処理部５０に対してハブ２００の状態が変化したことを示す割り込みを発生する制御を行う。こうして発生した割り込みにより、処理部５０にその旨を通知する。
【００６２】
転送コントローラからの制御により発生した割り込みを受信した処理部５０はファームウェアにより制御される。処理部５０は、例えばハブ専用データ記憶部１１０に格納された応答パケットを読み出し、ハブ２００の状態がどのように変化したかを解析し、変化後のハブ２００の状態に対応した通信路の再構築や、ハブ２００に接続されたデバイスの過電流発生に対する対処等を行う。
【００６３】
このようにデータ転送制御装置１００では、ハブ専用データ記憶部１１０を設けている。そして、ハブの監視用に設定される通信路を介して行われるデータ転送にはパケットバッファ１５０を割り当てずに、ハブ専用データ記憶部１１０を割り当てる。即ちハブ専用データ記憶部１１０の記憶領域が、パケットバッファ１５０とは別の領域に設けられている。こうすることで、ハブの状態が変化する頻度が少ないにも関わらず、汎用的に用いられる有限なリソースを割り当てる必要がなくなり、リソースの有効活用を図ることができるようになる。またハブの状態が変化したことを示すパケットのサイズは小さいため、ハブ専用データ記憶部１１０をレジスタ等のハードウェアにより構成してもその影響は小さいため、ハードウェアの増加よりもリソースの有効活用により得られる効果が大きい。
【００６４】
またデータ転送制御装置１００は、更に転送モード設定レジスタ１７０を含んでも良い。この場合、転送モード設定レジスタ１７０には、ハブ専用転送モードの転送又は通常転送モードを指定するための設定データが、例えば処理部５０によって設定される。
【００６５】
転送モード設定レジスタ１７０に、ハブ専用転送モードの転送制御を行うように指定する設定データが設定された場合、ハブ２００との間に設定される通信路を介して行われる転送がハブ専用転送モードの転送となる。ハブ専用転送モードの転送では、リソースとして、データ転送制御装置１００のハブ専用データ記憶部１１０が割り当てられる。即ち、エンドポイントであるハブとの間の転送に対してハブ専用データ記憶部１１０の記憶領域がリソースとして割り当てられる。
【００６６】
転送モード設定レジスタ１７０に、通常転送モードの転送制御を行うように指定する設定データが設定された場合、ハブ２００との間に設定される通信路を介して行われる転送が通常転送モードの転送となる。通常転送モードの転送では、リソースとして、データ転送制御装置１００のパケットバッファ１５０が割り当てられる。即ち、エンドポイントであるハブとの間の転送に対してパケットバッファ１５０の記憶領域がリソースとして割り当てられる。
【００６７】
こうすることで、汎用のパケットバッファ１５０にリソースを割り当てることなく、ハブとの間で通信路が設定された場合にだけリソースとしてハブ専用データ記憶部１１０を割り当てることができるようになり、リソースを有効に活用することができる。
【００６８】
更にデータ転送制御装置１００は、転送条件レジスタ１８０を含んでもよい。そして転送条件レジスタ１８０は、ハブ専用データ記憶部１１０を用いたデータ転送の開始を指定するための指定ビットを有する。
【００６９】
パケット送信部１２０は、指定ビットがアクティブのとき、トークンパケットを発行（送信）する。そして、指定ビットがアクティブになってから非アクティブになるまでの間、パケット送信部１２０がトークン発行部として、トークンパケットを周期的に発行し続ける。このようにしてハブ２００の監視をすることで、頻度が低い割り込みに対する処理部５０の制御を簡素化できる。
【００７０】
４．  データ転送制御装置の構成例
以下では、本実施形態におけるデータ転送制御装置１００が、ＵＳＢのＯＴＧ規格に準拠したデータ転送制御を行う場合を例に、具体的な構成について説明する。この場合、データ転送制御装置１００がホストとして動作する場合に、データ転送制御装置１００がハブ２００の状態の変化を監視する。
【００７１】
まず、ハブ２００について説明する。
【００７２】
図５に、ハブ２００の機能ブロックの構成例の概要を示す。ハブ２００は、ＵＳＢ規格におけるハブとして機能し、図４に示すようにバス２０を介してデータ転送制御装置１００と接続される。
【００７３】
ハブ２００は、ポートＰ１〜Ｐｎを含む。各ポートには、ＵＳＢ（バス）を介してデバイスが接続される。ハブ２００は、トークン受信部２１０、ステータス変化ビット生成部２２０、データパケット生成部２３０、ＮＡＫ（Ｎｅｇａｔｉｖｅ  ＡｃＫｎｏｗｌｅｄｇｅｍｅｎｔ）パケット生成部２４０、応答パケット送信部２５０を含む。
【００７４】
トークン受信部２１０は、データ転送制御装置１００からのトークンパケットを受信する。ＵＳＢ規格に準拠したデータ転送制御装置１００では、後述するようにパケット送信部１２０が、転送の種類がインタラプト（Ｉｎｔｅｒｒｕｐｔ）転送で、転送方向がＩＮ方向のトークンパケットを発行する。
【００７５】
ステータス変化ビット生成部２２０は、ハブ２００の状態の変化の様子を示すステータス変化ビットを生成する。ハブ２００の状態は、ポートＰ１〜Ｐｎの状態ということができる。ポートに新たにケーブルが刺されたとき、或いは新たにケーブルが抜かれたときに、ステータス変化ビットは、そのポートの状態が変化したことを示す。
【００７６】
図６に、ステータス変化ビットの説明図を示す。ステータス変化ビットは、各ポートの変化が検出されたときに「１」となる変化検出ビットと、ハブ２００の状態が変化したことを示すハブ変化検出ビットとを含む。例えば、ハブ変化検出ビットによりハブの状態が変化したか否かを判断することができる。そして、ハブ変化検出ビットにより、どのポートが変化したかを判別することができる。
【００７７】
ハブ２００との通信路を構築するときに、ハブディスクリプタでハブ２００のポート数がデータ転送制御装置１００において認識される。従って、バイト長単位で扱われるステータス変化ビットは、ハブ２００のポート数が８の倍数でなくても、どのポートが変化したかを容易に判別することができる。
【００７８】
図５において、データパケット生成部２３０は、トークン受信部２１０で受信されたトークンパケットに対応した応答パケットとして、ステータス変化ビット生成部２２０により生成されたステータス変化ビットを含む応答パケットを生成する。
【００７９】
またＮＡＫパケット生成部２４０は、ＮＡＫパケットを生成する。ＮＡＫパケットは、トークン受信部２１０でデータ転送制御装置１００からのトークンパケットに対応して、ハブ２００から転送すべきデータがない場合に返信される。
【００８０】
応答パケット送信部２５０は、トークン受信部２１０で受信されたトークンパケットに対応して、データパケット生成部２３０で生成された応答パケット、又はＮＡＫパケット生成部２４０で生成されたＮＡＫパケットを、バス２０を介してデータ転送制御装置１００に対して送信する。
【００８１】
図７（Ａ）、（Ｂ）に、データ転送制御装置１００とハブ２００との間で行われるトランザクションの説明図を示す。図７（Ａ）は、ハブ２００の状態の変化があったときに行われるトランザクションの例を模式的に示したものである。図７（Ｂ）は、ハブ２００の状態の変化がなかったときに行われるトランザクションの例を模式的に示したものである。
【００８２】
ＵＳＢでは、データ転送制御装置１００がハブ２００に対してその状態の変化を問い合わせる場合に、転送方向がＩＮ方向のインタラプト転送が用いられる。インタラプト転送では、原則的にトークン・フェーズ、データ・フェーズ及びハンドシェーク・フェースの３フェーズに区分される。各フェーズで、ＵＳＢで規定されたパケットが転送される。ＵＳＢのパケットは、ＳＹＮＣフィールドで始まり、ＥＯＰ（Ｅｎｄ−ｏｆ−Ｐａｃｋｅｔ）で終了する。
【００８３】
まずトークン・フェーズにおいて、データ転送制御装置１００が、ＩＮトークンパケットをハブ２００に対して送信する。ＩＮトークンパケットは、パケット識別子ＰＩＤ（Ｐａｃｋｅｔ  Ｉｄｅｎｔｉｆｉｅｒ  Ｆｉｅｌｄ）、アドレスフィールドＡＤＤＲ、エンドポイントフィールドＥＮＤＰ及びＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）を含む。アドレスフィールドＡＤＲとエンドポイントフィールドＥＮＤＰとにより、エンドポイントが指定される。転送方向はＰＩＤによって指定される。
【００８４】
データ転送制御装置１００からのＩＮトークンパケットを受信したハブ２００は、その状態の変化があったとき、データ・フェーズにおいて、応答パケットとしてＩＮデータを返信する。ＩＮデータは、パケット識別子ＰＩＤ、データフィールドＤＡＴＡ及びＣＲＣを含む。パケット識別子ＰＩＤには、ＤＡＴＡ０の識別子とＤＡＴＡ１の識別子とが交互に付与される。そして、データフィールドＤＡＴＡに図６に示したステータス変化ビットを含むパケットが設定される。
【００８５】
ハブ２００からＩＮデータを受信したデータ転送制御装置１００は、ハンドシェーク・フェーズにおいてＡＣＫ（ｐｏｓｉｔｉｖｅ  ＡＣＫｎｏｗｌｅｄｇｅ）パケットをハブ２００に対して返信する。ＡＣＫパケットを返信することで、正常に受信されたたことをハブ２００に対して通知する。ＡＣＫパケットは、パケット識別子ＰＩＤのみで構成される。パケット識別子ＰＩＤには、ＡＣＫパケットであることを表わす識別子が設定される。
【００８６】
またデータ転送制御装置１００からのＩＮトークンパケットを受信したハブ２００は、その状態の変化がなかったとき、図７（Ｂ）に示すように、データ・フェーズにおいて、応答パケットとしてＮＡＫパケットを返信する。ＮＡＫパケットは、図５のＮＡＫパケット生成部２４０において生成される。ＮＡＫパケットを返信することで、返信すべきデータがないことをデータ転送制御装置１００に対して通知する。ＮＡＫパケットもＡＣＫパケットと同様に、パケット識別子ＰＩＤのみで構成される。パケット識別子ＰＩＤには、ＮＡＫパケットであることを表わす識別子が設定される。
【００８７】
次に、図５に示すようなハブ２００を監視することができ、かつＵＳＢのＯＴＧ規格に準拠したデータ転送制御装置１００の詳細な構成例について説明する。
【００８８】
図８に、データ転送制御装置１００の詳細な構成例を示す。
【００８９】
データ転送制御装置１００は、トランシーバ３１０、ＯＴＧコントローラ３２０、ＨＣ／ＰＣ切り替え回路３３０、転送コントローラ３４０、レジスタ部３７０、バッファコントローラ３８０、パケットバッファ３９０、インターフェース回路４００、クロックコントローラ４１０を含む。なおデータ転送制御装置１００は、図８のすべての回路ブロックを含む必要はなく、その一部の回路ブロックを省略してもよい。
【００９０】
図４におけるパケット送信部１２０、パケット受信部１４０及び転送コントローラ１６０は、転送コントローラ３４０によりその機能が実現される。図４におけるトランシーバ部１６２は、トランシーバ３１０、ＨＣ／ＰＣ切り替え回路３３０及び転送コントローラ３４０によりその機能が実現される。図４におけるハブ専用データ記憶部１１０は、レジスタ部３７０によりその機能が実現される。図４におけるパケットバッファ１５０は、パケットバッファ３９０によりその機能が実現される。図４における転送モード設定レジスタ１７０及び転送条件レジスタ１８０は、レジスタ部３７０によりその機能が実現される。
【００９１】
トランシーバ３１０（以下、適宜Ｘｃｖｒと呼ぶ）は、差動データ信号ＤＰ、ＤＭを用いてＵＳＢ規格に準拠して転送されるデータを送受信する回路であり、ＵＳＢの物理層（ＰＨＹ）回路３１２を含む。より具体的には、トランシーバ３１０は、ＤＰ、ＤＭのラインステート（Ｊ、Ｋ、ＳＥ０等）の生成、シリアル／パラレル変換、パラレル／シリアル変換、ビットスタッフィング、ビットアンスタッフィング、ＮＲＺＩデコード、ＮＲＺＩエンコード等を行う。なお、トランシーバ３１０をデータ転送制御装置の外部に設けるようにしてもよい。
【００９２】
ＯＴＧコントローラ３２０（広義にはステートコントローラ。以下、適宜ＯＴＧＣと呼ぶ）は、ＯＴＧのＳＲＰ機能やＨＮＰ機能（図３（Ａ）、（Ｂ）参照）を実現するための種々の処理を行う。即ち、ＯＴＧコントローラ３２０は、ホストの役割として動作するホスト動作のステートや、ペリフェラルの役割として動作するペリフェラル動作のステートなどを含む複数のステートの遷移によりホスト動作又はペリフェラル動作の制御を行うと共に、これらステートの遷移によりホスト動作とペリフェラル動作との切り替え制御を行う。
【００９３】
より具体的には、ＯＴＧ規格には、デュアルロール・デバイスのＡデバイス時（図２（Ｂ）、（Ｃ）参照）のステート遷移や、Ｂデバイス時のステート遷移が定義されている。ＯＴＧコントローラ３２０は、これらのステート遷移を実現するためのステートマシーンを含む。また、ＯＴＧコントローラ３２０は、ＵＳＢのデータラインステートや、ＶＢＵＳレベルや、ＩＤピンのステートを検出（監視）する回路を含む。そして、ＯＴＧコントローラ３２０が含むステートマシーンは、これらの検出情報に基づいて、そのステート（例えば、ホスト、ペリフェラル、サスペンド又はアイドル等のステート）を変化させる。この場合のステートの遷移は、ハードウェアにより実現してもよいし、ファームウェアがステートコマンドをレジスタに設定することで実現してもよい。そして、ステートが遷移すると、ＯＴＧコントローラ３２０は、遷移後にステートに基づいて、ＶＢＵＳを制御したり、ＤＰ、ＤＭのプルアップ抵抗又はプルダウン抵抗の接続又は非接続を制御したりする。また、転送コントローラ３４０に含まれるホストコントローラ３５０（以下、適宜ＨＣと呼ぶ）、ペリフェラルコントローラ３６０（以下、適宜ＰＣと呼ぶ）のイネーブル又はディセーブルを制御する。
【００９４】
ＨＣ／ＰＣ切り替え回路３３０（ＨＣ／ＰＣ・コモン回路）は、トランシーバ３１０と、ホストコントローラ３５０又はペリフェラルコントローラ３６０との間の接続の切り替え制御を行う。また、ＵＳＢのデータ（ＤＰ、ＤＭ）のラインステートの生成の指示をトランシーバ３１０に対して行う。なお、接続の切り替え制御は、ＨＣ／ＰＣセレクタ３３２により実現され、ラインステートの生成指示は、ラインステートコントローラ３３４により実現される。
【００９５】
例えばＯＴＧコントローラ３２０が、ホスト動作時（ホストステート時）にＨＣイネーブル信号をアクティブにすると、ＨＣ／ＰＣ切り替え回路３３０（ＨＣ／ＰＣセレクタ３３２）は、トランシーバ３１０とホストコントローラ３５０を接続する。一方、ＯＴＧコントローラ３２０が、ペリフェラル動作時に（ペリフェラルステート時）にＰＣイネーブル信号をアクティブにすると、ＨＣ／ＰＣ切り替え回路３３０は、トランシーバ３１０とペリフェラルコントローラ３６０を接続する。このようにすることで、ホストコントローラ３５０とペリフェラルコントローラ３６０とを排他的に動作させることが可能になる。
【００９６】
転送コントローラ３４０は、ＵＳＢ（広義にはバス）を介したデータ転送を制御する回路であり、ホストコントローラ３５０（ＨＣ）とペリフェラルコントローラ３６０（ＰＣ）を含む。
【００９７】
ここでホストコントローラ３５０は、ホスト動作時（ＯＴＧコントローラ３２０からのＨＣイネーブルのアクティブ時）に、ホストの役割としてのデータ転送制御を行う回路である。
【００９８】
即ちホストコントローラ３５０は、ホスト動作時に、ＨＣ／ＰＣ切り替え回路３３０によりトランシーバ３１０に接続される。そしてホストコントローラ３５０は、レジスタ部３７０の転送条件レジスタ部３７２に設定された転送条件情報に基づいて、エンドポイントに対するトランザクションを発生する。そして、パケットバッファ３９０に確保（ａｌｌｏｃａｔｅ）されたパイプ領域（ＰＩＰＥ０〜ＰＩＰＥｅ。以下、適宜ＰＩＰＥと呼ぶ）と、そのパイプ領域に対応するエンドポイントとの間で、データ（パケット）の転送を行う。
【００９９】
より具体的にはホストコントローラ３５０は、複数のパイプ転送間の調停、フレームにおける時間管理、転送のスケジューリング、再送の管理等を行う。また、パイプ転送の転送条件情報（オペレーション情報）をレジスタ部３７０を介して管理する。また、トランザクションの管理を行ったり、パケットを生成又は分解したり、サスペンド、レジューム或いはリセット状態生成の指示を行う。
【０１００】
一方、ペリフェラルコントローラ３６０は、ペリフェラル動作時（ＯＴＧコントローラ３２０からのＰＣイネーブル信号のアクティブ時）に、ペリフェラルの役割としてのデータ転送制御を行う回路である。
【０１０１】
即ち、ペリフェラルコントローラ３６０は、ペリフェラル動作時に、ＨＣ／ＰＣ切り替え回路３３０によりトランシーバ３１０に接続される。そして、レジスタ部３７０の転送条件レジスタ部３７２に設定された転送条件情報に基づいて、パケットバッファ３９０に確保されたエンドポイント領域（ＥＰ０〜ＥＰｅ。以下適宜ＥＰと呼ぶ）とホストとの間でデータを転送する。
【０１０２】
より具体的には、ペリフェラルコントローラ３６０は、エンドポイント転送の転送条件情報（オペレーション情報）をレジスタ部３７０を介して管理する。また、トランザクションの管理を行ったり、パケットを生成又は分解したり、リモート・ウェイクアップ信号生成の指示を行う。
【０１０３】
なお、エンドポイントは、ユニークなアドレスを割り当てることができる、ペリフェラル（デバイス）上のポイント（部分）である。ホストとペリフェラル（デバイス）との間のデータ転送は、すべて、このエンドポイントを経由して行われる。また、トランザクションは、トークンパケットと、オプショナルなデータパケットと、オプショナルなハンドシェークパケットとにより構成される。
【０１０４】
レジスタ部３７０は、データ転送（パイプ転送、エンドポイント転送）制御、バッファアクセス制御、バッファ管理、割り込み制御、ブロック制御、或いはＤＭＡ制御等を行うための種々のレジスタを含む。なおレジスタ部３７０が含むレジスタは、ＲＡＭなどのメモリにより実現してもよいし、Ｄフリップフロップ等により実現してもよい。また、レジスタ部３７０のレジスタは、１つにまとめず、各ブロック（ＨＣ、ＰＣ、ＯＴＧＣ、Ｘｃｖｒ等）に分散して配置してもよい。
【０１０５】
レジスタ部３７０は、転送条件レジスタ部３７２、ハブ専用データ記憶部３７４を含む。そして、転送条件レジスタ部３７２は、ホスト動作時にパケットバッファ３９０に確保されるパイプ領域（ＰＩＰＥ０〜ＰＩＰＥｅ）とエンドポイントとの間でのデータ転送の転送条件情報（転送制御情報）を記憶するレジスタを含む。このような転送条件情報を記憶するレジスタとして、図４における転送モード設定レジスタ１７０を含めてもよい。各転送条件レジスタは、パケットバッファ３９０の各パイプ領域に対応して設けられる。
【０１０６】
なお、ペリフェラル動作時には、パケットバッファ３９０にエンドポイント領域（ＥＰ０〜ＥＰｅ）が確保される。そして、転送条件レジスタ部３７２に設定された転送条件情報に基づいて、データ転送制御装置とホストとの間でのデータ転送が行われる。
【０１０７】
ハブ専用データ記憶部３７４は、ホスト動作時に、パケットバッファ３９０に確保されるパイプ領域とは物理的に異なる領域として、エンドポイントであるハブとの間の転送データ（パケット）をバッファリングする。
【０１０８】
バッファコントローラ３８０（ＦＩＦＯマネージャ）は、パケットバッファ３９０に対するアクセス（リード／ライト）制御や領域管理を行う。より具体的には、ＣＰＵ（広義には処理部）、ＤＭＡ、ＵＳＢによるパケットバッファ３９０へのアクセス・アドレスの生成及び管理を行う。また、ＣＰＵ、ＤＭＡ、ＵＳＢによるパケットバッファ３９０へのアクセスの調停を行う。
【０１０９】
例えば、ホスト動作時には、バッファコントローラ３８０は、インターフェース回路４００（ＣＰＵ又はＤＭＡ）とパケットバッファ３９０の間のデータ転送経路と、パケットバッファ３９０とホストコントローラ３５０（ＵＳＢ）の間のデータ転送経路を設定（確立）する。
【０１１０】
一方、ペリフェラル動作時には、バッファコントローラ３８０は、インターフェース回路４００（ＣＰＵ又はＤＭＡ）とパケットバッファ３９０の間のデータ転送経路と、パケットバッファ３９０とペリフェラルコントローラ３６０（ＵＳＢ）の間のデータ転送経路を設定する。
【０１１１】
パケットバッファ３９０（ＦＩＦＯ、パケットメモリ、バッファ）は、ＵＳＢを介して転送されるデータ（送信データ又は受信データ）を一時的に記憶（バッファリング）するものである。このパケットバッファ３９０は、例えばＲＡＭ等により構成できる。なお、パケットバッファ３９０をデータ転送制御装置の外部に設けてもよい（外付けメモリにしてもよい）。
【０１１２】
ホスト動作時には、パケットバッファ３９０はパイプ転送用のＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）として使用される。即ちパケットバッファ３９０には、ＵＳＢ（バス）の各エンドポイントに対応するように、パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅ（広義にはバッファ領域）が確保される。また、各パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅには、各パイプ領域に対応する各エンドポイントとの間で転送されるデータ（送信データ又は受信データ）が記憶される。
【０１１３】
なお、パケットバッファ３９０に確保されるバッファ領域（ホスト動作時にパイプ領域に設定され、ペリフェラル動作時にエンドポイント領域に設定される領域）は、先に入力された情報が先に出力されるような記憶領域（ＦＩＦＯ領域）に設定されている。
【０１１４】
また、ＰＩＰＥ０は、コントロール転送用のエンドポイント０に専用のパイプ領域であり、ＰＩＰＥａ〜ＰＩＰＥｅは、任意のエンドポイントに割り当て可能な汎用のパイプ領域である。
【０１１５】
即ちＵＳＢでは、エンドポイント０がコントロール転送に専用のエンドポイントに設定される。従って、本実施形態のようにＰＩＰＥ０をコントロール転送に専用のパイプ領域にすることで、ユーザが混乱するのを防止できる。また、ＰＩＰＥａ〜ＰＩＰＥｅを、任意のエンドポイントに割り当て可能なパイプ領域にすることで、エンドポイントに対応するパイプ領域を動的に変化させることが可能になる。これにより、パイプ転送のスケジューリングの自由度を向上でき、データ転送の効率化を図ることができる。
【０１１６】
また本実施形態では、ホスト動作時に、ＵＳＢに接続されるハブを監視するためのバッファ領域が、パケットバッファ３９０とは物理的に異なるハブ専用データ記憶部１１０に設定される。これにより、パケットバッファ３９０に割り当てられるパイプ領域を無駄に消費することがなくなる。
【０１１７】
インターフェース回路４００は、ＵＳＢとは異なる他のバスであるＤＭＡ（システムメモリ）バスやＣＰＵバスと、パケットバッファ３９０との間でのデータ転送を行うための回路である。インターフェース回路４００は、パケットバッファ３９０と外部のシステムメモリとの間で、ＤＭＡ転送を行うためのＤＭＡハンドラ回路４０２を含む。また、パケットバッファ３９０と外部のＣＰＵとの間でＰＩＯ（Ｐａｒａｌｌｅｌ  Ｉ／Ｏ）転送を行うためのＣＰＵインターフェース回路４０４を含む。なお、ＣＰＵ（処理部）をデータ転送制御装置１００に内蔵させてもよい。
【０１１８】
クロックコントローラ４１０は、内蔵ＰＬＬ又は外部入力クロックに基づいて、データ転送制御装置の内部で使用する各種のクロックを生成する。
【０１１９】
４．１  パイプ領域、エンドポイント領域
本実施形態では図９（Ａ）に示すように、ホスト動作時に、パケットバッファ３９０にパイプ領域ＰＩＰＥ０〜ＰＩＰＥｅが確保（ａｌｌｏｃａｔｅ）される。そして、この各パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅとペリフェラルの各エンドポイントの間で、データ（パケット）が転送される。
【０１２０】
ここで、本実施形態のパイプ領域の「パイプ」は、ＵＳＢで定義される「パイプ」（デバイス上のエンドポイントとホスト上のソフトウェアとの間の関連を表す論理的な抽象化、論理的な経路）とは若干意味合いが異なる。
【０１２１】
本実施形態のパイプ領域は、図９（Ａ）に示すように、ＵＳＢ（バス）に接続されるペリフェラルが有する各エンドポイントに対応して、パケットバッファ３９０上に確保される。例えば図９（Ａ）において、パイプ領域ＰＩＰＥａはペリフェラル１のエンドポイント１（バルクＩＮ）に対応し、ＰＩＰＥｂはペリフェラル１のエンドポイント２（バルクＯＵＴ）に対応する。また、ＰＩＰＥｃはペリフェラル２のエンドポイント１（バルクＩＮ）に対応し、ＰＩＰＥｄはペリフェラル２のエンドポイント２（バルクＯＵＴ）に対応する。また、ＰＩＰＥｅはペリフェラル３のエンドポイント１（インタラプトＩＮ）に対応する。なお、ＰＩＰＥ０は、コントロール転送のエンドポイント０に専用のパイプ領域である。そして、ハブ専用データ記憶部３７４は、ハブ２００をエンドポイント（インタラプトＩＮ）とし、ハブ専用に割り当てられるパイプ領域である。
【０１２２】
そして図９（Ａ）の例では、パイプ領域ＰＩＰＥａとペリフェラル１のエンドポイント１との間でＵＳＢのバルクＩＮ転送が行われ、ＰＩＰＥｂとペリフェラル１のエンドポイント２との間ではバルクＯＵＴ転送が行われる。また、ＰＩＰＥｃとペリフェラル２のエンドポイント１との間ではバルクＩＮ転送が行われ、ＰＩＰＥｄとペリフェラル２のエンドポイント２との間ではバルクＯＵＴ転送が行われる。また、ＰＩＰＥｅとペリフェラル３のエンドポイント１との間ではインタラプトＩＮ転送が行われる。また、ハブ専用データ記憶部３７４とハブ２００との間ではインタラプトＩＮ転送が行われる。
【０１２３】
このように本実施形態では、パイプ領域（汎用）とそれに対応するエンドポイントとの間では、任意のデータ転送（アイソクロナス転送、バルク転送、インタラプト転送）を行うことができる。またハブ２００をエンドポイントとする場合には、ハブ専用のパイプ領域とハブ２００との間でインタラプト転送を行うことができる。
【０１２４】
本実施形態では、パイプ領域とそれに対応するエンドポイントの間では、所与のデータ単位（トータルサイズで指定されるデータ単位）のデータが転送される。この場合のデータ単位としては、例えばＩＲＰ（Ｉ／Ｏリクエストパケット）により転送要求されるデータ単位又はそれを適当なサイズに分割したデータ単位などを考えることができる。エンドポイントに対するこのデータ単位のデータ転送（一連のトランザクション）を、本実施形態における「パイプ」と呼ぶことができる。そして、そのような「パイプ」のデータ（送信データ、受信データ）を記憶する領域がパイプ領域になる。
【０１２５】
汎用のパイプ領域を用いた所与のデータ単位の転送が終了すると、そのパイプ領域は解放することができる。そして、解放された汎用のパイプ領域は、任意のエンドポイントに割り当てることができる。このように本実施形態では、パイプ領域とエンドポイントとの対応づけを、動的に変化させることができる。
【０１２６】
また本実施形態では図９（Ｂ）に示すように、ペリフェラル動作時には、パケットバッファ３９０にエンドポイント領域ＥＰ０〜ＥＰｅが確保（設定）される。そして、この各エンドポイント領域ＥＰ０〜ＥＰｅとホスト（ホストコントローラ、システムメモリ）との間で、データが転送される。
【０１２７】
このように本実施形態では、パケットバッファ１００のバッファ領域を、ホスト動作時にはパイプ領域に割り当て、ペリフェラル動作時にはエンドポイント領域に割り当てている。これにより、ホスト動作時とペリフェラル動作時とでパケットバッファ３９０のリソースを共用（兼用）することが可能になり、パケットバッファ３９０の使用記憶容量を節約できる。
【０１２８】
なおパイプ領域、エンドポイント領域の個数は６個に限定されず任意である。
【０１２９】
４．２  各ブロックの詳細な構成例
次に各ブロックの詳細な構成例について説明する。
【０１３０】
４．２．１  ＯＴＧコントローラ
図１０にＯＴＧコントローラ３２０の構成例を示す。
【０１３１】
ＯＴＧコントローラ３２０は、ＯＴＧレジスタ部３２２を含む。このＯＴＧレジスタ部３２２は、ＯＴＧコントローラ３２０のモニタレジスタや制御レジスタを含む。またファームウェア（ＣＰＵ）により書き込まれるＯＴＧステートコマンドをデコードする回路を含む。
【０１３２】
またＯＴＧコントローラ３２０は、ＯＴＧ制御回路３２３を含む。そして、ＯＴＧ制御回路３２３は、ＯＴＧステートの管理を行うＯＴＧ管理回路３２４、ＩＤピンの電圧レベルを検出するＩＤ検出回路３２５、ＶＢＵＳの電圧レベルを検出するＶＢＵＳ検出回路３２６を含む。また、トランシーバ３１０からのラインステート情報（Ｊ、Ｋ、ＳＥ０等）に基づいて、ＵＳＢバスの状態（リセット、レジューム等）を検出するラインステート検出回路３２７を含む。
またＯＴＧコントローラ３２０は時間計測を行うタイマ３２８を含む。ラインステート検出回路３２７は、トランシーバ３１０からのラインステート情報とタイマ３２８からの時間計測情報に基づいて、ＵＳＢバスの状態を検出する。
【０１３３】
ＯＴＧステートを遷移させるために検出すべき情報は、ＩＤ、ＶＢＵＳの電圧レベル、ＤＰ／ＤＭのラインステートである。本実施形態のＯＴＧコントローラ３２０は、これらの情報を検出し、モニタレジスタを介してファームウェア（ＣＰＵ）に伝える。
【０１３４】
ファームウェアは、これらの検出情報に基づいて自身のステートを遷移させると共に、次に遷移すべきステートを、ＯＴＧステートコマンドを用いてＯＴＧコントローラ３２０に伝える。
【０１３５】
ＯＴＧコントローラ３２０は、ＯＴＧステートコマンドをデコードし、そのデコード結果に基づいて、ＶＢＵＳのドライブ制御、プルアップ／プルダウン抵抗の接続制御等を行い、図３（Ａ）、（Ｂ）で説明したＳＲＰやＨＮＰを実現する。
【０１３６】
このように本実施形態では、ステート毎のＯＴＧ制御はＯＴＧコントローラ３２０が担当し、ファームウェアはステートの遷移管理に専念できる。この結果、すべてのステート制御をファームウェアで実現する場合に比べて、ファームウェア（ＣＰＵ）の処理負荷を軽減できると共に、効率的なファームウェア開発が可能になる。
【０１３７】
なお、ＯＴＧのステート遷移の判断を、ファームウェアが行わずに、ハードウェア回路が行うようにしてもよい。或いは、ＯＴＧコントローラ３２０のほとんどすべての処理（例えばＶＢＵＳ制御、プルアップ／プルダウン抵抗制御、ＩＤ検出、ＶＢＵＳ検出、ラインステート検出以外の処理）をファームウェア（ソフトウェア）により実現してもよい。
【０１３８】
４．２．２  ホストコントローラ
図１１に、ホストコントローラ３５０の構成例を示す。図１１では、ホストコントローラ３５０と、トランシーバ３１０及びレジスタ部３７０との論理的な接続関係をも示している。
【０１３９】
レジスタ部３７０は、パイプｘ（ｘは０、ａ〜ｅのいずれか）に対するパイプ転送を制御するためのパイプ制御レジスタ部４２０を含む。パイプ制御レジスタ部４２０は、パイプ設定レジスタ４２２を含む。パイプ設定レジスタ４２２は、ファームウェアによって、予め定められたフィールドに所定の設定データが設定されたとき、パイプｘのトランザクションを開始するトランザクション開始信号ＴｒａｎＧｏをホストコントローラ３５０に対して出力する。また、パイプ設定レジスタ４２２には、ファームウェアによって、通常転送モード又はハブ専用転送モードのいずれかの転送モードが設定され、設定された転送モードに対応した転送モード信号をホストコントローラ３５０に対して出力する。即ちパイプ設定レジスタ４２２は、図４における転送モード設定レジスタ１７０として機能する。更にパイプ設定レジスタ４２２には、ファームウェアによって、ハブを監視するためのインタラプト転送の転送周期が設定され、設定された転送周期設定値に対応した信号をホストコントローラ３５０に対して出力する。
【０１４０】
なおパイプ制御レジスタ部４２０は、ハブデータ受信割り込みレジスタ４２４と、ハブ受信データ格納レジスタ４２６とを含む。ホストコントローラ３５０によってハブデータ受信割り込みレジスタ４２４にハブ割り込み信号が設定されると、ファームウェアに対してハブデータ受信割り込みを発生し、監視するハブの状態が変化したことを通知することができる。またハブ受信データ格納レジスタ４２６には、監視するハブからの応答パケットのうち少なくとも該ハブの状態の変化を検出するためのステータス変化ビットが格納される。即ちハブ受信データ格納レジスタ４２６は、図４におけるハブ専用データ記憶部１１０、或いは図８におけるハブ専用データ記憶部３７４として機能する。ファームウェア（ＣＰＵ）は、ハブ受信データ格納レジスタ４２６に格納されたステータス変化ビットを読み出すことで、ハブの状態がどのように変化したかを認識することができる。
【０１４１】
このようなパイプ制御レジスタ部４２０では、ハブ専用転送モードに設定されると、パイプｘの転送の種類がインタラプト転送、その転送の方向がＩＮ方向（インタラプトＩＮ転送）として固定的に設定されることが望ましい。
【０１４２】
以上のような構成のパイプ制御レジスタ部４２０は、パイプごとに設けてもよいし、パイプ０、ａ〜ｅのいずれか１つに対して設けてもよい。
【０１４３】
上述のような構成のパイプ制御レジスタ部４２０を用いるホストコントローラ３５０は、ＨＣシーケンス管理回路３５２を含む。ＨＣシーケンス管理回路３５２は、パイプ転送（パイプ領域を用いたデータ転送）の調停、時間管理、パイプ転送のスケジューリング、再送管理などを行う。
【０１４４】
より具体的にはＨＣシーケンス管理回路３５２は、フレーム番号のカウントや、ＳＯＦ（Ｓｔａｒｔ−Ｏｆ−Ｆｒａｍｅ）パケットの送信指示を行う。また、アイソクロナス転送を各フレームの先頭で優先的に実行するための処理を行ったり、インタラプト転送をアイソクロナス転送の次に優先的に取り扱うための処理を行う。また、パイプ転送の順序に従って各パイプ転送を指示する処理を行う。また、トランザクションの連続実行回数を管理したり、残りフレーム時間の確認処理を行う。また、ペリフェラルから返ってきたハンドシェークパケット（ＡＣＫ、ＮＡＫ）に対する処理を行う。また、トランザクション実行時のエラー処理を行う。
【０１４５】
ホストコントローラ３５０は、ターゲットパイプ管理回路３５４を含む。ターゲットパイプ管理回路３５４は、レジスタ部３７０の転送条件レジスタに設定された転送条件情報のハンドリング処理等を行う。また、トランザクション管理回路３５８への転送指示を行う。
【０１４６】
より具体的にはターゲットパイプ管理回路３５４は、転送条件情報の選択処理や、割り込み信号の生成処理を行う。そのためターゲットパイプ管理回路３５４は、パイプ転送制御回路３５５、ハブデータ受信割り込み生成回路３５６を含む。
【０１４７】
パイプ設定レジスタ４２２によりハブ専用転送モードに設定されると、パイプ転送制御回路３５５は、パイプ設定レジスタ４２２に設定された転送周期でインタラプトＩＮ転送を周期的に行う制御を行う。ハブデータ受信割り込み生成回路３５６は、トランザクション管理回路３５８を介して受信パケットを解析して、ハブの状態が変化したと判断されたときにはハブ割り込みを発生し、ハブデータ受信割り込みレジスタ４２４にハブ割り込み信号を設定する。
【０１４８】
ホストコントローラ３５０は、トランザクション管理回路３５８を含む。トランザクション管理回路３５８は、転送パケットの種類や転送順序の管理（トランザクションのシーケンス管理）を行う。また、タイムアウトの監視処理を行う。また、トランザクション終了の通知処理を行う。
【０１４９】
ホストコントローラ３５０は、パケットハンドラ回路３５９を含む。パケットハンドラ回路３５９は、パケットの生成、分解処理を行う。また、ＰＩＤのチェックやＣＲＣのデコード、エンコードを行う。また、バッファ領域のパケットのペイロードのリード、ライト処理や、ＳＯＦパケットの送信処理を行う。また、送受信データのカウント処理を行う。
【０１５０】
ハブに対して送信したＩＮトークンに対応して受信された該ハブからの応答パケットは、パケットハンドラ回路３５９によりＰＩＤのチェックが行われる。そして、該応答パケットがＮＡＫパケットであると判別されたときは、応答パケットに対する処理を行うことなく、次の応答パケットの受信を待つ。一方、パケットハンドラ回路３５９によりＰＩＤのチェックが行われた応答パケットがＮＡＫパケットではないと判別されたとき、該応答パケットをハブデータとしてハブ受信データ格納レジスタ４２６に格納する。
【０１５１】
図１２に、ホストコントローラ３５０における転送モードの設定動作の概要を示す。
【０１５２】
まず、ホストコントローラ３５０の初期状態では、パイプｘのパイプ転送が通常転送モードに設定される（ステップＳ１０）。
【０１５３】
続いて、ファームウェアによってパイプ設定レジスタ４２２に対する書き込みがあった場合（ステップＳ１１：Ｙ）、書き込みデータがハブ専用転送モードへの設定データのとき（ステップＳ１２：Ｙ）、パイプｘのパイプ転送をハブ専用転送モードに設定する（ステップＳ１３）。その後、リセット信号の入力等の所定の終了条件を満たしたことを条件に（ステップＳ１４：Ｙ）、一連の処理を終了する（エンド）。
【０１５４】
ステップＳ１１でパイプ設定レジスタ４２２に対する書き込みがない場合（ステップＳ１１：Ｎ）、或いはステップＳ１２でパイプ設定レジスタ４２２への書き込みデータがハブ専用転送モードに設定するためのデータはないとき（ステップＳ１２：Ｎ）、ステップＳ１４に進み、所定の終了条件を満たさないとき（ステップＳ１４：Ｎ）、ステップＳ１１に戻る。
【０１５５】
図１３に、ホストコントローラ３５０におけるハブ専用転送モードにおける動作の概要を示す。
【０１５６】
まず、転送モードがハブ専用転送モードであるか否かを確認する（ステップＳ２０）。パイプ設定レジスタ４２２により、パイプｘのパイプ転送がハブ専用転送モードに設定されているとき（ステップＳ２１：Ｙ）、パイプ設定レジスタ４２２によりトランザクション開始信号ＴｒａｎＧｏが設定され、かつ転送条件レジスタにパイプｘについてデータ転送の開始を指定するための指定ビットがアクティブに設定されたこと（ステップＳ２２：Ｙ）を条件に、例えばターゲットパイプ管理回路３５４がインタラプトＩＮ転送のトランザクションを開始する（ステップＳ２３）。これにより、インタラプトＩＮトークンパケットが発行される。これ以降、転送条件レジスタの指定ビットが非アクティブになるまで、パイプ転送制御回路３５５が、パイプ設定レジスタ４２２に設定された転送周期設定値で、周期的にトランザクションを開始して、インタラプトＩＮ転送を行う。
【０１５７】
その後、パケットハンドラ回路３５９は、トランシーバ３１０を介して、ハブからの応答パケットの受信を待つ（ステップＳ２４：Ｎ）。そして、応答パケットが受信されたとき（ステップＳ２４：Ｙ）、ＮＡＫパケット（第１のパケット）であるか否かを判別する（ステップＳ２５）。
【０１５８】
受信パケットがＮＡＫパケットであると判別されたとき（ステップＳ２５：Ｙ）、ステップＳ２２に戻る。
【０１５９】
一方、受信パケットがＮＡＫパケットではないと判別されたとき（ステップＳ２５：Ｎ）、パケットハンドラ回路３５９は、受信パケットをハブ受信データ格納レジスタ４２６に格納する（ステップＳ２６）。そして、その旨をトランザクション管理回路３５８、ターゲットパイプ管理回路３５４に通知する。
【０１６０】
続いて、トランザクション管理回路３５８は、ハンドシェークパケットを発行し（ステップＳ２７）、ターゲットパイプ管理回路３５４は、ハブデータ受信割り込み生成回路３５６によりハブ割り込みを発生する（ステップＳ２８）。
【０１６１】
またステップＳ２１で、パイプ設定レジスタ４２２によってパイプｘのパイプ転送がハブ専用転送モードに設定されていないとき（ステップＳ２１：Ｎ）、通常転送モードとしてＵＳＢのＯＴＧ規格に準拠したデータ転送を行う（ステップＳ２９）。
【０１６２】
ステップＳ２８、ステップＳ２９に続いて、リセット信号の入力等の所定の終了条件を満たしたことを条件に（ステップＳ３０：Ｙ）、一連の処理を終了する（エンド）。ステップＳ３０で所定の終了条件を満たさないとき（ステップＳ３０：Ｎ）、又はステップＳ２２において転送条件レジスタの指定ビットが非アクティブになったとき（ステップＳ２２：Ｎ）、ステップＳ２０に戻る。
【０１６３】
このように本実施形態によれば、ハブ専用転送モードにおいて、ハブを監視するためにハブ受信データ格納レジスタ４２６のみを用い、パケットバッファ３９０のリソースを確保する必要がなくなる。
【０１６４】
図１４に、ペリフェラルコントローラ３６０の構成例を示す。
【０１６５】
ペリフェラルコントローラ３６０は、トランザクション管理回路３６２、パケットハンドラ回路３６４を含む。トランザクション管理回路３６２、パケットハンドラ回路３６４は、ホストコントローラ３５０のトランザクション管理回路３５８、パケットハンドラ回路３５９とほぼ同様の処理を行う。
【０１６６】
４．２．３  バッファコントローラ
図１５にバッファコントローラ３８０の構成例を示す。
【０１６７】
バッファコントローラ３８０は、領域確保（ａｌｌｏｃａｔｉｏｎ）回路３８２を含む。この領域確保回路３８２は、パケットバッファ３９０に、バッファ領域（ホスト動作時にパイプ領域に設定され、ペリフェラル動作時にエンドポイント領域に設定される領域）を確保する回路である。
【０１６８】
領域確保回路３８２では、マックスパケットサイズ（広義にはページサイズ）やページ数に基づいて、バッファ領域の領域サイズ、スタートアドレス、エンドアドレスなどが計算される。そして、各バッファ領域の書き込みポインタ、読み出しポインタが、データの転送方向に合わせて、ＤＭＡ用ポインタ、ＣＰＵ用ポインタ、ＵＳＢ用ポインタに割り当てられる
なお、各バッファ領域の書き込みポインタ、読み出しポインタのポインタ情報（位置情報）は、レジスタ部３７０の各転送条件レジスタ（ＰＩＰＥ／ＥＰレジスタ）に保持される。
【０１６９】
ポインタ管理回路３８４は、ポインタの更新を行いながら、パケットバッファ３９０にアクセスするための実アドレスを生成する回路である。より具体的には、領域確保回路３８２によって割り当てられた各種ポインタに基づいて、ＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスを生成する。また、ＣＰＵ（ＣＰＵインターフェース回路）、ＤＭＡ（ＤＭＡハンドラ回路）からのアクセス毎に、或いはＵＳＢ（ＨＣ又はＰＣ）のトランザクション終了（ＡＣＫ、ＮＡＫなどのハンドシェーク送受信）毎に、ポインタを更新する処理を行う。なお、更新後のポインタの情報は、領域確保回路３８２を介してレジスタ部３７０の各転送条件レジスタに書き戻される。
【０１７０】
バッファ管理回路３８６は、パケットバッファ３９０へのアクセスを管理する回路である。バッファ管理回路３８６は、ポインタ管理回路３８４からのアドレスなどを受け、パケットバッファ３９０へのデータの入出力や、アドレス、出力イネーブル、ライトイネーブル、リードイネーブルなどの出力を行う。
【０１７１】
またバッファ管理回路３８６は、ＣＰＵ（ＣＰＵインターフェース回路）、ＤＭＡ（ＤＭＡハンドラ回路）、ＵＳＢ（ホストコントローラ又はペリフェラルコントローラ）からのアクセスを調停する。この調停結果に基づいて、ＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスのいずれかが、パケットバッファ３９０のアクセス・アドレスとして出力され、ＣＰＵ、ＤＭＡ又はＵＳＢとパケットバッファ３９０との間のデータ転送経路が設定される。
【０１７２】
ＨＣ／ＰＣセレクタ３８８は、バッファ管理回路３８６（バッファコントローラ３８０）とホストコントローラ３５０（ＨＣ）又はペリフェラルコントローラ３６０（ＰＣ）との間の接続の切り替え制御を行う。例えばホスト動作時には、ホストコントローラ３５０とバッファ管理回路３８６を接続し、ペリフェラル動作時には、ペリフェラルコントローラ３６０とバッファ管理回路３８６とを接続する。なお、この接続の切り替え制御は、ＯＴＧコントローラ３２０（ＯＴＧＣ）からのＨＣ／ＰＣイネーブル信号に基づいて行う。
【０１７３】
５．  電子機器
次に、本実施形態のデータ転送制御装置を含む電子機器の例について説明する。
【０１７４】
例えば図１６（Ａ）に電子機器の１つであるプリンタの内部ブロック図を示し、図１７（Ａ）にその外観図を示す。ＣＰＵ５１０（処理部）はシステム全体の制御などを行う。操作部５１１はプリンタをユーザが操作するためのものである。ＲＯＭ５１６には、制御プログラム、フォントなどが格納され、ＲＡＭ５１７（システムメモリ）はＣＰＵ５１０のワーク領域として機能する。ＤＭＡＣ５１８は、ＣＰＵ５１０を介さずにデータ転送を行うためのＤＭＡコントローラである。表示パネル５１９はプリンタの動作状態をユーザに知らせるためのものである。
【０１７５】
ＵＳＢを介してパーソナルコンピュータ、デジタルカメラ、デジタルビデオカメラなどの他の機器から送られてきたシリアルの印刷データ（印字データ、画像データ）は、データ転送制御装置５００によりパラレルの印刷データに変換される。そして、変換後のパラレル印刷データは、ＣＰＵ５１０又はＤＭＡＣ５１８により、印刷処理部（プリンタエンジン）５１２に送られる。そして、印刷処理部５１２においてパラレル印刷データに対して所与の処理が施され、プリントヘッダなどからなる印刷部（データの出力処理を行う装置）５１４により紙に印刷されて出力される。
【０１７６】
図１６（Ｂ）に電子機器の１つであるデジタルカメラの内部ブロック図を示し、図１７（Ｂ）にその外観図を示す。ＣＰＵ５２０はシステム全体の制御などを行う。操作部５２１（シャッターボタン、操作ボタン等）はデジタルカメラをユーザが操作するためのものである。ＲＯＭ５２６には制御プログラムなどが格納され、ＲＡＭ５２７はＣＰＵ５２０のワーク領域として機能する。ＤＭＡＣ５２８はＤＭＡコントローラである。
【０１７７】
ＣＣＤ、レンズなどからなる撮像部（データの取り込み処理を行う装置）５２２により画像が撮像され、撮像された画像のデータは画像処理部５２４により処理される。そして、処理後の画像データは、ＣＰＵ５２０又はＤＭＡＣ５２８によりデータ転送制御装置５００に送られる。データ転送制御装置５００は、このパラレルの画像データをシリアルデータに変換し、ＵＳＢを介してプリンタ、ストレージ装置、パーソナルコンピュータなどの他の機器に送信する。
【０１７８】
図１６（Ｃ）に電子機器の１つであるＣＤ−ＲＷドライブ（ストレージ装置）の内部ブロック図を示し、図１７（Ｃ）にその外観図を示す。ＣＰＵ５３０はシステム全体の制御などを行う。操作部５３１はＣＤ−ＲＷをユーザが操作するためのものである。ＲＯＭ５３６には制御プログラムなどが格納され、ＲＡＭ５３７はＣＰＵ５３０のワーク領域として機能する。ＤＭＡＣ５３８はＤＭＡコントローラである。
【０１７９】
レーザ、モータ、光学系などからなる読み取り＆書き込み部（データの取り込み処理を行う装置又はデータの記憶処理を行うための装置）５３３によりＣＤ−ＲＷ５３２から読み取られたデータは、信号処理部５３４に入力され、エラー訂正処理などの所与の信号処理が施される。そして、信号処理が施されたデータが、ＣＰＵ５３０又はＤＭＡＣ５３８によりデータ転送制御装置５００に送られる。データ転送制御装置５００は、このパラレルのデータをシリアルデータに変換し、ＵＳＢを介して他の機器に送信する。
【０１８０】
一方、ＵＳＢを介して他の機器から送られてきたシリアルのデータは、データ転送制御装置５００によりパラレルのデータに変換される。そして、このパラレルデータは、ＣＰＵ５３０又はＤＭＡＣ５３８により信号処理部５３４に送られる。そして、信号処理部５３４においてこのパラレルデータに対して所与の信号処理が施され、読み取り＆書き込み部５３３によりＣＤ−ＲＷ５３２に記憶される。
【０１８１】
なお、図１６（Ａ）、（Ｂ）、（Ｃ）において、ＣＰＵ５１０、５２０、５３０の他に、データ転送制御装置５００でのデータ転送制御のためのＣＰＵを別に設けるようにしてもよい。
【０１８２】
本実施形態のデータ転送制御装置を電子機器に用いれば、ＯＴＧ機能を有する電子機器を実現できる。即ち、電子機器にホストとしての役割を持たせたり、デバイスとしての役割を持たせることが可能になり、これまでに存在しなかったアプリケーションを創出できる。
【０１８３】
また本実施形態のデータ転送制御装置を電子機器に用いれば、電子機器に組み込まれるＣＰＵ（処理部）の処理負荷が軽減され、安価なＣＰＵを用いることが可能になる。また、ＣＰＵが、データ転送制御処理以外の他の処理を余裕を持って行うことが可能になり、電子機器の性能向上や低コスト化を図れる。また、ＣＰＵ上で動作するファームウェアのプログラムを簡素化でき、電子機器の開発期間の短縮化を図れる。
【０１８４】
なお本実施形態のデータ転送制御装置を適用できる電子機器としては、上記以外にも例えば、種々の光ディスクドライブ（ＣＤ−ＲＯＭ、ＤＶＤ）、光磁気ディスクドライブ（ＭＯ）、ハードディスクドライブ、デジタルビデオカメラ、携帯電話、スキャナ、ＴＶ、ＶＴＲ、オーディオ機器、電話機、プロジェクタ、パーソナルコンピュータ、電子手帳、或いはワードプロセッサなど種々のものを考えることができる。
【０１８５】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１８６】
例えば、本発明のデータ転送制御装置の構成は、図４等で説明した構成に限定されるものではなく、種々の変形実施が可能である。
【０１８７】
また、データ転送制御装置は、ハブ専用のデータ記憶部を設けるようにしたが、これに限定されるものではなく、デバイス専用のデータ記憶部を設けるようにしてもよい。
【０１８８】
また、データ転送制御装置の各ブロック（ＨＣ、ＰＣ、ＯＴＧＣ等）の構成も、本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【０１８９】
また、明細書中の記載において広義な用語（ステートコントローラ、処理部、転送コントローラ、バス、バッファ領域等）として引用された用語（ＯＴＧコントローラ、ＣＰＵ・ファームウェア、ホストコントローラ・ペリフェラルコントローラ、ＵＳＢ、パイプ領域・エンドポイント領域等）は、明細書中の他の記載においても広義な用語に置き換えることができる。
【０１９０】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【０１９１】
また、本実施形態ではＵＳＢのＯＴＧ規格への適用例を説明したが、本発明が適用されるのはＯＴＧ規格に限定されない。即ち、ＵＳＢのＯＴＧのみならず、従来のＵＳＢ１．１、ＵＳＢ２．０や、これらの規格を発展させた規格におけるデータ転送にも本発明は適用できる。
【図面の簡単な説明】
【図１】ホストとデバイスとの接続関係を示す説明図。
【図２】図２（Ａ）、（Ｂ）、（Ｃ）はＵＳＢのＯＴＧ規格についての説明図。
【図３】図３（Ａ）、（Ｂ）はＳＲＰ及びＨＮＰの手順についての説明図。
【図４】本実施形態のデータ転送制御装置の構成の概要のブロック図。
【図５】ハブの構成例を示すブロック図。
【図６】ステータス変化ビットの構成例を示す説明図。
【図７】図７（Ａ）、（Ｂ）はインタラプトＩＮ転送のトランザクションの説明図。
【図８】本実施形態のデータ転送制御装置の詳細な構成例を示す図。
【図９】図９（Ａ）、（Ｂ）はパイプ領域、エンドポイント領域についての説明図。
【図１０】ＯＴＧコントローラの詳細な構成例を示す図。
【図１１】ホストコントローラの詳細な構成例を示す図。
【図１２】ホストコントローラの転送モードの設定動作に概要を示すフロー図。
【図１３】ホストコントローラのハブ専用転送モードの動作の概要を示すフロー図。
【図１４】ペリフェラルコントローラの詳細な構成例を示す図。
【図１５】バッファコントローラの詳細な構成例を示す図。
【図１６】図１６（Ａ）、（Ｂ）、（Ｃ）は種々の電子機器の内部ブロック図の例。
【図１７】図１７（Ａ）、（Ｂ）、（Ｃ）は種々の電子機器の外観図の例。
【符号の説明】
１０  電子機器、２０  バス、５０  処理部（プロセッサ）、
１００  データ転送制御装置、１１０  ハブ専用データ記憶部、
１２０  パケット送信部、１２２  トークンパケット生成部、
１２４  データパケット生成部、１２６  ハンドシェークパケット生成部、
１４０  パケット受信部、１５０  パケットバッファ、
１６０  転送コントローラ、１７０  転送モード設定レジスタ、
１８０  転送条件レジスタ、２００  ハブ
【図１】
0003632695.tif 000002
【図２】
0003632695.tif 000003
【図３】
0003632695.tif 000004
【図４】
0003632695.tif 000005
【図５】
0003632695.tif 000006
【図６】
0003632695.tif 000007
【図７】
0003632695.tif 000008
【図８】
0003632695.tif 000009
【図９】
0003632695.tif 000010
【図１０】
0003632695.tif 000011
【図１１】
0003632695.tif 000012
【図１２】
0003632695.tif 000013
【図１３】
0003632695.tif 000014
【図１４】
0003632695.tif 000015
【図１５】
0003632695.tif 000016
【図１６】
0003632695.tif 000017
【図１７】
0003632695.tif 000018