(57)【特許請求の範囲】
【請求項１】
ＵＳＢ（Universal Serial Bus）に接続される電子機器に組み込まれ、ＵＳＢを介してデータを送受信するデータ転送制御装置であって、
エンドポイントに対応してパイプ領域をパケットバッファに確保し、パケットバッファに対してアクセス制御を行うバッファコントローラと、
パイプ領域のページサイズとページ数が設定されるレジスタを含むレジスタ部と、
ページサイズとページ数によりその領域サイズが設定されるパイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを転送する転送コントローラとを含み、
前記バッファコントローラは、
所与のデータ単位の転送が終了するとパイプ領域を解放し、
前記パイプ領域が解放された前記パケットバッファに、エンドポイントに対応してパイプ領域を再割り当てすることを特徴とするデータ転送制御装置。
【請求項２】
請求項１において、
ホストの役割として動作するホスト動作のステートと、ペリフェラルの役割として動作するペリフェラル動作のステートを含む複数のステートの制御を行うステートコントローラを含み、
ページサイズとページ数が、ホスト動作時とペリフェラル動作時で共用される共用レジスタに設定されることを特徴とするデータ転送制御装置。
【請求項３】
請求項２において、
ホスト動作時には、
エンドポイントとの間で転送されるデータがパイプ領域に記憶される複数のパイプ領域が、パケットバッファに確保されると共に、パイプ領域のページサイズとページ数が前記共用レジスタに設定され、
ペリフェラル動作時には、
エンドポイントとホストとの間で転送されるデータがエンドポイント領域に記憶される複数のエンドポイント領域が、パケットバッファに確保されると共に、エンドポイント領域のページサイズとページ数が前記共用レジスタに設定されることを特徴とするデータ転送制御装置。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記レジスタ部は、
パイプ領域とエンドポイントとの間でのデータ転送の転送条件情報が設定される転送条件レジスタを含み、
ページサイズとページ数が、前記転送条件情報として前記転送条件レジスタに設定されることを特徴とするデータ転送制御装置。
【請求項５】
請求項４において、
データ転送の転送種別が、前記転送条件情報として前記転送条件レジスタに設定されることを特徴とするデータ転送制御装置。
【請求項６】
請求項４又は５において、
前記転送コントローラは、
前記転送条件レジスタに設定された前記転送条件情報に基づいて、エンドポイントに対するトランザクションを発生し、ページサイズとページ数によりその領域サイズが設定されるパイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを転送することを特徴とするデータ転送制御装置。
【請求項７】
請求項１乃至６のいずれかにおいて、
処理部が、ページサイズとページ数をレジスタ部のレジスタに設定し、パイプ領域の領域確保を指示した場合に、前記バッファコントローラが、ページサイズとページ数によりその領域サイズが設定されるパイプ領域を、パケットバッファに確保することを特徴とするデータ転送制御装置。
【請求項８】
請求項１乃至７のいずれかのデータ転送制御装置と、
前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置と、
前記データ転送制御装置のデータ転送を制御する処理部と、
を含むことを特徴とする電子機器。
【請求項９】
ＵＳＢ（Universal Serial Bus）を介してデータを送受信するためのデータ転送制御方法であって、
エンドポイントに対応してパイプ領域をパケットバッファに確保し、
パイプ領域のページサイズとページ数をレジスタに設定し、
ページサイズとページ数によりその領域サイズが設定されるパイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを転送すると共に、
所与のデータ単位の転送が終了するとパイプ領域を解放し、
前記パイプ領域が解放された前記パケットバッファに、エンドポイントに対応してパイプ領域を再割り当てすることを特徴とするデータ転送制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ転送制御装置、電子機器及びデータ転送制御方法に関する。
【０００２】
【背景技術及び発明が解決しようとする課題】
ＨＳ（High Speed）モードをサポートするＵＳＢ（Universal Serial Bus)２．０の市場が順調に拡大しているなか、ＵＳＢ  Implementers Forum（ＵＳＢ−ＩＦ）によって、ＵＳＢ Ｏｎ−Ｔｈｅ−Ｇｏ（ＯＴＧ）と呼ばれるインターフェース規格が策定された。ＵＳＢ２．０を拡張する形で策定されたＯＴＧ規格（ＯＴＧ１．０）は、ＵＳＢインターフェースの新たな付加価値を生む可能性を秘めており、その特質を生かしたアプリケーションの登場が待たれている。
【０００３】
このＯＴＧによれば、これまでＵＳＢを介してホスト（パーソナルコンピュータ等）に接続されていたペリフェラル（周辺機器）に、ホスト機能を持たせることができる。これにより、ペリフェラル同士をＵＳＢで接続してデータを転送することが可能になり、例えばデジタルカメラとプリンタとをダイレクトに接続して、デジタルカメラの画像を印刷することが可能になる。また、デジタルカメラやデジタルビデオカメラをストレージ装置に接続して、データを保存することが可能になる。
【０００４】
しかしながら、ＯＴＧによりホスト機能を持たせるペリフェラルには、低性能のＣＰＵ（処理部）が組み込まれているのが一般的である。従って、ホスト機能の追加により、ペリフェラルが有するＣＰＵ（ファームウェア）の処理負荷が重くなったり、処理が複雑化すると、他の処理に支障が生じたり、機器の設計期間が長期化するなどの問題が生じる。
【０００５】
また、ＯＴＧによりホスト機能を持たせることで、データ転送制御装置が大規模化してしまうと、データ転送制御装置の高コスト化や、データ転送制御装置が組み込まれる機器（電子機器）の高コスト化等を招く。
【０００６】
また、このようなデータ転送制御装置では、転送データを記憶するパケットバッファが設けられているが、このパケットバッファの相対的な回路規模は一般的に大きい。従って、このパケットバッファのリソースを、如何にして有効活用するかが重要な技術的課題になる。
【０００７】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、パケットバッファのリソースを有効活用できるデータ転送制御装置、電子機器及びデータ転送制御方法を提供することにある。
【０００８】
【課題を解決するための手段】
本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、各エンドポイントに対応して各パイプ領域が確保され、各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域を有するパケットバッファに対して、アクセス制御を行うバッファコントローラと、各パイプ領域のページサイズとページ数が各レジスタに設定される複数のレジスタを含むレジスタ部と、ページサイズとページ数によりその領域サイズが設定されるパイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを転送する転送コントローラとを含むデータ転送制御装置に関係する。
【０００９】
本発明では、パケットバッファに対して複数のパイプ領域（バッファ領域）が確保（allocate）される。この場合に、各パイプ領域は、バスの各エンドポイントに対応して確保される。また、各パイプ領域には、それに対応する各エンドポイントとの間で転送（送信、受信）されるデータが記憶（バッファリング）される。バッファコントローラは、このようなパイプ領域が確保されたパケットバッファ（バッファ）のアクセス制御（領域管理）を行う。
【００１０】
そして本発明では、各パイプ領域の領域サイズを設定するためのページサイズとページ数（バッファ面数）が、レジスタ部の各レジスタ（パイプレジスタ）に設定される。そして、転送コントローラは、各レジスタに設定されたページサイズとページ数により領域サイズが設定されるパイプ領域と、エンドポイントの間で、データを転送する。これにより、パケットバッファのリソースを有効活用してデータ転送を行えるようになる。
【００１１】
また本発明では、ホストの役割として動作するホスト動作のステートと、ペリフェラルの役割として動作するペリフェラル動作のステートを含む複数のステートの制御を行うステートコントローラを含み、ページサイズとページ数が、ホスト動作時とペリフェラル動作時で共用される共用レジスタに設定されるようにしてもよい。
【００１２】
本発明によれば、ホスト動作のステートとペリフェラル動作のステートを持つことが可能になり、いわゆるデュアルロール・デバイス機能を実現できる。そして本発明では、ページサイズとページ数が設定されるレジスタが、ホスト動作時とペリフェラル動作時とで共用される。これにより、ホスト動作とペリフェラル動作の両方の動作を可能にしながらも、レジスタ部のリソースを節約でき、データ転送制御装置の大規模化を最小限に抑えることができる。なお、レジスタ部の少なくとも一部を各ブロックに分散して設けるようにしてもよい。
【００１３】
また本発明では、ホスト動作時には、各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域が、パケットバッファに確保されると共に、各パイプ領域のページサイズとページ数が前記共用レジスタに設定され、ペリフェラル動作時には、各エンドポイントとホストとの間で転送されるデータが各エンドポイント領域に記憶される複数のエンドポイント領域が、パケットバッファに確保されると共に、各エンドポイント領域のページサイズとページ数が前記共用レジスタに設定されるようにしてもよい。
【００１４】
このようにすれば、パケットバッファのバッファ領域を、ホスト動作時にはパイプ領域として使用し、ペリフェラル動作時にはエンドポイント領域として使用できるようになる。これにより、パケットバッファのリソースの有効利用や、処理部の処理負荷の軽減化を図れる。
【００１５】
なお、パイプ領域（バッファ領域）のデータの書き込み、読み出しは、各パイプ領域毎に設定される書き込みポインタ、読み出しポインタを用いて実現できる。そして、書き込みポインタ、読み出しポインタのポインタ情報（位置情報）は、各パイプ領域に対応する各共用レジスタに記憶してもよい。また、バスにデータを送信する送信時と、バスからデータを受信する受信時において、バスからのアクセスに対する書き込みポインタ、読み出しポインタの割り当てと、他のバスからのアクセスに対する書き込みポインタ、読み出しポインタの割り当てとを、異ならせてもよい。
【００１６】
また本発明では、前記レジスタ部が、各パイプ領域と各エンドポイントとの間でのデータ転送の転送条件情報が各転送条件レジスタに設定される複数の転送条件レジスタを含み、ページサイズとページ数が、前記転送条件情報として前記転送条件レジスタに設定されるようにしてもよい。
【００１７】
なお、転送条件レジスタに、ホスト動作時とペリフェラル動作時とで共用される共用転送条件レジスタと、ホスト動作時に使用されるホスト用転送条件レジスタと、ペリフェラル動作時に使用されるペリフェラル用転送条件レジスタを含ませてもよい。この場合には、ページサイズとページ数は、共用転送条件レジスタに設定することが望ましい。
【００１８】
また本発明では、データ転送の転送種別が、前記転送条件情報として前記転送条件レジスタに設定されるようにしてもよい。
【００１９】
このようにすれば、各パイプ領域のデータを、任意の転送種別のデータ転送（例えば、アイソクロナス、インタラプトなどの周期転送、バルク、コントロールなどの非周期転送）で転送できるようになる。
【００２０】
また本発明では、前記転送コントローラが、前記転送条件レジスタに設定された前記転送条件情報に基づいて、エンドポイントに対するトランザクションを自動発生し、ページサイズとページ数によりその領域サイズが設定されるパイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを自動転送してもよい。
【００２１】
このようにすれば、データ転送制御装置の制御等を行う処理部の処理負荷の軽減等を図れる。
【００２２】
また本発明では、処理部が、ページサイズとページ数をレジスタ部のレジスタに設定し、パイプ領域の領域確保を指示した場合に、前記バッファコントローラが、ページサイズとページ数によりその領域サイズが設定される複数のパイプ領域を、パケットバッファに確保してもよい。
【００２３】
このようにすれば、パケットバッファのパイプ領域の領域サイズを動的に変化させることが可能になる。
【００２４】
また本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、ホストとの間で転送されるデータが各エンドポイント領域に記憶される複数のエンドポイント領域を有するパケットバッファに対して、アクセス制御を行うバッファコントローラと、各エンドポイント領域のページサイズとページ数が各レジスタに設定される複数のレジスタを含むレジスタ部と、ページサイズとページ数によりその領域サイズが設定されるエンドポイント領域と、ホストとの間で、データを転送する転送コントローラとを含むデータ転送制御装置に関係する。
【００２５】
本発明では、パケットバッファに対して複数のエンドポイント領域が確保される。この場合に、各エンドポイント領域には、ホストとの間で転送（送信、受信）されるデータが記憶（バッファリング）される。バッファコントローラは、このようなエンドポイント領域が確保されたパケットバッファのアクセス制御（領域管理）を行う。
【００２６】
そして本発明では、各エンドポイント領域の領域サイズを設定するためのページサイズとページ数（バッファ面数）が、レジスタ部の各レジスタ（パイプレジスタ）に設定される。そして、転送コントローラは、各レジスタに設定されたページサイズとページ数により領域サイズが設定されるエンドポイント領域と、ホストとの間で、データを転送する。これにより、パケットバッファのリソースを有効活用してデータ転送を行えるようになる。
【００２７】
また本発明では、前記レジスタ部が、各エンドポイント領域とホストとの間でのデータ転送の転送条件情報が各転送条件レジスタに設定される複数の転送条件レジスタを含み、ページサイズとページ数が、前記転送条件情報として前記転送条件レジスタに設定されるようにしてもよい。
【００２８】
また本発明では、データ転送の転送種別が、前記転送条件情報として前記転送条件レジスタに設定されるようにしてもよい。
【００２９】
このようにすれば、各エンドポイント領域のデータを、任意の転送種別のデータ転送で転送できるようになる。
【００３０】
また本発明では、前記転送コントローラが、前記転送条件レジスタに設定された前記転送条件情報に基づいて、エンドポイント領域とホストとの間で、データを転送してもよい。
【００３１】
また本発明では、処理部が、ページサイズとページ数をレジスタ部のレジスタに設定し、エンドポイント領域の領域確保を指示した場合に、前記バッファコントローラが、ページサイズとページ数によりその領域サイズが設定される複数のエンドポイント領域を、パケットバッファに確保してもよい。
【００３２】
また本発明では、レジスタに設定されるページサイズが、マックスパケットサイズであってもよい。
【００３３】
また本発明は、ＵＳＢ（Universal Serial Bus)のＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格に準拠したデータ転送を行うようにしてもよい。
【００３４】
また本発明は、上記のいずれかのデータ転送制御装置と、前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置と、前記データ転送制御装置のデータ転送を制御する処理部とを含む電子機器に関係する。
【００３５】
また本発明は、バスを介したデータ転送のためのデータ転送制御方法であって、各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域を、パケットバッファに確保し、各パイプ領域のページサイズとページ数を、複数のレジスタの各レジスタに設定し、ページサイズとページ数によりその領域サイズが設定されるパイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを転送するデータ転送制御方法に関係する。
【００３６】
また本発明は、バスを介したデータ転送のためのデータ転送制御方法であって、ホストとの間で転送されるデータが各エンドポイント領域に記憶される複数のエンドポイント領域を、パケットバッファに確保し、各エンドポイント領域のページサイズとページ数を、複数のレジスタの各レジスタに設定し、ページサイズとページ数によりその領域サイズが設定されるエンドポイント領域と、ホストとの間で、データを転送するデータ転送制御方法に関係する。
【００３７】
【発明の実施の形態】
以下、本実施形態について説明する。
【００３８】
なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００３９】
１．ＯＴＧ
まず、ＯＴＧ（ＵＳＢ Ｏｎ−Ｔｈｅ−Ｇｏ）について簡単に説明する。
【００４０】
１．１  Ａデバイス、Ｂデバイス
ＯＴＧでは、コネクタの規格として、図１（Ａ）に示すようなMini-Ａプラグ、Mini-Ｂプラグが定義されている。また、これらのMini-Ａプラグ、Mini−Ｂプラグ（広義にはケーブルの第１、第２のプラグ）の両方を接続できるコネクタとして、Mini-ＡＢレセプタクル（receptacle）が定義されている。
【００４１】
そして例えば図１（Ｂ）のように、ＵＳＢケーブルのMini-Ａプラグに電子機器Ｐが接続され、Mini-Ｂプラグに電子機器Ｑが接続されると、電子機器ＰはＡデバイスに設定され、電子機器ＱはＢデバイスに設定される。一方、図１（Ｃ）に示すように、Mini-Ｂプラグ、Mini-Ａプラグが電子機器Ｐ、Ｑに接続されると、電子機器Ｐ、Ｑは、各々、Ｂデバイス、Ａデバイスに設定される。
【００４２】
Mini-Ａプラグ内ではＩＤピンがＧＮＤに接続されており、Mini-Ｂプラグ内ではＩＤピンはフローティング状態になっている。電子機器は、内蔵するプルアップ抵抗回路を用いて、このＩＤピンの電圧レベルを検出することで、自身がMini-Ａプラグに接続されたのか、或いはMini-Ｂプラグに接続されたのかを判断する。
【００４３】
ＯＴＧでは、Ａデバイス（マスター）が、電源（ＶＢＵＳ）を供給する側（供給元）になり、Ｂデバイス（スレイブ）が、電源の供給を受ける側（供給先）になる。また、Ａデバイスは、デフォルトのステートがホストになり、Ｂデバイスは、デフォルトのステートがペリフェラル（周辺機器）になる。
【００４４】
１．２  デュアルロール・デバイス
ＯＴＧでは、ホスト（簡易ホスト）としての役割とペリフェラルとしての役割の両方を持つことができるデュアルロール・デバイス（Dual-Role Device）が定義されている。
【００４５】
デュアルロール・デバイスは、ホストにもペリフェラルにもなれる。そして、デュアルロール・デバイスに接続された相手が、従来のＵＳＢ規格におけるホストやペリフェラルである場合には、デュアルロール・デバイスの役割は一意に定まる。つまり、接続相手がホストであれば、デュアルロール・デバイスはペリフェラルになり、接続相手がペリフェラルであれば、デュアルロール・デバイスはホストになる。
【００４６】
一方、接続相手がデュアルロール・デバイスである場合には、両方のデュアルロール・デバイスは、お互いにホストとペリフェラルの役割を交換できる。
【００４７】
１．３  ＳＲＰ、ＨＮＰ
デュアルロール・デバイスは、図２（Ａ）、（Ｂ）に示すようなセッション開始要求手順ＳＲＰ（Session Request Protocol）やホスト交換手順ＨＮＰ（Host
Negotiation Protocol）の機能を持つ。
【００４８】
ここでセッション開始要求手順ＳＲＰは、ＢデバイスがＡデバイスに対して、ＶＢＵＳ（電源）の供給を要求するプロトコルである。
【００４９】
バスを使用しない場合にＯＴＧでは、ＡデバイスはＶＢＵＳの供給を停止できる。これにより、Ａデバイスが例えば小型の携帯機器であった場合に、無駄な電力消費を防止できる。そして、ＡデバイスがＶＢＵＳの供給を停止した後に、ＢデバイスがＶＢＵＳを供給してもらいたい場合には、このＳＲＰを使用して、Ａデバイスに対してＶＢＵＳの供給の再開を要求する。
【００５０】
図２（Ａ）にＳＲＰの流れを示す。図２（Ａ）に示すように、Ｂデバイスは、データ・ライン・パルシングとＶＢＵＳパルシングを行うことで、Ａデバイスに対してＶＢＵＳの供給を要求する。そして、ＡデバイスによるＶＢＵＳの供給の開始後に、Ｂデバイスのペリフェラル動作（peripheral operation）と、Ａデバイスのホスト動作（host operation）が開始する。
【００５１】
図１（Ａ）〜図１（Ｃ）で説明したように、デュアルロール・デバイス同士の接続では、Mini-Ａプラグが接続された側であるＡデバイスがデフォルトのホストとなり、Mini-Ｂプラグが接続された側であるＢデバイスがデフォルトのペリフェラルになる。そして、ＯＴＧでは、プラグの抜き差しを行わなくても、ホストとペリフェラルの役割を交換できる。ＨＮＰは、このホストとペリフェラルの役割を交換するためのプロトコルである。
【００５２】
ＨＮＰの流れを図２（Ｂ）に示す。デフォルトのホストとして動作するＡデバイスが、バスの使用を終了すると、バスがアイドル状態になる。その後に、Ｂデバイスがデータ信号線ＤＰ（Ｄ＋）のプルアップ抵抗を無効にすると、ＡデバイスがＤＰのプルアップ抵抗を有効にする。これにより、Ａデバイスの役割はホストからペリフェラルに変わり、ペリフェラルとしての動作を開始する。また、Ｂデバイスの役割はペリフェラルからホストに変わり、ホストとしての動作を開始する。
【００５３】
その後、Ｂデバイスが、バスの使用を終了し、ＡデバイスがＤＰのプルアップ抵抗を無効にすると、Ｂデバイスが、ＤＰのプルアップ抵抗を有効にする。これにより、Ｂデバイスの役割はホストからペリフェラルに戻り、ペリフェラルとしての動作を再開する。また、Ａデバイスの役割はペリフェラルからホストに戻り、ホストとしての動作を再開する。
【００５４】
以上に説明したＯＴＧによれば、携帯電話やデジタルカメラなどの携帯機器をＵＳＢのホストとして動作させ、携帯機器同士をピア・ツー・ピアで接続してデータ転送を行うことが可能になる。これにより、ＵＳＢインターフェースに新たな付加価値を生むことができ、これまでには存在しなかったアプリケーションを創出できる。
【００５５】
２．ＯＨＣＩ
さて、従来のＵＳＢでは、ホストであるパーソナルコンピュータが有するデータ転送制御装置（ホストコントローラ）は、マイクロソフト社が提唱したＯＨＣＩ（Open Host Controller Interface）や、ＵＨＣＩ（Universal Host Controller Interface）といった規格に準拠していた。また、使用されるＯＳ（Operating System）も、マイクロソフト社のWindowsやアップル社のマッキントッシュのＯＳなどに限定されていた。
【００５６】
しかしながら、ＯＴＧのターゲット・アプリケーションである小型携帯機器では、組み込まれるＣＰＵのアーキテクチャや、使用されるＯＳは千差万別である。更に、パーソナルコンピュータのホストコントローラ向けに規格化されたＯＨＣＩやＵＨＣＩは、ＵＳＢホストとしての機能をフルに実装することを前提としており、小型携帯機器への実装に最適であるとは言い難い。
【００５７】
例えば、図３（Ａ）に、ＯＨＣＩで使用されるリスト構造のデスクリプタの一例を示す。
【００５８】
図３（Ａ）において、エンドポイントディスクリプタＥＤ１、ＥＤ２、ＥＤ３は、リンクポインタによりリンクされており、エンドポイント１、２、３とのコミュニケーションに必要な情報が含まれている。そして、これらのＥＤ１、ＥＤ２、ＥＤ３には、転送ディスクリプタＴＤ１１〜ＴＤ１３、ＴＤ２１、ＴＤ３１〜ＴＤ３２がリンクポインタにより更にリンクされている。そして、これらの転送ディスクリプタには、エンドポイント１、２、３との間で転送するパケットデータに必要な情報が含まれている。
【００５９】
図３（Ａ）のリスト構造のディスクリプタは、図３（Ｂ）のＣＰＵ６１０（広義には処理部）上で動作するファームウェア（ホストコントローラ・ドライバ）が作成し、システムメモリ６２０に書き込む。即ち、ファームウェアは、システム中のエンドポイントに対してエンドポイントディスクリプタを割り当て、エンドポイント情報等に基づいてエンドポイントディスクリプタ、転送ディスクリプタを作成する。そして、これらのディスクリプタをリンクポインタでリンクさせて、システムメモリ６２０に書き込む。
【００６０】
データ転送制御装置６００（ホストコントローラ）は、システムメモリ６２０に書き込まれたリスト構造のディスクリプタを読み出し、エンドポイントディスクリプタや転送ディスクリプタに記述される情報に基づいて、データ転送を実行する。
【００６１】
具体的には、データ転送制御装置６００（ホストコントローラ）は、ＥＤ１に基づいてエンドポイント１の情報を設定し、ＥＤ１にリンクされるＴＤ１１に基づいて、エンドポイント１との間でデータ転送を行う。次に、ＥＤ２に基づいてエンドポイント２の情報を設定し、ＥＤ２にリンクされるＴＤ２１に基づいて、エンドポイント２との間でデータ転送を行う。同様にして、データ転送制御装置６００は、ＴＤ３１、ＴＤ１２、ＴＤ３２、ＴＤ１３に基づいてデータ転送を実行する。
【００６２】
インタラプト転送を行う場合には、ＣＰＵ６１０上で動作するファームウェア（ホストコントローラ・ドライバ）は、図４に示すような２分木（binary tree）構造のディスクリプタを作成する。例えば、１ｍｓ毎にインタラプト転送のポーリングを行うエンドポイントについては、そのディスクリプタを図４のプレイスホルダ（placeholder）７００に設定する。同様に、２ｍｓ毎にポーリングを行うエンドポイントについては、そのディスクリプタをプレイスホルダ７０１、７０２に設定し、４ｍｓ毎にポーリングを行うエンドポインタについては、プレイスホルダ７０３、７０４、７０５、７０６に設定する。
【００６３】
そして、ポーリングを行う際には、インタラプトヘッドポインタのインデックスにしたがって、最下位層のプレイスホルダから順に２分木探索を行う。即ち、図４の経路７１０に示すように、まずインデックス０について最下位層から２分木探索を行う。次に、経路７１１に示すように、インデックス１について２分木探索を行う。同様にしてインデックス２〜３１について２分木探索を行う。これにより、プレイスホルダ７００に対応するエンドポイントについては１ｍｓ（１フレーム）毎に、７０１、７０２に対応するエンドポイントについては２ｍｓ毎に、７０３〜７０６に対応するエンドポイントについては４ｍｓ毎にインタラプト転送が行われるようになる。
【００６４】
以上のように、ＯＨＣＩ準拠のデータ転送制御装置（ホストコントローラ）では、ＣＰＵ上で動作するファームウェア（ホストコントローラ・ドライバ）が、図３（Ａ）、図４に示すような複雑な構造のディスクリプタを作成しなければならない。従って、ＣＰＵの処理負荷が非常に重い。
【００６５】
この場合、従来のＵＳＢでは、ホストの役割が割り当てられるのはパーソナルコンピュータだけであり、このパーソナルコンピュータは高性能のＣＰＵを有している。従って、図３（Ａ）、図４に示すような複雑な構造のディスクリプタの作成も、余裕を持って行うことが可能であった。
【００６６】
ところが、ＯＴＧのターゲットアプリケーションである小型携帯機器（デジタルカメラ、携帯電話等）に組み込まれるＣＰＵ（embedded CPU）は、パーソナルコンピュータのＣＰＵに比べて、性能が格段に低いのが一般的である。従って、携帯機器にＯＴＧのホスト動作を行わせると、携帯機器に組み込まれるＣＰＵに過大な負荷がかかり、他の処理に支障が生じたり、データ転送のパフォーマンスが低下するなどの問題が生じる。
【００６７】
３．構成例
図５に、以上のような問題を解決できる本実施形態のデータ転送制御装置の構成例を示す。なお、本実施形態のデータ転送制御装置は、図５の全ての回路ブロックを含む必要はなく、その一部の回路ブロックを省略してもよい。
【００６８】
トランシーバ１０（以下、適宜Ｘｃｖｒと呼ぶ）は、差動データ信号ＤＰ、ＤＭを用いてＵＳＢ（広義にはバス）のデータを送受信する回路であり、ＵＳＢの物理層（ＰＨＹ）回路１２を含む。より具体的にはトランシーバ１０は、ＤＰ、ＤＭのラインステート（Ｊ、Ｋ、ＳＥ０等）の生成、シリアル／パラレル変換、パラレル／シリアル変換、ビットスタッフィング、ビットアンスタッフィング、ＮＲＺＩデコード、ＮＲＺＩエンコードなどを行う。なお、トランシーバ１０をデータ転送制御装置の外部に設けるようにしてもよい。
【００６９】
ＯＴＧコントローラ２０（広義にはステートコントローラ。以下、適宜ＯＴＧＣと呼ぶ）は、ＯＴＧのＳＲＰ機能やＨＮＰ機能（図２（Ａ）、（Ｂ）参照）を実現するための種々の処理を行う。即ち、ＯＴＧコントローラ２０は、ホストの役割として動作するホスト動作のステートや、ペリフェラルの役割として動作するペリフェラル動作のステートなどを含む複数のステートの制御を行う。
【００７０】
より具体的には、ＯＴＧ規格には、デュアルロール・デバイスのＡデバイス時（図１（Ｂ）、（Ｃ）参照）のステート遷移やＢデバイス時のステート遷移が定義されている。ＯＴＧコントローラ２０は、これらのステート遷移を実現するためのステートマシーンを含む。また、ＯＴＧコントローラ２０は、ＵＳＢのデータラインステートや、ＶＢＵＳレベルや、ＩＤピンのステートを検出（監視）する回路を含む。そして、ＯＴＧコントローラ２０が含むステートマシーンは、これらの検出情報に基づいて、そのステート（例えば、ホスト、ペリフェラル、サスペンド又はアイドルなどのステート）を変化させる。この場合のステートの遷移は、ハードウェア回路により実現してもよいし、ファームウェアがステートコマンドをレジスタに設定することで実現してもよい。そして、ステートが遷移すると、ＯＴＧコントローラ２０は、遷移後のステートに基づいて、ＶＢＵＳを制御したり、ＤＰ、ＤＭのプルアップ抵抗／プルダウン抵抗の接続／非接続を制御する。また、ホストコントローラ５０（以下、適宜ＨＣと呼ぶ）、ペリフェラルコントローラ６０（以下、適宜ＰＣと呼ぶ）のイネーブル／ディスエーブルを制御する。
【００７１】
ＨＣ／ＰＣ切り替え回路３０（ＨＣ／ＰＣ・コモン回路）は、トランシーバ１０と、ホストコントローラ５０又はペリフェラルコントローラ６０との間の接続の切り替え制御を行う。また、ＵＳＢのデータ（ＤＰ、ＤＭ）のラインステートの生成の指示をトランシーバ１０に対して行う。なお、接続の切り替え制御は、ＨＣ／ＰＣセレクタ３２により実現され、ラインステートの生成指示は、ラインステートコントローラ３４により実現される。
【００７２】
例えばＯＴＧコントローラ２０が、ホスト動作時（ホストステート時）にＨＣイネーブル信号をアクティブにすると、ＨＣ／ＰＣ切り替え回路３０（ＨＣ／ＰＣセレクタ３２）は、トランシーバ１０とホストコントローラ５０を接続する。一方、ＯＴＧコントローラ２０が、ペリフェラル動作時（ペリフェラルステート時）にＰＣイネーブル信号をアクティブにすると、ＨＣ／ＰＣ切り替え回路３０は、トランシーバ１０とペリフェラルコントローラ６０を接続する。このようにすることで、ホストコントローラ５０とペリフェラルコントローラ６０とを排他的に動作させることが可能になる。
【００７３】
転送コントローラ４０は、ＵＳＢ（広義にはバス）を介したデータ転送を制御する回路であり、ホストコントローラ５０（ＨＣ）とペリフェラルコントローラ６０（ＰＣ）を含む。
【００７４】
ここでホストコントローラ５０は、ホスト動作時（ＯＴＧコントローラ２０からのＨＣイネーブル信号のアクティブ時）に、ホストの役割としてのデータ転送制御を行う回路である。
【００７５】
即ち、ホストコントローラ５０は、ホスト動作時に、ＨＣ／ＰＣ切り替え回路３０によりトランシーバ１０に接続される。そしてホストコントローラ５０は、レジスタ部７０の転送条件レジスタ部７２に設定された転送条件情報に基づいて、エンドポイントに対するトランザクションを自動発生する。そして、パケットバッファ１００に確保（allocate）されたパイプ領域（ＰＩＰＥ０〜ＰＩＰＥｅ。以下、適宜ＰＩＰＥと呼ぶ）と、そのパイプ領域に対応するエンドポイントとの間で、データ（パケット）の自動転送（処理部が介在しないハードウェア回路によるデータ転送）を行う。
【００７６】
より具体的にはホストコントローラ５０は、複数のパイプ転送間の調停、フレームにおける時間管理、転送のスケジューリング、再送の管理などを行う。また、パイプ転送の転送条件情報（オペレーション情報）をレジスタ部７０を介して管理する。また、トランザクションの管理を行ったり、パケットを生成／分解したり、サスペンド／レジューム／リセット状態生成の指示を行う。
【００７７】
一方、ペリフェラルコントローラ６０は、ペリフェラル動作時（ＯＴＧコントローラ２０からのＰＣイネーブル信号のアクティブ時）に、ペリフェラルの役割としてのデータ転送制御を行う回路である。
【００７８】
即ち、ペリフェラルコントローラ６０は、ペリフェラル動作時に、ＨＣ／ＰＣ切り替え回路３０によりトランシーバ１０に接続される。そして、レジスタ部７０の転送条件レジスタ部７２に設定された転送条件情報に基づいて、パケットバッファ１００に確保されたエンドポイント領域（ＥＰ０〜ＥＰｅ。以下適宜ＥＰと呼ぶ）とホストとの間でデータを転送する。
【００７９】
より具体的には、ペリフェラルコントローラ６０は、エンドポイント転送の転送条件情報（オペレーション情報）をレジスタ部７０を介して管理する。また、トランザクションの管理を行ったり、パケットを生成／分解したり、リモート・ウェイクアップ信号生成の指示を行う。
【００８０】
なお、エンドポイントは、ユニークなアドレスを割り当てることができる、ペリフェラル（デバイス）上のポイント（部分）である。ホストとペリフェラル（デバイス）との間でのデータ転送は、全て、このエンドポイントを経由して行われる。また、トランザクションは、トークンパケットと、オプショナルなデータパケットと、オプショナルなハンドシェークパケットにより構成される。
【００８１】
レジスタ部７０は、データ転送（パイプ転送、エンドポイント転送）制御、バッファアクセス制御、バッファ管理、割り込み制御、ブロック制御、或いはＤＭＡ制御などを行うための種々のレジスタを含む。なお、レジスタ部７０が含むレジスタは、ＲＡＭなどのメモリにより実現してもよいし、Ｄフリップフロップなどにより実現してもよい。また、レジスタ部７０のレジスタは、１つにまとめずに、各ブロック（ＨＣ、ＰＣ、ＯＴＧＣ、Ｘｃｖｒ等）に分散して配置してもよい。
【００８２】
レジスタ部７０は、転送条件レジスタ部７２を含む。そして、この転送条件レジスタ部７２は、ホスト動作時にパケットバッファ１００に確保されるパイプ領域（ＰＩＰＥ０〜ＰＩＰＥｅ）とエンドポイントとの間でのデータ転送の転送条件情報（転送制御情報）を記憶するレジスタを含む。これらの各転送条件レジスタは、パケットバッファ１００の各パイプ領域に対応して設けられる。
【００８３】
なお、ペリフェラル動作時には、パケットバッファ１００にはエンドポイント領域（ＥＰ０〜ＥＰｅ）が確保される。そして、転送条件レジスタ部７２に設定された転送条件情報に基づいて、データ転送制御装置とホストとの間でのデータ転送が行われる。
【００８４】
バッファコントローラ８０（ＦＩＦＯマネージャ）は、パケットバッファ１００に対するアクセス（リード／ライト）制御や領域管理を行う。より具体的には、ＣＰＵ（広義には処理部）、ＤＭＡ（Direct Memory Access）、ＵＳＢによるパケットバッファ１００へのアクセス・アドレスを生成・管理する。また、ＣＰＵ、ＤＭＡ、ＵＳＢによるパケットバッファ１００へのアクセスの調停を行う。
【００８５】
例えば、ホスト動作時には、バッファコントローラ８０は、インターフェース回路１１０（ＣＰＵ又はＤＭＡ）とパケットバッファ１００の間のデータ転送経路と、パケットバッファ１００とホストコントローラ５０（ＵＳＢ）の間のデータ転送経路を設定（確立）する。
【００８６】
一方、ペリフェラル動作時には、バッファコントローラ８０は、インターフェース回路１１０（ＣＰＵ又はＤＭＡ）とパケットバッファ１００の間のデータ転送経路と、パケットバッファ１００とペリフェラルコントローラ６０（ＵＳＢ）の間のデータ転送経路を設定する。
【００８７】
パケットバッファ１００（ＦＩＦＯ、パケットメモリ、バッファ）は、ＵＳＢを介して転送されるデータ（送信データ又は受信データ）を一時的に記憶（バッファリング）するものである。このパケットバッファ１００は、例えばＲＡＭ（Random Access Memory）などにより構成できる。なお、パケットバッファ１００をデータ転送制御装置の外部に設けてもよい（外付けメモリにしてもよい）。
【００８８】
ホスト動作時には、パケットバッファ１００はパイプ転送用のＦＩＦＯ（First-In First-Out）として使用される。即ち、パケットバッファ１００には、ＵＳＢ（バス）の各エンドポイントに対応するように、パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅ（広義にはバッファ領域）が確保される。また、各パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅには、それに対応する各エンドポイントとの間で転送されるデータ（送信データ又は受信データ）が記憶される。
【００８９】
一方、ペリフェラル動作時には、パケットバッファ１００はエンドポイント転送用のＦＩＦＯとして使用される。即ち、パケットバッファ１００には、エンドポイント領域ＥＰ０〜ＥＰｅ（広義にはバッファ領域）が確保される。また、各エンドポイント領域ＥＰ０〜ＥＰｅには、ホストとの間で転送されるデータ（送信データ又は受信データ）が記憶される。
【００９０】
なお、パケットバッファ１００に確保されるバッファ領域（ホスト動作時にパイプ領域に設定され、ペリフェラル動作時にエンドポイント領域に設定される領域）は、先に入力された情報が先に出力されるような記憶領域（ＦＩＦＯ領域）に設定されている。
【００９１】
また、ＰＩＰＥ０は、コントロール転送用のエンドポイント０に専用のパイプ領域であり、ＰＩＰＥａ〜ＰＩＰＥｅは、任意のエンドポイントに割り当て可能な汎用のパイプ領域である。
【００９２】
即ち、ＵＳＢでは、エンドポイント０がコントロール転送に専用のエンドポイントに設定される。従って、本実施形態のようにＰＩＰＥ０をコントロール転送に専用のパイプ領域にすることで、ユーザが混乱するのを防止できる。また、ＰＩＰＥａ〜ＰＩＰＥｅを、任意のエンドポイントに割り当て可能なパイプ領域にすることで、エンドポイントに対応するパイプ領域を動的に変化させることが可能になる。これにより、パイプ転送のスケジューリングの自由度を向上でき、データ転送の効率化を図れる。
【００９３】
なお本実施形態では、バッファ領域（パイプ領域又はエンドポイント領域）は、マックスパケットサイズMaxPktSize（広義にはページサイズ）とページ数BufferPageにより、その領域サイズRSizeが設定される（RSize=MaxPktSize×BufferPage）。このようにすることで、バッファ領域の領域サイズや面数（ページ数）を任意に設定できるようになり、パケットバッファ１００のリソースの有効利用を図れる。
【００９４】
インターフェース回路１１０は、ＵＳＢとは異なる他のバスであるＤＭＡ（システムメモリ）バスやＣＰＵバスと、パケットバッファ１００との間でのデータ転送を行うための回路である。このインターフェース回路１１０は、パケットバッファ１００と外部のシステムメモリとの間で、ＤＭＡ転送を行うためのＤＭＡハンドラ回路１１２を含む。また、パケットバッファ１００と外部のＣＰＵとの間で、ＰＩＯ（Parallel I/O）転送を行うためのＣＰＵインターフェース回路１１４を含む。なお、ＣＰＵ（処理部）をデータ転送制御装置に内蔵させてもよい。
【００９５】
クロックコントローラ１２０は、内蔵ＰＬＬ又は外部入力クロックに基づいて、データ転送制御装置の内部で使用する各種のクロックを生成する。
【００９６】
４．パイプ領域
本実施形態では図６（Ａ）に示すように、ホスト動作時に、パケットバッファ１００にパイプ領域ＰＩＰＥ０〜ＰＩＰＥｅが確保（allocate）される。そして、この各パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅとペリフェラルの各エンドポイントの間で、データが転送される。
【００９７】
ここで、本実施形態のパイプ領域の「パイプ」は、ＵＳＢで定義される「パイプ」（デバイス上のエンドポイントとホスト上のソフトウェアとの間の関連を表す論理的な抽象化、論理的な経路）とは若干意味合いが異なる。
【００９８】
本実施形態のパイプ領域は、図６（Ａ）に示すように、ＵＳＢ（バス）に接続されるペリフェラルが有する各エンドポイントに対応して、パケットバッファ１００上に確保される。例えば図６（Ａ）において、パイプ領域ＰＩＰＥａはペリフェラル１のエンドポイント１（バルクＩＮ）に対応し、ＰＩＰＥｂはペリフェラル１のエンドポイント２（バルクＯＵＴ）に対応する。また、ＰＩＰＥｃはペリフェラル２のエンドポイント１（バルクＩＮ）に対応し、ＰＩＰＥｄはペリフェラル２のエンドポイント２（バルクＯＵＴ）に対応する。また、ＰＩＰＥｅはペリフェラル３のエンドポイント１（インタラプトＩＮ）に対応する。なお、ＰＩＰＥ０は、コントロール転送のエンドポイント０に専用のパイプ領域である。
【００９９】
そして図６（Ａ）の例では、パイプ領域ＰＩＰＥａとペリフェラル１のエンドポイント１との間でＵＳＢのバルクＩＮ転送が行われ、ＰＩＰＥｂとペリフェラル１のエンドポイント２との間ではバルクＯＵＴ転送が行われる。また、ＰＩＰＥｃとペリフェラル２のエンドポイント１との間ではバルクＩＮ転送が行われ、ＰＩＰＥｄとペリフェラル２のエンドポイント２との間ではバルクＯＵＴ転送が行われる。また、ＰＩＰＥｅとペリフェラル３のエンドポイント１との間ではインタラプトＩＮ転送が行われる。
【０１００】
このように本実施形態では、パイプ領域（汎用）とそれに対応するエンドポイントとの間では、任意のデータ転送（アイソクロナス転送、バルク転送、インタラプト転送）を行うことができる。
【０１０１】
そして本実施形態では、パイプ領域とそれに対応するエンドポイントの間では、所与のデータ単位（トータルサイズで指定されるデータ単位）のデータが転送される。この場合のデータ単位としては、例えばＩＲＰ（Ｉ／Ｏリクエストパケット）により転送要求されるデータ単位又はそれを適当なサイズに分割したデータ単位などを考えることができる。エンドポイントに対するこのデータ単位のデータ転送（一連のトランザクション）を、本実施形態における「パイプ」と呼ぶことができる。そして、そのような「パイプ」のデータ（送信データ、受信データ）を記憶する領域がパイプ領域になる。
【０１０２】
パイプ領域を用いた所与のデータ単位の転送が終了すると、そのパイプ領域は解放することができる。そして、解放されたパイプ領域は、任意のエンドポイントに割り当てることができる。このように本実施形態では、パイプ領域とエンドポイントとの対応づけを、動的に変化させることができる。
【０１０３】
また本実施形態では図６（Ｂ）に示すように、ペリフェラル動作時には、パケットバッファ１００にエンドポイント領域ＥＰ０〜ＥＰｅが確保（設定）される。そして、この各エンドポイント領域ＥＰ０〜ＥＰｅとホスト（ホストコントローラ、システムメモリ）との間で、データが転送される。
【０１０４】
このように本実施形態では、パケットバッファ１００のバッファ領域を、ホスト動作時にはパイプ領域に割り当て、ペリフェラル動作時にはエンドポイント領域に割り当てている。これにより、ホスト動作時とペリフェラル動作時とでパケットバッファ１００のリソースを共用（兼用）することが可能になり、パケットバッファ１００の使用記憶容量を節約できる。
【０１０５】
なおパイプ領域、エンドポイント領域の個数は６個に限定されず任意である。
【０１０６】
５．マックスパケットサイズ、ページ数による領域サイズの設定
さて、データ転送制御装置の使用状況はユーザによって様々である。即ち、転送目的、転送種別、同時転送数、ＣＰＵの能力、ＤＭＡ転送の使用の有無、ＵＳＢ処理に割り当てることができる処理の割合などは、データ転送制御装置を使用するユーザによって異なる。そして、データの転送サイズや転送負荷が大きい場合には、パケットバッファのバッファ領域（以下、適宜、パイプ領域又はエンドポイント領域をバッファ領域と総称する）の領域サイズを、なるべく大きくすることが望ましい。逆に、データの転送サイズや転送負荷が小さい場合には、バッファ領域の領域サイズはそれほど大きくしなくてもよい。
【０１０７】
例えば図７（Ａ）では、パケットバッファによりアイソクロナスデータをバッファリングしている。ここで、ＵＳＢにおいては、アイソクロナスデータのマックスパケットサイズは、最大で１０２４バイトに設定できる。従って、例えばアイソクロナスデータを、いわゆるダブルバッファ方式でバッファリングする場合には、パケットバッファに１０２４×２＝２０４８バイトのバッファ領域を確保する必要がある。このため、アイソクロナス転送を使用するユーザに対応するためには、パケットバッファのサイズを、２０４８バイト以上にすることが望ましく、マージンを考慮すれば、例えば２．５ｋバイト程度にすることが望ましい。
【０１０８】
ところが、アイソクロナス転送に対応できるように図７（Ａ）に示すようにパケットバッファのサイズ（容量）を大きくすると、アイソクロナス転送を用いない場合には、図７（Ｂ）のＡ１に示す無駄な未使用領域が生じてしまう。即ち、コントロール用、アイソクロナス用、バルク用、インタラプト用のバッファ領域というように、各転送種別に専用の固定サイズのバッファ領域を確保する手法では、図７（Ｂ）のＡ１に示すような無駄な未使用領域が生じてしまう。このため、パケットバッファのリソースを有効活用できないという課題があった。
【０１０９】
そこで本実施形態では、バッファ領域（パイプ領域又はエンドポイント領域）の領域サイズや面数（ページ数）を任意に設定する手法を採用している。
【０１１０】
具体的には図８に示すように、パケットバッファ１００の各バッファ領域ＰＩＰＥ０／ＥＰ０〜ＰＩＰＥｅ／ＥＰｅ（以下、適宜、ＰＩＰＥ／ＥＰ０〜ｅと表す）のマックスパケットサイズＭＰＳ０〜ＭＰＳｅ（MaxPktSize0〜e、広義にはページサイズ）とページ数ＢＰ０〜ＢＰｅ（BufferPage0〜e）を設定できるレジスタを設ける。このＭＰＳ０〜ＭＰＳｅ、ＢＰ０〜ＢＰｅのレジスタへの設定は、例えばファームウェア（処理部）が行う。そして、これらのＭＰＳ０〜ＭＰＳｅとＢＰ０〜ＢＰｅにより、その領域サイズＲＳ０〜ＲＳｅ（RSize0〜ｅ）が設定されるバッファ領域ＰＩＰＥ／ＥＰ０〜ｅを、パケットバッファ１００に確保する。この領域確保は、例えばバッファコントローラ８０（領域確保回路）が行う。そして転送コントローラ４０（ホストコントローラ５０、ペリフェラルコントローラ６０）は、設定された領域サイズＲＳ０（＝ＭＰＳ０×ＢＰ０）〜ＲＳｅ（＝ＭＰＳｅ×ＢＰｅ）のバッファ領域ＰＩＰＥ／ＥＰ０〜ｅを用いて、パケットのデータを転送する。
【０１１１】
なお、本実施形態では図８に示すように、ＭＰＳ０〜ＭＰＳｅ、ＢＰ０〜ＢＰｅ以外にも、各バッファ領域ＰＩＰＥ／ＥＰ０〜ｅの転送種別ＴＴ０〜ＴＴｅ（TranType0〜ｅ）もレジスタに設定できる。これにより、各バッファ領域ＰＩＰＥ／ＥＰ０〜ｅの転送種別（アイソクロナス、バルク、インタラプト又はコントロール等）が固定化されずに、各バッファ領域毎に任意の転送種別を設定できるようになる。また、バッファ領域への転送種別の割り当てを動的に変化させることも可能になる。
【０１１２】
例えば図９（Ａ）では、バッファ領域ＰＩＰＥａ／ＥＰａのＭＰＳａが、アイソクロナス転送のマックスパケットサイズの最大値である１０２４バイトに設定され、ＢＰａが２ページに設定されている。これにより、領域サイズがＲＳａ＝１０２４×２＝２０４８バイトに設定されたバッファ領域ＰＩＰＥａ／ＥＰａをパケットバッファ１００に確保して、ＰＩＰＥａ／ＥＰａを用いてダブルバッファ方式でアイソクロナス転送を行うことが可能になる。
【０１１３】
なお、バッファ領域ＰＩＰＥａ／ＥＰａをトリプルバッファ以上に設定する場合には、マックスパケットサイズＭＰＳａを小さくすると共に、ページ数ＢＰａを３ページ以上に設定すればよい。
【０１１４】
一方、図９（Ｂ）では、バッファ領域ＰＩＰＥａ／ＥＰａ、ＰＩＰＥｂ／ＥＰｂのＭＰＳａ、ＭＰＳｂが、バルク転送のマックスパケットサイズの最大値である６４バイトに設定され、ページ数ＢＰａ、ＢＰｂが１６ページに設定されている。これにより、領域サイズがＲＳａ＝ＲＳｂ＝６４×１６＝１０２４バイトに設定されたバッファ領域ＰＩＰＥａ／ＥＰａ、ＰＩＰＥｂ／ＥＰｂをパケットバッファ１００に確保して、バルク転送を行うことが可能になる。
【０１１５】
即ち、ＵＳＢにおいては、バルク転送のマックスパケットサイズを６４バイトよりも大きくすることができない。このため、図７（Ａ）、（Ｂ）のように転送種別毎に専用のバッファ領域を確保する手法を採用すると、アイソクロナス転送の非使用時に、図７（Ｂ）のＡ１に示すような無駄な未使用領域が生じてしまう。
【０１１６】
これに対して本実施形態では、図９（Ｂ）に示すように、アイソクロナス転送の非使用時にも、バルク転送のバッファ領域のページ数（面数）を大きな値に設定することで、無駄な未使用領域が生じるのを防止できる。これにより、パケットバッファ１００のリソースを有効利用できると共に、ファームウェアの処理負荷の軽減化やデータ転送の効率化等が可能になる。
【０１１７】
なお、図９（Ｂ）においてＰＩＰＥａ／ＥＰａの転送方向をＩＮに設定し、ＰＩＰＥｂ／ＥＰｂの転送方向をＯＵＴに設定すれば、バルクＩＮ転送とバルクＯＵＴ転送を同時に行うことが可能になる。この転送方向も、マックスパケットサイズ、ページ数、転送種別と同様に、各バッファ領域毎に設けられるレジスタに設定することが望ましい。
【０１１８】
また本実施形態では、図１０に示すように、マックスパケットサイズＭＰＳ０〜ＭＰＳｅとページ数ＢＰ０〜ＢＰｅが、ホスト動作時とペリフェラル動作時で共用される共用レジスタに設定される。
【０１１９】
より具体的には、ホスト動作時には、図６（Ａ）に示すように、パケットバッファ１００にパイプ領域ＰＩＰＥ０〜ＰＩＰＥｅが確保される。そして図１０に示すように、これらの各パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅの領域サイズは、共用レジスタのマックスパケットサイズＭＰＳ０〜ＭＰＳｅとページ数ＢＰ０〜ＢＰｅにより設定される。
【０１２０】
一方、ペリフェラル動作時には、図６（Ｂ）に示すように、パケットバッファ１００にエンドポイント領域ＥＰ０〜ＥＰｅが確保される。そして図１０に示すように、これらの各エンドポイント領域ＥＰ０〜ＥＰｅの領域サイズも、共用レジスタのマックスパケットサイズＭＰＳ０〜ＭＰＳｅとページ数ＢＰ０〜ＢＰｅにより設定される。
【０１２１】
このようにすることで、ホスト動作用のレジスタとペリフェラル動作用のレジスタを別々に設ける手法に比べて、レジスタ部７０の回路規模を小さくでき、レジスタ部７０のリソースを節約できる。また、ファームウェア（処理部）は、共用アドレスを同一アドレスで管理できるため、ファームウェアのアドレス管理を簡素化でき、ファームウェアの処理負荷を軽減できる。
【０１２２】
なお、図１０の共用レジスタには、マックスパケットサイズやページ数以外にも、転送種別（アイソクロナス、バルク、インタラプト又はコントロール等）や転送方向（ＩＮ、ＯＵＴ）を設定することが望ましい。このようにすることで、レジスタ部７０を更に小規模化できると共に、ファームウェアの処理負荷を更に軽減できる。
【０１２３】
以上のように本実施形態では、エンドポイント毎に、マックスパケットサイズのバッファ領域を、任意の面数（ダブルバッファ、トリプルバッファ等）で確保できる。即ち、ファームウェアが、マックスパケットサイズＭＰＳ（ページサイズ）とページ数ＢＰ（バッファ面数）をレジスタに設定するだけで、ＭＰＳとＢＰの積で設定される領域サイズのバッファ領域が、エンドポイント毎に確保される。
【０１２４】
このように、バッファ領域の領域サイズやページ数（面数）を任意に設定できることで、エンドポイントの個数が少ない場合には、一つのエンドポイントに対して大きなサイズのバッファ領域を確保し、逆に、エンドポイントの個数が多い場合には、１つのリソース（パケットバッファ）を分配して領域を確保することが可能となる。また、高い転送効率が求められる高負荷のエンドポイントと、高い転送効率が求められない低負荷のエンドポイントが存在する場合に、低負荷のエンドポイントのバッファ領域を縮小することで、余った領域を、高負荷のエンドポイントに配分することが可能になる。このように、本実施形態によれば、状況に応じてパケットバッファのリソースを効率よく分配して使用することが可能になり、ＣＰＵのタスク処理や稼働時間に自由度を持たせることが可能になる。
【０１２５】
６．領域確保処理
次に、領域確保の具体的な処理について図１１のフローチャートを用いて説明する。
【０１２６】
まず、ファームウェアが、使用する各バッファ領域ＰＩＰＥ／ＥＰのマックスパケットサイズ［MaxPktSize］とそのページ数［BufferPage］を設定する（ステップＳ９１）。そして、ファームウェア（処理部）がバッファ領域確保の指示［SetAllocation］を行う（ステップＳ９２）。なお図１２（Ａ）には、ファームウェアによる［MaxPktSize］、［BufferPage］の設定例が示され、図１２（Ｂ）には、図１２（Ａ）の設定により確保される領域の例が示される。
【０１２７】
次に、バッファコントローラ８０（領域確保回路）が、ベースアドレス（0x0000）に対して、バッファ領域のＰＩＰＥ０／ＥＰ０の［MaxPktSize］×［BufferPage］を加算し、ＰＩＰＥ０／ＥＰ０のエンドアドレスを求める（ステップＳ９３）。
【０１２８】
例えば図１２（Ｂ）では、（0x0000）に［MaxPktSize］×［BufferPage］を加算することで、ＰＩＰＥ０／ＥＰ０のエンドアドレスＥＡＤ０＝（0x0008）が求められる。そして、このエンドアドレスＥＡＤ０は、次のＰＩＰＥ０／ＥＰ０のスタートアドレスＳＡＤａになる。
【０１２９】
次に、直前のパイプ領域ＰＩＰＥ／ＥＰのエンドアドレスをベースアドレスとして、そのベースアドレスに［MaxPktSize］×［BufferPage］を加算することで、当該ＰＩＰＥ／ＥＰのエンドアドレスを算出する（ステップＳ９４）。そして、このステップＳ９４の処理を、ＰＩＰＥ／ＥＰａ〜ｅの順で行う（ステップＳ９５）。そして、SetAllocationビットがクリアされ、ＦＩＦＯデータがクリアされ［FIFOClr］、FIFOClrビットがクリアされる（ステップＳ９６、Ｓ９７、Ｓ９８）。
【０１３０】
以上により図１２（Ｂ）に示すようにパケットバッファ１００にバッファ領域を確保できる。なお、図１２（Ｂ）のＡ２では、バッファ領域ＰＩＰＥｃ／ＥＰｃのマックスパケットサイズ、ページ数のいずれか一方が零に設定されており、この場合には、ＰＩＰＥｃ／ＥＰｃは確保されないことになる。
【０１３１】
７．転送条件レジスタ（共用レジスタ）
本実施形態では図１３に示すように、ホスト動作時には、パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅとエンドポイントとの間で行われるデータ転送の転送条件情報（転送方向、転送種別、マックスパケットサイズ又はページ数等）が、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定される。即ち、ＰＩＰＥ０、ＰＩＰＥａ、ＰＩＰＥｂ、ＰＩＰＥｃ、ＰＩＰＥｄ、ＰＩＰＥｅの転送条件情報は、各々、ＴＲＥＧ０、ＴＲＥＧａ、ＴＲＥＧｂ、ＴＲＥＧｃ、ＴＲＥＧｄ、ＴＲＥＧｅに設定（記憶）される。この設定は、例えばファームウェア（ＣＰＵ）により行われる。
【０１３２】
そしてホストコントローラ５０（広義には転送コントローラ）は、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定された転送条件情報に基づいて、エンドポイントに対するトランザクションを発生する。そして、パイプ領域とそれに対応するエンドポイントとの間で、データ（パケット）を自動転送する。
【０１３３】
このように本実施形態では、各パイプ領域（バッファ領域）に対応して各転送条件レジスタが設けられ、この各転送条件レジスタに設定された転送条件情報に基づいて、各パイプ領域のパイプ転送（所与のデータ単位の転送）がホストコントローラ５０により自動的に行われる。従って、ファームウェア（ドライバ、ソフトウェア）は、転送条件レジスタに転送条件情報を設定した後は、データ転送が完了するまで、データ転送制御に関わらなくて済むようになる。そして、所与のデータ単位のパイプ転送が完了すると割り込みが発生し、転送の完了がファームウェアに伝えられる。これにより、ファームウェア（ＣＰＵ）の処理負荷を格段に低減できる。
【０１３４】
なお、本実施形態では図１４に示すようにペリフェラル動作時には、エンドポイント領域ＥＰ０〜ＥＰｅとホストとの間で行われるデータ転送の転送条件情報（転送方向、転送種別、マックスパケットサイズ又はページ数等）が、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定される。そしてペリフェラルコントローラ６０（広義には転送コントローラ）は、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定された転送条件情報に基づいて、エンドポイント領域とホストとの間でのデータ転送を行う。
【０１３５】
このように本実施形態では、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅが、ホスト動作時とペリフェラル動作時とで共用（兼用）される。これにより、レジスタ部７０のリソースを節約でき、データ転送制御装置を小規模化できる。
【０１３６】
図１５に、レジスタ部７０のレジスタ構成例を示す。なお、レジスタ部７０のレジスタの一部を、各ブロック（ＯＴＧＣ、ＨＣ、ＰＣ、Ｘｃｖｒ等）内に含ませてもよい。
【０１３７】
図１５に示すように、レジスタ部７０の転送条件レジスタ（ＴＲＥＧ０〜ＴＲＥＧｅの各々）は、ホスト動作時（ＨＣ、ＰＩＰＥ）とペリフェラル動作時（ＰＣ、ＥＰ）で共用されるＨＣ／ＰＣ共用レジスタ（共用転送条件レジスタ）を含む。また、ホスト動作時にのみ使用されるＨＣ（ＰＩＰＥ）用レジスタ（ホスト用転送条件レジスタ）を含む。また、ペリフェラル動作時にのみ使用されるＰＣ（ＥＰ）用レジスタ（ペリフェラル用転送条件レジスタ）を含む。また、パケットバッファ（ＦＩＦＯ）のアクセス制御などを行うためのレジスタであり、ホスト動作時とペリフェラル動作時で共用されるアクセス制御レジスタを含む。
【０１３８】
例えば、デュアルロール・デバイスのホスト動作時に、ホストコントローラ５０（ＨＣ）は、ＨＣ／ＰＣ共用レジスタとＨＣ用レジスタに設定される転送条件情報に基づいて、データ（パケット）を転送する。
【０１３９】
一方、ペリフェラル動作時には、ペリフェラルコントローラ６０（ＰＣ）は、ＨＣ／ＰＣ共用レジスタとＰＣ用レジスタに設定される転送条件情報に基づいて、データ（パケット）を転送する。
【０１４０】
また、ホスト動作時、ペリフェラル動作時の両方において、バッファコントローラ８０は、共用アクセス制御レジスタに基づいて、パケットバッファ１００へのアクセス制御（リード／ライト・アドレスの発生、データのリード／ライト、アクセスの調停等）を行うことになる。
【０１４１】
図１５のＨＣ／ＰＣ共用レジスタには、データの転送方向（ＩＮ、ＯＵＴ又はＳＥＴＵＰ等）、転送種別（アイソクロナス、バルク、インタラプト、コントロールなどのトランザクションの種別）、エンドポイント番号（各ＵＳＢデバイスのエンドポイントに関連づけられる番号）、マックスパケットサイズ（エンドポイントが送信又は受信可能なパケットの最大ペイロードサイズ。ページサイズ）が設定される。また、バッファ領域（パイプ領域、エンドポイント領域）のページ数（バッファ領域の面数）が設定される。また、ＤＭＡ接続の有無（図５のＤＭＡハンドラ回路１１２によるＤＭＡ転送の使用の有無）を指示する情報が設定される。
【０１４２】
ＨＣ（ＰＩＰＥ）用レジスタには、インタラプト転送のトークン発行周期（インタラプト・トランザクションを起動する周期、インターバル）が設定される。また、トランザクションの連続実行回数（パイプ領域間の転送比率を設定する情報。各パイプ領域のトランザクションの連続実行回数）が設定される。また、ファンクションアドレス（エンドポイントを有するファンクションのＵＳＢアドレス）、転送データのトータルサイズ（各パイプ領域を介して転送されるデータのトータルサイズ。ＩＲＰなどのデータ単位）が設定される。また、自動トランザクションの開始指示（ホストコントローラに対する自動トランザクション処理の開始指示）が設定される。また、自動コントロール転送モードの指示（コントロール転送のセットアップステージ、データステージ、ステータスステージのトランザクションを自動発生するモードの指示）が設定される。
【０１４３】
ＰＣ（ＥＰ）用レジスタには、エンドポイントイネーブル（エンドポイントのイネーブルやディスエーブルの指示）、ハンドシェーク指定（各トランザクションで行われるハンドシェークの指定）が設定される。
【０１４４】
パケットバッファ（ＦＩＦＯ）用の共用アクセス制御レジスタには、バッファ・Ｉ／Ｏポート（ＣＰＵによりＰＩＯ転送を行う場合のＩ／Ｏポート）が設定される。また、バッファ・フル／エンプティ（各バッファ領域のフル、エンプティの通知）、バッファ・残りデータサイズ（各バッファ領域の残りデータサイズ）が設定される。
【０１４５】
レジスタ部７０は、インタラプト系レジスタ、ブロック系レジスタ、ＤＭＡ制御レジスタなども含む。
【０１４６】
インタラプト系レジスタは、割り込みのステータス（要因）をＣＰＵに対して示すためのインタラプト・ステータスレジスタ、割り込みのイネーブル、ディスエーブル（非マスク、マスク）を設定するインタラプト・イネーブルレジスタを含む。なお、割り込みには、ＯＴＧコントローラ２０系、ホストコントローラ５０系、ペリフェラルコントローラ６０系の割り込みがある。
【０１４７】
ブロック系レジスタは、ブロック間で共用されるブロック間共用レジスタや、各ブロック（Ｘｃｖｒ、ＯＴＧＣ、ＨＣ、ＰＣ）内で使用されるブロック用レジスタを含む。
【０１４８】
ブロック間共用レジスタには、各ブロックのリセットを指示するレジスタなどがある。ブロック用レジスタには、トランシーバ１０（Ｘｃｖｒ）を制御するためのレジスタや、ＯＴＧコントローラ２０（ＯＴＧＣ）のステートコマンドレジスタや、ホストコントローラ５０（ＨＣ）のステートコマンドレジスタや、フレーム番号を設定するレジスタなどがある。
【０１４９】
以上のように本実施形態では、ホスト動作時とペリフェラル動作時で共用されるレジスタ（ＨＣ／ＰＣ共用レジスタ、共用アクセス制御レジスタ）をレジスタ部７０に設けている。これにより、ホスト動作時用のレジスタとペリフェラル動作時用のレジスタを全く別個に設ける場合に比べて、レジスタ部７０を小規模化できる。また、ＣＰＵ上で動作するファームウェア（ドライバ）から見た共用レジスタのアクセスアドレスを、ホスト動作時とペリフェラル動作時とで同一にできる。従って、ファームウェアは、これらの共用レジスタを同一アドレスで管理できるようになり、ファームウェア処理を簡素化できる。
【０１５０】
また、ＨＣ用レジスタや、ＰＣ用レジスタを設けることで、ホスト動作時（ＰＩＰＥ）の転送やペリフェラル動作時（ＥＰ）の転送に特有の転送条件を設定できる。例えば、トークン発行周期を設定することで、図４で説明した手法を用いることなく、ホスト動作時にインタラプト転送のトークンを所望の周期で発行することが可能になる。また、連続実行回数を設定することで、ホスト動作時にパイプ領域間の転送比率を任意に設定できる。また、トータルサイズを設定することで、ホスト動作時にパイプ領域を介して自動転送されるデータのサイズを任意に設定できる。またファームウェアは、ホスト動作時に、自動トランザクションの開始を指示したり、自動コントロール転送モードのオン／オフを指示できるようになる。
【０１５１】
８．自動トランザクション
図１６に、ホストコントローラ５０の自動トランザクション（ＩＮ、ＯＵＴ）処理時におけるファームウェア処理のフローチャート例を示す。
【０１５２】
まず、ファームウェア（処理部、ドライバ）は、図１５等で説明した転送条件レジスタに転送条件情報（パイプ情報）を設定する（ステップＳ１）。より具体的には、転送データのトータルサイズ、マックスパケットサイズ（MaxPktSize）、ページ数（BufferPage）、転送方向（ＩＮ、ＯＵＴ又はＳＥＴＵＰ）、転送種別（アイソクロナス、バルク、コントロール、インタラプト）、エンドポイント番号、パイプ領域のトランザクションの連続実行回数（転送比率）、インタラプト転送のトークン発行周期などを、転送条件レジスタに設定する。
【０１５３】
次に、外部のシステムメモリとパケットバッファ１００の間に転送経路を設定する（ステップＳ２）。即ち図５のＤＭＡハンドラ回路１１２を介したＤＭＡ転送経路を設定する。
【０１５４】
次に、ファームウェアは、ＤＭＡ転送の開始指示を行う（ステップＳ３）。即ち、図１５のＤＭＡ制御レジスタのＤＭＡ転送開始指示ビットをアクティブにする。なお、ＣＰＵによる転送では、図１５のバッファ・Ｉ／Ｏポートにアクセスすることで、パケットバッファ１００にアクセスすることが可能になる。
【０１５５】
次に、ファームウェアは、自動トランザクションの開始指示を行う（ステップＳ４）。即ち、図１５のＨＣ用レジスタ（パイプレジスタ）の自動トランザクション開始指示ビットをアクティブにする。これにより、ホストコントローラ５０による、自動トランザクション処理、パケット処理（パケットの生成、分解）、スケジューリング処理が行われる。即ち、ホストコントローラ５０は、トータルサイズで指定されるデータを、マックスパケットサイズのペイロードのパケットを用いて、転送方向で指定される方向（ＩＮ、ＯＵＴ）で、自動転送する。
【０１５６】
なお、ステップＳ３、Ｓ４の処理の順序は問わず、自動トランザクション開始指示の後にＤＭＡ転送の開始指示を行ってもよい。
【０１５７】
次に、ファームウェアは、パイプ転送の完了を知らせる割り込みが発生するのを待つ（ステップＳ５）。そして、割り込みが発生すると、ファームウェアは、図１５のインタラプト系レジスタの割り込みステータス（要因）を調べる。そして、処理が正常完了又はエラー終了する（ステップＳ６）。
【０１５８】
このように本実施形態によれば、ファームウェアは、各パイプ領域毎に転送条件情報を設定し（ステップＳ１）、ＤＭＡ転送開始の指示（ステップＳ３）と自動トランザクション開始の指示（ステップＳ４）を行うだけで、その後のデータ転送処理はホストコントローラ５０のハードウェア回路により自動的に行われるようになる。従って、図３（Ａ）、（Ｂ）、図４で説明したＯＨＣＩ準拠の手法に比べて、ファームウェアの処理負荷が軽減され、低性能のＣＰＵが組み込まれる携帯機器に最適なデータ転送制御装置を提供できる。
【０１５９】
図１７、図１８に、ホストコントローラ５０による自動トランザクション処理時の信号波形例を示す。なお、これらの図において、「Ｈ→Ｐ」は「ホストからペリフェラルにパケットが転送されること」を表し、「Ｐ→Ｈ」は「ペリフェラルからホストにパケットが転送されること」を表す。
【０１６０】
図１７は、ＩＮトランザクションの場合（転送種別がＩＮの場合）の信号波形例である。
【０１６１】
図１６のステップＳ４で、ファームウェアが自動トランザクションの開始指示を行うと、図１７のＣ１に示すように、PipeXTranGo（PipeXについてのファームウェアからの転送要求信号）がアクティブになる。これにより、そのPipeX（Ｘ＝０〜ｅ）についての、ホストコントローラ５０による自動トランザクション処理が開始する。
【０１６２】
そして、Ｃ２に示すようにPipeTranGo（ホストコントローラ５０内のＨＣシーケンス管理回路からの転送要求信号）がアクティブになると、Ｃ３に示すように、ホストコントローラ５０がＩＮトークンパケットを生成して、ＵＳＢを介してペリフェラルに転送する。そして、Ｃ４に示すようにペリフェラルからホストコントローラ５０にＩＮデータパケットが転送されると、ホストコントローラ５０は、Ｃ５に示すようにハンドシェークパケット（ＡＣＫ）を生成して、ペリフェラルに転送する。これにより、Ｃ６に示すようにTranCmpACKがアクティブになる。
【０１６３】
同様にして、Ｃ７に示すようにPipeTranGoがアクティブになると、Ｃ８、Ｃ９、Ｃ１０に示すパケット転送が行われ、Ｃ１１に示すようにTranCmpACKがアクティブになる。そして、Ｃ１２に示すようにPipeXTranComp（ファームウェアへのＩＲＰのデータ単位の転送終了通知信号）がアクティブになる。このPipeXTranCompによる割り込みにより、ファームウェアは、そのパイプについての転送が完了したことを知ることができる。
【０１６４】
なお、PipeXTranCompがアクティブになると、Ｃ１３に示すようにPipeXTranGoが非アクティブになり、そのパイプが非転送状態であることが示されるようになる。
【０１６５】
図１８は、ＯＵＴトランザクションの場合（転送種別がＯＵＴの場合）の信号波形例である。
【０１６６】
ファームウェアが自動トランザクションの開始指示を行うと、Ｅ１に示すようにPipeXTranGoがアクティブになり、Ｅ２に示すようにPipeTranGoがアクティブになる。すると、ホストコントローラ５０は、Ｅ３に示すようにＯＵＴトークンパケットをペリフェラルに転送し、Ｅ４に示すようにＯＵＴデータパケットを転送する。そして、Ｅ５に示すようにペリフェラルからハンドシェークパケット（ＡＣＫ）が返ってくると、Ｅ６に示すようにTranCmpACKがアクティブになる。
【０１６７】
同様にして、Ｅ７に示すようにPipeTranGoがアクティブになると、Ｅ８、Ｅ９、Ｅ１０に示すパケット転送が行われ、Ｅ１１に示すようにTranCmpACKがアクティブになる。そして、Ｅ１２に示すようにPipeXTranCompがアクティブになる。このPipeXTranCompによる割り込みにより、ファームウェアは、そのパイプについての転送が完了したことを知ることができる。なお、PipeXTranCompがアクティブになると、Ｅ１３に示すようにPipeXTranGoが非アクティブになる。
【０１６８】
９．各ブロックの詳細な構成例
次に各ブロックの詳細な構成例について説明する。
【０１６９】
９．１  ＯＴＧコントローラ
図１９に、ＯＴＧコントローラ２０の構成例を示す。
【０１７０】
ＯＴＧコントローラ２０は、ＯＴＧレジスタ部２２を含む。このＯＴＧレジスタ部２２は、ＯＴＧコントローラ２０のモニタレジスタや制御レジスタを含む。またファームウェア（ＣＰＵ）により書き込まれるＯＴＧステートコマンドをデコードする回路を含む。
【０１７１】
またＯＴＧコントローラ２０はＯＴＧ制御回路２３を含む。そして、このＯＴＧ制御回路２３は、ＯＴＧステートの管理を行うＯＴＧ管理回路２４、ＩＤピンの電圧レベルを検出するＩＤ検出回路２５、ＶＢＵＳの電圧レベルを検出するＶＢＵＳ検出回路２６、ＤＰ及びＤＭのラインステートを検出するラインステート検出回路２７を含む。
【０１７２】
またＯＴＧコントローラ２０は、ＯＴＧステートの遷移判断条件の１つである時間を計測するタイマ２８を含む。
【０１７３】
ＯＴＧステートを遷移させるために検出すべき情報は、ＩＤ、ＶＢＵＳの電圧レベル、ＤＰ／ＤＭのラインステートである。本実施形態のＯＴＧコントローラ２０は、これらの情報を検出し、モニタレジスタを介してファームウェア（ＣＰＵ）に伝える。
【０１７４】
ファームウェアは、これらの検出情報に基づいて自身のステートを遷移させると共に、次に遷移すべきステートを、ＯＴＧステートコマンドを用いてＯＴＧコントローラ２０に伝える。
【０１７５】
ＯＴＧコントローラ２０は、ＯＴＧステートコマンドをデコードし、そのデコード結果に基づいて、ＶＢＵＳのドライブ制御、プルアップ／プルダウン抵抗の接続制御等を行い、図２（Ａ）、（Ｂ）で説明したＳＲＰやＨＮＰを実現する。
【０１７６】
このように本実施形態では、ステート毎のＯＴＧ制御はＯＴＧコントローラ２０が担当し、ファームウェアはステートの遷移管理に専念できる。この結果、全てのステート制御をファームウェアで実現する場合に比べて、ファームウェア（ＣＰＵ）の処理負荷を軽減できると共に、効率的なファームウェア開発が可能になる。
【０１７７】
なお、ＯＴＧのステート遷移の判断を、ファームウェアが行わずに、ハードウェア回路が行うようにしてもよい。或いは、ＯＴＧコントローラ２０のほとんど全ての処理（例えばＶＢＵＳ制御、プルアップ／プルダウン抵抗制御、ＩＤ検出、ＶＢＵＳ検出、ラインステート検出以外の処理）をファームウェア（ソフトウェア）により実現してもよい。
【０１７８】
９．２  ホストコントローラ、ペリフェラルコントローラ
図２０（Ａ）に、ホストコントローラ５０の構成例を示す。
【０１７９】
ホストコントローラ５０はＨＣシーケンス管理回路５２を含む。このＨＣシーケンス管理回路５２は、パイプ転送（パイプ領域を用いたデータ転送）の調停、時間管理、パイプ転送のスケジューリング、再送管理などを行う。
【０１８０】
より具体的にはＨＣシーケンス管理回路５２は、フレーム番号のカウントや、ＳＯＦ（Start-Of-Frame）パケットの送信指示を行う。また、アイソクロナス転送を各フレームの先頭で優先的に実行するための処理を行ったり、インタラプト転送をアイソクロナス転送の次に優先的に取り扱うための処理を行う。また、パイプ転送の順序にしたがって各パイプ転送を指示する処理を行う。また、トランザクションの連続実行回数を管理したり、残りフレーム時間の確認処理を行う。また、ペリフェラルから返ってきたハンドシェークパケット（ＡＣＫ、ＮＡＫ）に対する処理を行う。また、トランザクション実行時のエラー処理を行う。
【０１８１】
ホストコントローラ５０はターゲットパイプ管理回路５４を含む。このターゲットパイプ管理回路５４は、レジスタ部７０の転送条件レジスタに設定された転送条件情報のハンドリング処理などを行う。
【０１８２】
より具体的にはターゲットパイプ管理回路５４は、転送条件情報の選択処理や、割り込み信号の生成処理を行う。また自動トランザクションの開始が指示された場合に、そのパイプ領域の転送データのトータルサイズをロードする。そして、残り転送データサイズのカウント（デクリメント）処理を行う。また、バッファコントローラ８０へのデータの送受信の際にバッファ（ＦＩＦＯ）領域の状態を確認する処理を行う。また、トランザクション管理回路５６への転送指示を行う。また、予期しないショートパケットの受信の判断処理や、マックスパケットサイズ以上のパケットの受信の判断処理を行う。また、零長パケットを自動転送するモードが設定されている場合には、最後の零長パケットの送信をトランザクション管理回路５６に指示する。また、自動コントロール転送モードでのシーケンス管理を行う。
【０１８３】
ホストコントローラ５０はトランザクション管理回路５６を含む。このトランザクション管理回路５６は、転送パケットの種類や転送順序の管理（トランザクションのシーケンス管理）を行う。また、タイムアウトの監視処理を行う。また、トランザクション終了の通知処理を行う。
【０１８４】
ホストコントローラ５０はパケットハンドラ回路５８を含む。このパケットハンドラ回路５８は、パケットの生成、分解処理を行う。また、ＰＩＤのチェックやＣＲＣのデコード、エンコードを行う。また、バッファ領域のパケットのペイロードのリード、ライト処理や、ＳＯＦパケットの送信処理を行う。また、送受信データのカウント処理を行う。
【０１８５】
図２０（Ｂ）にペリフェラルコントローラ６０の構成例を示す。
【０１８６】
ペリフェラルコントローラ６０は、トランザクション管理回路６２、パケットハンドラ回路６４を含む。これらのトランザクション管理回路６２、パケットハンドラ回路６４は、ホストコントローラ５０のトランザクション管理回路５６、パケットハンドラ回路５８とほぼ同様の処理を行う。
【０１８７】
９．３  バッファコントローラ
図２１にバッファコントローラ８０の構成例を示す。
【０１８８】
バッファコントローラ８０は領域確保（allocation）回路８２を含む。この領域確保回路８２は、パケットバッファ１００に、バッファ領域（ホスト動作時にパイプ領域に設定され、ペリフェラル動作時にエンドポイント領域に設定される領域）を確保する回路である。
【０１８９】
領域確保回路８２は領域計算回路８３を含む。この領域計算回路８３は、マックスパケットサイズ（広義にはページサイズ）やページ数に基づいて、バッファ領域の領域サイズ、スタートアドレス、エンドアドレスなどを計算する回路である。
【０１９０】
例えば図２２（Ａ）に示すバッファ領域ＰＩＰＥ０／ＥＰ０、ＰＩＰＥａ／ＥＰａ、ＰＩＰＥｂ／ＥＰｂ、ＰＩＰＥｃ／ＥＰｃでは、マックスパケットサイズ（MaxPktSize）が、各々、３２、６４、６４、６４バイトに設定され、ページ数（BufferPage）が、各々、１、１、３、２ページに設定されている。領域計算回路８３は、これらのマックスパケットサイズ、ページ数などに基づいて、バッファ領域ＰＩＰＥ０／ＥＰ０〜ＰＩＰＥｃ／ＥＰｃの領域サイズ、スタートアドレス、エンドアドレスを計算する。例えば図２２（Ａ）において、ＰＩＰＥ０／ＥＰ０、ＰＩＰＥａ／ＥＰａ、ＰＩＰＥｂ／ＥＰｂ、ＰＩＰＥｃ／ＥＰｃの領域サイズは、各々、３２（＝３２×１）、６４（＝６４×１）、１９２（＝６４×３）、１２８（＝６４×２）バイトと計算されることになる。
【０１９１】
ポインタ割り当て回路８４は、各バッファ領域の書き込みポインタＷＰ（ＷＰ０、ＷＰａ、ＷＰｂ、ＷＰｃ）、読み出しポインタＲＰ（ＲＰ０、ＲＰａ、ＲＰｂ、ＲＰｃ）を、ＤＭＡ用ポインタ、ＣＰＵ用ポインタ、ＵＳＢ用ポインタに割り当てる回路である。
【０１９２】
例えば図２２（Ｂ）に示すように、データ送信時（ＤＭＡ又はＣＰＵからパケットバッファ１００を介してＵＳＢ側にデータが転送される時）であり、且つ、ＤＭＡ転送使用時には、そのバッファ領域の書き込みポインタＷＰはＤＭＡ（ＤＭＡアクセス）用のポインタに割り当てられ、読み出しポインタＲＰはＵＳＢ（ＵＳＢアクセス）用のポインタに割り当てられる。また、データ送信時であり且つＣＰＵ（ＰＩＯ）転送使用時には、そのバッファ領域の書き込みポインタＷＰはＣＰＵ（ＣＰＵアクセス）用のポインタに割り当てられ、読み出しポインタＲＰはＵＳＢ用のポインタに割り当てられる。
【０１９３】
一方、図２２（Ｃ）に示すように、データ受信時（ＵＳＢからパケットバッファ１００を介してＤＭＡ又はＣＰＵ側にデータが転送される時）であり、且つ、ＤＭＡ転送使用時には、そのバッファ領域の書き込みポインタＷＰはＵＳＢ用ポインタに割り当てられ、読み出しポインタＲＰはＤＭＡ用ポインタに割り当てられる。また、データ受信時であり且つＣＰＵ転送使用時には、そのバッファ領域の書き込みポインタＷＰはＵＳＢ用ポインタに割り当てられ、読み出しポインタＲＰはＣＰＵ用ポインタに割り当てられる。
【０１９４】
なお、各バッファ領域の書き込みポインタＷＰ、読み出しポインタＲＰのポインタ情報（位置情報）は、レジスタ部７０の各転送条件レジスタ（ＰＩＰＥ／ＥＰレジスタ）に保持される。
【０１９５】
ポインタ管理回路８６は、ポインタの更新を行いながら、パケットバッファ１００にアクセスするための実アドレスを生成する回路である。
【０１９６】
ポインタ管理回路８６は、ＣＰＵ用アドレス生成回路８７、ＤＭＡ用アドレス生成回路８８、ＵＳＢ用アドレス生成回路８９を含む。これらの生成回路８７、８８、８９は、各々、ポインタ割り当て回路８４により割り当てられたＣＰＵ用ポインタ、ＤＭＡ用ポインタ、ＵＳＢ用ポインタに基づいて、ＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスを生成する。また、ＣＰＵ（ＣＰＵインターフェース回路）、ＤＭＡ（ＤＭＡハンドラ回路）からのアクセス毎に、或いはＵＳＢ（ＨＣ又はＰＣ）のトランザクション終了（ＡＣＫ、ＮＡＫなどのハンドシェーク送受信）毎に、ポインタを更新する処理を行う。なお、更新後のポインタの情報は、領域確保回路８２を介してレジスタ部７０の各転送条件レジスタに書き戻される。
【０１９７】
バッファ管理回路９０は、パケットバッファ１００へのアクセスを管理する回路である。
【０１９８】
バッファ管理回路９０はバッファインターフェース回路９２を含む。このバッファインターフェース回路９２は、ポインタ管理回路８６からのＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスなどを受け、パケットバッファ１００へのデータの入出力や、アドレス、出力イネーブル、ライトイネーブル、リードイネーブルなどの出力を行う。
【０１９９】
バッファ管理回路９０は調停回路９３を含む。この調停回路９３は、ＣＰＵ（ＣＰＵインターフェース回路）、ＤＭＡ（ＤＭＡハンドラ回路）、ＵＳＢ（ホストコントローラ又はペリフェラルコントローラ）からのアクセスを調停する回路である。この調停結果に基づいて、ＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスのいずれかが、パケットバッファ１００のアクセス・アドレスとして出力され、ＣＰＵ、ＤＭＡ又はＵＳＢとパケットバッファ１００との間のデータ転送経路が設定される。
【０２００】
ＨＣ／ＰＣセレクタ９４は、バッファ管理回路９０（バッファコントローラ８０）とホストコントローラ５０（ＨＣ）又はペリフェラルコントローラ６０（ＰＣ）との間の接続の切り替え制御を行う。例えばホスト動作時には、ホストコントローラ５０とバッファ管理回路９０を接続し、ペリフェラル動作時には、ペリフェラルコントローラ６０とバッファ管理回路９０を接続する。なお、この接続の切り替え制御は、ＯＴＧコントローラ２０（ＯＴＧＣ）からのＨＣ／ＰＣイネーブル信号に基づいて行う。
【０２０１】
１０．ファームウェアの処理
次に、ファームウェア（処理部）の処理の詳細例について説明する。
【０２０２】
図２３は、ホスト動作時におけるファームウェア処理のフローチャートである。
【０２０３】
まず、パイプ（バッファ）領域を既に確保しているか否かを確認し（ステップＳ１１）、確保している場合にはパイプ領域のデータクリア指示［FIFOClr］を行う（ステップＳ１２）。
【０２０４】
次に、エンドポイント（転送条件）情報を転送条件レジスタにセットする（ステップＳ１３）。即ち、エンドポイント番号［EPNumber］、ファンクションアドレス［FuncAddr］、IN/OUT/SETUPなどの転送方向［DirPID］、アイソクロナス、バルク、コントロール、インタラプトなどの転送種別［TranType］、マックスパケットサイズ［MaxPktSize］などをセットする。
【０２０５】
次に、転送種別［TranType］を判断し（ステップＳ１４）、転送種別がアイソクロナスの場合にはステップＳ１８に移行する。転送種別がインタラプト転送の場合にはトークン発行周期［Interval］を指定すると共にトグルモード［ToggleMode］を指定する（ステップＳ１５、Ｓ１６）。転送種別が、アイソクロナスでもインタラプトでもない場合（バルク、コントロールの場合）には、ＨＣのスケジューリング［連続実行回数：Continuity］を指定する（ステップＳ１７）。
【０２０６】
次に、トグルビットの初期値［Toggle］をセットし、転送データのトータルサイズ［TotalSize］をセットする（ステップＳ１８、Ｓ１９）。なお、アイソクロナス転送の場合はトグルビットの初期値のセットは不要となる。また、ステップＳ１３〜Ｓ１９の設定順序は任意である。
【０２０７】
次に、パイプ（バッファ）領域のページ数［BufferPage］をセットし（ステップＳ２０）、パイプ領域確保の指示［SetAllocation］を行う（ステップＳ２１）。
【０２０８】
次に、ＤＭＡを用いるか否かを判断し、用いる場合にはＤＭＡバスの接続指示［JoinDMA］を行う（ステップＳ２２、Ｓ２３）。また、自動トランザクションの開始指示［TranGo］を行う（ステップＳ２４）。
【０２０９】
そして、割り込みが発生するのを待ち（ステップＳ２５）、正常完了、ＳＴＡＬＬ返答、ハンドシェーク待ちのタイムアウト処理などを行う（ステップＳ２６）。
【０２１０】
図２４は、ペリフェラル動作時におけるファームウェア処理のフローチャートである。
【０２１１】
まず、エンドポイント（バッファ）領域のデータクリア指示［FIFOClr］を行う（ステップＳ３１）。そして、トグルビット初期値［Toggle］をセットする（ステップＳ３２）。
【０２１２】
次にエンドポイント（転送条件）情報をセットする（ステップＳ３３）。即ち、エンドポイント番号［EPNumber］、転送方向［DirPID］、転送種別［TranType］、マックスパケットサイズ［MaxPktSize］などをセットする。
【０２１３】
次に、エンドポイントイネーブル指示［EnEndPoint］を行う（ステップＳ３４）。そして、転送種別［TranType］を判断し、インタラプト転送の場合にはトグルモード［ToggleMode］を指定する（ステップＳ３５、Ｓ３６）。
【０２１４】
次に、エンドポイント（バッファ）領域のページ数［BufferPage］をセットし（ステップＳ３７）、エンドポイント領域確保の指示［SetAllocation］を行う（ステップＳ３８）。
【０２１５】
次に、ＤＭＡを用いるか否かを判断し、ＤＭＡを用いる場合にはＤＭＡバスの接続指示［JoinDMA］を行う（ステップＳ３９、Ｓ４０）。
【０２１６】
次に、ホストからのトークン受信の持ち状態になる（ステップＳ４１）。そして、割り込みが発生するのを待ち（ステップＳ４２）、正常完了（ＡＣＫ受信）、ＮＡＫ返信、ＳＴＡＬＬ返信、ハンドシェーク待ちのタイムアウト処理などを行う（ステップＳ４３）。
【０２１７】
１１．電子機器
次に、本実施形態のデータ転送制御装置を含む電子機器の例について説明する。
【０２１８】
例えば図２５（Ａ）に電子機器の１つであるプリンタの内部ブロック図を示し、図２６（Ａ）にその外観図を示す。ＣＰＵ５１０（処理部）はシステム全体の制御などを行う。操作部５１１はプリンタをユーザが操作するためのものである。ＲＯＭ５１６には、制御プログラム、フォントなどが格納され、ＲＡＭ５１７（システムメモリ）はＣＰＵ５１０のワーク領域として機能する。ＤＭＡＣ５１８は、ＣＰＵ５１０を介さずにデータ転送を行うためのＤＭＡコントローラである。表示パネル５１９はプリンタの動作状態をユーザに知らせるためのものである。
【０２１９】
ＵＳＢを介してパーソナルコンピュータ、デジタルカメラ、デジタルビデオカメラなどの他の機器から送られてきたシリアルの印刷データ（印字データ、画像データ）は、データ転送制御装置５００によりパラレルの印刷データに変換される。そして、変換後のパラレル印刷データは、ＣＰＵ５１０又はＤＭＡＣ５１８により、印刷処理部（プリンタエンジン）５１２に送られる。そして、印刷処理部５１２においてパラレル印刷データに対して所与の処理が施され、プリントヘッダなどからなる印刷部（データの出力処理を行う装置）５１４により紙に印刷されて出力される。
【０２２０】
図２５（Ｂ）に電子機器の１つであるデジタルカメラの内部ブロック図を示し、図２６（Ｂ）にその外観図を示す。ＣＰＵ５２０はシステム全体の制御などを行う。操作部５２１（シャッターボタン、操作ボタン等）はデジタルカメラをユーザが操作するためのものである。ＲＯＭ５２６には制御プログラムなどが格納され、ＲＡＭ５２７はＣＰＵ５２０のワーク領域として機能する。ＤＭＡＣ５２８はＤＭＡコントローラである。
【０２２１】
ＣＣＤ、レンズなどからなる撮像部（データの取り込み処理を行う装置）５２２により画像が撮像され、撮像された画像のデータは画像処理部５２４により処理される。そして、処理後の画像データは、ＣＰＵ５２０又はＤＭＡＣ５２８によりデータ転送制御装置５００に送られる。データ転送制御装置５００は、このパラレルの画像データをシリアルデータに変換し、ＵＳＢを介してプリンタ、ストレージ装置、パーソナルコンピュータなどの他の機器に送信する。
【０２２２】
図２５（Ｃ）に電子機器の１つであるＣＤ−ＲＷドライブ（ストレージ装置）の内部ブロック図を示し、図２６（Ｃ）にその外観図を示す。ＣＰＵ５３０はシステム全体の制御などを行う。操作部５３１はＣＤ−ＲＷをユーザが操作するためのものである。ＲＯＭ５３６には制御プログラムなどが格納され、ＲＡＭ５３７はＣＰＵ５３０のワーク領域として機能する。ＤＭＡＣ５３８はＤＭＡコントローラである。
【０２２３】
レーザ、モータ、光学系などからなる読み取り＆書き込み部（データの取り込み処理を行う装置又はデータの記憶処理を行うための装置）５３３によりＣＤ−ＲＷ５３２から読み取られたデータは、信号処理部５３４に入力され、エラー訂正処理などの所与の信号処理が施される。そして、信号処理が施されたデータが、ＣＰＵ５３０又はＤＭＡＣ５３８によりデータ転送制御装置５００に送られる。データ転送制御装置５００は、このパラレルのデータをシリアルデータに変換し、ＵＳＢを介して他の機器に送信する。
【０２２４】
一方、ＵＳＢを介して他の機器から送られてきたシリアルのデータは、データ転送制御装置５００によりパラレルのデータに変換される。そして、このパラレルデータは、ＣＰＵ５３０又はＤＭＡＣ５３８により信号処理部５３４に送られる。そして、信号処理部５３４においてこのパラレルデータに対して所与の信号処理が施され、読み取り＆書き込み部５３３によりＣＤ−ＲＷ５３２に記憶される。
【０２２５】
なお、図２５（Ａ）、（Ｂ）、（Ｃ）において、ＣＰＵ５１０、５２０、５３０の他に、データ転送制御装置５００でのデータ転送制御のためのＣＰＵを別に設けるようにしてもよい。
【０２２６】
本実施形態のデータ転送制御装置を電子機器に用いれば、ＯＴＧ機能を有する電子機器を実現できる。即ち、電子機器にホストとしての役割を持たせたり、デバイスとしての役割を持たせることが可能になり、これまでに存在しなかったアプリケーションを創出できる。
【０２２７】
また本実施形態のデータ転送制御装置を電子機器に用いれば、電子機器に組み込まれるＣＰＵ（処理部）の処理負荷が軽減され、安価なＣＰＵを用いることが可能になる。また、ＣＰＵが、データ転送制御処理以外の他の処理を余裕を持って行うことが可能になり、電子機器の性能向上や低コスト化を図れる。また、ＣＰＵ上で動作するファームウェアのプログラムを簡素化でき、電子機器の開発期間の短縮化を図れる。
【０２２８】
なお本実施形態のデータ転送制御装置を適用できる電子機器としては、上記以外にも例えば、種々の光ディスクドライブ（ＣＤ−ＲＯＭ、ＤＶＤ）、光磁気ディスクドライブ（ＭＯ）、ハードディスクドライブ、デジタルビデオカメラ、携帯電話、スキャナ、ＴＶ、ＶＴＲ、オーディオ機器、電話機、プロジェクタ、パーソナルコンピュータ、電子手帳、或いはワードプロセッサなど種々のものを考えることができる。
【０２２９】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０２３０】
例えば、本発明のデータ転送制御装置の構成は、図５等で説明した構成に限定されるものではなく、種々の変形実施が可能である。
【０２３１】
また、データ転送制御装置の各ブロック（ＨＣ、ＰＣ、ＯＴＧＣ等）の構成も、本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【０２３２】
また、転送条件レジスタに設定される転送条件情報も、本実施形態で説明した情報に限定されるものではない。
【０２３３】
また、明細書中の記載において広義な用語（ページサイズ、ステートコントローラ、処理部、転送コントローラ、バス、転送比率情報、バッファ領域等）として引用された用語（マックスパケットサイズ、ＯＴＧコントローラ、ＣＰＵ・ファームウェア、ホストコントローラ・ペリフェラルコントローラ、ＵＳＢ、連続実行回数、パイプ領域・エンドポイント領域等）は、明細書中の他の記載においても広義な用語に置き換えることができる。
【０２３４】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【０２３５】
また、本実施形態ではＵＳＢのＯＴＧ規格への適用例を説明したが、本発明が適用されるのはＯＴＧ規格に限定されない。例えばＯＴＧ規格と同様の思想に基づく規格やＯＴＧ規格を発展させた規格におけるデータ転送にも本発明は適用できる。
【図面の簡単な説明】
【図１】  図１（Ａ）、（Ｂ）、（Ｃ）は、ＵＳＢのＯＴＧ規格について説明するための図である。
【図２】  図２（Ａ）、（Ｂ）は、ＳＲＰやＨＮＰの手順について説明するための図である。
【図３】  図３（Ａ）、（Ｂ）は、ＯＨＣＩのリスト構造のディスクリプタなどについて説明するための図である。
【図４】  ＯＨＣＩの２分木構造のディスクリプタについて説明するための図である。
【図５】  本実施形態のデータ転送制御装置の構成例を示す図である。
【図６】  図６（Ａ）、（Ｂ）は、パイプ領域、エンドポイント領域について説明するための図である。
【図７】  図７（Ａ）、（Ｂ）は、バッファ領域確保の問題点について説明するための図である。
【図８】  本実施形態の領域確保手法について説明するための図である。
【図９】  図９（Ａ）、（Ｂ）も、本実施形態の領域確保手法について説明するための図である。
【図１０】  マックスパケットサイズ、ページ数が設定されるレジスタを、ホスト動作時とペリフェラル動作時で共用する手法について説明するための図である。
【図１１】  領域確保処理の具体例を示すフローチャートである。
【図１２】  図１２（Ａ）は、マックスパケットサイズ、ページ数の設定例であり、図１２（Ｂ）は、その設定により確保される領域の例である。
【図１３】  データ転送制御装置のホスト時の動作について説明するための図である。
【図１４】  データ転送制御装置のペリフェラル時の動作について説明するための図である。
【図１５】  レジスタ部について説明するための図である。
【図１６】  ファームウェアの処理例を説明するためのフローチャートである。
【図１７】  ＩＮトランザクションでの自動トランザクション処理の信号波形例である。
【図１８】  ＯＵＴトランザクションでの自動トランザクション処理の信号波形例である。
【図１９】  ＯＴＧコントローラの詳細な構成例を示す図である。
【図２０】  図２０（Ａ）、（Ｂ）は、ホストコントローラ、ペリフェラルコントローラの詳細な構成例を示す図である。
【図２１】  バッファコントローラの詳細な構成例を示す図である。
【図２２】  図２２（Ａ）、（Ｂ）、（Ｃ）は、領域確保手法やポインタ割り当て手法について説明するための図である。
【図２３】  ホスト動作時におけるファームウェアの詳細な処理例を示すフローチャートである。
【図２４】  ペリフェラル動作時におけるファームウェアの詳細な処理例を示すフローチャートである。
【図２５】  図２５（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の内部ブロック図の例である。
【図２６】  図２６（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の外観図の例である。
【符号の説明】
ＰＩＰＥ０〜ＰＩＰＥｅ  パイプ（バッファ）領域
ＥＰ０〜ＥＰｅ  エンドポイント（バッファ）領域
ＴＲＥＧ０〜ＴＲＥＧｅ  転送条件レジスタ（共用レジスタ）
ＭＰＳ０〜ＭＰＳｅ  マックスパケットサイズ（ページサイズ）
ＢＰ０〜ＢＰｅ  ページ数、  ＴＴ０〜ＴＴｅ  転送種別、  ＲＳ０〜ＲＳｅ  領域サイズ、  １０  トランシーバ、  １２  物理層回路、  ２０  ＯＴＧコントローラ（ステートコントローラ）、  ３０  ＨＣ／ＰＣ切り替え回路、
３２  ＨＣ／ＰＣセレクタ、  ３４  ラインステートコントローラ、  ４０  転送コントローラ、  ５０  ホストコントローラ、  ６０  ペリフェラルコントローラ、  ７０  レジスタ部、  ７２  転送条件レジスタ部（共用レジスタ）、
８０  バッファコントローラ、  １００  パケットバッファ（ＦＩＦＯ、ＲＡＭ）、  １１０  インターフェース回路、  １１２  ＤＭＡハンドラ回路、
１１４  ＣＰＵインターフェース回路、  １２０  クロックコントローラ
【図１】
0004127069.tif 000002
【図２】
0004127069.tif 000003
【図３】
0004127069.tif 000004
【図４】
0004127069.tif 000005
【図５】
0004127069.tif 000006
【図６】
0004127069.tif 000007
【図７】
0004127069.tif 000008
【図８】
0004127069.tif 000009
【図９】
0004127069.tif 000010
【図１０】
0004127069.tif 000011
【図１１】
0004127069.tif 000012
【図１２】
0004127069.tif 000013
【図１３】
0004127069.tif 000014
【図１４】
0004127069.tif 000015
【図１５】
0004127069.tif 000016
【図１６】
0004127069.tif 000017
【図１７】
0004127069.tif 000018
【図１８】
0004127069.tif 000019
【図１９】
0004127069.tif 000020
【図２０】
0004127069.tif 000021
【図２１】
0004127069.tif 000022
【図２２】
0004127069.tif 000023
【図２３】
0004127069.tif 000024
【図２４】
0004127069.tif 000025
【図２５】
0004127069.tif 000026
【図２６】
0004127069.tif 000027