(57)【要約】【課題】  データ転送の帯域の有効活用と低消費電力化とを図るデータ転送制御装置、電子機器及びデータ転送制御方法を提供する。【解決手段】  バスを介したデータ転送のためのデータ転送制御装置であって、データを記憶するパケットバッファのアクセス制御を行うバッファコントローラ８０と、前記パケットバッファのデータの転送を制御する転送コントローラ４０とを含み、転送先との間のデータ転送を行うためのトランザクションを発行し、発行したトランザクションについてのＮＡＫ（Negative AcKnowledgment）応答が前記転送先から返ってきた場合に、前記ＮＡＫ応答に対する再送トランザクションの発行を、所定のスキップタイミングまで待って許可する。【選択図】      図１１
2005122372.tif 000002
【特許請求の範囲】
【請求項１】
バスを介したデータ転送のためのデータ転送制御装置であって、
データを記憶するパケットバッファのアクセス制御を行うバッファコントローラと、
前記パケットバッファのデータの転送を制御する転送コントローラとを含み、
転送先との間のデータ転送を行うためのトランザクションを発行し、
発行したトランザクションについてのＮＡＫ（Negative AcKnowledgment）応答が前記転送先から返ってきた場合に、前記ＮＡＫ応答に対する再送トランザクションの発行を、所定のスキップタイミングまで待って許可することを特徴とするデータ転送制御装置。
【請求項２】
請求項１において、
前記ＮＡＫ応答についての再送トランザクションを１又は複数回発行したことを条件に、次の再送トランザクションの発行を、前記所定のスキップタイミングまで待って許可することを特徴とするデータ転送制御装置。
【請求項３】
請求項２において、
前記転送先からのＡＣＫ（positive ACKnowledgment）応答があったときに初期化され、前記転送先からのＮＡＫ応答をカウントするカウンタを含み、
前記ＮＡＫ応答の回数が所定の回数に達したときに、最後に返ってきたＮＡＫ応答に対する再送トランザクションの発行を、前記所定のスキップタイミングまで待って許可することを特徴とするデータ転送制御装置。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記所定のスキップタイミングは、
前記ＮＡＫ応答が返ってきたフレームの次のフレームの期間内であることを特徴とするデータ転送制御装置。
【請求項５】
請求項１乃至３のいずれかにおいて、
１フレーム期間に複数のスキップタイミングが設定されていることを特徴とするデータ転送制御装置。
【請求項６】
請求項５において、
前記所定のスキップタイミングは、
前記トランザクションの発行後の最初のスキップタイミングであることを特徴とするデータ転送制御装置。
【請求項７】
バスを介したデータ転送のためのデータ転送制御装置であって、
データを記憶するパケットバッファのアクセス制御を行うバッファコントローラと、
前記パケットバッファのデータの転送を制御する転送コントローラとを含み、
ペリフェラルのエンドポイントに対してトークンを発行し、
該トークンに対応して前記ペリフェラルからの少なくとも１回のＮＡＫ（Negative AcKnowledgment）応答があった場合に、前記トークンの再発行を、所定のスキップタイミングまで待って許可することを特徴とするデータ転送制御装置。
【請求項８】
請求項７において、
前記トークンに対応してＡＣＫ（positive ACKnowledgment）応答があったときに初期化され、前記トークンに対応したＮＡＫ応答の回数をカウントするカウンタを含み、
前記ＮＡＫ応答の回数が所定の回数に達したときに、前記トークンの再発行を、前記所定のスキップタイミングまで待って許可することを特徴とするデータ転送制御装置。
【請求項９】
請求項７又は８において、
前記所定のスキップタイミングは、
前記トークンを発行したフレームの次のフレームの期間内であることを特徴とするデータ転送制御装置。
【請求項１０】
請求項７又は８において、
１フレーム期間に複数のスキップタイミングが設定されていることを特徴とするデータ転送制御装置。
【請求項１１】
請求項１０において、
前記所定のスキップタイミングは、
前記トークンを発行した後の最初のスキップタイミング、又は該トークンに対応したＮＡＫ応答後の最初のスキップタイミングであることを特徴とするデータ転送制御装置。
【請求項１２】
請求項１乃至１１のいずれかにおいて、
前記スキップタイミングを設定するためのスキップタイミング設定レジスタを含み、
前記スキップタイミング設定レジスタは、
ペリフェラルのエンドポイントごとに設けられていることを特徴とするデータ転送制御装置。
【請求項１３】
請求項１乃至１２のいずれかにおいて、
前記再送トランザクションの発行又は前記トークンの再発行を、前記所定のスキップタイミングまで待って許可するか否かを指定するためのスキップモード設定レジスタを含み、
前記スキップモード設定レジスタは、
ペリフェラルのエンドポイントごとに設けられていることを特徴とするデータ転送制御装置。
【請求項１４】
請求項１乃至１３のいずれかにおいて、
ホストの役割として動作するホスト動作のステートと、ペリフェラルの役割として動作するペリフェラル動作のステートを含む複数のステートの制御を行うステートコントローラを含み、
前記転送コントローラが、
ホスト動作時において、ホストとしてのデータ転送を行うホストコントローラと、
ペリフェラル動作時において、ペリフェラルとしてのデータ転送を行うペリフェラルコントローラとを含み、
ホスト動作時において、前記バッファコントローラが、パケットバッファに対して複数のパイプ領域を確保し、前記ホストコントローラが、確保されたパイプ領域とそのパイプ領域に対応するエンドポイントとの間で、データを転送することを特徴とするデータ転送制御装置。
【請求項１５】
請求項１乃至１４のいずれかにおいて、
ＵＳＢ（Universal Serial Bus）のＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格に準拠したデータ転送を行うことを特徴とするデータ転送制御装置。
【請求項１６】
請求項１５において、
コントロール転送又はバルク転送のときに、前記再送トランザクションの発行又は前記トークンの再発行を、前記所定のスキップタイミングまで待って許可することを特徴とするデータ転送制御装置。
【請求項１７】
請求項１乃至１６のいずれかのデータ転送制御装置と、
前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置と、
前記データ転送制御装置のデータ転送を制御する処理部と、
を含むことを特徴とする電子機器。
【請求項１８】
バスを介したデータ転送のためのデータ転送制御方法であって、
転送先との間のデータ転送を行うためのトランザクションを発行し、
発行したトランザクションについてのＮＡＫ（Negative AcKnowledgment）応答が前記転送先から返ってきた場合に、前記ＮＡＫ応答に対する再送トランザクションの発行を、所定のスキップタイミングまで待って許可することを特徴とするデータ転送制御方法。
【請求項１９】
バスを介したデータ転送のためのデータ転送制御方法であって、
ペリフェラルのエンドポイントに対してトークンを発行し、
該トークンに対応して前記ペリフェラルからの少なくとも１回のＮＡＫ（Negative AcKnowledgment）応答があった場合に、前記トークンの再発行を、所定のスキップタイミングまで待って許可することを特徴とするデータ転送制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送制御装置、電子機器及びデータ転送制御方法に関する。
【背景技術】
【０００２】
ＵＳＢ（Universal Serial Bus）１．１規格では、種々のパーソナルコンピュータ周辺機器にとって必要とされる１２Ｍビット毎秒（bit per second：ｂｐｓ）（ＦＳ（Full Speed）モード）、或いはより低コストな周辺機器との接続を目的とした１．５Ｍｂｐｓ（ＬＳ（Low Speed）モード）のデータ転送速度が定義されている。そして近年、このＵＳＢ１．１規格に対する互換性を持ちながら、ＵＳＢ１．１規格に比べて格段に高速な４８０Ｍｂｐｓ（ＨＳ（High Speed）モード）のデータ転送速度を実現できる規格として、ＵＳＢ２．０規格が策定され、注目を浴びている。
【特許文献１】特開２００２−３４２２６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ＨＳモードをサポートするＵＳＢ２．０規格に準拠した製品の市場が順調に拡大しているなか、ＵＳＢ  Ｉｍｐｌｅｍｅｎｔｅｒｓ  Ｆｏｒｕｍ（ＵＳＢ−ＩＦ）によって、ＵＳＢ規格の簡易ホストを実現する規格の１つとしてＵＳＢ  Ｏｎ−Ｔｈｅ−Ｇｏ（ＯＴＧ）が策定された。ＵＳＢ２．０規格を拡張する形で策定されたＯＴＧ規格（ＯＴＧ１．０）は、ＵＳＢインターフェースの新たな付加価値を生む可能性を秘めており、その特質を生かしたアプリケーションの登場が待たれている。
【０００４】
ＯＴＧ規格等により実現される簡易ホストを利用すれば、これまでＵＳＢを介してホスト（パーソナルコンピュータ等）に接続されていたペリフェラル（周辺機器）に、ホスト機能を持たせることができる。これにより、ペリフェラル同士をＵＳＢで接続してデータを転送することが可能となる。例えばデジタルカメラとプリンタとをダイレクトに接続して、デジタルカメラの画像を印刷したり、デジタルカメラやデジタルビデオカメラをストレージ装置に接続して、画像データや映像データを保存することが可能となる。
【０００５】
このようにＯＴＧ規格等により実現される簡易ホストを利用することで、ペリフェラルはＵＳＢを介してホストに接続する必要がなくなり、例えば内蔵バッテリで駆動される携帯機器への応用が期待される。そこで、ＵＳＢ規格に準拠したデータ転送の低消費電力化と、その転送の帯域の有効活用とがますます重要となってくる。
【０００６】
ところでＵＳＢ規格では、トランザクション単位で、ホストがデバイスとの間のデータ転送をスケジューリングする。ホストが発行したトランザクションにおいて、デバイスからのＮＡＫ（Negative AcKnowledgment）パケットを受信すると（ＮＡＫ応答があると）、トランザクションが正常終了しなかったものと判断し、同じトランザクションを再発行（再送トランザクションを発行）する必要がある。
【０００７】
しかしながら、ＡＣＫ応答があるまで連続して再送トランザクションの発行を続けると、フレーム内に、ＮＡＫ応答が行われるトランザクションが大量に発行される場合がある。この場合、他のパイプの転送の帯域を奪ってしまい帯域の有効活用が図れず、大量の再送トランザクションによる電力を無駄に消費していた。
【０００８】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、データ転送の帯域の有効活用と低消費電力化とを図るデータ転送制御装置、電子機器及びデータ転送制御方法を提供することにある。
【課題を解決するための手段】
【０００９】
上記課題を解決するために本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、データを記憶するパケットバッファのアクセス制御を行うバッファコントローラと、前記パケットバッファのデータの転送を制御する転送コントローラとを含み、転送先との間のデータ転送を行うためのトランザクションを発行し、発行したトランザクションについてのＮＡＫ（Negative AcKnowledgment）応答が前記転送先から返ってきた場合に、前記ＮＡＫ応答に対する再送トランザクションの発行を、所定のスキップタイミングまで待って許可するデータ転送制御装置に関係する。
【００１０】
本発明によれば、ＮＡＫ応答があったときから所定のスキップタイミングまで再送トランザクションが発行されることがなくなる。そして、所定のスキップタイミングを経過した後、他の転送のトランザクションが発行されていなければ上記再送トランザクションを直ちに発行でき、他の転送のトランザクションが発行されているときは該他の転送のトランザクション完了後に上記再送トランザクションを発行できるようになる。そのため、再送トランザクションが大量に発行されることがなくなり、帯域を有効活用し、無駄な再送トランザクションの削減により低消費電力化を図ることができるようになる。
【００１１】
また本発明に係るデータ転送制御装置では、前記ＮＡＫ応答についての再送トランザクションを１又は複数回発行したことを条件に、次の再送トランザクションの発行を、前記所定のスキップタイミングまで待って許可することができる。
【００１２】
また本発明に係るデータ転送制御装置では、前記転送先からのＡＣＫ（positive ACKnowledgment）応答があったときに初期化され、前記転送先からのＮＡＫ応答をカウントするカウンタを含み、前記ＮＡＫ応答の回数が所定の回数に達したときに、最後に返ってきたＮＡＫ応答に対する再送トランザクションの発行を、前記所定のスキップタイミングまで待って許可することができる。
【００１３】
本発明によれば、トランザクションについてのＮＡＫ応答が１回あったときに所定のスキップタイミング以降に再送トランザクションを発行することなく、ＮＡＫ応答に対応する再送トランザクションを少なくとも１回発行した後に、最後のＮＡＫ応答に対する再送トランザクションを、所定のスキップタイミング以降に発行できるようにした。これにより、簡素な構成で、ＮＡＫ応答直後に転送準備が整った転送先との間のデータ転送を、次の再送トランザクションにより実現できる場合があり、帯域をより一層有効に活用できるようになる。
【００１４】
また本発明に係るデータ転送制御装置では、前記所定のスキップタイミングは、前記ＮＡＫ応答が返ってきたフレームの次のフレームの期間内であってもよい。
【００１５】
また本発明に係るデータ転送制御装置では、１フレーム期間に複数のスキップタイミングが設定されてもよい。
【００１６】
また本発明に係るデータ転送制御装置では、前記所定のスキップタイミングは、前記トランザクションの発行後の最初のスキップタイミングであってもよい。
【００１７】
また本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、データを記憶するパケットバッファのアクセス制御を行うバッファコントローラと、前記パケットバッファのデータの転送を制御する転送コントローラとを含み、ペリフェラルのエンドポイントに対してトークンを発行し、該トークンに対応して前記ペリフェラルからの少なくとも１回のＮＡＫ（Negative AcKnowledgment）応答があった場合に、前記トークンの再発行を、所定のスキップタイミングまで待って許可するデータ転送制御装置に関係する。
【００１８】
また本発明に係るデータ転送制御装置では、前記トークンに対応してＡＣＫ（positive ACKnowledgment）応答があったときに初期化され、前記トークンに対応したＮＡＫ応答の回数をカウントするカウンタを含み、前記ＮＡＫ応答の回数が所定の回数に達したときに、前記トークンの再発行を、前記所定のスキップタイミングまで待って許可することができる。
【００１９】
また本発明に係るデータ転送制御装置では、前記所定のスキップタイミングは、前記トークンを発行したフレームの次のフレームの期間内であってもよい。
【００２０】
また本発明に係るデータ転送制御装置では、１フレーム期間に複数のスキップタイミングが設定されてもよい。
【００２１】
また本発明に係るデータ転送制御装置では、前記所定のスキップタイミングは、前記トークンを発行した後の最初のスキップタイミング、又は該トークンに対応したＮＡＫ応答後の最初のスキップタイミングであってもよい。
【００２２】
また本発明に係るデータ転送制御装置では、前記スキップタイミングを設定するためのスキップタイミング設定レジスタを含み、前記スキップタイミング設定レジスタは、ペリフェラルのエンドポイントごとに設けられていてもよい。
【００２３】
本発明によれば、ＮＡＫ応答に対応する再送トランザクションの発行又はトークンの再発行の可否を、転送先に応じて変更できるため、複数の転送先とのデータ転送を制御する場合に、より効率的に帯域を活用できるようになる。
【００２４】
また本発明に係るデータ転送制御装置では、前記再送トランザクションの発行又は前記トークンの再発行を、前記所定のスキップタイミングまで待って許可するか否かを指定するためのスキップモード設定レジスタを含み、前記スキップモード設定レジスタは、ペリフェラルのエンドポイントごとに設けられていてもよい。
【００２５】
本発明によれば、ＮＡＫ応答に対応する再送トランザクションの発行又はトークンの再発行を行う間隔を、転送先に応じて変更できるため、複数の転送先とのデータ転送を制御する場合に、より効率的に帯域を活用できるようになる。
【００２６】
また本発明に係るデータ転送制御装置では、ホストの役割として動作するホスト動作のステートと、ペリフェラルの役割として動作するペリフェラル動作のステートを含む複数のステートの制御を行うステートコントローラを含み、前記転送コントローラが、ホスト動作時において、ホストとしてのデータ転送を行うホストコントローラと、ペリフェラル動作時において、ペリフェラルとしてのデータ転送を行うペリフェラルコントローラとを含み、ホスト動作時において、前記バッファコントローラが、パケットバッファに対して複数のパイプ領域を確保し、前記ホストコントローラが、確保されたパイプ領域とそのパイプ領域に対応するエンドポイントとの間で、データを転送することができる。
【００２７】
本発明によれば、ステートコントローラにより制御されるステートがホスト動作のステートになると、ホストコントローラによりホストの役割としてのデータ転送が行われる。またステートコントローラにより制御されるステートがペリフェラル動作のステートになると、ペリフェラルコントローラによりペリフェラルの役割としてのデータ転送が行われる。これによりデュアルロール・デバイス機能を実現できる。そして本発明では、ホスト動作時において、パケットバッファに対して複数のパイプ領域が確保され、確保されたパイプ領域とエンドポイントとの間でデータが転送される。これによりデュアルロール・デバイス機能を実現できると共に、データ転送制御装置を制御する処理部の処理負荷をホスト動作時に軽減できる。
【００２８】
また本発明に係るデータ転送制御装置では、ＵＳＢ（Universal Serial Bus）のＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格に準拠したデータ転送を行うことができる。
【００２９】
また本発明に係るデータ転送制御装置では、コントロール転送又はバルク転送のときに、前記再送トランザクションの発行又は前記トークンの再発行を、前記所定のスキップタイミングまで待って許可することができる。
【００３０】
また本発明は、上記のいずれかのデータ転送制御装置と、前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置と、前記データ転送制御装置のデータ転送を制御する処理部とを含む電子機器に関係する。
【００３１】
また本発明は、バスを介したデータ転送のためのデータ転送制御方法であって、転送先との間のデータ転送を行うためのトランザクションを発行し、発行したトランザクションについてのＮＡＫ（Negative AcKnowledgment）応答が前記転送先から返ってきた場合に、前記ＮＡＫ応答に対する再送トランザクションの発行を、所定のスキップタイミングまで待って許可するデータ転送制御方法に関係する。
【００３２】
また本発明は、バスを介したデータ転送のためのデータ転送制御方法であって、ペリフェラルのエンドポイントに対してトークンを発行し、該トークンに対応して前記ペリフェラルからの少なくとも１回のＮＡＫ（Negative AcKnowledgment）応答があった場合に、前記トークンの再発行を、所定のスキップタイミングまで待って許可するデータ転送制御方法に関係する。
【発明を実施するための最良の形態】
【００３３】
以下、本発明の実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成のすべてが本発明の必須構成要件であるとは限らない。
【００３４】
１．  簡易ホスト
１．１  Ａデバイス、Ｂデバイス
まず、簡易ホストを実現する規格の一例としてＯＴＧ（USB On-The-Go）について説明する。但し本発明の手法は、ＯＴＧ規格のデータ転送制御手法に限定されるものではない。
【００３５】
ＯＴＧでは、コネクタの規格として、図１（Ａ）に示すようなＭｉｎｉ−Ａプラグ（plug）、Ｍｉｎｉ−Ｂプラグが定義されている。また、これらのＭｉｎｉ−Ａプラグ、Ｍｉｎｉ−Ｂプラグの両方を接続できるコネクタとしてＭｉｎｉ−ＡＢレセプタクル（receptacle）が定義されている。
【００３６】
そして図１（Ｂ）のように、ＵＳＢケーブルのＭｉｎｉ−Ａプラグに電子機器Ｐが接続され、Ｍｉｎｉ−Ｂプラグに電子機器Ｑが接続されると、電子機器Ｐ、Ｑは、それぞれＡデバイス、Ｂデバイスに設定される。一方、図１（Ｃ）に示すように、Ｍｉｎｉ−Ｂプラグ、Ｍｉｎｉ−Ａプラグが電子機器Ｐ、Ｑに接続されると、電子機器Ｐ、Ｑは、それぞれＢデバイス、Ａデバイスに設定される。電子機器は、Ｍｉｎｉ−Ａプラグ及びＭｉｎｉ−ＢプラグのＩＤピンの電圧レベルを検出することで、自身がどちらのタイプのプラグに接続されたのか判断する。
【００３７】
なおＯＴＧでは、Ａデバイス（マスタ）が、電源（ＶＢＵＳ）を供給する側（供給元）になり、Ｂデバイス（スレーブ）が、電源の供給を受ける側（供給先）になる。またＡデバイスは、デフォルト状態においてホストになり、Ｂデバイスは、デフォルト状態においてペリフェラル（周辺機器）になる。
【００３８】
１．２  デュアルロール・デバイス
ＯＴＧでは、ホスト（簡易ホスト）としての役割とペリフェラルとしての役割の両方を持つことができるデュアルロール・デバイス（Dual-Role Device）が定義されている。
【００３９】
デュアルロール・デバイスは、ホストにもペリフェラルにもなることができる。デュアルロール・デバイスに接続された装置が、従来のＵＳＢ規格におけるホストやペリフェラル（デバイス）である場合には、デュアルロール・デバイスの役割は一意に定まる。つまり、接続相手がホストであれば、デュアルロール・デバイスはペリフェラルに設定され、接続相手がペリフェラルであれば、デュアルロール・デバイスはホストに設定される。一方、接続相手がデュアルロール・デバイスである場合には、両方のデュアルロール・デバイスは、互いにホストの役割とペリフェラルの役割を交換できる。
【００４０】
デュアルロール・デバイスは、セッション開始要求手順ＳＲＰ（Session Request Protocol）やホスト交換手順ＨＮＰ（Host Negotiation Protocol）の機能を持つ。ここでＳＲＰは、ＢデバイスがＡデバイスに対して、ＶＢＵＳ（電源）の供給を要求するプロトコルである。またＨＮＰは、ホストとペリファレルの役割を交換するためのプロトコルである。
【００４１】
即ち前述のようにデュアルロール・デバイス同士の接続では、Ｍｉｎｉ−Ａプラグが接続された側であるＡデバイスがデフォルトのホストとなり、Ｍｉｎｉ−Ｂプラグが接続された側であるＢデバイスがデフォルトのペリフェラルになる。そしてＯＴＧでは、プラグの抜き差しを行わなくても、ホストとペリフェラルの役割を交換でき、ＨＮＰはこの役割交換を実現するプロトコルである。
【００４２】
２．  トランザクション
ＵＳＢ規格では、ホストがトランザクション単位でデータ転送をスケジューリングする。より具体的にはホストは、１フレームという時間単位に１又は複数のトランザクションをスケジューリングする。ホストがＳＯＦ（Start Of Frame）パケットを発行することで、フレームが開始される。ＦＳモード及びＬＳモードでは、１フレームは１ミリ秒である。ＨＳモードでは、１２５マイクロ秒単位に１（マイクロ）フレームが定義される。
【００４３】
またデータ転送のタイプには、バルク（Bulk）転送、インターラプト（Interrupt）転送、コントロール（Control）転送、アイソクロナス（Isochronous）転送が定義され、トランザクションは各転送を構成する単位となる。バルク転送は、例えば非定期性（non-periodic）で、遅延が許容される大容量のバースト性を有するデータの転送に用いられる。インターラプト転送は、例えば転送頻度が少ない少量のデータの転送に用いられる。コントロール転送は、例えばホストがペリフェラル（デバイス）のコンフィギュレーションを読み込むために用いられる。アイソクロナス転送は、例えば定期的（periodic）で、等時性を有するデータの転送に用いられる。
【００４４】
トランザクションでは、ホストとペリフェラルとの間でトークンパケット、オプショナルなデータパケット及びオプショナルなハンドシェイクパケットの転送が行われる。トランザクションの発行（実行（issue））は、ホストがトークンパケットを転送することで開始される。
【００４５】
図２（Ａ）〜（Ｄ）に、バルク転送のトランザクションの説明図を示す。図２（Ａ）は転送方向がＩＮ方向で、転送が正常に終了する場合のトランザクションを示す。図２（Ｂ）は転送方向がＩＮ方向で、転送が正常に終了しない場合のトランザクションを示す。図２（Ｃ）は転送方向がＯＵＴ方向で、転送が正常に終了する場合のトランザクションを示す。図２（Ｄ）は転送方向がＯＵＴ方向で、転送が正常に終了しない場合のトランザクションを示す。
【００４６】
バルク転送では、トークン・フェーズ、データ・フェーズ及びハンドシェイク・フェーズの３フェーズに区分される。各フェーズでは、ＵＳＢ規格で規定されたパケットが転送される。ＵＳＢのパケットは、ＳＹＮＣフィールドで始まり、ＥＯＰ（End-of-Packet）で終了する。
【００４７】
転送方向がＩＮ方向の場合、トークン・フェーズにおいて、ホストがペリフェラルに対してＩＮトークン（パケット）を発行し、ＩＮトランザクションの発行を開始する（図２（Ａ）、（Ｂ））。データ・フェーズにおいて、ホストからのＩＮトークンを受け取ったペリフェラルがデータ送信可能な状態のとき、該ペリフェラルはＩＮデータ（パケット）を送信する（図２（Ａ））。データ・フェーズにおいて、該ペリフェラルがデータ送信の準備が整わない状態のとき、該ペリフェラルはホストに対してＮＡＫ（Negative AcKnowledgment）ハンドシェイクパケットを送信して、ホストからのＩＮトランザクションの再発行を待つ（図２（Ｂ））。ホストは、このＮＡＫハンドシェイクパケットを受信することでＮＡＫ応答を検出し、データ転送が正常に終了しなかったことを検出する。なおデータ・フェーズにおけるＤＡＴＡ０／ＤＡＴＡ１は、ＰＩＤによって識別される。ＤＡＴＡ０／ＤＡＴＡ１を交互に利用することでエラーを検出できるようになっている。
【００４８】
データ・フェーズにおいてペリフェラルからのＩＮデータを正常に受信したホストは、ハンドシェイク・フェーズにおいて、ペリフェラルに対してＡＣＫ（positive ACKnowledgment）ハンドシェイクパケットを送信（ＡＣＫ応答）する（図２（Ａ））。ペリフェラルは、このＡＣＫ応答により、データ転送が正常に終了したものと判断できる。
【００４９】
転送方向がＯＵＴ方向の場合、トークン・フェーズにおいて、ホストがペリフェラルに対してＯＵＴトークン（パケット）を発行し、ＯＵＴトランザクションの発行（実行）を開始する（図２（Ｃ）、（Ｄ））。データ・フェーズにおいて、ホストは、ＯＵＴトークンに続いて、ペリフェラルに対してＯＵＴデータ（パケット）を送信する（図２（Ｃ）、（Ｄ））。
【００５０】
データ・フェーズのＯＵＴデータを正常に受信したペリフェラルは、ハンドシェイク・フェーズにおいて、ＡＣＫハンドシェイクパケットを送信（ＡＣＫ応答）する（図２（Ｃ））。ホストは、このＡＣＫ応答により、データ転送が正常に終了したものと判断できる。一方、ペリフェラルが、データ受信の準備が整わずに、データ・フェーズのＯＵＴデータを受信できないとき、ホストに対してＮＡＫハンドシェイクパケットを送信（ＮＡＫ応答）して、ホストからのＯＵＴトランザクションの再発行を待つ（図２（Ｂ））。
【００５１】
なおインターラプト転送のトランザクションも、バルク転送のトランザクションと同様である。
【００５２】
図３（Ａ）〜（Ｃ）に、コントロール転送のトランザクションの説明図を示す。図３（Ａ）はコントロール転送のセットアップトランザクションを示す図である。図３（Ｂ）はコントロールライト転送を示す図である。図３（Ｃ）はコントロールリード転送を示す図である。
【００５３】
コントロール転送は、セットアップステージと、ステータスステージとを有し、セットアップステージとステータスステージとの間にオプショナルなデータステージを含む（図３（Ｂ）、（Ｃ））。
【００５４】
セットアップステージでは、図３（Ａ）に示すセットアップトランザクションが発行される。まずトークン・フェーズにおいて、ホストがペリフェラルに対してＳＥＴＵＰトークン（パケット）を発行し、セットアップトランザクションの発行を開始する。データ・フェーズにおいて、ホストは、ＳＥＴＵＰトークンに続いて、ペリフェラルに対してデータ（パケット）を送信する。
【００５５】
データ・フェーズのデータを正常に受信したペリフェラルは、ハンドシェイク・フェーズにおいて、ＡＣＫハンドシェイクパケットを送信（ＡＣＫ応答）する（図３（Ａ））。ホストは、このＡＣＫ応答により、データ転送が正常に終了したものと判断できる。一方、ペリフェラルがデータ受信の準備が整わずに、データ・フェーズのデータを受信できないとき、該ペリフェラルは、受信したデータを捨て、ハンドシェイクパケットを送信しない。
【００５６】
セットアップステージ後のデータステージでは、１又は複数のＯＵＴトランザクション又は１又は複数のＩＮトランザクションが発行される。コントロールライト転送では、ＯＵＴトランザクションを１又は複数回繰り返して、ホストからペリフェラルに対してデータを送信する（図３（Ｂ））。コントロールリード転送では、ＩＮトランザクションを１又は複数回繰り返して、ペリフェラルからホストに対してデータを送信する（図３（Ｃ））。データステージにおけるＯＵＴトランザクションは、バルク転送のＯＵＴトランザクションと同様である。またデータステージにおけるＩＮトランザクションは、バルク転送のＩＮトランザクションと同様である。
【００５７】
データステージ後のステータスステージが、最後のトランザクションとなる。コントロールライト転送の場合、ステータスステージでは、ＩＮトランザクションが発行される。このＩＮトランザクションにより、ホストが、ペリフェラルの処理終了を待つ。このＩＮトランザクションは、バルク転送のＩＮトランザクションと同様である。一方、コントロールリード転送の場合、ステータスステージでは、ＯＵＴトランザクションが発行される。このＯＵＴトランザクションにより、ホストが処理終了を確認できる。このＯＵＴトランザクションは、バルク転送のＯＵＴトランザクションと同様である。
【００５８】
図４（Ａ）、（Ｂ）に、アイソクロナス転送のトランザクションの説明図を示す。図４（Ａ）はアイソクロナス転送のＩＮトランザクションを示す図である。図４（Ｂ）はアイソクロナス転送のＯＵＴトランザクションを示す図である。
【００５９】
転送方向がＩＮ方向の場合、トークン・フェーズにおいて、ホストがペリフェラルに対してＩＮトークン（パケット）を発行し、ＩＮトランザクションの発行を開始する（図４（Ａ））。データ・フェーズにおいて、ホストからのＩＮトークンを受け取ったペリフェラルは、ＩＮデータ（パケット）を送信する（図４（Ａ））。
【００６０】
転送方向がＯＵＴ方向の場合、トークン・フェーズにおいて、ホストがペリフェラルに対してＯＵＴトークン（パケット）を発行し、ＯＵＴトランザクションの発行を開始する（図４（Ｂ））。データ・フェーズにおいて、ホストは、ＯＵＴトークンに続いてＯＵＴデータ（パケット）をペリフェラルに対して送信する（図４（Ｂ））。
【００６１】
このように、アイソクロナス転送は、トークン・フェーズとデータ・フェーズとを有する一方で、ハンドシェイク・フェーズを有していない。そのためアイソクロナス転送では、ホスト又はペリフェラルは、データの転送が正常に終了したことを知ることができない。
【００６２】
２．１  比較例
上述のようにハンドシェイク・フェーズを有するバルク転送、コントロール転送及びインターラプト転送では、発行したトランザクションについてのＮＡＫ応答があると、再送トランザクションを発行する必要がある。そのため、ＡＣＫ応答があるまで連続して再送トランザクションの発行を続けると、フレーム内に、ＮＡＫ応答に対する再送トランザクションが大量に発行される場合がある。
【００６３】
図５に、発行したトランザクションがＡＣＫ応答のみの場合のタイミング図を示す。ここではＦＳモードにおいて、コントロール転送又はバルク転送である２つのパイプａ、ｂが設定されているものとし、マックスパケットサイズ等の諸条件を簡略化して模式的に示す。
【００６４】
フレームは、ホストが１ミリ秒間隔で発行するＳＯＦパケットにより規定される。フレームＦでは、ホストは、まずパイプａのトランザクションＡ１を発行する。このパイプａのトランザクションＡ１についてのＡＣＫ応答があると、ホストはＡＣＫ応答検出パルスＡ２を生成する。ＩＮトランザクションではホストがペリフェラルに対してＡＣＫハンドシェイクパケットを送信し、ＯＵＴトランザクションではペリフェラルがホストに対してＡＣＫハンドシェイクパケットを送信することで、このＡＣＫ応答が行われる。
【００６５】
続いて、ホストは、パイプｂのトランザクションＢ１を発行する。このパイプｂのトランザクションＢ１についてのＡＣＫ応答があると、ホストはＡＣＫ応答検出パルスＢ２を生成する。その後、ホストは、パイプａのトランザクションＡ３を発行する。パイプａのトランザクションＡ３は、パイプａのトランザクションＡ１に続くものである。そしてパイプｂについても同様に発行される。以降、パイプａ、ｂのトランザクションが交互に発行され、１フレームの帯域を有効に活用できる。
【００６６】
図６（Ａ）、（Ｂ）に、発行したトランザクションについてＮＡＫ応答がある場合のタイミング図を示す。ここでも、図５と同様に、ＦＳモードにおいて、コントロール転送又はバルク転送である２つのパイプａ、ｂが設定されているものとし、マックスパケットサイズ等の諸条件を簡略化して模式的に示す。
【００６７】
図６（Ａ）はパイプａのトランザクションについてＮＡＫ応答があり、現トランザクションの再送が繰り返し発行される場合を示している。
【００６８】
フレームＦでは、ホストは、まずパイプａのトランザクションＡ１１を発行する。このパイプａのトランザクションＡ１１でＮＡＫ応答があると、ホストはＮＡＫ応答検出パルスＡ１２を生成する。ＩＮトランザクション又はＯＵＴトランザクションではペリフェラルがホストに対してＮＡＫハンドシェイクパケットを送信することで、このＮＡＫ応答が行われる。
【００６９】
続いて、ホストは、ＮＡＫ応答があったトランザクションＡ１３を、再送トランザクションとして再発行する。このトランザクションＡ１３においても、再びＮＡＫ応答があると、ホストはＮＡＫ応答検出パルスＡ１４を生成し、これ以降再送トランザクションを繰り返し発行する。この結果、フレームＦ内の帯域は、パイプａのトランザクションで占有されてしまう。そのため、パイプａのトランザクションがＡＣＫ応答で完了するまで、パイプｂのトランザクションを発行することができないことになる。
【００７０】
図６（Ｂ）はパイプａのトランザクションについてＮＡＫ応答があり、パイプｂの転送要求があればパイプｂのトランザクションを発行した後パイプａの再送トランザクションを発行する場合を示している。
【００７１】
フレームＦでは、ホストは、まずパイプａのトランザクションＡ２１を発行する。このパイプａのトランザクションＡ２１についてＮＡＫ応答があると、ホストはＮＡＫ応答検出パルスＡ２２を生成する。このとき、パイプｂの転送要求があると、ホストはパイプｂのトランザクションＢ２１を発行する。パイプｂのトランザクションＢ２１でＡＣＫ応答があると、ホストはＡＣＫ応答検出パルスＢ２２を生成する。その後、ホストは、トランザクションＡ２１の再送トランザクションとしてパイプａのトランザクションＡ２３を発行する。トランザクションＡ２３についてＮＡＫ応答があると、ホストはＮＡＫ応答検出パルスＡ２４を生成する。これ以降、ホストは、パイプａのトランザクションでＡＣＫ応答があるまで、パイプａの再送トランザクションとパイプｂのトランザクションとを繰り返し発行する。この結果、図６（Ａ）に示す場合に比べて帯域の使用効率を高めることができるものの、フレーム内の帯域はパイプａの再送トランザクションにより無駄に使用される。
【００７２】
このように発行したトランザクションについてのＮＡＫ応答に対応して再送トランザクションを発行することで、限られた帯域を無駄に使用していまい、転送効率を低下させるばかりでなく、再送トランザクションの発行により無駄な電力を消費してしまう。
【００７３】
３．  本実施形態の手法
本実施形態では、発行したトランザクションについてのＮＡＫ応答があった場合に再送トランザクションを発行することを前提に、この再送トランザクションの発行を、所定のスキップポイント（スキップタイミング）まで待って許可する。これにより、ＮＡＫ応答があった時点から所定のスキップポイントまで再送トランザクションが発行されることがなくなる。そして、所定のスキップポイントを経過した後、他の転送が行われていなければ上記再送トランザクションを直ちに発行でき、他の転送が行われているときは該転送終了後上記再送トランザクションを発行できるようになる。
【００７４】
なお本実施形態では、上記のＮＡＫ応答についての再送トランザクションを１又は複数回発行したことを条件に、次の再送トランザクションの発行を、所定のスキップタイミングまで待って許可するようにしてもよい。即ち、トランザクションについてのＮＡＫ応答が１回あったときに所定のスキップポイント以降に再送トランザクションを発行することなく、ＮＡＫ応答に対応する再送トランザクションを少なくとも１回発行した後に、最後のＮＡＫ応答に対する再送トランザクションを、所定のスキップポイント以降に発行できるようにしてもよい。こうすることで、ＮＡＫ応答直後に転送準備が整った転送先との間の転送を、次の再送トランザクションにより実現できる場合がある。
【００７５】
或いは本実施形態では、ＵＳＢ規格のようにトークンの発行によりトランザクションが開始される場合には、トークンに対応して転送先（ペリフェラル）からの少なくとも１回のＮＡＫ応答があった場合に、所定のスキップポイント（スキップタイミング）まで待ってトークンの再発行を許可する。
【００７６】
なおフレームごとに、スキップポイントを設けてもよいし、フレーム内に複数のスキップポイントを設けてもよい。
【００７７】
図７に、本実施形態においてフレーム単位にスキップポイントが設けられた場合の説明図を示す。例えばスキップポイントは、ＳＯＦパケットの発行タイミングで設けられる。フレームＦにおいて発行されたトランザクションＣ１で、転送先（ペリフェラル）からのＮＡＫ応答があった場合、ホストはＮＡＫ応答検出パルスＣ２を生成する。ホストは、他の転送要求がない場合でも、続いて再送トランザクションＣ３を発行することなく、次のスキップポイントまで待って再送トランザクションＣ４を発行する。より具体的には、フレーム（Ｆ＋１）のスキップポイントＳＰ１まで待って再送トランザクションＣ４の発行が許可されてから、該再送トランザクションＣ４を発行する。ここでスキップポイントＳＰ１は、ＮＡＫ応答が返ってきたフレームＦの次のフレーム（Ｆ＋１）の期間内であるということができる。
【００７８】
またトランザクションがトークンの発行により開始される場合、ホストは、トランザクションＣ１を発行するためにペリフェラルのエンドポイントに対してトークンを発行し、該トークンに対応してペリフェラルからのＮＡＫ応答があった場合、ホストはＮＡＫ応答検出パルスＣ２を生成する。ホストは、他の転送要求がない場合でも、続いて再送トランザクションＣ３のためのトークンを再発行することなく、次のスキップポイントまで待って再送トランザクションＣ４のためのトークンを再発行する。より具体的には、フレーム（Ｆ＋１）のスキップポイントＳＰ１まで待って再送トランザクションＣ４を発行するためのトークンの再発行が許可されてから、該トークンを再発行する。ここでスキップポイントＳＰ１は、トークンを発行したフレームＦの次のフレーム（Ｆ＋１）の期間内ということができる。
【００７９】
ここでは、発行したトランザクションＣ１についてのＮＡＫ応答が１回あった場合に、ホストが再送トランザクションを発行するものとして説明したが、トランザクションＣ１についてのＮＡＫ応答に対応する再送トランザクションを１又は複数回発行したことを条件に、ホストがスキップポイントＳＰ１まで待って再送トランザクションの発行を許可するようにしてもよい。同様に、トークンに対応してペリフェラルからのＮＡＫ応答が複数回あったことを条件に、ホストがスキップポイントＳＰ１まで待って再送トランザクションを発行するためのトークンの再発行を許可するようにしてもよい。
【００８０】
図７では、スキップポイントはＳＯＦパケットの発行タイミングで設けたが、フレーム内の任意のタイミングでスキップタイミングを設けることができる。
【００８１】
図８に、フレーム内に複数のスキップポイントが設けられた場合の説明図を示す。スキップポイントは、フレーム内にＮ（Ｎは正の整数）個設けられる。なおＮが１の場合、図７に示すように、スキップポイントがフレーム単位に設けられた場合に相当するため、図８ではＮが複数であるものとする。
【００８２】
フレームＦにおいて発行されたトランザクションＣ１１について、転送先（ペリフェラル）からのＮＡＫ応答があった場合、ホストはＮＡＫ応答検出パルスＣ１２を生成する。ホストは、他の転送要求がない場合でも、続いて再送トランザクションＣ１３を発行することなく、次のスキップポイントまで待って再送トランザクションＣ１４の発行する。より具体的には、スキップポイントＳＰ１１まで待って再送トランザクションＣ１４の発行が許可されてから、スキップポイントＳＰ１１において他の転送要求がない（或いはより優先度の高い転送要求がない）とき、該再送トランザクションＣ１４を発行する。ここで、スキップポイントＳＰ１１は、トランザクションＣ１１の発行後の最初のスキップタイミングであるということができる。
【００８３】
またトランザクションがトークンの発行により開始される場合、ホストは、トランザクションＣ１１を発行するためにペリフェラルのエンドポイントに対してトークンを発行し、該トークンに対応してペリフェラルからのＮＡＫ応答があった場合、ホストはＮＡＫ応答検出パルスＣ１２を生成する。ホストは、他の転送要求がない場合でも、続いて再送トランザクションＣ１３のためのトークンを再発行することなく、次のスキップポイントまで待って再送トランザクションＣ１４のためのトークンを再発行する。より具体的には、スキップポイントＳＰ１１まで待って再送トランザクションＣ１４のためのトークンの再発行が許可されてから、スキップポイントＳＰ１１において他の転送要求がない（或いはより優先度の高い転送要求がない）とき、該トークンを再発行する。ここでスキップポイントＳＰ１１は、トランザクションＣ１１を発行するためのトークンの発行後の最初のスキップポイント、又は該トークンに対応したＮＡＫ応答後の最初のスキップポイントということができる。
【００８４】
ここでは、図８に示すように発行したトランザクションＣ１についてのＮＡＫ応答が１回あった場合に、ホストが再送トランザクションを発行するものとして説明したが、トランザクションＣ１１についてのＮＡＫ応答に対応する再送トランザクションを１又は複数回発行したことを条件に、ホストがスキップポイントＳＰ１１まで待って再送トランザクションの発行を許可するようにしてもよい。同様に、トークンに対応してペリフェラルからのＮＡＫ応答が複数回あったことを条件に、ホストがスキップポイントＳＰ１１まで待って再送トランザクションを発行するためのトークンの再発行を許可するようにしてもよい。
【００８５】
以下では、Ｎが４であるものとし、本実施形態におけるトランザクションについてＮＡＫ応答がある場合について説明する。
【００８６】
図９に、本実施形態におけるトランザクションについてＮＡＫ応答がある場合のタイミング図の一例を示す。ここではＦＳモードにおいて、コントロール転送又はバルク転送である２つのパイプａ、ｂが設定されているものとし、マックスパケットサイズ等の諸条件を簡略化して模式的に示す。またフレームＦにおいて、パイプａのトランザクションについてＮＡＫ応答、パイプｂのトランザクションについてＡＣＫ応答があり、フレーム（Ｆ＋１）では、パイプａ、ｂのトランザクションについて、共にＡＣＫ応答がある場合の例を示している。
【００８７】
フレームＦでは、ホストは、まずパイプａのトランザクションＡ３１を発行する。このパイプａのトランザクションＡ３１についてＮＡＫ応答があると、ホストはＮＡＫ応答検出パルスＡ３２を生成する。このとき、パイプｂの転送要求がある場合、ホストは、パイプｂのトランザクションＢ３１を発行し、スキップポイントＳＰ３１の経過後にトランザクションＡ３１の再発行ができることになる。
【００８８】
パイプｂのトランザクションＢ３１についてＡＣＫ応答があると、ホストはＡＣＫ応答検出パルスＢ３２を生成する。ホストは次のトランザクションを発行することになるが、トランザクションＢ３１が完了した時点で、スキップポイントＳＰ３１を経過していないため、ホストは続いてパイプｂのトランザクションＢ３３を発行する。パイプｂのトランザクションＢ３３でＡＣＫ応答があると、ホストはＡＣＫ応答検出パルスＢ３４を生成する。
【００８９】
この時点でスキップポイントＳＰ３１が経過しているものとすると、ホストは、トランザクションＡ３１の再送トランザクションとして、パイプａのトランザクションＡ３３を発行する。トランザクションＡ３３についてＮＡＫ応答があると、ホストはＮＡＫ応答検出パルスＡ３４を生成する。これ以降、ホストは、パイプａのトランザクションでＡＣＫ応答があるまで、パイプａの再送トランザクションとパイプｂのトランザクションを繰り返し発行する。
【００９０】
以上のように、図９では、パイプａの再送トランザクションを発行しながら、帯域はパイプｂにも割り当てられ、帯域を有効に活用できる。
【００９１】
図１０に、本実施形態におけるトランザクションについてＮＡＫ応答を含む場合のタイミング図の他の例を示す。ここではＦＳモードにおいて、コントロール転送又はバルク転送である２つのパイプａ、ｂが設定されているものとし、マックスパケットサイズ等の諸条件を簡略化して模式的に示す。またフレームＦにおいて、パイプａ、ｂのトランザクションについてＮＡＫ応答があり、フレーム（Ｆ＋１）では、パイプａ、ｂのトランザクションについてＡＣＫ応答がある場合の例を示している。
【００９２】
フレームＦでは、ホストは、まずパイプａのトランザクションＡ４１を発行する。このパイプａのトランザクションＡ３１についてＮＡＫ応答があると、ホストはＮＡＫ応答検出パルスＡ４２を生成する。このとき、パイプｂの転送要求がある場合、ホストは、パイプｂのトランザクションＢ４１を発行し、スキップポイントＳＰ４１の経過後にトランザクションＡ４１の再発行ができることになる。
【００９３】
パイプｂのトランザクションＢ４１についてＮＡＫ応答があると、ホストはＮＡＫ応答検出パルスＢ４２を生成する。このとき、ホストは、スキップポイントＳＰ４１の経過後に、トランザクションＢ４１を再発行できることになる。
【００９４】
従って、スキップポイントＳＰ４１が経過するまで、パイプａ、ｂの再送トランザクションは発行されない。この間、他のパイプの転送要求があれば、その転送のトランザクションを発行できる。
【００９５】
スキップポイントＳＰ４１が経過すると、ホストは、トランザクションＡ４１の再送トランザクションとして、パイプａのトランザクションＡ４３を発行する。続いて、ホストは、トランザクションＢ４１の再送トランザクションとして、パイプｂのトランザクションＢ４３を発行する。これ以降、ホストは、パイプａ、ｂのトランザクションでＡＣＫ応答があるまで、パイプａ、ｂの再送トランザクションを繰り返し発行する。
【００９６】
以上のように、図１０では、ＮＡＫ応答に伴う無駄なトランザクションの発生を防ぎ、消費電力を低減することができる。
【００９７】
次に、このような再送トランザクションの発行又はトークンの再発行を行うデータ転送制御装置の構成例について説明する。
【００９８】
３．１  データ転送制御装置
３．１．１  構成例
図１１に、本実施形態におけるデータ転送制御装置（データ転送制御回路）の構成例を示す。本実施形態におけるデータ転送制御装置は、図１１の一部の機能ブロックを省略する構成としてもよい。また図１１に示す機能ブロックは、ハードウェア回路のみにより実現してもよいし、ハードウェア回路とファームウェア（ソフトウェア）の両方により実現してもよい。また以下ではＯＴＧ規格に準拠したデータ転送制御装置に適用した場合について説明するが、ＯＴＧ規格を発展させた規格に準拠したデータ転送制御装置やＯＴＧ規格に準拠しないデータ転送制御装置にも本発明を適用できる。例えばデュアルロール・デバイスの機能を持たず、簡易ホストとしての機能だけを持つようなデータ転送制御装置にも本発明を適用できる。
【００９９】
図１１に示すデータ転送制御装置は、ＯＴＧ規格に準拠した制御を行う。このため、トランザクションは、トークンを発行することで発行される。
【０１００】
データ転送制御装置は、トランシーバ（以下、適宜Ｘｃｖｒと呼ぶ）１０を含む。このトランシーバ１０は、差動対を構成するデータ信号線ＤＰ、ＤＭの信号を用いてＵＳＢのデータを送受信する回路である。トランシーバ１０は、ＵＳＢの物理層（ＰＨＹ）回路１２を含む。より具体的には、トランシーバ１０は、データ信号線ＤＰ、ＤＭのラインステート（Ｊ、Ｋ、ＳＥ０等）の生成、シリアル・パラレル変換、パラレル・シリアル変換、ビットスタッフィング、ビットアンスタッフィング、ＮＲＺＩデコード、ＮＲＺＩエンコード等を行う。なおトランシーバ１０をデータ転送制御装置の外部に設けるようにしてもよい。
【０１０１】
データ転送制御装置は、ＯＴＧコントローラ（広義にはステートコントローラ。以下、適宜ＯＴＧＣと呼ぶ）２０を含む。このＯＴＧコントローラ２０は、ＯＴＧのＳＲＰ機能やＨＮＰ機能を実現するための処理を行う。このためＯＴＧコントローラ２０は、ホストの役割として動作するホスト動作のステートや、ペリフェラルの役割として動作するペリフェラル動作のステート等を含む複数のステートの制御を行う。
【０１０２】
より具体的には、ＯＴＧ規格には、デュアルロール・デバイスのＡデバイスに設定された状態のステート遷移やＢデバイスに設定された状態のステート遷移が定義されている。ＯＴＧコントローラ２０は、これらのステート遷移を実現するステートマシーンの機能を有する。またＯＴＧコントローラ２０は、ＵＳＢのラインステートやＶＢＵＳレベルやＩＤピンの状態を検出（監視）する回路を含む。そしてＯＴＧコントローラ２０は、これらの検出状態に基づいてそのステート（例えば、ホスト、ペリフェラル、サスペンド又はアイドル等のステート）を変化させる。この場合のステート遷移は、ハードウェア回路により実現してもよいし、ファームウェアがステートコマンドをレジスタに設定することで実現してもよい。そしてステートが遷移すると、ＯＴＧコントローラ２０は、遷移後のステートに応じて、ＶＢＵＳを制御したり、データ信号線ＤＰ、ＤＭのプルアップ制御、プルダウン制御を行う。またホストコントローラ（以下、適宜ＨＣと呼ぶ）５０、ペリフェラルコントローラ（以下、適宜ＰＣと呼ぶ）６０のイネーブル又はディセーブルを制御する。
【０１０３】
データ転送制御装置は、ＨＣ／ＰＣ切り替え回路（ＨＣ／ＰＣ・コモン回路）３０を含む。このＨＣ／ＰＣ切り替え回路３０は、トランシーバ１０と、ホストコントローラ５０又はペリフェラルコントローラ６０との間の接続の切り替えを制御する。またＵＳＢのデータ信号線ＤＰ、ＤＭのラインステートの生成の指示をトランシーバ１０に対して行う。なお接続の切り替え制御は、ＨＣ／ＰＣセレクタ３２により実現され、ラインステートの生成指示は、ラインステートコントローラ３４により実現される。
【０１０４】
例えばＯＴＧコントローラ２０がホスト動作時にＨＣイネーブル信号（HC_Enable）をアクティブにすると、ＨＣ／ＰＣ切り替え回路３０（ＨＣ／ＰＣセレクタ３２）は、トランシーバ１０とホストコントローラ５０とを接続する。一方、ＯＴＧコントローラ２０がペリフェラル動作時にＰＣイネーブル信号（PC_Enable）をアクティブにすると、ＨＣ／ＰＣ切り替え回路３０は、トランシーバ１０とペリフェラルコントローラ６０とを接続する。これにより、ホストコントローラ５０とペリフェラルコントローラ６０とを排他的に動作させる。
【０１０５】
データ転送制御装置は、転送コントローラ４０を含む。この転送コントローラ４０は、ＵＳＢを介したデータ転送を制御する回路であり、ホストコントローラ（ＨＣ）５０と、ペリフェラルコントローラ（ＰＣ）６０とを含む。なお簡易ホスト機能だけを実現する場合には、転送コントローラ４０にペリフェラルコントローラ６０を含ませない構成としてもよい。
【０１０６】
ホストコントローラ５０は、ホスト動作時にホストの役割としてのデータ転送制御を行う回路である。即ちホストコントローラ５０は、ホスト動作時にＨＣ／ＰＣ切り替え回路３０によりトランシーバ１０に接続される。そしてホストコントローラ５０は、レジスタ部７０の転送条件レジスタ部７２に設定された転送条件情報に基づき、エンドポイントに対するトランザクションを（自動）発生する。そしてパケットバッファ１００に、確保（allocate）されたパイプ領域（ＰＩＰＥ０〜ＰＩＰＥｐ。以下、適宜ＰＩＰＥと呼ぶ）と、そのパイプ領域に対応するエンドポイントとの間で、データ（パケット）の自動転送（処理部が介在しないハードウェア回路によるデータ転送）を行う。
【０１０７】
より具体的にはホストコントローラ５０は、複数のパイプ転送間の調停、フレームにおける時間管理、転送のスケジューリング、再送の管理等を行う。またパイプ転送の転送条件情報（オペレーション情報）をレジスタ部７０を介して管理する。またトランザクションの管理を行ったり、パケットを生成又は分解したり、サスペンド、レジューム又はリセット状態の生成の指示を行う。本実施形態では、ホストコントローラ５０（広義には転送コントローラ４０）が、トランザクションの発行又はトークンの発行を行うと共に、発行したトランザクションについてのＮＡＫ応答に対応する再送トランザクションの発行又はトークンの再発行を、所定のスキップポイントまで待って許可する（以下、この動作を適宜ＮＡＫスキップと呼ぶ）。
【０１０８】
ペリフェラルコントローラ６０はペリフェラル動作時にペリフェラルの役割としてのデータ転送制御を行う回路である。即ちペリフェラルコントローラ６０は、ペリフェラル動作時にＨＣ／ＰＣ切り替え回路３０によりトランシーバ１０に接続される。そしてレジスタ部７０の転送条件レジスタ部７２に設定された転送条件情報に基づき、パケットバッファ１００に確保されたエンドポイント領域（ＥＰ０〜ＥＰｐ。以下適宜ＥＰと呼ぶ）とホストとの間でデータを転送する。
【０１０９】
より具体的には、ペリフェラルコントローラ６０は、エンドポイント転送の転送条件情報（オペレーション情報）をレジスタ部７０を介して管理する。また、トランザクションの管理を行ったり、パケットを生成又は分解したり、リモート・ウェイクアップ信号の生成の指示を行う。
【０１１０】
なおエンドポイントは、ユニークなアドレスを割り当てることができる、ペリフェラル（デバイス）上のポイント（部分）である。ホストとペリフェラル（デバイス）との間のデータ転送のすべては、このエンドポイントを経由して行われる。
【０１１１】
データ転送制御装置は、レジスタ部７０を含む。このレジスタ部７０は、データ転送（パイプ転送、エンドポイント転送）制御、バッファアクセス制御、バッファ管理、割り込み制御、ブロック制御、クロック制御、或いはＤＭＡ制御等を行うための種々のレジスタを含む。なおレジスタは、ＲＡＭ（Random Access Memory）等のメモリにより実現してもよいし、Ｄフリップフロップ等により実現してもよい。またレジスタ部７０のレジスタは、１つにまとめず、各ブロック（ＨＣ、ＰＣ、ＯＴＧＣ、Ｘｃｖｒ等）に分散して配置してもよい。
【０１１２】
レジスタ部７０は、転送条件レジスタ部７２を含む。この転送条件レジスタ部７２は、ホスト動作時にパケットバッファ１００に確保されるパイプ領域（ＰＩＰＥ０〜ＰＩＰＥｐ）とエンドポイントとの間でのデータ転送の転送条件情報を記憶するレジスタを含む。これらの各転送条件レジスタは、パケットバッファ１００の各パイプ領域に対応して設けられる。
【０１１３】
なおペリフェラル動作時には、パケットバッファ１００にエンドポイント領域（ＥＰ０〜ＥＰｐ）が確保される。そして転送条件レジスタ部７２に設定された転送条件情報に基づいて、データ転送制御装置とホストとの間でのデータ転送が行われる。
【０１１４】
レジスタ部７０は、ＮＡＫスキップモード設定レジスタ部７４（スキップモード設定レジスタ）を含む。ＮＡＫスキップモード設定レジスタ部７４は、ハードウェア回路又はファームウェア（ソフトウェア）によりＮＡＫスキップモードをオン又はオフに設定するためのレジスタである。ＮＡＫスキップモード設定レジスタ部７４にオンの設定値が設定されたとき、ＮＡＫスキップモードがオンに設定される。ＮＡＫスキップモード設定レジスタ部７４にオフの設定値が設定されたとき、ＮＡＫスキップモードがオフに設定される。
【０１１５】
ＮＡＫスキップモードがオンに設定されたとき、図７〜図１０で説明したようにホストコントローラ５０が、ＮＡＫスキップ動作を行う。これに対して、ＮＡＫスキップモードがオフに設定されたとき、図６（Ａ）、（Ｂ）に示したように、ＮＡＫ応答に対応する再送トランザクションを直ちに発行する（ＮＡＫスキップ動作を行わない）。
【０１１６】
このＮＡＫスキップモード設定レジスタ部７４は、ペリフェラルのエンドポイントごとにＮＡＫスキップモードのオン又はオフを設定できることが望ましいが、これに限定されるものではなく、例えば複数のパイプに共通にＮＡＫスキップモードのオン又はオフを設定できるようにしてもよい。
【０１１７】
レジスタ部７０は、ＮＡＫ回数設定レジスタ部７６を含む。ＮＡＫ回数設定レジスタ部７６は、ハードウェア回路又はファームウェア（ソフトウェア）によりＮＡＫ応答の回数を設定するためのレジスタである。ＮＡＫスキップモードがオンに設定された状態で、ホストコントローラ５０は、ＮＡＫ回数設定レジスタ部７６の設定値に対応した回数だけ、ＮＡＫ応答に対応する再送トランザクションを発行したことを条件に、次の再送トランザクションについて上述のＮＡＫスキップ動作を行う。
【０１１８】
このＮＡＫ回数設定レジスタ部７６は、ペリフェラルのエンドポイントごとにＮＡＫ応答の回数を設定できることが望ましいが、これに限定されるものではなく、例えば複数のパイプに共通にＮＡＫ応答の回数を設定できるようにしてもよい。
【０１１９】
レジスタ部７０は、スキップポイント設定レジスタ部７８（スキップタイミング設定レジスタ）を含む。スキップポイント設定レジスタ部７８は、ハードウェア回路又はファームウェア（ソフトウェア）により、フレーム内に１又は複数のスキップポイントを設定するためのレジスタである。
【０１２０】
このスキップポイント設定レジスタ部７８は、ペリフェラルのエンドポイントごとにスキップポイントを設定できることが望ましいが、これに限定されるものではなく、例えば複数のパイプに共通にスキップポイントを設定できるようにしてもよい。
【０１２１】
データ転送制御装置はバッファコントローラ（ＦＩＦＯマネージャ）８０を含む。このバッファコントローラ８０は、パケットバッファ１００に、パイプ領域やエンドポイント領域を確保する処理を行う。またパケットバッファ１００に対するアクセス制御や領域管理を行う。より具体的にはバッファコントローラ８０は、ＣＰＵからのアクセス（処理部側からのアクセス）、ＤＭＡからのアクセス（アプリケーション層デバイスからのアクセス）、ＵＳＢからのアクセス（転送コントローラからのアクセス）の制御を行ったり、これらのアクセスの調停を行ったり、これらのアクセスに必要なアドレスの生成及び管理を行う。
【０１２２】
データ転送制御装置は、パケットバッファ（ＦＩＦＯ、パケットメモリ、データバッファ）１００を含む。このパケットバッファ１００は、ＵＳＢを介して転送されるデータ（送信データ又は受信データ）を一時的に記憶（バッファリング）するものである。このパケットバッファ１００は、例えばＲＡＭ等により構成できる。なおパケットバッファ１００の一部又は全部を、外付けメモリとしてデータ転送制御装置の外部に設けてもよい。
【０１２３】
ホスト動作時には、パケットバッファ１００はパイプ転送用のＦＩＦＯ（First-In First-Out）として用いられる。即ち、ＵＳＢ転送の各エンドポイントに対応するパイプ領域ＰＩＰＥ０〜ＰＩＰＥｐ（広義にはバッファ領域）が、パケットバッファ１００に確保される。またパイプ領域ＰＩＰ０〜ＰＩＰＥｐの各パイプ領域には、パイプ領域に対応するエンドポイントとの間で転送されるデータ（送信データ又は受信データ）が記憶される。
【０１２４】
一方、ペリフェラル動作時には、パケットバッファ１００はエンドポイント転送用のＦＩＦＯとして用いられる。即ち、エンドポイント領域ＥＰ０〜ＥＰｐ（広義にはバッファ領域）がパケットバッファ１００に確保される。またエンドポイント領域ＥＰ０〜ＥＰｐの各エンドポイント領域には、ホストとの間で転送されるデータ（送信データ又は受信データ）が記憶される。
【０１２５】
なおパケットバッファ１００に確保されるバッファ領域（ホスト動作時にパイプ領域に設定され、ペリフェラル動作時にエンドポイント領域に設定される領域）は、先に入力された情報が先に出力されるような記憶領域（ＦＩＦＯ領域）に設定されている。またＰＩＰＥ０は、コントロール転送用のエンドポイント０として割り当てられる専用のパイプ領域であり、ＰＩＰＥａ〜ＰＩＰＥｐは、任意のエンドポイントに割り当て可能な汎用のパイプ領域である。即ち、ＵＳＢ転送では、エンドポイント０がコントロール転送に専用のエンドポイントに設定される。従って本実施形態のようにＰＩＰＥ０をコントロール転送に専用のパイプ領域にすることで、ユーザが混乱するのを防止したり、ユーザによるパイプ領域の設定を簡素化できる。またＰＩＰＥａ〜ＰＩＰＥｐを任意のエンドポイントに割り当て可能な汎用のパイプ領域にすることで、エンドポイントに対応するパイプ領域を動的に変化させることが可能になる。これにより、パイプ転送のスケジューリングの自由度を向上でき、データ転送を効率化できる。
【０１２６】
なお本実施形態では、マックスパケットサイズMaxPktSize（広義にはページサイズ）とページ数BufferPageにより、バッファ領域の領域サイズRsizeが設定される（Rsize=MaxPktSize×BuuferPage）。転送条件レジスタ部７２は、バッファ領域ごとに、マックスパケットサイズMaxPktSize及びページ数BufferPageが設定されるレジスタを含む。このようにすることで、バッファ領域の領域サイズやページ数を任意に設定できるようになり、パケットバッファ１００のリソースを有効利用できる。
【０１２７】
データ転送制御装置は、インターフェース部１１０を含む。このインターフェース部１１０は、ＵＳＢとは異なる他のバスであるＤＭＡ（Direct Memory Access）バスやＣＰＵバス（第２のバス）と、パケットバッファ１００との間のデータ転送を行うためのものである。インターフェース部１１０は、パケットバッファ１００と外部のシステムメモリとの間でＤＭＡ転送を行うためのＤＭＡハンドラ回路１１２を含む。またパケットバッファ１００と外部のＣＰＵとの間でＰＩＯ（Parallel I/O）転送を行うためのＣＰＵインターフェース回路１１４を含む。なお、ＣＰＵ（広義には処理部）をデータ転送制御装置に内蔵させてもよい。
【０１２８】
データ転送制御装置は、クロックコントローラ１２０を含む。このクロックコントローラ１２０は、内蔵するＰＬＬ（Phase Locked Loop）回路が生成するクロックに基づいて、データ転送制御装置の各部に供給されるクロックを生成する。
【０１２９】
より具体的には、クロックコントローラ１２０は、１又は複数の機能ブロックを１つの回路ブロックとし、この回路ブロックごとに動作クロックを生成し、各回路ブロックに対して動作クロックを供給する。
【０１３０】
３．１．２  パイプ領域、エンドポイント領域
次にパイプ領域とエンドポイント領域について説明する。ここでは、説明を簡略化するために、パイプ領域、エンドポイント領域の個数が６個であるものとして説明する。
【０１３１】
本実施形態では、図１２（Ａ）に示すように、ホスト動作時にパケットバッファ１００にパイプ領域ＰＩＰＥ０〜ＰＩＰＥｅが確保される。そしてこの各パイプ領域とペリフェラルの各エンドポイントの間でデータが転送される。
【０１３２】
ここで、本実施形態のパイプ領域の「パイプ」は、ＵＳＢ規格で定義される「パイプ」（デバイス上のエンドポイントとホスト上のソフトウェアとの間の関連を表す論理的な抽象化、論理的な経路）とは若干意味合いが異なる。
【０１３３】
本実施形態のパイプ領域は、図１２（Ａ）に示すように、ＵＳＢ（バス）に接続されるペリフェラルが有する各エンドポイント領域に対応して、パケットバッファ１００上に確保される。例えば図１２（Ａ）において、パイプ領域ＰＩＰＥａは、ペリフェラル１のエンドポイント１（バルクＩＮ）に対応し、パイプ領域ＰＩＰＥｂは、ペリフェラル１のエンドポイント２（バルクＯＵＴ）に対応する。またパイプ領域ＰＩＰＥｃは、ペリフェラル２のエンドポイント１（バルクＩＮ）に対応し、パイプ領域ＰＩＰＥｄは、ペリフェラル２のエンドポイント２（バルクＯＵＴ）に対応する。またパイプ領域ＰＩＰＥｅは、ペリフェラル３のエンドポイント１（インターラプトＩＮ）に対応する。なおパイプ領域ＰＩＰＥ０は、コントロール転送のエンドポイント０に専用のパイプ領域である。
【０１３４】
そして図１２（Ａ）の例では、パイプ領域ＰＩＰＥａとペリフェラル１のエンドポイント１との間でＵＳＢ規格のバルクＩＮ転送が行われ、パイプ領域ＰＩＰＥｂとペリフェラル１のエンドポイント２との間でバルクＯＵＴ転送が行われる。またパイプ領域ＰＩＰＥｃとペリフェラル２のエンドポイント１との間ではバルクＩＮ転送が行われ、パイプ領域ＰＩＰＥｄとペリフェラル２のエンドポイント２との間でバルクＯＵＴ転送が行われる。またパイプ領域ＰＩＰＥｅとペリフェラル３のエンドポイント１との間ではインターラプトＩＮ転送が行われる。以上のように本実施形態では、パイプ領域（汎用）とそれに対応するエンドポイントとの間では、任意のデータ転送（アイソクロナス転送、バルク転送、インターラプト転送）を行うことができる。
【０１３５】
そして本実施形態では、パイプ領域とそれに対応するエンドポイントの間では所与のデータ単位（トータルサイズで指定されるデータ単位）のデータが転送される。このデータ単位としては、例えばＩＲＰ（Ｉ／Ｏリクエストパケット）により転送要求されるデータ単位又はそれを適当なサイズに分割したデータ単位を想定できる。エンドポイントに対するこのデータ単位のデータ転送（一連のトランザクション）を本実施形態における「パイプ」と呼ぶことができ、「パイプ」のデータ（送信データ、受信データ）を記憶する領域がパイプ領域になる。
【０１３６】
パイプ領域を用いた所与のデータ単位の転送が終了すると、そのパイプ領域は解放される。そして解放されたパイプ領域は新たに任意のエンドポイントに割り当てられる。このように本実施形態では、パイプ領域とエンドポイントとの対応付けを動的に変化させることができる。
【０１３７】
また本実施形態では図１２（Ｂ）に示すように、ペリフェラル動作時にはパケットバッファ１００にエンドポイント領域ＥＰ０〜ＥＰｅが確保される。そして各エンドポイント領域とホストとの間でデータが転送される。
【０１３８】
このように本実施形態では、パケットバッファ１００のバッファ領域を、ホスト動作時にはパイプ領域に割り当て、ペリフェラル動作時にはエンドポイント領域に割り当てている。これにより、ホスト動作時とペリフェラル動作時とでパケットバッファ１００のリソースを共用（兼用）でき、パケットバッファ１００の使用記憶容量を節約できる。なおパイプ領域、エンドポイント領域の個数には限定されず任意である。
【０１３９】
３．１．３  動作フロー
上述のＮＡＫ応答に対応する再送トランザクションは、ハンドシェイク・フェーズを有する転送、即ちコントロール転送、バルク転送及びインターラプト転送で発行される可能性がある。しかしながら、インターラプト転送は、フレーム単位で予め設定された転送間隔でデータ転送を行うため、ＮＡＫ応答があった場合でも該転送間隔をおいたフレームで再送トランザクションを発行する必要がある。そこで本実施形態では、コントロール転送及びバルク転送のときに上記のＮＡＫスキップ動作を行うようにしている。
【０１４０】
図１３に、本実施形態におけるデータ転送制御装置のＮＡＫスキップの動作フローの一例を示す。ここでは、エンドポイントごとに、ＮＡＫスキップモードのオン又はオフを設定できるものとする。
【０１４１】
まずファームウェアが、ＮＡＫスキップモード設定レジスタ部７４によりＮＡＫスキップモードをオンにするか否かを設定する（ステップＳ１０）。ファームウェアは、エンドポイントごとにＮＡＫスキップモードのオン又はオフを設定する。
【０１４２】
ＮＡＫスキップモードのオン又はオフが設定されたデータ転送制御装置では、ホストコントローラ５０がイネーブルのとき（ステップＳ１１：Ｙ）、ホストコントローラ５０が転送要求のあったパイプのトランザクションを発行する（ステップＳ１２）。一方、ホストコントローラ５０がディセーブルのとき（ステップＳ１１：Ｎ）、一連の動作を終了する（エンド）。
【０１４３】
ステップＳ１２においてトランザクションの発行後、ホストコントローラ５０が、ペリフェラルからのＮＡＫ応答の有無を検出する（ステップＳ１３）。ペリフェラルからのＮＡＫ応答があったとき（ステップＳ１３：Ｙ）、ホストコントローラ５０は、ステップＳ１２で発行した現トランザクションがコントロール転送又はバルク転送のトランザクションか否かを判別する（ステップＳ１４）。
【０１４４】
ステップＳ１４において、現トランザクションがコントロール転送又はバルク転送のトランザクションであると判別されたとき（ステップＳ１４：Ｙ）、ホストコントローラ５０は、現トランザクションを発行するパイプのＮＡＫスキップモードがオンに設定されているか否かを判別する（ステップＳ１５）。
【０１４５】
ＮＡＫスキップモードがオンに設定されていると判別されたとき（ステップＳ１５：Ｙ）、ステップＳ１２で発行されたトランザクションと同じトランザクションを、所定のスキップポイントまで待って再送トランザクションの発行を許可し、該所定のスキップポイントで他の転送要求がなければ該再送トランザクションを発行し（ステップＳ１６）、ステップＳ１３に戻る。
【０１４６】
ステップＳ１５において、ＮＡＫスキップモードがオフに設定されていると判別されたとき（ステップＳ１５：Ｎ）、ステップＳ１２で発行されたトランザクションと同じトランザクションを再送トランザクションとして直ちに発行し（ステップＳ１７）、ステップＳ１３に戻る。
【０１４７】
ステップＳ１３においてＮＡＫ応答がないと判別されたとき（ステップＳ１３：Ｎ）、或いはステップＳ１４において現トランザクションがコントロール転送又はバルク転送のトランザクションではないと判別されたとき（ステップＳ１４：Ｎ）、全転送が完了のとき（ステップＳ１８：Ｙ）は一連の動作を終了する（エンド）。ステップＳ１８において全転送が完了しないとき（ステップＳ１８：Ｎ）、スケジュールに従って次のトランザクションを発行し（ステップＳ１９）、ステップＳ１３に戻る。
【０１４８】
３．２  各ブロックの構成例
以下、上述のＮＡＫスキップ動作を実現するデータ転送制御装置の各ブロックの構成要部について説明する。
【０１４９】
３．２．１  レジスタ部
図１４に、ＮＡＫスキップモード設定レジスタ部７４の構成例を示す。ＮＡＫスキップモード設定レジスタ部７４では、パイプ（又はペリフェラルのエンドポイント）に対応したNAK_Skip_Mode_x（ｘはａ〜ｐのいずれか）に、ＮＡＫスキップモードのオンを指定する１、又はオフを指定する０が設定される。
【０１５０】
図１５に、ＮＡＫ回数設定レジスタ部７６の構成例を示す。ＮＡＫ回数設定レジスタ部７６は、パイプごとに（又はペリフェラルのエンドポイントごとに）ＮＡＫ回設定レジスタを含む。図１５では、パイプａのＮＡＫ回数設定レジスタの構成例を示すが、他のパイプのＮＡＫ回数設定レジスタも同様の構成である。パイプａのＮＡＫ回数設定レジスタに設定されたＮＡＫ回数設定値は、NAKCount_aとして出力される。従ってＮＡＫ回数設定レジスタ部７６は、NAKCount_a〜NAKCount_pを出力する。
【０１５１】
図１６に、スキップポイント設定レジスタ部７８の構成例を示す。スキップポイント設定レジスタ部７８は、パイプごとに（又はエンドポイントごとに）スキップポイント設定レジスタを含む。図１６では、パイプａのスキップポイント設定レジスタの構成例を示すが、他のパイプのスキップポイント設定レジスタも同様の構成である。パイプａのスキップポイント設定レジスタに設定された第１〜第Ｎのスキップポイントは、SetSkipPoint1_a〜SetSkipPointN_aとして出力される。従ってスキップポイント設定レジスタ部７８は、SetSkipPoint1_a〜SetSkipPointN_a、SetSkipPoint1_b〜SetSkipPointN_b、・・・、SetSkipPoint1_p〜SetSkipPointN_pを出力する。
【０１５２】
３．２．２  転送コントローラ
図１７に、ホストコントローラ５０の構成例のブロック図を示す。
【０１５３】
ホストコントローラ５０は、ＨＣシーケンス管理部５２を含む。このＨＣシーケンス管理部５２は、パイプ転送（パイプ領域を用いたデータ転送）の調停、時間管理、パイプ転送のスケジューリング、再送管理等を行う。
【０１５４】
より具体的にはＨＣシーケンス管理部５２は、フレーム番号のカウントや、ＳＯＦ（S tart-Of-Frame）パケットの送信指示を行う。またアイソクロナス転送を各フレームの先頭で優先的に実行するための処理を行ったり、インターラプト転送をアイソクロナス転送の次に優先的に取り扱うための処理を行う。またパイプ転送の順序に従って各パイプ転送を指示する処理を行う。またトランザクションの連続発行回数を管理したり、残りフレーム時間の確認処理を行う。またペリフェラルから返ってきたハンドシェイクパケット（ＡＣＫ、ＮＡＫ）に対する処理を行う。また、トランザクション発行時のエラー処理を行う。
【０１５５】
ホストコントローラ５０は、ターゲットパイプ管理部５４を含む。このターゲットパイプ管理部５４は、転送条件レジスタ部７２に設定された転送条件情報のハンドリング処理等を行う。またトランザクション管理部５６への転送指示を行う。
【０１５６】
ホストコントローラ５０は、トランザクション管理部５６を含む。このトランザクション管理部５６は、転送パケットの種類や転送順序の管理（トランザクションのシーケンス管理）を行う。また、タイムアウトの監視処理を行う。また、トランザクション終了の通知処理を行う。
【０１５７】
ホストコントローラ５０は、パケットハンドラ部５８を含む。このパケットハンドラ部５８は、パケットの生成、分解処理を行う。また、ＰＩＤ（Packet ID）のチェックやＣＲＣのデコード、エンコードを行う。また、バッファ領域のパケットのペイロードのリード、ライト処理や、ＳＯＦパケットの送信処理を行う。また、送受信データのカウント処理を行う。
【０１５８】
ホストコントローラ５０の各部は、ハードウェア回路により実現してもよいし、ファームウェアとハードウェア回路の両方により実現してもよい。
【０１５９】
図１８に、ペリフェラルコントローラ６０の構成例のブロック図を示す。
【０１６０】
ペリフェラルコントローラ６０は、トランザクション管理部６２、パケットハンドラ部６４を含む。トランザクション管理部６２は、ホストコントローラ５０のトランザクション管理部５６とほぼ同様の処理を行う。パケットハンドラ部６４は、ホストコントローラ５０のパケットハンドラ部５８とほぼ同様の処理を行う。
【０１６１】
ペリフェラルコントローラ６０の各部は、ハードウェア回路により実現してもよいし、ファームウェアとハードウェア回路の両方により実現してもよい。
【０１６２】
本実施形態では、転送コントローラ４０が上述のＮＡＫスキップ動作を実現する。より具体的には、ホストコントローラ５０が、ＮＡＫスキップ動作を実現する。ホストコントローラ５０は、ファームウェアからのパイプごとの転送開始要求に対してスケジューリングを行ってトランザクションを発行する。そしてホストコントローラ５０は、この転送開始要求をマスクすることでＮＡＫスキップを実現する。以下では、ホストコントローラ５０の詳細な構成例について説明する。
【０１６３】
３．２．２．１  ホストコントローラの詳細な構成例
図１９に、ＨＣシーケンス管理部５２の構成例のブロック図を示す。ＨＣシーケンス管理部５２は、スケジューラ２００を含む。スケジューラ２００は、インターラプト転送の転送開始要求フラグ、アイソクロナス転送の転送開始要求フラグ、コントロール転送の転送開始要求フラグ、又はバルク転送の転送開始要求フラグをパイプごとに参照して、転送すべきパイプを選択する。スケジューラによって選択されたパイプの転送を行うためのトランザクションが、ホストコントローラ５０によって発行される。
【０１６４】
ファームウェアは、各パイプのインターラプト転送又はアイソクロナス転送の転送開始要求フラグ（Flg_IS_a〜Flg_IS_p）をスケジューラ２００に供給する。またファームウェアは、各パイプのコントロール転送又はバルク転送の転送開始要求フラグ（Flg_CB_a〜Flg_CB_p）をＣＴＬ／ＢＬＫ転送フラグ生成部３００に供給する。
【０１６５】
ＨＣシーケンス管理部５２は、ＣＴＬ／ＢＬＫ転送フラグ生成部３００を含む。ＣＴＬ／ＢＬＫ転送フラグ生成部３００は、ＮＡＫスキップ動作時に、各パイプのコントロール転送又はバルク転送の転送開始要求フラグ（Flg_CB_a〜Flg_CB_p）をマスクしてスケジューラ２００に各パイプの転送開始要求フラグを通知することでＮＡＫスキップ動作を実現する。
【０１６６】
図２０に、ＣＴＬ／ＢＬＫ転送フラグ生成部３００の構成例のブロック図を示す。
【０１６７】
ＣＴＬ／ＢＬＫ転送フラグ生成部３００は、現ＣＴＬ／ＢＬＫ転送パイプ番号デコード部３１０を含む。現ＣＴＬ／ＢＬＫ転送パイプ番号デコード部３１０は、現在コントロール転送又はバルク転送中のパイプ番号をデコード出力する。
【０１６８】
図２１に、現ＣＴＬ／ＢＬＫ転送パイプ番号デコード部３１０の動作例の真理値表を示す。現ＣＴＬ／ＢＬＫ転送パイプ番号デコード部３１０には、現在転送中のパイプ番号を示すCurrentTgPipeNum[3:0]と、現在転送中のパイプの転送タイプを示すCurrentTgPipeTyp[1:0]とが入力される。CurrentTgPipeNum[3:0]は、パイプａ〜パイプｐのいずれかを示すパイプ番号をコード化した信号である。CurrentTgPipeTyp[1:0]は、コントロール転送（００）、アイソクロナス転送（０１）、バルク転送（１０）及びインターラプト転送（１１）のいずれかをコード化した信号である。現ＣＴＬ／ＢＬＫ転送パイプ番号デコード部３１０は、CurrentTgPipe_a〜CurrentTgPipe_pのうち、現在コントロール転送又はバルク転送中のパイプ番号に対応するものをアサート（１）する。例えば現在転送中のパイプａが、コントロール転送又はバルク転送のとき、CurrentTgPipe_aのみが１となり、CurrentTgPipe_b〜CurrentTgPipe_pは０となる。
【０１６９】
図２０において、ＣＴＬ／ＢＬＫ転送フラグ生成部３００は、スキップポイント生成部３２０を含む。スキップポイント生成部３２０は、スキップポイント設定レジスタ部７８の設定値に基づいて、スキップポイントを指定するSkipPoint_a〜SkipPoint_pを生成する。
【０１７０】
図２２に、スキップポイント生成部３２０の構成例のブロック図を示す。ここで、ＦＳモードにおいてスキップポイントを設定するための構成例を示すが、ＬＳモード又はＨＳモードにおいても同様に設定できる。またパイプａのスキップポイントを生成するための構成のみを示しているが、パイプｂ〜パイプｐのスキップポイントを生成するための構成も同様である。
【０１７１】
図２２において、ＨＣイネーブル信号HC_Enableが入力されるＡＮＤ回路の出力は、セレクタＳＥＬの選択制御を行うことを示す。このセレクタＳＥＬは、該ＡＮＤ回路の出力が１のとき１を選択出力し、該ＡＮＤ回路の出力が０のときＤフリップフロップのデータ出力端子Ｑの信号を選択出力することを示す。以下、セレクタＳＥＬの動きは同様である。
【０１７２】
スキップポイント生成部３２０には、フレームの残り時間に対応したカウント値を示すFrameRemain[13:0]と、ＨＣイネーブル信号HC_Enableと、４８ＭＨｚのシステムクロックCLK48Mと、システムリセット信号XRSTとが入力される。ＬＳモードにおいて、FrameRemain[13:0]は、１１９９９から０までデクリメントされる。
【０１７３】
図２３に、スキップポイントの設定例の説明図を示す。スキップポイント設定レジスタ部７８により第１〜第Ｎのスキップポイントを設定する場合、フレームにおいてデクリメントされるFrameRemain[13:0]のカウント値を用いる。例えば第１及び第２のスキップポイントとして、FrameRemain[13:0]のカウント値９０００、６０００を用いることができる。
【０１７４】
従って、図２２に示すように、スキップポイント生成部３２０は、FrameRemain[13:0]と、SetSkipPoint1_a〜SetSkipPointN_aのそれぞれとを比較するコンパレータを含む。これらのコンパレータにより、FrameRemain[13:0]が、SetSkipPoint1_a〜SetSkipPointN_aのいずれかの一致を検出できる。HC_Enableがアサートされた状態で、FrameRemain[13:0]が、SetSkipPoint1_a〜SetSkipPointN_aのいずれかが一致したとき、セレクタＳＥＬによってSetSkipPoint_aが１にアサートされる。これによりスキップポイント生成部３２０は、システムクロックCLK48Mに同期して１にアサートされたパルスを出力する。同様にスキップポイント生成部３２０は、SetSkipPoint_b〜SetSkipPoint_pが１にアサートされたパルスを出力できる。
【０１７５】
図２０において、ＣＴＬ／ＢＬＫ転送フラグ生成部３００は、ＰＩＰＥ＿ａ＿ＣＢフラグ生成部３３０−ａ〜ＰＩＰＥ＿ｐ＿ＣＢフラグ生成部３３０−ｐを含む。ＰＩＰＥ＿ａ＿ＣＢフラグ生成部３３０−ａ〜ＰＩＰＥ＿ｐ＿ＣＢフラグ生成部３３０−ｐは、それぞれ同様の構成をなしている。
【０１７６】
ＰＩＰＥ＿ａ＿ＣＢフラグ生成部３３０−ａには、CurrentTgPipe_aと、SkipPoint_aとが入力される。そして、ＰＩＰＥ＿ａ＿ＣＢフラグ生成部３３０−ａは、ファームウェアからのパイプａのコントロール転送又はバルク転送の転送開始要求フラグFlg_CB_aを、SkipPoint_aに基づいてマスクしたFlg_CB_a_newを出力する。ＰＩＰＥ＿ｂ＿ＣＢフラグ生成部３３０−ｂには、CurrentTgPipe_bと、SkipPoint_bとが入力される。そして、ＰＩＰＥ＿ｂ＿ＣＢフラグ生成部３３０−ｂは、ファームウェアからのパイプｂのコントロール転送又はバルク転送の転送開始要求フラグFlg_CB_bを、SkipPoint_bに基づいてマスクしたFlg_CB_b_newを出力する。以下同様にして、ＰＩＰＥ＿ｐ＿ＣＢフラグ生成部３３０−ｐには、CurrentTgPipe_pと、SkipPoint_pとが入力される。そして、ＰＩＰＥ＿ｐ＿ＣＢフラグ生成部３３０−ｐは、ファームウェアからのパイプｐのコントロール転送又はバルク転送の転送開始要求フラグFlg_CB_pを、SkipPoint_pに基づいてマスクしたFlg_CB_p_newを出力する。
【０１７７】
図２４に、ＰＩＰＥ＿ａ＿ＣＢフラグ生成部３３０−ａの構成例のブロック図を示す。ここでは、ＰＩＰＥ＿ａ＿ＣＢフラグ生成部３３０−ａの構成例を説明するが、ＰＩＰＥ＿ｂ＿ＣＢフラグ生成部３３０−ｂ〜ＰＩＰＥ＿ｐ＿ＣＢフラグ生成部３３０−ｐについても同様である。
【０１７８】
ＰＩＰＥ＿ａ＿ＣＢフラグ生成部３３０−ａは、ファームウェアからの転送開始要求フラグFlg_CB_aをマスクするためのマスク信号であるFlg_CB_mask_aを生成する。そのためＰＩＰＥ＿ａ＿ＣＢフラグ生成部３３０−ａは、ＮＡＫ回数カウンタ３３２−ａを含む。ＮＡＫ回数カウンタ３３２−ａは、パイプａのトランザクションについてのＮＡＫ応答の回数をカウントする。ＮＡＫ回数カウンタ３３２−ａは、パイプａのトランザクションについてＡＣＫ応答があったときに初期化される。
【０１７９】
図２５に、ＮＡＫ回数カウンタ３３２−ａの構成例のブロック図を示す。
【０１８０】
ＮＡＫ回数カウンタ３３２−ａは、カウンタ３５０−ａ、コンパレータ３５２−ａを含む。カウンタ３５０−ａは、トランザクションがＮＡＫ応答で完了したことを示すPIPETranCmpNAKに基づきＮＡＫ応答をカウントする。PIPETranCmpNAKは、発行したトランザクションについてのＮＡＫ応答を検出するファームウェア又はハードウェア回路によって生成される。このカウンタ３５０−ａは、トランザクションがＡＣＫ応答で完了したことを示すPIPETranCmpACK又はシステムリセット信号XRSTにより初期化される。PIPETranCmpACKは、発行したトランザクションについてのＡＣＫ応答を検出するファームウェア又はハードウェア回路によって生成される。
【０１８１】
コンパレータ３５２−ａは、ＮＡＫカウント値NAKCount_aと、カウンタ３５０−ａのカウント値とを比較し、両者の値が一致したときに１にアサートされたパルスを出力する。NAKCount_aは、図１５に示すＮＡＫ回数設定レジスタ部７６から供給される。
【０１８２】
ＮＡＫ回数カウンタ３３２−ａは、図２５に示すような構成により、カウンタ３５０−ａのカウント値が、NAKCount_aと一致したときに１にアサートされたパルスをシステムクロックCLK48Mに同期させて、一致検出信号Match_aとして出力する。
【０１８３】
このようなＮＡＫ回数カウンタ３３２−ａを用いることで、ＮＡＫ応答の回数が所定の回数に達したときに、最後に返ってきたＮＡＫ応答に対する再送トランザクションの発行を、所定のスキップポイントまで待って許可できるようになる。
【０１８４】
図２４において、Flg_CB_mask_aXは、システムリセット信号XRSTにより０（Ｌレベル）になる（ネゲートされる）。続いてパイプａのコントロール転送又はバルク転送のトランザクションが発行されCurrentTgPipe_aがアサートされ、且つ一致検出信号Match_aがアサートされると、Flg_CB_mask_aXがアサートされる（SkipPoint_aがネゲートされた状態）。その後、SkipPoint_aがアサートされると、Flg_CB_mask_aXがネゲートされる。Flg_CB_mask_aXの反転出力が、Flg_CB_mask_aとなる。
【０１８５】
NAKSkip_Mode_aがネゲートされているとき（ＮＡＫスキップモードがオフのとき）、Flg_CB_a_newは、ファームウェアから供給されるFlg_CB_aとなる。NAKSkip_Mode_aがアサートされているとき（ＮＡＫスキップモードがオンのとき）、Flg_CB_a_newは、Flg_CB_aとFlg_CB_aとの論理積演算結果となる。このようにして、転送開始要求フラグを、所定のスキップポイントまでマスクすることで、所定のスキップタイミングまで待って再送トランザクションの発行を許可するようにしている。
【０１８６】
同様にしてＰＩＰＥ＿ｂ＿ＣＢフラグ生成部３３０−ｂ〜ＰＩＰＥ＿ｐ＿ＣＢフラグ生成部３３０−ｐは、ファームウェアからのFlg_CB_b〜Flg_CB_pをマスクしたFlg_CB_b_new〜Flg_CB_p_newを出力する。
【０１８７】
なお図２４では、ＮＡＫ回数カウンタ３３２−ａを設けているが、これに限定されるものではなく、例えば１回のＮＡＫ応答によりＮＡＫスキップを行う場合には、直接PIPETranCmpNAKとCurrentTgPipe_aとの論理積演算結果を、Ｄフリップフロップの後段のセレクタに入力させるようにしてもよい。
【０１８８】
図２０において、ＣＴＬ／ＢＬＫ転送フラグ生成部３００は、次ＣＴＬ／ＢＬＫ転送パイプ番号選択部３４０を含む。次ＣＴＬ／ＢＬＫ転送パイプ番号選択部３４０は、現トランザクションの次のコントロール転送又はバルク転送のトランザクションを発行すべきパイプ番号を選択する。次ＣＴＬ／ＢＬＫ転送パイプ番号選択部３４０には、Flg_CB_a_new〜Flg_CB_p_newが入力され、Flg_CB_a_new〜Flg_CB_p_newがアサートされているパイプの中から次に転送すべきパイプを決定し、そのパイプ番号を出力する。
【０１８９】
このパイプ番号は、図１９に示すようにスケジューラ２００に供給される。こうしてスケジューラ２００は、少なくとも次のスキップポイントまでマスクされるコントロール転送又はバルク転送の各パイプの転送開始要求フラグと、ファームウェアからのインターラプト転送又はアイソクロナス転送の各パイプの転送開始要求フラグのうち、アサートされたパイプの中から、次に転送すべきパイプを決定する。
【０１９０】
図２６に、ＰＩＰＥ＿ａ＿ＣＢフラグ生成部３３０−ａの動作例のタイミング図を示す。ここでは、ＦＳモードで、パイプａがバルク転送を行うものとする。また、スキップポイントとして、FrameRemain[13:0]のカウント値が９０００、６０００に設定されているものとする。FrameRemain[13:0]は、１フレーム内に１１９９９から０までデクリメントされる。
【０１９１】
ＨＣイネーブル信号HC_Enableがアサートされ、パイプａのＮＡＫスキップモードがオンに設定された状態で、ファームウェアからのFlg_CB_aがアサートされてバルク転送が開始されたものとする。FrameRemain[13:0]のカウント値は最初の１フレームでは自走し、次のフレームが開始されると再び１１９９９から０までデクリメントされる。そして、このフレームにおいて、バルク転送のトランザクションが開始され、このトランザクションについてペリフェラルからのＮＡＫ応答があり、例えばFrameRemain[13:0]のカウント値が１１３３３のときPIPETranCmpNAKがアサートされる。
【０１９２】
SkipPoint_aは、FrameRemain[13:0]のカウント値が９０００又は６０００のところでアサートされる。そのためPIPETranCmpNAKがアサートされてFrameRemain[13:0]のカウント値が９０００となってSkipPoint_aがアサートされるまで、Flg_CB_aをマスクしたFlg_CB_a_newが出力される。
【０１９３】
従って、FrameRemain[13:0]のカウント値が９０００以下になると、パイプａのバルク転送のトランザクションの再送トランザクションの発行が許可されることになる。FrameRemain[13:0]のカウント値が９０００になって、他の転送要求がないものとすると、該再送トランザクションが発行される。
【０１９４】
この再送トランザクションについてもペリフェラルからのＮＡＫ応答があり、例えばFrameRemain[13:0]のカウント値が８３７３のときPIPETranCmpNAKがアサートされると、FrameRemain[13:0]のカウント値が６０００となってSkipPoint_aがアサートされるまでFlg_CB_aをマスクしたFlg_CB_a_newが出力されることとなる。従って、FrameRemain[13:0]のカウント値が６０００以下になると、パイプａのバルク転送のトランザクションの再送トランザクションの発行が許可されることになる。
【０１９５】
図２７に、ＰＩＰＥ＿ａ＿ＣＢフラグ生成部３３０−ａ、ＰＩＰＥ＿ｂ＿ＣＢフラグ生成部３３０−ｂの動作例のタイミング図を示す。ここでは、ＦＳモードで、パイプａ、ｂがバルク転送を行うものとする。また、スキップポイントとして、パイプａ、ｂともに、FrameRemain[13:0]のカウント値が９０００、６０００に設定されているものとする。
【０１９６】
ＨＣイネーブル信号HC_Enableがアサートされ、パイプａ、ｂのＮＡＫスキップモードがオンに設定された状態で、ファームウェアからのFlg_CB_a、Flg_CB_bがアサートされて、パイプａのバルク転送が開始されたものとする。
【０１９７】
そして、パイプａのトランザクションについてペリフェラルからのＮＡＫ応答があり、例えばFrameRemain[13:0]のカウント値が１１３３３のときPIPETranCmpNAKがアサートされる。そのためPIPETranCmpNAKがアサートされてFrameRemain[13:0]のカウント値が９０００となってSkipPoint_aがアサートされるまで、Flg_CB_aをマスクしたFlg_CB_a_newが出力される。従って、FrameRemain[13:0]のカウント値が９０００以下になると、パイプａのバルク転送のトランザクションの再送トランザクションの発行が許可されることになる。
【０１９８】
FrameRemain[13:0]のカウント値が１１３３３のときのPIPETranCmpNAKにより、次にパイプｂのトランザクションが発行される。このトランザクションについてもペリフェラルからのＮＡＫ応答があり、例えばFrameRemain[13:0]のカウント値が１０６６７のときPIPETranCmpNAKがアサートされる。そのためPIPETranCmpNAKがアサートされてFrameRemain[13:0]のカウント値が９０００となってSkipPoint_bがアサートされるまで、Flg_CB_bをマスクしたFlg_CB_b_newが出力される。従って、FrameRemain[13:0]のカウント値が９０００以下になると、パイプｂのバルク転送のトランザクションの再送トランザクションの発行が許可されることになる。
【０１９９】
パイプａの転送がパイプｂの転送よりも優先順位が高く、FrameRemain[13:0]のカウント値が９０００のスキップポイントを経過すると、まずパイプａの再送トランザクションが発行される。この再送トランザクションについてもペリフェラルからのＮＡＫ応答があり、例えばFrameRemain[13:0]のカウント値が８３７３のときPIPETranCmpNAKがアサートされると、FrameRemain[13:0]のカウント値が６０００となってSkipPoint_aがアサートされるまでFlg_CB_aをマスクしたFlg_CB_a_newが出力されることとなる。従って、FrameRemain[13:0]のカウント値が６００以下になると、パイプａのバルク転送のトランザクションの再送トランザクションの発行が許可されることになる。
【０２００】
このようにホストコントローラ５０は、ファームウェアからの転送開始要求をマスクし、マスクした転送開始要求をパイプ間でスケジューリングしてＮＡＫスキップを実現する。
【０２０１】
以下では、データ転送制御装置のその他のブロックについて説明する。
【０２０２】
３．２．３  ＯＴＧコントローラ
図２８に、ＯＴＧコントローラ２０の構成例のブロック図を示す。
【０２０３】
ＯＴＧコントローラ２０は、ＯＴＧレジスタ部２１を含む。このＯＴＧレジスタ部２１は、ＯＴＧコントローラ２０の状態をモニタするためのモニタレジスタや制御レジスタを含む。またファームウェア（ＣＰＵ）により設定されるステートコマンドをデコードする回路を含む。
【０２０４】
ＯＴＧコントローラ２０は、ＯＴＧ制御回路２２を含む。このＯＴＧ制御回路２２は、ステートの管理を行うＯＴＧ管理回路２３、ＩＤピンの電圧レベルを検出するＩＤ検出回路２４、ＶＢＵＳの電圧レベルを検出するＶＢＵＳ検出回路２５を含む。また、トランシーバ１０からのラインステート情報（Ｊ、Ｋ、ＳＥ０等）に基づいて、ＵＳＢバスの状態（リセット、レジューム等）を検出するラインステート検出回路２６を含む。
【０２０５】
またＯＴＧコントローラ２０は、時間計測を行うタイマ２７を含む。ラインステート検出回路２６は、トランシーバ１０からのラインステート情報（Ｊ、Ｋ、ＳＥ０等）と、このタイマ２７の時間計測情報とに基づいて、ＵＳＢ（バス）の状態を検出する。
【０２０６】
ホスト動作のステートや、ペリフェラル動作のステートを遷移させるために検出すべき情報として、ＩＤピンの状態、ＶＢＵＳの電圧レベル、データ信号線ＤＰ、ＤＭのラインステートがある。ＯＴＧコントローラ２０は、これらの情報を、モニタレジスタを介してファームウェア（ＣＰＵ）に伝える。ファームウェアは、これらの情報に基づいて自身のステートを遷移させると共に、遷移先のステートに対応したステートコマンドを制御レジスタに設定することで、遷移先のステートをＯＴＧコントローラ２０に伝える。ＯＴＧコントローラ２０は、ステートコマンドをデコードし、そのデコード結果に基づいて、ＶＢＵＳの電源供給制御、データ信号線ＤＰ（ＤＭ）のプルアップ制御及びプルダウン制御を行い、上述のＳＲＰやＨＮＰの機能を実現する。
【０２０７】
本実施形態では、ステートごとの制御はＯＴＧコントローラ２０が担当し、ファームウェアはステートの遷移管理に専念できる。この結果、すべてのステート制御をファームウェアで実現する場合に比べて、ファームウェア（ＣＰＵ）の処理負荷を軽減し、効率的なファームウェアを提供できる。
【０２０８】
なおステート遷移の判断を、ファームウェアが行わずにハードウェア回路が行うようにしてもよい。或いはＯＴＧコントローラ２０のほとんどの処理（例えばＶＢＵＳの電源供給制御、データ信号線ＤＰ（ＤＭ）のプルアップ制御及びプルダウン制御、ＩＤピンの検出、ラインステート検出以外の処理）をファームウェア（ソフトウェア）により実現してもよい。
【０２０９】
３．２．４  バッファコントローラ
図２９に、バッファコントローラ８０の構成例のブロック図を示す。
【０２１０】
バッファコントローラ８０は、領域確保（allocation）部８２を含む。この領域確保部８２は、バッファ領域（ホスト動作時にパイプ領域に設定され、ペリフェラル動作時にエンドポイント領域に設定される領域）を、パケットバッファ１００に確保する。
【０２１１】
領域確保部８２では、ページサイズとしてのマックスパケットサイズMaxPktSizeと、ページ数BufferPageとにより、バッファ領域の領域サイズ、スタートアドレス、エンドアドレス等が計算される。そして、各バッファ領域の書き込みポインタ、読み出しポインタが、データの転送方向に合わせて、ＤＭＡ用ポインタ、ＣＰＵ用ポインタ、ＵＳＢ用ポインタに割り当てられる。各バッファ領域の書き込みポインタ、読み出しポインタのポインタ情報（位置情報）は、レジスタ部７０の転送条件レジスタ部７２に保持される。転送条件レジスタ部７２は、バッファ領域ごとにポインタ情報を保持する。
【０２１２】
バッファコントローラ８０は、ポインタ管理部８４を含む。このポインタ管理部８４は、上記の各ポインタの更新を行いながら、パケットバッファ１００にアクセスするための実アドレスを生成する。より具体的には、領域確保部８２によって割り当てられた各種ポインタに基づいて、ＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスを生成する。またＣＰＵ（ＣＰＵインターフェース回路）、ＤＭＡ（ＤＭＡハンドラ回路）からのアクセスごとに、或いはＵＳＢ（ＨＣ又はＰＣ）のトランザクション終了（ＡＣＫ、ＮＡＫ等のハンドシェイクパケット送受信）ごとに、ポインタを更新する処理を行う。なお、更新後のポインタの情報は、領域確保部８２を介してレジスタ部７０の転送条件レジスタ部７２に書き戻される。
【０２１３】
バッファコントローラ８０は、バッファ管理部８６を含む。このバッファ管理部８６は、パケットバッファ１００へのアクセスを管理する。バッファ管理部８６は、ポインタ管理部８４からのアドレスを受け、パケットバッファ１００へのデータの入出力や、アドレス、出力イネーブル、ライトイネーブル、リードイネーブル等の出力を行う。
【０２１４】
またバッファ管理部８６は、ＣＰＵ（ＣＰＵインターフェース回路）、ＤＭＡ（ＤＭＡハンドラ回路）、ＵＳＢ（ＨＣ又はＰＣ）からのアクセスを調停する。この調停結果に基づいて、ＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスのいずれかが、パケットバッファ１００のアクセスアドレスとして出力され、ＣＰＵ、ＤＭＡ又はＵＳＢとパケットバッファ１００との間のデータ転送経路が設定される。
【０２１５】
バッファコントローラ８０は、ＨＣ／ＰＣセレクタ８８を含む。このＨＣ／ＰＣセレクタ８８は、バッファ管理部８６とホストコントローラ５０又はペリフェラルコントローラ６０との間の接続の切り替え制御を行う。例えばホスト動作時には、ホストコントローラ５０とバッファ管理部８６とを接続し、ペリフェラル動作時には、ペリフェラルコントローラ６０とバッファ管理部８６とを接続する。なお、この接続の切り替え制御は、ＯＴＧコントローラ２０からのＨＣイネーブル信号（HC_Enable）、ＰＣイネーブル信号（PC_Enable）に基づいて行う。
【０２１６】
バッファコントローラ８０の各部は、ハードウェア回路により実現してもよいし、ファームウェアとハードウェア回路の両方により実現してもよい。
【０２１７】
４．  電子機器
図３０に、本実施形態のデータ転送制御装置を含む電子機器の構成例を示す。この電子機器４００は、本実施形態のデータ転送制御装置４１０、ＡＳＩＣ等で構成されるアプリケーション層デバイス４２０、ＣＰＵ（処理部）４３０、ＲＯＭ４４０、ＲＡＭ４５０、表示部４６０、操作部４７０を含む。なおこれらの機能ブロックの一部を省略する構成としてもよい。
【０２１８】
ここでアプリケーション層デバイス（広義にはデータ転送制御装置４１０及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置）４２０は、例えばハードディスクドライブ、光ディスクドライブ、或いはプリンタを制御するデバイスや、ＭＰＥＧエンコーダ、ＭＰＥＧデコーダ等を含むデバイス等である。ＣＰＵ４３０（処理部）はデータ転送制御装置４１０や電子機器全体の制御を行う。ＲＯＭ４４０は制御プログラムや各種データを記憶する。ＲＡＭ４５０はＣＰＵ４３０やデータ転送制御装置４１０のワーク領域やデータ格納領域として機能する。表示部４６０は種々の情報をユーザに表示する。操作部４７０はユーザが電子機器を操作するためのものである。
【０２１９】
なお図３０ではＤＭＡバスとＣＰＵバスが分離されているが、これらを共通化してもよい。またＣＰＵ４３０をデータ転送制御装置４１０に内蔵させたり、データ転送制御装置４１０を制御するＣＰＵと、電子機器を制御するＣＰＵとを別々に設けてもよい。また本実施形態が適用できる電子機器としては、光ディスクドライブ（ＣＤ−ＲＯＭ、ＤＶＤ）、光磁気ディスクドライブ（ＭＯ）、ハードディスクドライブ、ＴＶ、ＴＶチューナ、ＶＴＲ、ビデオカメラ、オーディオ機器、電話機、プロジェクタ、パーソナルコンピュータ、電子手帳、或いはワードプロセッサ等の種々のものがある。
【０２２０】
なお、本発明は上記の実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０２２１】
例えば、本発明のデータ転送制御装置の構成は図１１等で説明した構成に限定されるものではなく、種々の変形実施が可能である。例えば図１１のＯＴＧコントローラ２０、ＨＣ／ＰＣ切り替え回路３０、ペリフェラルコントローラ６０等の構成が省略され、ペリフェラル機能を持たず簡易ホスト機能だけを持つデータ転送制御装置にも、本発明は適用できる。例えばデータ転送制御装置がＵＳＢ規格のＦＳモードの場合について主に説明したが、ＵＳＢ規格のＬＳモードにも本発明は適用できる。またＵＳＢ規格のＨＳモードにおけるマイクロフレームを、明細書や図面中の記載のフレームに置き換えること、ＵＳＢ規格のＨＳモードにも本発明は適用できる。
【０２２２】
また、明細書や図面中の記載において広義な用語（ステートコントローラ、処理部、転送コントローラ、バス、バッファ領域等）として引用された用語（ＯＴＧコントローラ、ＣＰＵ・ファームウェア、ホストコントローラ・ペリフェラルコントローラ、ＵＳＢ、パイプ領域・エンドポイント領域等）は、明細書や図面中の他の記載においても広義な用語に置き換えることができる。
【０２２３】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【０２２４】
また、上記の実施形態ではＵＳＢのＯＴＧ規格への適用例を説明したが、本発明が適用されるのはＯＴＧ規格に限定されない。例えばＯＴＧ規格と同様の思想に基づく規格やＯＴＧ規格を発展させた規格におけるデータ転送にも本発明は適用できる。
【図面の簡単な説明】
【０２２５】
【図１】図１（Ａ）〜（Ｃ）はＵＳＢのＯＴＧ規格の説明図。
【図２】図２（Ａ）〜（Ｄ）はバルク転送のトランザクションの説明図。
【図３】図３（Ａ）〜（Ｃ）はコントロール転送のトランザクションの説明図。
【図４】図４（Ａ）、（Ｂ）はアイソクロナス転送のトランザクションの説明図。
【図５】トランザクションについてＡＣＫ応答があった場合のタイミング図。
【図６】図６（Ａ）、（Ｂ）は比較例としてトランザクションについてＮＡＫ応答があった場合のタイミング図。
【図７】本実施形態におけるフレーム単位にスキップポイントが設けられた場合の説明図。
【図８】本実施形態におけるフレーム内に複数のスキップポイントが設けられた場合の説明図。
【図９】本実施形態においてトランザクションについてＮＡＫ応答があった場合のタイミングの一例を示す図。
【図１０】本実施形態においてトランザクションについてＮＡＫ応答があった場合のタイミング図の他の例を示す図。
【図１１】本実施形態におけるデータ転送制御装置の構成例のブロック図。
【図１２】図１２（Ａ）、（Ｂ）はパイプ領域、エンドポイント領域の説明図。
【図１３】本実施形態におけるデータ転送制御装置のＮＡＫスキップの動作フローの一例を示す図。
【図１４】ＮＡＫスキップモード設定レジスタ部の構成例を示す図。
【図１５】ＮＡＫ回数設定レジスタ部の構成例を示す図。
【図１６】スキップポイント設定レジスタ部の構成例を示す図。
【図１７】ホストコントローラの構成例のブロック図。
【図１８】ペリフェラルコントローラの構成例のブロック図。
【図１９】ＨＣシーケンス管理部の構成例のブロック図。
【図２０】ＣＴＬ／ＢＬＫ転送フラグ生成部の構成例のブロック図。
【図２１】現ＣＴＬ／ＢＬＫ転送パイプ番号デコード部の動作例を示す図。
【図２２】スキップポイント生成部の構成例のブロック図。
【図２３】スキップポイントの設定例の説明図。
【図２４】ＰＩＰＥ＿ａ＿ＣＢフラグ生成部の構成例のブロック図。
【図２５】ＮＡＫ回数カウンタの構成例のブロック図。
【図２６】ＰＩＰＥ＿ａ＿ＣＢフラグ生成部の動作例のタイミング図。
【図２７】ＰＩＰＥ＿ａ＿ＣＢフラグ生成部、ＰＩＰＥ＿ｂ＿ＣＢフラグ生成部の動作例のタイミング図。
【図２８】ＯＴＧコントローラの構成例のブロック図。
【図２９】バッファコントローラの構成例のブロック図。
【図３０】電子機器の構成例を示す図。
【符号の説明】
【０２２６】
１０  トランシーバ、１２  物理層回路、２０  ＯＴＧコントローラ、
３０  ＨＣ／ＰＣ切り替え回路、３２  ＨＣ／ＰＣセレクタ、
３４  ラインステートコントローラ、４０  転送コントローラ、
５０  ホストコントローラ、６０  ペリフェラルコントローラ、７０  レジスタ部、
７２  転送条件レジスタ部、７４  ＮＡＫスキップモード設定レジスタ部、
７６  ＮＡＫ回数設定レジスタ部、７８  スキップポイント設定レジスタ部、
８０  バッファコントローラ、１００  パケットバッファ、
１１０  インターフェース回路、１１２  ＤＭＡハンドラ回路、
１１４  ＣＰＵインターフェース回路、１２０  クロックコントローラ
【図１】
2005122372.tif 000003
【図２】
2005122372.tif 000004
【図３】
2005122372.tif 000005
【図４】
2005122372.tif 000006
【図５】
2005122372.tif 000007
【図６】
2005122372.tif 000008
【図７】
2005122372.tif 000009
【図８】
2005122372.tif 000010
【図９】
2005122372.tif 000011
【図１０】
2005122372.tif 000012
【図１１】
2005122372.tif 000013
【図１２】
2005122372.tif 000014
【図１３】
2005122372.tif 000015
【図１４】
2005122372.tif 000016
【図１５】
2005122372.tif 000017
【図１６】
2005122372.tif 000018
【図１７】
2005122372.tif 000019
【図１８】
2005122372.tif 000020
【図１９】
2005122372.tif 000021
【図２０】
2005122372.tif 000022
【図２１】
2005122372.tif 000023
【図２２】
2005122372.tif 000024
【図２３】
2005122372.tif 000025
【図２４】
2005122372.tif 000026
【図２５】
2005122372.tif 000027
【図２６】
2005122372.tif 000028
【図２７】
2005122372.tif 000029
【図２８】
2005122372.tif 000030
【図２９】
2005122372.tif 000031
【図３０】
2005122372.tif 000032