(57)【要約】【課題】ＵＳＢホストコントローラを使用してデータ転送を行う場合に、メモリ管理処理の負担を軽減するとともに、データ転送に用いる共有メモリサイズを大きくすることなく、効率よく安定してデータ転送を行うことができる枠組みを提供する。【解決手段】パイプに共有メモリ上の固定サイズのバッファ領域を割り当てる工程と、パイプに割り当てた前記固定サイズのバッファ領域を介して、ＵＳＢホスト装置とＵＳＢデバイス装置との間でデータ転送を行うように、ＵＳＢホストコントローラを制御する工程と、を備える。前記割り当てる工程は、ＵＳＢポートごとに共有メモリ上の固定サイズのメモリ領域を確保する工程と、ＵＳＢデバイスが接続されたＵＳＢポートについて確保した前記固定サイズのメモリ領域に、当該ＵＳＢデバイスに関してデータ転送要求のあったパイプのバッファ領域を設定する工程と、を備える。【選択図】  図５
2006252334.tif 000002
【特許請求の範囲】
【請求項１】
ＵＳＢホストコントローラを使用してデータ転送を行う場合のデータ転送制御方法であって、
パイプに共有メモリ上の固定サイズのバッファ領域を割り当てる工程と、
パイプに割り当てた前記固定サイズのバッファ領域を介して、ＵＳＢホスト装置とＵＳＢデバイス装置との間でデータ転送を行うように、前記ＵＳＢホストコントローラを制御する工程と、を備えることを特徴とするデータ転送制御方法。
【請求項２】
前記ＵＳＢホストコントローラが、ＥＨＣＩ規格のＵＳＢホストコントローラであることを特徴とする請求項１記載のデータ転送制御方法。
【請求項３】
前記パイプに共有メモリ上の固定サイズのバッファ領域を割り当てる工程は、
ＵＳＢポートごとに共有メモリ上の固定サイズのメモリ領域を確保する工程と、
ＵＳＢデバイスが接続されたＵＳＢポートについて確保した前記固定サイズのメモリ領域に、当該ＵＳＢデバイスに関してデータ転送要求のあったパイプのバッファ領域を設定する工程と、
を備えることを特徴とする請求項１又は２記載のデータ転送制御方法。
【請求項４】
前記共有メモリ上の固定サイズのメモリ領域は、少なくとも２つのバッファ領域Ａ、Ｂを含んでおり、
前記ＵＳＢホストコントローラを制御する工程は、
一方のバッファ領域を用いてＵＳＢデバイス装置側とのデータ転送を行いつつ、他方のバッファ領域を用いてＵＳＢホスト装置側とのデータ転送が実行されるように、バッファ領域Ａ、Ｂを交互に指定してＵＳＢホストコントローラに転送要求を通知する工程を備えることを特徴とする請求項１乃至３のいずれか１項に記載のデータ転送制御方法。
【請求項５】
前記共有メモリ上の固定サイズのメモリ領域は、少なくとも２つのバッファ領域Ａ、Ｂを含んでおり、
前記ＵＳＢホストコントローラを制御する工程は、
バッファ領域Ａ、Ｂのうち一方を処理面とし、他方を待機面に設定する工程と、
処理面を対象として、データ転送のためのディスクリプタ情報を設定する工程と、
前記処理面を指定して、ＵＳＢホストコントローラに転送要求を通知する工程と、
転送要求のあったデータ全てについて転送が完了したか否かを判断する工程と、
完了していない場合に、待機面を対象として、データ転送のためのディスクリプタ情報を設定する工程と、
前記処理面についてＵＳＢホストコントローラからデータ転送完了の通知を受け付けた場合、バッファ領域Ａ、Ｂに関して処理面及び待機面の設定を入れ替える工程と、
を備えることを特徴とする請求項１乃至４のいずれか１項に記載のデータ転送制御方法。
【請求項６】
ＵＳＢホストコントローラを使用してデータ転送を行うためのデータ転送制御装置であって、
パイプに共有メモリ上の固定サイズのバッファ領域を割り当てる機能と、
パイプに割り当てた前記固定サイズのバッファ領域を介して、ＵＳＢホスト装置とＵＳＢデバイス装置との間でデータ転送を行うように、前記ＵＳＢホストコントローラを制御する機能と、を備えることを特徴とするデータ転送制御装置。
【請求項７】
請求項１乃至５のいずれか１項に記載のデータ転送制御方法をコンピュータで実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送制御方法、及びデータ転送制御装置に関する。
【背景技術】
【０００２】
ＵＳＢ（Universal Serial Bus）２．０規格は、ＵＳＢ１．１規格に対する互換性を持ちながら、ＵＳＢ １．１よりも高速な４８０Ｍｂｐｓ（ＨＳモード）のデータ転送速度を実現できる規格である。かかるＵＳＢ２．０規格に対応したＵＳＢホストコントローラの仕様を定義したものとして、ＥＨＣＩ（Enhanced Host Controller Interface）が知られている。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ＵＳＢ規格に基づいてデータ転送を行う場合、通常、ＵＳＢホスト装置内の共有メモリ上に確保したバッファを介して、ＵＳＢホスト装置（ＵＳＢホスト装置上で動作するアプリケーション）とＵＳＢデバイス装置との間のデータ転送を実行する。
【０００４】
従来、このデータ転送のために使用するバッファは、アプリケーション側が要求したデータのサイズに応じて共有メモリ上に動的に確保され、転送終了後に解放されるのが普通であった。
【０００５】
しかし、このような従来の枠組みでは、データ転送要求を受け付けるにあたって、共有メモリの使用可能領域を監視し、バッファを確保できたかどうかを確認しなければならない点で、処理が煩雑となる。また、例えば複数のＵＳＢデバイスについて同時にデータサイズの大きい転送要求があった場合など、共有メモリ上にデータ転送のためのバッファを確保できない情況も起こり得る。更に、動的にメモリ領域を確保していることから、例えばＵＳＢデバイスの抜き差しなどを頻繁に行った場合などに共有メモリ上に確保したメモリ領域が適切に解放されない状態（メモリリーク）が生じてしまう可能性があり、このようなメモリリークが生じると、システム性能が低下したり、動作が不安定になってシステムがハングしてしまうおそれもある。
【０００６】
ここで、共有メモリのサイズを大きくすれば、上記のうちメモリ不足の問題はある程度解消できると考えられる。しかし、共有メモリサイズを大きくすることは、コストや実装上の理由から限度があり、またメモリリークに対しては本質的な解決策とはならない。
【０００７】
そこで、本発明は、ＵＳＢホストコントローラを使用してＵＳＢデバイスとの間でデータ転送を行う場合に、メモリ管理処理の負担を軽減するとともに、データ転送に用いる共有メモリサイズを大きくすることなく、効率よく安定してデータ転送を行うことができる枠組みを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明のデータ転送制御方法は、ＵＳＢホストコントローラを使用してデータ転送を行う場合のデータ転送制御方法であって、パイプに共有メモリ上の固定サイズのバッファ領域を割り当てる工程と、パイプに割り当てた前記固定サイズのバッファ領域を介して、ＵＳＢホスト装置とＵＳＢデバイス装置との間でデータ転送を行うように、前記ＵＳＢホストコントローラを制御する工程と、を備えることを特徴とする。前記ＵＳＢホストコントローラは、例えばＥＨＣＩ規格のＵＳＢホストコントローラとすることができる。
【０００９】
かかる構成によれば、ＵＳＢホストコントローラを使用してデータ転送を行う場合に、共有メモリの使用可能領域を監視して、バッファ領域が確保できたかどうかを確認する必要はなく、メモリ管理処理の負担を軽減することができる。
【００１０】
好適には、前記パイプに共有メモリ上の固定サイズのバッファ領域を割り当てる工程は、  ＵＳＢポートごとに共有メモリ上の固定サイズのメモリ領域を確保する工程と、ＵＳＢデバイスが接続されたＵＳＢポートについて確保した前記固定サイズのメモリ領域に、当該ＵＳＢデバイスに関してデータ転送要求のあったパイプのバッファ領域を設定する工程と、を備えることを特徴とする。
【００１１】
かかる構成によれば、共有メモリ上に必要となるバッファ領域のサイズは、ＵＳＢポート数と前記固定サイズによって固定的に定まるため、パイプ数や転送データサイズなどが変動しても、共有メモリ上にバッファ領域を確保できない情況が発生することはない。また、静的（固定的）にメモリ領域を確保していることから、ＵＳＢデバイス装置の抜き差しを頻繁に行う等しても、メモリリークが発生するおそれもない。その結果、データ転送に用いる共有メモリサイズを抑制しつつ、効率よく安定してデータ転送を行うことができる。
【００１２】
好適には、前記共有メモリ上の固定サイズのメモリ領域は、少なくとも２つのバッファ領域Ａ、Ｂを含んでおり、前記ＵＳＢホストコントローラを制御する工程は、一方のバッファ領域を用いてＵＳＢデバイス装置側とのデータ転送を行いつつ、他方のバッファ領域を用いてＵＳＢホスト装置側とのデータ転送が実行されるように、バッファ領域Ａ、Ｂを交互に指定してＵＳＢホストコントローラに転送要求を通知する工程を備えることを特徴とする。
【００１３】
かかる構成によれば、ＵＳＢデバイス装置側とのデータ転送と、ＵＳＢホスト装置側とのデータ転送とを並行に行うことができ、高速にデータ転送を実行することができる。
【００１４】
例えば、前記ＵＳＢホストコントローラを制御する工程は、バッファ領域Ａ、Ｂのうち一方を処理面とし、他方を待機面に設定する工程と、処理面を対象として、データ転送のためのディスクリプタ情報を設定する工程と、前記処理面を指定して、ＵＳＢホストコントローラに転送要求を通知する工程と、転送要求のあったデータ全てについて転送が完了したか否かを判断する工程と、完了していない場合に、待機面を対象として、データ転送のためのディスクリプタ情報を設定する工程と、前記処理面についてＵＳＢホストコントローラからデータ転送完了の通知を受け付けた場合、バッファ領域Ａ、Ｂに関して処理面及び待機面の設定を入れ替える工程と、を備えることができる。
【００１５】
かかる構成によれば、転送要求のあったデータが前記固定サイズより大きい場合に固定サイズ単位で複数回に分けてデータ転送のためのディスクリプタ情報を設定するように構成しているため、データ転送要求を出す上位側では、前記固定サイズを意識することなく、データ転送を指示することが可能となる。
【００１６】
本発明のデータ転送制御方法は、ＵＳＢホスト装置においてＣＰＵにより実行することができるが、そのためのコンピュータプログラムは、ＣＤ−ＲＯＭ、磁気ディスク、半導体メモリ及び通信ネットワークなどの各種の媒体を通じてコンピュータにインストールまたはロードすることができる。
【００１７】
本発明のデータ転送制御装置は、ＵＳＢホストコントローラを使用してデータ転送を行うためのデータ転送制御装置であって、パイプに共有メモリ上の固定サイズのバッファ領域を割り当てる機能と、パイプに割り当てた前記固定サイズのバッファ領域を介して、ＵＳＢホスト装置とＵＳＢデバイス装置との間でデータ転送を行うように、前記ＵＳＢホストコントローラを制御する機能と、を備えることを特徴とする。
【発明の効果】
【００１８】
以上、本発明によれば、ＵＳＢホストコントローラを使用してＵＳＢデバイスとの間でデータ転送を行う場合に、メモリ管理処理の負担を軽減できるとともに、データ転送に用いる共有メモリサイズを大きくすることなく、効率よく安定してデータ転送を行うことができる。
【発明を実施するための最良の形態】
【００１９】
図１は、本実施形態におけるデータ転送システムの機能構成の概略図である。図１に示すように、ＵＳＢホスト装置１は、クライアントドライバ１０、ＵＳＢＤ（Universal Bus Driver）１１、ＣＨＣＤ（Companion Host Controller Driver）１２、ＣＨＣＩ（Companion Host Controller Interface）１３、ＥＨＣＤ（Enhanced Host Controller Driver）１４、ＥＨＣＩ１５、共有メモリ１６等を含み、ＵＳＢによりＵＳＢデバイス装置２と接続されている。
【００２０】
クライアントドライバ１０は、ＵＳＢホスト装置１で動作するアプリケーションに対してＵＳＢデバイス装置２へのアクセス関数などを提供するドライバであり、例えばＯＳの一部として実装することができる。
【００２１】
ＵＳＢＤ１１は、ハードウェアに依存しない処理（例えば、ＵＳＢホストコントローラの種別に依存しない処理）を行うドライバであり、従来のＵＳＢ汎用ドライバと同様の機能を備える。
【００２２】
ＣＨＣＤ１２は、ＣＨＣＩ１３に依存した処理を行うデバイスドライバであり、従来のＵＳＢ１．１デバイスドライバと同様の機能を備える。
【００２３】
ＣＨＣＩ１３は、ＵＳＢ１．１規格に準拠したＵＳＢホストコントローラであり、トランザクションの管理、パケットの生成／分解、サスペンド／レジューム／リセット状態生成の指示など、従来のＵＳＢ１．１ホストコントローラと同様の機能を備える。ＣＨＣＩ１３は、ＯＨＣＩ（Open Host Controller Interface）、ＵＨＣＩ（Universal Host Controller Interface）のいずれの方式に基づくものであってもよい。
【００２４】
ＥＨＣＤ１４は、ＥＨＣＩ１５に依存した処理を行うデバイスドライバであり、原則として従来のＵＳＢ２．０デバイスドライバと同様の機能を備える。
【００２５】
ただし、本実施形態のＥＨＣＤ１４は、パイプに共有メモリ１６上の固定サイズのバッファ領域を割り当て、かかるパイプに割り当てた前記固定サイズのバッファ領域を介してＵＳＢホスト装置とＵＳＢデバイス装置との間でデータ転送を行うように、ＥＨＣＩ１５を制御する点で、従来と異なっている。
【００２６】
ＥＨＣＩ１５は、ＥＨＣＩ規格に準拠したＵＳＢホストコントローラであり、トランザクションの管理、パケットの生成／分解、サスペンド／レジューム／リセット状態生成の指示など、従来のＵＳＢ２．０ホストコントローラと同様の機能を備える。
【００２７】
なお、各ドライバは、ＵＳＢホスト装置１内のＲＯＭやＲＡＭ、外部の記憶媒体等に格納されるプログラムをＣＰＵが実行することにより機能手段として実現できる。またデータ転送システムは、図示していないが、差動データ信号Ｄ＋、Ｄ−を用いてデータを送受信するトランシーバ、ＣＨＣＩ１３やＥＨＣＩ１５とＵＳＢポートとの間のコネクションを提供するルートハブなど、ＵＳＢに基づくデータ転送システムが通常備える機能構成を同様に備えている。
【００２８】
図２は、ＵＳＢにおけるデータ転送のスキームを説明するための図である。ＵＳＢにおけるデータ転送スキームは、エンドポイント及びパイプという概念を用いて説明することができる。すなわち、ＵＳＢホスト装置、ＵＳＢデバイス装置には、エンドポイントと呼ばれるＦＩＦＯバッファが設けられ、このバッファどうしがパイプという論理的な通信路で接続される。ＵＳＢホスト装置は、デバイスアドレス、パイプ番号、エンドポイント番号等を指定して、所望のパイプによるデータ送受信（所望のエンドポイントへのデータ送信や、所望のエンドポイントからのデータ受信）を行うことができる。
【００２９】
エンドポイントには、エンドポイント０と呼ばれるコントロール転送に用いられるものがあり、このコントロール転送を使って、セットアップや設定パラメータの転送などのコンフィギュレーションが実行される。そして、コンフィギュレーションによってＵＳＢデバイス装置の使い方が設定されると、新たなエンドポイントが追加され、対応するパイプが構成される。
【００３０】
ＵＳＢの転送モードには、上記のコントロール転送以外に、バルク転送、インタラプト転送、アイソクロナス転送があり、このうちどの転送モードを使用するかは、ＵＳＢデバイス装置がコンフィギュレーション用のデータとして保持している。そして、ＵＳＢによる接続がなされた後、ＵＳＢデバイス装置からＵＳＢホスト装置へコントロール転送を使って前記データが送信され、ＵＳＢホスト装置は、このデータに基づき転送モードを確定するとともに、ＵＳＢデバイス装置のアドレス付け、パイプ番号、エンドポイント番号の割り付けを行う。
【００３１】
以下、図３〜図５のフローチャート等を参照して、本実施形態のデータ転送システムにおけるデータ転送の流れを説明する。なお、各工程（符号が付与されていない部分的な工程を含む）は処理内容に矛盾を生じない範囲で任意に順番を変更して又は並列に実行することができる。
【００３２】
（ＵＳＢデバイス装置２の接続からパイプオープンまでの処理：図３）
ＵＳＢデバイス装置２がＵＳＢポートに接続されると、ＥＨＣＩ１５がその接続を検出する（Ｓ１００）。接続されたことを検出する方法としては、例えば、ＵＳＢケーブル中の信号線（Ｄ＋、Ｄ−）のいずれかが所定電圧（３．３Ｖ）になることを検出すればよい。
【００３３】
ＥＨＣＤ１４は、ＥＨＣＩ１５による接続検出を監視しており、ＥＨＣＩ１５が接続を検出すると、ＵＳＢＤ１１にＵＳＢデバイス装置２が接続されたことを通知する（Ｓ１０１）。
【００３４】
ＵＳＢＤ１１は、ＥＨＣＤ１４より接続通知を受け付けると、ＥＨＣＤ１４にリセットを要求する（Ｓ１０２）。
【００３５】
ＥＨＣＤ１４は、該要求を受け付けた場合、ＥＨＣＩ１５にリセットを指示する（Ｓ１０３）。
【００３６】
ＥＨＣＩ１５は、ＥＨＣＤ１４からリセットの指示を受け付けた場合、ＵＳＢポートの設定をリセットするともに、ＵＳＢデバイス装置２に対してリセット信号を出力する（例えば、Ｄ＋、Ｄ−の両方をＬＯＷにする）（Ｓ１０４）。ＵＳＢデバイス装置２は、リセット信号を検出すると内部リセットを実行し、デフォルト状態に移行する。このデフォルト状態ではエンドポイント０（パイプ０）を使ったコントロール転送のみ可能となる。
【００３７】
次に、ＥＨＣＩ１５は、ＵＳＢポートのステータスを取得し、ステータスが正常の場合にはコントロール転送を使用してＵＳＢデバイス装置２との間でコンフィギュレーションを実行して、コンフィギュレーション結果をＥＨＣＤ１４に通知する（Ｓ１０５）。
【００３８】
ＥＨＣＤ１４は、コンフィギュレーションが成功した場合、データ転送のためにＵＳＢホスト装置１側に設けられている共有メモリ１６上に、ＥＨＣＩ１５が管理するＵＳＢポートごとに、固定サイズ（例えば、２０Kバイト）のメモリ領域を確保する（Ｓ１０６）。
【００３９】
ここで、前記メモリ領域は、それぞれをデータ転送のためのＩ／Ｏバッファ領域として使用することができる、少なくとも２つのバッファ領域Ａ、Ｂを設定できるように確保される。また、固定サイズのメモリ領域を確保する際、ＵＳＢポート１にはアドレスＸ、ＵＳＢポート２にはアドレスＹのように、メモリ領域のアドレスをＵＳＢポートに固定的に対応づけて確保するように構成してもよい。
【００４０】
次に、ＥＨＣＤ１４は、コンフィギュレーション結果をＵＳＢＤ１１に通知する（Ｓ１０７）。
【００４１】
該通知がコンフィギュレーション失敗との通知である場合（Ｓ１０７：コンフィギュレーション失敗）、従来のＵＳＢ１．１規格に基づくデータ転送処理と同様の工程により、ＣＨＣＩ１３を使用したデータ転送のための処理が実行される（Ｓ１０８）。例えば、ＵＳＢＤ１１がＣＨＣＤ１２にリセットを要求し、これによってＣＨＣＩ１３によりＵＳＢポートの設定のリセット等が行われた後、コンフィギュレーションが実行される。コンフィギュレーションが成功した場合、ＣＨＣＤ１２によって共有メモリ上にバッファ領域が確保され、パイプがオープンされる。
【００４２】
一方、ＵＳＢＤ１１は、ＥＨＣＤ１４よりコンフィギュレーション成功との通知を受け付けた場合（Ｓ１０７：コンフィギュレーション成功）、該通知をクライアントドライバ１０に転送する（Ｓ１０９）。
【００４３】
クライアントドライバ１０は、ＵＳＢＤ１１よりコンフィギュレーション成功との通知を受け付けた場合、ＵＳＢＤ１１に、ＵＳＢデバイス装置２のオープン指示に続けて、パイプオープンを指示する（Ｓ１１０）。
【００４４】
ＵＳＢＤ１１は、パイプオープンの指示を受け付けた場合、ＥＨＣＤ１４にパイプオープンを要求する（Ｓ１１１）。
【００４５】
ＥＨＣＤ１４は、該要求を受け付けた場合、コンフィギュレーション結果に基づいてパイプを選択し、ＥＨＣＩ１５に前記選択したパイプのオープンを指示する（Ｓ１１２）。
【００４６】
ＥＨＣＩ１５は、ＥＨＣＤ１４より指示されたパイプをオープンする（Ｓ１１３）。これにより、データ転送システムは、ＥＨＣＩ１５を使用してデータ転送を行うことができる状態に移行する。
【００４７】
（データ転送処理：図４、図５）
データ転送システムがＥＨＣＩ１５を使用しデータ転送を行うことができる状態にある場合、クライアントドライバ１０は、ＵＳＢホスト装置１で動作するアプリケーションからのＵＳＢデバイス装置２へのアクセス関数の呼び出しを待機する（Ｓ２００）。
【００４８】
前記アプリケーションからアクセス関数の呼び出しがあった場合、クライアントドライバ１０は、アクセス関数の引数等に基づいてパイプ等を指定して、ＵＳＢＤ１１にデータ転送を指示する（Ｓ２０１）。
【００４９】
ＵＳＢＤ１１は、該指示を受け付けた場合、パイプ等を指定して、ＥＨＣＤ１４にデータ転送を要求する（Ｓ２０２）。
【００５０】
ＥＨＣＤ１４は、該要求を受け付けた場合、指定されたパイプ（エンドポイント）を選択し、Ｓ１０６において確保した固定サイズのメモリ領域を前記選択したパイプに割り当てる（前記固定サイズのメモリ領域に前記選択したパイプのバッファ領域を設定する）（Ｓ２０３）。なお、ＵＳＢポートごとに確保した固定サイズのメモリ領域は、当該ＵＳＢポートに対応する複数のパイプ間で共有して排他的に使用されることになるが、この排他制御は例えばクライアントドライバ１０によって実行される。
【００５１】
次に、ＥＨＣＤ１４は、バッファ領域Ａ、Ｂのいずれか一方を処理面に、他方を待機面に設定する（Ｓ２０４）。なお、処理面は、ＥＨＣＩ１５がデータ転送を行う際に使用するバッファ領域（いわゆるダブルバッファの表バッファ）に相当し、待機面は、ＥＨＣＩ１５がデータ転送している間に、次のデータ転送のための準備に用いるバッファ領域（いわゆるダブルバッファの裏バッファ）に相当する。
【００５２】
次に、ＥＨＣＤ１４は、処理面を対象として、データ転送のためのディスクリプタ情報（ｑＴＤ（Queue Element Transfer Descriptor）など）を設定し、前記パイプに割り当てたメモリ領域に記憶する（Ｓ２０５）。
【００５３】
次に、ＥＨＣＤ１４は、当該データ転送要求がＯＵＴである場合（Ｓ２０６：ＹＥＳ）、ＵＳＢホスト装置１のＲＡＭ等に記憶される転送対象データを処理面にコピーする（Ｓ２０７）。
【００５４】
次に、ＥＨＣＤ１４は、処理面を指定して、ＥＨＣＩ１５に転送要求を通知する（Ｓ２０８）。これを受けてＥＨＣＩ１５は、前記設定したディスクリプタ情報に基づき、処理面を介してデータ転送を実行する。すなわち、当該データ転送要求がＯＵＴである場合は、処理面に格納される転送対象データをＵＳＢデバイス装置２へ転送し、ＩＮである場合は、ＵＳＢデバイス装置２から転送対象データを読み出して処理面に格納する。ＥＨＣＩ１５は、データ転送が完了すると、その情報をＥＨＣＤ１４に通知する。
【００５５】
次に、ＥＨＣＤ１４は、転送要求のあったデータ全てについて転送が完了したか否かを判断し（Ｓ２０９）、完了している場合はＳ２１３の工程に処理を進める。
【００５６】
一方、完了していない場合、ＥＨＣＤ１４は、待機面を対象として、データ転送のためのディスクリプタ情報を設定し、前記パイプに割り当てたメモリ領域に記憶する（Ｓ２１０）。
【００５７】
次に、当該データ転送要求がＯＵＴである場合（Ｓ２１１：ＹＥＳ）、ＵＳＢホスト装置１のＲＡＭ等に記憶される転送対象データのうち未転送のデータを待機面にコピーする（Ｓ２１２）。
【００５８】
次に、ＥＨＣＤ１４は、ＥＨＣＩ１５からのデータ転送完了の通知を待機する（Ｓ２１３）。
【００５９】
データ転送完了の通知を受け付けた場合、ＥＨＣＤ１４は、待機面に関してデータ転送のためのディスクリプタ情報が設定・記憶されているか否かを判断する（Ｓ２１４）。
【００６０】
待機面に関してディスクリプタ情報が設定・記憶されていない場合、ＥＨＣＤ１４は、データ転送完了が通知されたデータ転送がＩＮであるか否かを判断する（Ｓ２１５）。
【００６１】
ＩＮである場合、ＥＨＣＤ１４は、処理面に格納される転送対象データをＵＳＢホスト装置１のＲＡＭ等にコピーする（Ｓ２１６）。
【００６２】
次に、ＥＨＣＤ１４は、ＵＳＢＤ１１に、要求のあったデータ転送が全て終了したことを通知する（Ｓ２１７）。
【００６３】
ＵＳＢＤ１１は、ＥＨＣＤ１４から該通知を受け付けた場合、該通知をクライアントドライバ１０に転送する（Ｓ２１８）。
【００６４】
クライアントドライバ１０は、該通知を受け付けた場合、Ｓ２００の工程に再帰する（Ｓ２１９）。
【００６５】
一方、待機面に関してディスクリプタ情報が設定・記憶されている場合、ＥＨＣＤ１４は、処理面及び待機面の設定を入れ替える（Ｓ２２０）。例えば、バッファ領域Ａを処理面、バッファ領域Ｂを待機面として設定している場合であれば、バッファ領域Ｂを処理面、バッファ領域Ａを待機面に設定する。
【００６６】
次に、ＥＨＣＤ１４は、処理面を指定して、ＥＨＣＩ１５に転送要求を通知する（Ｓ２２１）。これを受けてＥＨＣＩ１５は、上述したように、前記設定したディスクリプタ情報に基づき、処理面を介してデータ転送を実行する。
【００６７】
次に、ＥＨＣＤ１４は、データ転送完了が通知されたデータ転送がＩＮであるか否かを判断する（Ｓ２２２）。
【００６８】
ＩＮである場合、ＥＨＣＤ１４は、待機面に格納される転送対象データをＵＳＢホスト装置１のＲＡＭ等にコピーする（Ｓ２２３）。
【００６９】
次に、ＥＨＣＤ１４は、転送要求のあったデータ全てについて転送が完了したか否かを判断し（Ｓ２２４）、完了している場合はＳ２１３の工程に再帰する。
【００７０】
一方、完了していない場合、ＥＨＣＤ１４は、待機面を対象として、データ転送のためのディスクリプタ情報を設定し、前記パイプに割り当てたメモリ領域に記憶する（Ｓ２２５）。
【００７１】
次に、ＥＨＣＤ１４は、当該データ転送要求がＯＵＴである場合（Ｓ２２６：ＹＥＳ）は、ＵＳＢホスト装置１のＲＡＭ等に記憶される転送対象データを待機面にコピーしてから（Ｓ２２７）、Ｓ２１３の工程に再帰し、ＩＮである場合（Ｓ２２６：ＮＯ）は、そのままＳ２１３の工程に再帰する。
【００７２】
かかる構成によれば、ＥＨＣＩ１５を使用してデータ転送を行う場合に、ＵＳＢポートごとに共有メモリ１６上に固定サイズのメモリ領域を確保し、前記確保した固定サイズのメモリ領域をＵＳＢポートの各パイプに割り当ててバッファ領域とすることから、共有メモリ１６の使用可能領域を監視して、バッファ領域が確保できたかどうかを確認する必要はなく、メモリ管理処理の負担を軽減することができる。
【００７３】
また、共有メモリ１６上に必要となるバッファ領域のサイズは、ＵＳＢポート数と前記固定サイズによって固定的に定まるため、パイプ数や転送データサイズなどが変動しても、共有メモリ１６上にバッファ領域を確保できない情況が発生することはない。また、静的（固定的）にメモリ領域を確保していることから、ＵＳＢデバイス装置の抜き差しを頻繁に行う等しても、メモリリークが発生するおそれもない。その結果、データ転送に用いる共有メモリサイズを抑制しつつ、効率よく安定してデータ転送を行うことができる。
【００７４】
また、ＥＨＣＤ１４において、転送要求のあったデータが前記固定サイズより大きい場合に固定サイズ単位で複数回に分けてデータ転送のためのディスクリプタ情報を設定するように構成しているため、上位のクライアントドライバ１０等では、前記固定サイズを意識することなく、データ転送を指示することが可能となる。
【００７５】
また、前記固定サイズのメモリ領域に２つのバッファ領域Ａ、Ｂを設けておき、２つのバッファ領域Ａ、Ｂをそれぞれ交互に処理面、待機面に設定し、処理面に関してＥＨＣＩ１５にデータ転送要求を通知した上で、待機面に関してＵＳＢホスト装置１のＲＡＭ等との間でコピーを行うように構成しているため、ＥＨＣＩ１５によるデータ転送処理とＵＳＢホスト装置１のＲＡＭ等との間のコピー処理とを並行に実行させる（すなわち、一方のバッファ領域を用いてＵＳＢデバイス装置側とのデータ転送を行いつつ、他方のバッファ領域を用いてＵＳＢホスト装置側とのデータ転送を実行させる）ことができ、高速にデータ転送を実行することが可能となる。
【００７６】
（その他）
本発明は、上記実施形態に限定されることなく種々に変形して適用することが可能である。
【００７７】
例えば上記実施形態ではＥＨＣＩ１５を使用してデータ転送を行う場合について説明しているが、ＣＨＣＩ１３を使用してデータ転送する場合にも同様に本発明を適用することができる。すなわち、ＣＨＣＩ１３が管理するＵＳＢポートごとに共有メモリ１６上に固定サイズのメモリ領域を確保し、前記確保した固定サイズのメモリ領域をＵＳＢポートの各パイプに割り当ててバッファ領域とする構成を採用してもよい。ＥＨＣＩ１５、ＣＨＣＩ１３の両者について本発明を適用する場合、同一のＵＳＢポートに関して確保した前記固定サイズのメモリ領域を、ＥＨＣＤ１４とＣＨＣＤ１２とで共有し、排他的にバッファ領域として設定することもできる。
【００７８】
なお、本発明は、ＵＳＢ １．１規格、ＵＳＢ ２．０規格、或いはこれらの規格と同様の思想に基づく規格や、これらの規格を発展させた規格におけるデータ転送制御手法にも適用できる。
【図面の簡単な説明】
【００７９】
【図１】本実施形態におけるデータ転送システムの機能構成を示すブロック図である。
【図２】ＵＳＢにおけるデータ転送のスキームを説明するための図である。
【図３】本実施形態におけるＵＳＢデバイス装置２の接続からパイプオープンまでの処理内容を示すフローチャートである。
【図４】本実施形態におけるデータ転送処理の内容を示すフローチャートである。
【図５】本実施形態におけるデータ転送処理の内容を示すフローチャートである。
【符号の説明】
【００８０】
１  ＵＳＢホスト装置；１０  クライアントドライバ；１１  ＵＳＢＤ；１２  ＣＨＣＤ；１３  ＣＨＣＩ；１４  ＥＨＣＤ；１５  ＥＨＣＩ；１６  共有メモリ；２  ＵＳＢデバイス装置
【図１】
2006252334.tif 000003
【図２】
2006252334.tif 000004
【図３】
2006252334.tif 000005
【図４】
2006252334.tif 000006
【図５】
2006252334.tif 000007