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