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