(57)【特許請求の範囲】
【請求項１】
バスを介したデータ転送のためのデータ転送制御装置であって、
各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域を、パケットバッファに確保すると共に、パケットバッファのアクセス制御を行うバッファコントローラと、
パイプ領域とそのパイプ領域に対応するエンドポイントとの間でのデータ転送を制御する転送コントローラとを含み、
パイプ領域とエンドポイントとの間でのデータ転送をポーズするポーズ処理を行い、
データ転送のポーズ処理が完了した後に、確保されていたパイプ領域を削除する処理、新たなパイプ領域を追加する処理、及びパイプ領域のサイズを変更する処理の少なくとも１つを含むパイプ領域の再構築処理を行い、
パイプ領域の再構築処理後に、ポーズしていたデータ転送を再開することを特徴とするデータ転送制御装置。
【請求項２】
請求項１において、
データ転送のポーズ処理の指示情報を記憶するレジスタと、
全てのパイプ領域についてのポーズ処理が完了したことを示す情報を記憶するレジスタを含むことを特徴とするデータ転送制御装置。
【請求項３】
請求項１又は２において、
第１のエンドポイントに対応して再構築前にパケットバッファに確保されていた第１のパイプ領域が、再構築後もパケットバッファに確保される場合に、再構築前の第１のパイプ領域からデータを読み出し、読み出されたデータを再構築後の第１のパイプ領域に書き込むコピー処理を行うことを特徴とするデータ転送制御装置。
【請求項４】
バスを介したデータ転送のためのデータ転送制御装置であって、
各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域を、パケットバッファに確保すると共に、パケットバッファのアクセス制御を行うバッファコントローラと、
各パイプ領域と各エンドポイントとの間でのデータ転送の転送条件情報が各転送条件レジスタに設定される複数の転送条件レジスタを含むレジスタ部と、
転送条件レジスタに設定された転送条件情報に基づいて、エンドポイントに対するトランザクションを自動発生し、パイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを自動転送する転送コントローラとを含み、
確保されていたパイプ領域を削除する処理、新たなパイプ領域を追加する処理、及びパイプ領域のサイズを変更する処理の少なくとも１つを含むパイプ領域の再構築処理を行い、
第１のエンドポイントに対応して再構築前にパケットバッファに確保されていた第１のパイプ領域が、再構築後もパケットバッファに確保される場合に、再構築前の第１のパイプ領域からデータを読み出し、読み出されたデータを再構築後の第１のパイプ領域に書き込むコピー処理を行うことを特徴とするデータ転送制御装置。
【請求項５】
バスを介したデータ転送のためのデータ転送制御装置であって、
各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域を、パケットバッファに確保すると共に、パケットバッファのアクセス制御を行うバッファコントローラと、
ホストの役割として動作するホスト動作のステートと、ペリフェラルの役割として動作するペリフェラル動作のステートを含む複数のステートの制御を行うステートコントローラと、
パイプ領域とそのパイプ領域に対応するエンドポイントとの間でのデータ転送を制御する転送コントローラとを含み、
前記転送コントローラが、
ホスト動作時において、ホストとしてのデータ転送を行うホストコントローラと、
ペリフェラル動作時において、ペリフェラルとしてのデータ転送を行うペリフェラルコントローラとを含み、
ホスト動作時において、前記バッファコントローラが、パケットバッファに対して複数のパイプ領域を確保し、前記ホストコントローラが、確保されたパイプ領域とそのパイプ領域に対応するエンドポイントとの間で、データを転送すると共に、
確保されていたパイプ領域を削除する処理、新たなパイプ領域を追加する処理、及びパイプ領域のサイズを変更する処理の少なくとも１つを含むパイプ領域の再構築処理を行い、
第１のエンドポイントに対応して再構築前にパケットバッファに確保されていた第１のパイプ領域が、再構築後もパケットバッファに確保される場合に、再構築前の第１のパイプ領域からデータを読み出し、読み出されたデータを再構築後の第１のパイプ領域に書き込むコピー処理を行うことを特徴とするデータ転送制御装置。
【請求項６】
請求項４又は５において、
再構築前の第１のパイプ領域のスタートアドレスよりも再構築後の第１のパイプ領域のスタートアドレスの方が大きい場合には、再構築前の第１のパイプ領域の読み出しアドレスであるソースアドレスをデクリメントしながら、再構築前の第１のパイプ領域からデータを読み出し、再構築後の第１のパイプ領域の書き込みアドレスであるディスティネーションアドレスをデクリメントしながら、読み出されたデータを再構築後の第１のパイプ領域に書き込み、
再構築前の第１のパイプ領域のスタートアドレスよりも再構築後の第１のパイプ領域のスタートアドレスの方が小さい場合には、ソースアドレスをインクリメントしながら、再構築前の第１のパイプ領域からデータを読み出し、ディスティネーションアドレスをインクリメントしながら、読み出されたデータを再構築後の第１のパイプ領域に書き込むことを特徴とするデータ転送制御装置。
【請求項７】
請求項４乃至６のいずれかにおいて、
再構築前の第１のパイプ領域の読み出しアドレスであるソースアドレスを生成し、再構築後の第１のパイプ領域の書き込みアドレスであるディスネーションアドレスを生成し、生成されたソースアドレス、ディスティネーションアドレスのいずれかを選択して、再構築用アドレスとして出力する再構築用アドレス生成回路と、
前記再構築用アドレス生成回路からの再構築用アドレスと、前記転送コントローラからのアクセスアドレスと、データ転送制御装置を制御する処理部からのアクセスアドレスと、アプリケーション層デバイスからのアクセスアドレスのいずれかを選択して、パケットバッファに出力するアドレスセレクタと、
パケットバッファから読み出されたデータをラッチするラッチ回路と、
前記ラッチ回路にラッチされたデータと、前記転送コントローラからの書き込みデータと、前記処理部からの書き込みデータと、前記アプリケーション層デバイスからの書き込みデータのいずれかを選択し、選択されたデータをパケットバッファに出力する書き込みデータセレクタを含むことを特徴とするデータ転送制御装置。
【請求項８】
請求項４乃至７のいずれかにおいて、
再構築前の第１のパイプ領域の読み出しアドレスであるソースアドレスの初期値を記憶するレジスタと、
再構築後の第１のパイプ領域の書き込みアドレスであるディスティネーションアドレスの初期値を記憶するレジスタと、
ソースアドレス、ディスティネーションアドレスをインクリメントするか或いはデクリメントするかの指示情報を記憶するレジスタを含むことを特徴とするデータ転送制御装置。
【請求項９】
請求項１乃至８のいずれかにおいて、
パイプ領域でのデータの書き込みアドレス、読み出しアドレスを指す書き込みポインタ、読み出しポインタの制御を行うと共に、再構築前の第１のパイプ領域でのデータの書き込みアドレス、読み出しアドレスに対応する位置を、再構築後の第１のパイプ領域においても指すように、第１のパイプ領域の書き込みポインタ、読み出しポインタの移動処理を行うことを特徴とするデータ転送制御装置。
【請求項１０】
請求項９において、
再構築前の第１のパイプ領域でのデータの書き込みアドレス、読み出しアドレスに対応する位置を再構築後の第１のパイプ領域においても指すように、書き込みポインタ、読み出しポインタを移動するモードと、再構築後の第１のパイプ領域のスタートアドレス、エンドアドレスの位置を指すように、書き込みポインタ、読み出しポインタをクリアするモードとの切り替えの指示情報を記憶するレジスタを含むことを特徴とするデータ転送制御装置。
【請求項１１】
請求項９又は１０において、
書き込みポインタ、読み出しポインタが指す絶対書き込みアドレス、絶対読み出しアドレスを、再構築前の第１のパイプ領域のスタートアドレス、エンドアドレスを基準とした相対書き込みアドレス、相対読み出しアドレスに変換し、該相対書き込みアドレス、相対読み出しアドレスを、再構築後の第１のパイプ領域のスタートアドレス、エンドアドレスに基づいて、絶対書き込みアドレス、絶対読み出しアドレスに変換することで、書き込みポインタ、読み出しポインタの移動処理を行うことを特徴とするデータ転送制御装置。
【請求項１２】
請求項１乃至１１のいずれかにおいて、
ＵＳＢ（Universal Serial Bus)のＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格に準拠したデータ転送を行うことを特徴とするデータ転送制御装置。
【請求項１３】
請求項１乃至１２のいずれかのデータ転送制御装置と、
前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置と、
前記データ転送制御装置のデータ転送を制御する処理部と、
を含むことを特徴とする電子機器。
【請求項１４】
バスを介したデータ転送のためのデータ転送制御方法であって、
各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域を、パケットバッファに確保すると共に、パケットバッファのアクセス制御を行い、
パイプ領域とそのパイプ領域に対応するエンドポイントとの間でのデータ転送を制御すると共に、
パイプ領域とエンドポイントとの間でのデータ転送をポーズするポーズ処理を行い、
データ転送のポーズ処理が完了した後に、確保されていたパイプ領域を削除する処理、新たなパイプ領域を追加する処理、及びパイプ領域のサイズを変更する処理の少なくとも１つを含むパイプ領域の再構築処理を行い、
パイプ領域の再構築処理後に、ポーズしていたデータ転送を再開することを特徴とするデータ転送制御方法。
【請求項１５】
バスを介したデータ転送のためのデータ転送制御方法であって、
各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域を、パケットバッファに確保すると共に、パケットバッファのアクセス制御を行い、
各パイプ領域と各エンドポイントとの間でのデータ転送の転送条件情報を、複数の転送条件レジスタの各転送条件レジスタに設定し、
転送条件レジスタに設定された転送条件情報に基づいて、エンドポイントに対するトランザクションを自動発生し、パイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを自動転送すると共に、
確保されていたパイプ領域を削除する処理、新たなパイプ領域を追加する処理、及びパイプ領域のサイズを変更する処理の少なくとも１つ含むパイプ領域の再構築処理を行い、
第１のエンドポイントに対応して再構築前にパケットバッファに確保されていた第１のパイプ領域が、再構築後もパケットバッファに確保される場合に、再構築前の第１のパイプ領域からデータを読み出し、読み出されたデータを再構築後の第１のパイプ領域に書き込むコピー処理を行うことを特徴とするデータ転送制御方法。
【請求項１６】
バスを介したデータ転送のためのデータ転送制御方法であって、
各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域を、パケットバッファに確保すると共に、パケットバッファのアクセス制御を行い、
ホストの役割として動作するホスト動作のステートと、ペリフェラルの役割として動作するペリフェラル動作のステートを含む複数のステートの制御を行い、
ホスト動作時においては、ホストコントローラが、ホストとしてのデータ転送を行い、ペリフェラル動作時においては、ペリフェラルコントローラが、ペリフェラルとしてのデータ転送を行い、
ホスト動作時において、パケットバッファに対して複数のパイプ領域を確保し、ホストコントローラが、確保されたパイプ領域とそのパイプ領域に対応するエンドポイントとの間で、データを転送すると共に、
確保されていたパイプ領域を削除する処理、新たなパイプ領域を追加する処理、及びパイプ領域のサイズを変更する処理の少なくとも１つ含むパイプ領域の再構築処理を行い、
第１のエンドポイントに対応して再構築前にパケットバッファに確保されていた第１のパイプ領域が、再構築後もパケットバッファに確保される場合に、再構築前の第１のパイプ領域からデータを読み出し、読み出されたデータを再構築後の第１のパイプ領域に書き込むコピー処理を行うことを特徴とするデータ転送制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ転送制御装置、電子機器及びデータ転送制御方法に関する。
【０００２】
【背景技術】
近年、ＵＳＢ（Universal Serial Bus)１．１の規格に対する互換性を持ちながら、ＵＳＢ１．１に比べて格段に高速な４８０Ｍｂｐｓ（ＨＳモード）のデータ転送速度を実現できる規格として、ＵＳＢ２．０規格が策定され、注目を浴びている。
【０００３】
【特許文献１】
特開２００２−１３５１３２号公報
【０００４】
【発明が解決しようとする課題】
さて、ＨＳ（High Speed）モードをサポートするＵＳＢ（Universal Serial Bus)２．０の市場が順調に拡大しているなか、ＵＳＢ  Implementers Forum（ＵＳＢ−ＩＦ）によって、ＵＳＢの簡易ホストを実現する規格の１つとしてＵＳＢＯｎ−Ｔｈｅ−Ｇｏ（ＯＴＧ）が策定された。ＵＳＢ２．０を拡張する形で策定されたＯＴＧ規格（ＯＴＧ１．０）は、ＵＳＢインターフェースの新たな付加価値を生む可能性を秘めており、その特質を生かしたアプリケーションの登場が待たれている。
【０００５】
ＯＴＧなどにより実現される簡易ホストを利用すれば、これまでＵＳＢを介してホスト（パーソナルコンピュータ等）に接続されていたペリフェラル（周辺機器）に、ホスト機能を持たせることができる。これにより、ペリフェラル同士をＵＳＢで接続してデータを転送することが可能になり、例えばデジタルカメラとプリンタとをダイレクトに接続して、デジタルカメラの画像を印刷したり、デジタルカメラやデジタルビデオカメラをストレージ装置に接続して、データを保存することが可能になる。
【０００６】
しかしながら、ＯＴＧなどの簡易ホストを利用してホスト機能を持たせるペリフェラルには、低性能のＣＰＵ（広義には処理部）が組み込まれているのが一般的である。従って、ホスト機能の追加により、ペリフェラルが有するＣＰＵ（ファームウェア）の処理負荷が重くなったり、処理が複雑化すると、他の処理に支障が生じたり、機器の設計期間が長期化する。
【０００７】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、処理の効率化を図ることができるデータ転送制御装置、電子機器及びデータ転送制御方法を提供することにある。
【０００８】
【課題を解決するための手段】
本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域を、パケットバッファに確保すると共に、パケットバッファのアクセス制御を行うバッファコントローラと、パイプ領域とそのパイプ領域に対応するエンドポイントとの間でのデータ転送を制御する転送コントローラとを含み、パイプ領域とエンドポイントとの間でのデータ転送をポーズするポーズ処理を行い、データ転送のポーズ処理が完了した後に、確保されていたパイプ領域を削除する処理、新たなパイプ領域を追加する処理、及びパイプ領域のサイズを変更する処理の少なくとも１つを含むパイプ領域の再構築処理を行い、パイプ領域の再構築処理後に、ポーズしていたデータ転送を再開するデータ転送制御装置に関係する。
【０００９】
本発明では、例えば処理部からポーズ等の指示があると、データ転送がその途中で一時的にポーズされる。そして例えば全てのパイプ領域（一部の例外があってもよい）についてのデータ転送のポーズ処理が完了すると、パイプ領域の再構築処理が行われる。この再構築処理は、既存のパイプ領域（バッファ領域）を削除する処理や新たなパイプ領域を追加する処理や既存のパイプ領域のサイズを変更する処理を含む。或いは再構築処理には、再構築の前後に存在するパイプ領域のデータをコピー（待避、移動）する処理や、パイプ領域の削除によりパケットバッファに生じた空き領域を他のパイプ領域に割り当てる処理や、パイプ領域の論理アドレスと物理アドレスの対応付けを変化させる処理などを含めることができる。そして本発明では、再構築処理が完了すると、ポーズされたデータ転送が再開され、残りのデータ転送が実行される。このように本発明によれば、パイプ領域についてのデータ転送の全てが完了するのを待つことなく、パイプ領域を再構築でき、処理の効率化を図れる。
【００１０】
また本発明では、データ転送のポーズ処理の指示情報を記憶するレジスタと、全てのパイプ領域についてのポーズ処理が完了したことを示す情報を記憶するレジスタを含んでもよい。
【００１１】
このようなレジスタ（指示手段、通知手段）を設けることで、ポーズ処理が確実に完了したことを待ってから、パイプ領域の再構築を開始できる。
【００１２】
また本発明では、第１のエンドポイントに対応して再構築前にパケットバッファに確保されていた第１のパイプ領域が、再構築後もパケットバッファに確保される場合に、再構築前の第１のパイプ領域からデータを読み出し、読み出されたデータを再構築後の第１のパイプ領域に書き込むコピー処理を行うようにしてもよい。
【００１３】
このようにすれば第１のパイプ領域のデータが破壊（消去）されてしまう事態を防止できる。なお再構築の前後でスタートアドレスやエンドアドレスが変化した第１のパイプ領域のみについて、コピー処理を行ってもよい。
【００１４】
また本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、各エンドポイントとの間で転送されるデータが各パイプ領域に記憶される複数のパイプ領域を、パケットバッファに確保すると共に、パケットバッファのアクセス制御を行うバッファコントローラと、パイプ領域とそのパイプ領域に対応するエンドポイントとの間でのデータ転送を制御する転送コントローラとを含み、確保されていたパイプ領域を削除する処理、新たなパイプ領域を追加する処理、及びパイプ領域のサイズを変更する処理の少なくとも１つを含むパイプ領域の再構築処理を行い、第１のエンドポイントに対応して再構築前にパケットバッファに確保されていた第１のパイプ領域が、再構築後もパケットバッファに確保される場合に、再構築前の第１のパイプ領域からデータを読み出し、読み出されたデータを再構築後の第１のパイプ領域に書き込むコピー処理を行うデータ転送制御装置に関係する。
【００１５】
本発明によれば、例えばエンドポイントの増減があった場合に、パイプ領域（バッファ領域）の再構築処理が行われる。そしてこの再構築処理の際に第１のパイプ領域のデータのコピー処理が行われるため、第１のパイプ領域のデータが破壊（消去）されてしまう事態を防止できる。
【００１６】
また本発明では、再構築前の第１のパイプ領域のスタートアドレスよりも再構築後の第１のパイプ領域のスタートアドレスの方が大きい場合には、再構築前の第１のパイプ領域の読み出しアドレスであるソースアドレスをデクリメントしながら、再構築前の第１のパイプ領域からデータを読み出し、再構築後の第１のパイプ領域の書き込みアドレスであるディスティネーションアドレスをデクリメントしながら、読み出されたデータを再構築後の第１のパイプ領域に書き込み、再構築前の第１のパイプ領域のスタートアドレスよりも再構築後の第１のパイプ領域のスタートアドレスの方が小さい場合には、ソースアドレスをインクリメントしながら、再構築前の第１のパイプ領域からデータを読み出し、ディスティネーションアドレスをインクリメントしながら、読み出されたデータを再構築後の第１のパイプ領域に書き込むようにしてもよい。
【００１７】
このようにすれば、再構築前の第１のパイプ領域のデータが上書きされてしまう事態を防止しながら、再構築前の第１のパイプ領域から読み出したデータを再構築後の第１のパイプ領域に書き込むコピー処理を実現できる。
【００１８】
また本発明では、再構築前の第１のパイプ領域の読み出しアドレスであるソースアドレスを生成し、再構築後の第１のパイプ領域の書き込みアドレスであるディスネーションアドレスを生成し、生成されたソースアドレス、ディスティネーションアドレスのいずれかを選択して、再構築用アドレスとして出力する再構築用アドレス生成回路と、前記再構築用アドレス生成回路からの再構築用アドレスと、前記転送コントローラからのアクセスアドレスと、データ転送制御装置を制御する処理部からのアクセスアドレスと、アプリケーション層デバイスからのアクセスアドレスのいずれかを選択して、パケットバッファに出力するアドレスセレクタと、パケットバッファから読み出されたデータをラッチするラッチ回路と、前記ラッチ回路にラッチされたデータと、前記転送コントローラからの書き込みデータと、前記処理部からの書き込みデータと、前記アプリケーション層デバイスからの書き込みデータのいずれかを選択し、選択されたデータをパケットバッファに出力する書き込みデータセレクタを含むようにしてもよい。
【００１９】
また本発明では、再構築前の第１のパイプ領域の読み出しアドレスであるソースアドレスの初期値を記憶するレジスタと、再構築後の第１のパイプ領域の書き込みアドレスであるディスティネーションアドレスの初期値を記憶するレジスタと、ソースアドレス、ディスティネーションアドレスをインクリメントするか或いはデクリメントするかの指示情報を記憶するレジスタを含むようにしてもよい。このようなレジスタ（設定手段、指示手段）を設けて、データ転送制御装置と処理部との間で役割分担を行うことで、処理の効率化を図れる。
【００２０】
また本発明では、パイプ領域でのデータの書き込みアドレス、読み出しアドレスを指す書き込みポインタ、読み出しポインタの制御を行うと共に、再構築前の第１のパイプ領域でのデータの書き込みアドレス、読み出しアドレスに対応する位置を、再構築後の第１のパイプ領域においても指すように、第１のパイプ領域の書き込みポインタ、読み出しポインタの移動処理を行うようにしてもよい。
【００２１】
このようにすれば、パイプ領域の再構築後に、データ転送の途中の続きからデータ転送を適正に再開できる。
【００２２】
また本発明では、再構築前の第１のパイプ領域でのデータの書き込みアドレス、読み出しアドレスに対応する位置を再構築後の第１のパイプ領域においても指すように、書き込みポインタ、読み出しポインタを移動するモードと、再構築後の第１のパイプ領域のスタートアドレス、エンドアドレスの位置を指すように、書き込みポインタ、読み出しポインタをクリアするモードとの切り替えの指示情報を記憶するレジスタを含むようにしてもよい。
【００２３】
このようにすればデータ転送の途中から再開するモードと、ポインタをクリアするモードとをパイプ領域毎に切り替えることが可能になる。
【００２４】
また本発明では、書き込みポインタ、読み出しポインタが指す絶対書き込みアドレス、絶対読み出しアドレスを、再構築前の第１のパイプ領域のスタートアドレス、エンドアドレスを基準とした相対書き込みアドレス、相対読み出しアドレスに変換し、該相対書き込みアドレス、相対読み出しアドレスを、再構築後の第１のパイプ領域のスタートアドレス、エンドアドレスに基づいて、絶対書き込みアドレス、絶対読み出しアドレスに変換することで、書き込みポインタ、読み出しポインタの移動処理を行うようにしてもよい。
【００２５】
また本発明では、各パイプ領域と各エンドポイントとの間でのデータ転送の転送条件情報が各転送条件レジスタに設定される複数の転送条件レジスタを含むレジスタ部を含み、前記転送コントローラが、転送条件レジスタに設定された転送条件情報に基づいて、エンドポイントに対するトランザクションを自動発生し、パイプ領域と、そのパイプ領域に対応するエンドポイントとの間で、データを自動転送するようにしてもよい。
【００２６】
本発明では、各パイプ領域と各エンドポイントとの間でのデータ転送の転送条件情報（エンドポイント情報、パイプ情報）が各転送条件レジスタ（パイプレジスタ）に設定される。そして、各転送条件レジスタに設定された転送条件情報に基づいて、各エンドポイントに対するトランザクションが自動発生し、各パイプ領域と各エンドポイントとの間でデータが自動転送される。これにより、データ転送制御装置の制御等を行う処理部の処理負荷を軽減できる。
【００２７】
また本発明では、ホストの役割として動作するホスト動作のステートと、ペリフェラルの役割として動作するペリフェラル動作のステートを含む複数のステートの制御を行うステートコントローラを含み、前記転送コントローラが、ホスト動作時において、ホストとしてのデータ転送を行うホストコントローラと、ペリフェラル動作時において、ペリフェラルとしてのデータ転送を行うペリフェラルコントローラとを含み、ホスト動作時において、前記バッファコントローラが、パケットバッファに対して複数のパイプ領域を確保し、前記ホストコントローラが、確保されたパイプ領域とそのパイプ領域に対応するエンドポイントとの間で、データを転送するようにしてもよい。
【００２８】
本発明によれば、ステートコントローラにより制御されるステートがホスト動作のステートになると、ホストコントローラによりホストの役割としてのデータ転送が行われる。またステートコントローラにより制御されるステートがペリフェラル動作のステートになると、ペリフェラルコントローラによりペリフェラルの役割としてのデータ転送が行われる。これによりデュアルロール・デバイス機能を実現できる。そして本発明では、ホスト動作時においてパケットバッファに対して複数のパイプ領域が確保され、確保されたパイプ領域とエンドポイントとの間でデータが自動転送される。これによりデュアルロール・デバイス機能を実現できると共にホスト動作時における処理部の処理負荷を軽減できる。
【００２９】
また本発明では、ＵＳＢ（Universal Serial Bus)のＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格に準拠したデータ転送を行うようにしてもよい。
【００３０】
また本発明は、上記のいずれかのデータ転送制御装置と、前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置と、前記データ転送制御装置のデータ転送を制御する処理部とを含む電子機器に関係する。
【００３１】
【発明の実施の形態】
以下、本実施形態について説明する。なお以下に説明する本実施形態は特許請求の範囲に記載された本発明の内容を不当に限定するものではなく、本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００３２】
１．簡易ホスト
１．１  Ａデバイス、Ｂデバイス
まず、簡易ホストを実現する規格の一例としてＯＴＧ（ＵＳＢ Ｏｎ−Ｔｈｅ−Ｇｏ）について説明する。但し本発明の手法は、このようなＯＴＧ規格のデータ転送制御手法に限定されるものではない。
【００３３】
ＯＴＧでは、コネクタの規格として、図１（Ａ）に示すようなMini-Ａプラグ、Mini-Ｂプラグが定義されている。また、これらのMini-Ａプラグ、Mini−Ｂプラグ（広義にはケーブルの第１、第２のプラグ）の両方を接続できるコネクタとして、Mini-ＡＢレセプタクル（receptacle）が定義されている。
【００３４】
そして図１（Ｂ）のように、ＵＳＢケーブルのMini-Ａプラグに電子機器Ｐが接続され、Mini-Ｂプラグに電子機器Ｑが接続されると、電子機器Ｐ、Ｑは、各々、Ａデバイス、Ｂデバイスに設定される。一方、図１（Ｃ）に示すように、Mini-Ｂプラグ、Mini-Ａプラグが電子機器Ｐ、Ｑに接続されると、電子機器Ｐ、Ｑは、各々、Ｂデバイス、Ａデバイスに設定される。電子機器は、内蔵するプルアップ抵抗回路を用いてＩＤピンの電圧レベルを検出することで、自身がどちらのタイプのプラグに接続されたのか判断する。
【００３５】
なおＯＴＧでは、Ａデバイス（マスター）が、電源（ＶＢＵＳ）を供給する側（供給元）になり、Ｂデバイス（スレーブ）が、電源の供給を受ける側（供給先）になる。また、Ａデバイスは、デフォルトのステートがホストになり、Ｂデバイスは、デフォルトのステートがペリフェラル（周辺機器）になる。
【００３６】
１．２  デュアルロール・デバイス
ＯＴＧでは、ホスト（簡易ホスト）としての役割とペリフェラルとしての役割の両方を持つことができるデュアルロール・デバイス（Dual-Role Device）が定義されている。
【００３７】
デュアルロール・デバイスは、ホストにもペリフェラルにもなれる。そして、デュアルロール・デバイスに接続された相手が、従来のＵＳＢ規格におけるホストやペリフェラルである場合には、デュアルロール・デバイスの役割は一意に定まる。つまり、接続相手がホストであれば、デュアルロール・デバイスはペリフェラルになり、接続相手がペリフェラルであれば、デュアルロール・デバイスはホストになる。一方、接続相手がデュアルロール・デバイスである場合には、両方のデュアルロール・デバイスは、お互いにホストとペリフェラルの役割を交換できる。
【００３８】
デュアルロール・デバイスは、セッション開始要求手順ＳＲＰ（Session Request Protocol）やホスト交換手順ＨＮＰ（Host Negotiation Protocol）の機能を持つ。ここでＳＲＰは、ＢデバイスがＡデバイスに対して、ＶＢＵＳ（電源）の供給を要求するプロトコルである。またＨＮＰは、ホストとペリフェラルの役割を交換するためのプロトコルである。
【００３９】
即ち前述のようにデュアルロール・デバイス同士の接続では、Mini-Ａプラグが接続された側であるＡデバイスがデフォルトのホストとなり、Mini-Ｂプラグが接続された側であるＢデバイスがデフォルトのペリフェラルになる。そしてＯＴＧでは、プラグの抜き差しを行わなくても、ホストとペリフェラルの役割を交換でき、ＨＮＰはこの役割交換を実現するプロトコルである。
【００４０】
２．ＯＨＣＩ
従来のＵＳＢでは、ホストであるパーソナルコンピュータが有するホストコントローラは、マイクロソフト社が提唱したＯＨＣＩ（Open Host Controller Interface）や、ＵＨＣＩ（Universal Host Controller Interface）といった規格に準拠していた。また使用されるＯＳ（Operating System）も、マイクロソフト社やアップル社のＯＳに限定されていた。
【００４１】
しかしながら、ＯＴＧのターゲット・アプリケーションである小型携帯機器では、組み込まれるＣＰＵのアーキテクチャや使用されるＯＳは千差万別である。また、パーソナルコンピュータのホストコントローラ向けに規格化されたＯＨＣＩやＵＨＣＩは、ＵＳＢホストとしての機能をフルに実装することを前提としており、小型携帯機器への実装に最適であるとは言い難い。更に、ＯＨＣＩ準拠のデータ転送制御装置（ホストコントローラ）では、ＣＰＵ上で動作するファームウェア（ホストコントローラ・ドライバ）が、複雑なリスト構造のディスクリプタを作成しなければならないため、ＣＰＵの処理負荷が重い。
【００４２】
そして小型携帯機器（デジタルカメラ、携帯電話等）に組み込まれるＣＰＵ（embedded CPU）は、パーソナルコンピュータのＣＰＵに比べて低性能であるのが一般的である。従って携帯機器にＯＴＧのホスト動作を行わせると、携帯機器に組み込まれるＣＰＵに過大な負荷がかかり、他の処理に支障が生じたり、データ転送のパフォーマンスが低下する。
【００４３】
３．構成例
図２に、以上のような問題を解決できる本実施形態のデータ転送制御装置（データ転送制御回路）の構成例を示す。なお本実施形態のデータ転送制御装置は、図２の一部の機能ブロックを省略する構成としてもよい。また図２の機能ブロックはハードウェア回路のみにより実現してもよいし、ハードウェア回路とファームウェア（ソフトウェア）の両方により実現してもよい。また以下ではＯＴＧ規格に準拠したデータ転送制御装置への本発明の適用例を説明するが、ＯＴＧ規格を発展させた規格に準拠したデータ転送制御装置やＯＴＧ規格に準拠しないデータ転送制御装置にも本発明は適用できる。例えばデュアルロール・デバイスの機能は持たず、簡易ホストとしての機能だけを持つようなデータ転送制御装置にも本発明は適用できる。
【００４４】
データ転送制御装置はトランシーバ１０（以下、適宜Ｘｃｖｒと呼ぶ）を含む。このトランシーバ１０は、差動データ信号ＤＰ、ＤＭを用いてＵＳＢ（広義にはバス）のデータを送受信する回路であり、ＵＳＢの物理層（ＰＨＹ）回路１２を含む。より具体的にはトランシーバ１０は、ＤＰ、ＤＭのラインステート（Ｊ、Ｋ、ＳＥ０等）の生成、シリアル／パラレル変換、パラレル／シリアル変換、ビットスタッフィング、ビットアンスタッフィング、ＮＲＺＩデコード、ＮＲＺＩエンコードなどを行う。なお、トランシーバ１０をデータ転送制御装置の外部に設けるようにしてもよい。
【００４５】
データ転送制御装置はＯＴＧコントローラ２０（広義にはステートコントローラ。以下、適宜ＯＴＧＣと呼ぶ）を含む。このＯＴＧコントローラ２０は、ＯＴＧのＳＲＰ機能やＨＮＰ機能を実現するための処理を行う。即ちＯＴＧコントローラ２０は、ホストの役割として動作するホスト動作のステートや、ペリフェラルの役割として動作するペリフェラル動作のステートなどを含む複数のステートの制御を行う。
【００４６】
より具体的には、ＯＴＧ規格には、デュアルロール・デバイスのＡデバイス時のステート遷移やＢデバイス時のステート遷移が定義されている。ＯＴＧコントローラ２０は、これらのステート遷移を実現するためのステートマシーンを含む。またＯＴＧコントローラ２０は、ＵＳＢのデータラインステートやＶＢＵＳレベルやＩＤピンのステートを検出（監視）する回路を含む。そして、ＯＴＧコントローラ２０が含むステートマシーンは、これらの検出情報に基づいてそのステート（例えば、ホスト、ペリフェラル、サスペンド又はアイドルなどのステート）を変化させる。この場合のステートの遷移は、ハードウェア回路により実現してもよいし、ファームウェアがステートコマンドをレジスタに設定することで実現してもよい。そしてステートが遷移すると、ＯＴＧコントローラ２０は、遷移後のステートに基づいて、ＶＢＵＳを制御したり、ＤＰ、ＤＭのプルアップ抵抗／プルダウン抵抗の接続／非接続を制御する。また、ホストコントローラ５０（以下、適宜ＨＣと呼ぶ）、ペリフェラルコントローラ６０（以下、適宜ＰＣと呼ぶ）のイネーブル／ディスエーブルを制御する。
【００４７】
データ転送制御装置はＨＣ／ＰＣ切り替え回路３０（ＨＣ／ＰＣ・コモン回路）を含む。このＨＣ／ＰＣ切り替え回路３０は、トランシーバ１０と、ホストコントローラ５０又はペリフェラルコントローラ６０との間の接続の切り替えを制御する。またＵＳＢのデータ（ＤＰ、ＤＭ）のラインステートの生成の指示をトランシーバ１０に対して行う。なお接続の切り替え制御は、ＨＣ／ＰＣセレクタ３２により実現され、ラインステートの生成指示は、ラインステートコントローラ３４により実現される。
【００４８】
例えばＯＴＧコントローラ２０がホスト動作時にＨＣイネーブル信号をアサートすると、ＨＣ／ＰＣ切り替え回路３０（ＨＣ／ＰＣセレクタ３２）は、トランシーバ１０とホストコントローラ５０を接続する。一方、ＯＴＧコントローラ２０が、ペリフェラル動作時にＰＣイネーブル信号をアサートすると、ＨＣ／ＰＣ切り替え回路３０は、トランシーバ１０とペリフェラルコントローラ６０を接続する。これにより、ホストコントローラ５０とペリフェラルコントローラ６０とを排他的に動作させることが可能になる。
【００４９】
データ転送制御装置は転送コントローラ４０を含む。この転送コントローラ４０は、ＵＳＢ（広義にはバス）を介したデータ転送を制御する回路であり、ホストコントローラ５０（ＨＣ）とペリフェラルコントローラ６０（ＰＣ）を含む。なお簡易ホスト機能だけを実現する場合には、転送コントローラ４０にペリフェラルコントローラ６０を含ませない構成としてもよい。
【００５０】
ホストコントローラ５０は、ホスト動作時（ＨＣイネーブル信号のアサート時）にホストの役割としてのデータ転送制御を行う回路である。即ちホストコントローラ５０はホスト動作時にＨＣ／ＰＣ切り替え回路３０によりトランシーバ１０に接続される。そしてホストコントローラ５０は、レジスタ部７０の転送条件レジスタ部７２に設定された転送条件情報に基づき、エンドポイントに対するトランザクションを自動発生する。そしてパケットバッファ１００に確保（allocate）されたパイプ領域（ＰＩＰＥ０〜ＰＩＰＥｅ。以下、適宜ＰＩＰＥと呼ぶ）と、そのパイプ領域に対応するエンドポイントとの間で、データ（パケット）の自動転送（処理部が介在しないハードウェア回路によるデータ転送）を行う。
【００５１】
より具体的にはホストコントローラ５０は、複数のパイプ転送間の調停、フレームにおける時間管理、転送のスケジューリング、再送の管理などを行う。またパイプ転送の転送条件情報（オペレーション情報）をレジスタ部７０を介して管理する。また、トランザクションの管理を行ったり、パケットを生成／分解したり、サスペンド／レジューム／リセット状態生成の指示を行う。
【００５２】
ペリフェラルコントローラ６０はペリフェラル動作時（ＰＣイネーブル信号のアサート時）にペリフェラルの役割としてのデータ転送制御を行う回路である。
【００５３】
即ちペリフェラルコントローラ６０は、ペリフェラル動作時にＨＣ／ＰＣ切り替え回路３０によりトランシーバ１０に接続される。そしてレジスタ部７０の転送条件レジスタ部７２に設定された転送条件情報に基づき、パケットバッファ１００に確保されたエンドポイント領域（ＥＰ０〜ＥＰｅ。以下適宜ＥＰと呼ぶ）とホストとの間でデータを転送する。
【００５４】
より具体的には、ペリフェラルコントローラ６０は、エンドポイント転送の転送条件情報（オペレーション情報）をレジスタ部７０を介して管理する。また、トランザクションの管理を行ったり、パケットを生成／分解したり、リモート・ウェイクアップ信号生成の指示を行う。
【００５５】
なおエンドポイントは、ユニークなアドレスを割り当てることができる、ペリフェラル（デバイス）上のポイント（部分）である。ホストとペリフェラル（デバイス）との間でのデータ転送は、全て、このエンドポイントを経由して行われる。またトランザクションは、トークンパケットと、オプショナルなデータパケットと、オプショナルなハンドシェークパケットにより構成される。
【００５６】
データ転送制御装置はレジスタ部７０を含む。このレジスタ部７０は、データ転送（パイプ転送、エンドポイント転送）制御、バッファアクセス制御、バッファ管理、割り込み制御、ブロック制御、或いはＤＭＡ制御などを行うための種々のレジスタを含む。なおレジスタは、ＲＡＭなどのメモリにより実現してもよいし、Ｄフリップフロップなどにより実現してもよい。またレジスタ部７０のレジスタは、１つにまとめずに、各ブロック（ＨＣ、ＰＣ、ＯＴＧＣ、Ｘｃｖｒ等）に分散して配置してもよい。
【００５７】
レジスタ部７０は、転送条件レジスタ部７２を含む。この転送条件レジスタ部７２は、ホスト動作時にパケットバッファ１００に確保されるパイプ領域（ＰＩＰＥ０〜ＰＩＰＥｅ）とエンドポイントとの間でのデータ転送の転送条件情報を記憶するレジスタを含む。これらの各転送条件レジスタは、パケットバッファ１００の各パイプ領域に対応して設けられる。
【００５８】
なおペリフェラル動作時には、パケットバッファ１００にはエンドポイント領域（ＥＰ０〜ＥＰｅ）が確保される。そして転送条件レジスタ部７２に設定された転送条件情報に基づいて、データ転送制御装置とホストとの間でのデータ転送が行われる。
【００５９】
データ転送制御装置はバッファコントローラ８０（ＦＩＦＯマネージャ）を含む。このバッファコントローラ８０は、パケットバッファ１００にパイプ領域やエンドポイント領域を確保する処理を行う。またパケットバッファ１００に対するアクセス制御や領域管理を行う。より具体的にはバッファコントローラ８０は、ＣＰＵからのアクセス（処理部側からのアクセス）、ＤＭＡからのアクセス（アプリケーション層デバイスからのアクセス）、ＵＳＢからのアクセス（転送コントローラからのアクセス）の制御を行ったり、これらのアクセスの調停を行ったり、アクセス・アドレスの生成・管理を行う。
【００６０】
データ転送制御装置はパケットバッファ１００（ＦＩＦＯ、パケットメモリ、データバッファ）を含む。このパケットバッファ１００は、ＵＳＢを介して転送されるデータ（送信データ又は受信データ）を一時的に記憶（バッファリング）するものである。このパケットバッファ１００は、例えばＲＡＭ（Random Access Memory）などにより構成できる。なおパケットバッファ１００の一部又は全部をデータ転送制御装置の外部に設けてもよい（外付けメモリにしてもよい）。
【００６１】
ホスト動作時には、パケットバッファ１００はパイプ転送用のＦＩＦＯ（First-In First-Out）として使用される。即ち、パケットバッファ１００には、ＵＳＢ（バス）の各エンドポイントに対応するように、パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅ（広義にはバッファ領域）が確保される。また、各パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅには、それに対応する各エンドポイントとの間で転送されるデータ（送信データ又は受信データ）が記憶される。
【００６２】
一方、ペリフェラル動作時には、パケットバッファ１００はエンドポイント転送用のＦＩＦＯとして使用される。即ち、パケットバッファ１００には、エンドポイント領域ＥＰ０〜ＥＰｅ（広義にはバッファ領域）が確保される。また各エンドポイント領域ＥＰ０〜ＥＰｅには、ホストとの間で転送されるデータ（送信データ又は受信データ）が記憶される。
【００６３】
なおパケットバッファ１００に確保されるバッファ領域（ホスト動作時にパイプ領域に設定され、ペリフェラル動作時にエンドポイント領域に設定される領域）は、先に入力された情報が先に出力されるような記憶領域（ＦＩＦＯ領域）に設定されている。またＰＩＰＥ０は、コントロール転送用のエンドポイント０に専用のパイプ領域であり、ＰＩＰＥａ〜ＰＩＰＥｅは、任意のエンドポイントに割り当て可能な汎用のパイプ領域である。即ち、ＵＳＢでは、エンドポイント０がコントロール転送に専用のエンドポイントに設定される。従って本実施形態のようにＰＩＰＥ０をコントロール転送に専用のパイプ領域にすることで、ユーザが混乱するのを防止できる。またＰＩＰＥａ〜ＰＩＰＥｅを任意のエンドポイントに割り当て可能なパイプ領域にすることで、エンドポイントに対応するパイプ領域を動的に変化させることが可能になる。これにより、パイプ転送のスケジューリングの自由度を向上でき、データ転送を効率化できる。
【００６４】
なお本実施形態では、バッファ領域は、マックスパケットサイズMaxPktSize（広義にはページサイズ）とページ数BufferPageにより、その領域サイズRSizeが設定される（RSize=MaxPktSize×BufferPage）。このようにすることで、バッファ領域の領域サイズや面数（ページ数）を任意に設定できるようになり、パケットバッファ１００のリソースの有効利用を図れる。
【００６５】
データ転送制御装置はインターフェース回路１１０を含む。このインターフェース回路１１０は、ＵＳＢとは異なる他のバスであるＤＭＡ（DirectMemoryAccess）バスやＣＰＵバスと、パケットバッファ１００との間でのデータ転送を行うための回路である。このインターフェース回路１１０は、パケットバッファ１００と外部のシステムメモリとの間でＤＭＡ転送を行うためのＤＭＡハンドラ回路１１２（広義には第１のインターフェース回路）を含む。またパケットバッファ１００と外部のＣＰＵとの間でＰＩＯ（Parallel I/O）転送を行うためのＣＰＵインターフェース回路１１４（広義には第２のインターフェース回路)を含む。なお、ＣＰＵ（広義には処理部）をデータ転送制御装置に内蔵させてもよい。
【００６６】
データ転送制御装置はクロックコントローラ１２０を含む。このクロックコントローラ１２０は、内蔵ＰＬＬ又は外部入力クロックに基づいて、データ転送制御装置の内部で使用する各種のクロックを生成する。
【００６７】
４．パイプ領域
本実施形態では図３（Ａ）に示すように、ホスト動作時にパケットバッファ１００にパイプ領域ＰＩＰＥ０〜ＰＩＰＥｅが確保される。そしてこの各パイプ領域とペリフェラルの各エンドポイントの間でデータが転送される。
【００６８】
ここで、本実施形態のパイプ領域の「パイプ」は、ＵＳＢで定義される「パイプ」（デバイス上のエンドポイントとホスト上のソフトウェアとの間の関連を表す論理的な抽象化、論理的な経路）とは若干意味合いが異なる。
【００６９】
本実施形態のパイプ領域は、図３（Ａ）に示すように、ＵＳＢ（バス）に接続されるペリフェラルが有する各エンドポイントに対応して、パケットバッファ１００上に確保される。例えば図３（Ａ）において、パイプ領域ＰＩＰＥａはペリフェラル１のエンドポイント１（バルクＩＮ）に対応し、ＰＩＰＥｂはペリフェラル１のエンドポイント２（バルクＯＵＴ）に対応する。またＰＩＰＥｃはペリフェラル２のエンドポイント１（バルクＩＮ）に対応し、ＰＩＰＥｄはペリフェラル２のエンドポイント２（バルクＯＵＴ）に対応する。またＰＩＰＥｅはペリフェラル３のエンドポイント１（インタラプトＩＮ）に対応する。なおＰＩＰＥ０は、コントロール転送のエンドポイント０に専用のパイプ領域である。
【００７０】
そして図３（Ａ）の例では、パイプ領域ＰＩＰＥａとペリフェラル１のエンドポイント１との間でＵＳＢのバルクＩＮ転送が行われ、ＰＩＰＥｂとペリフェラル１のエンドポイント２との間ではバルクＯＵＴ転送が行われる。またＰＩＰＥｃとペリフェラル２のエンドポイント１との間ではバルクＩＮ転送が行われ、ＰＩＰＥｄとペリフェラル２のエンドポイント２との間ではバルクＯＵＴ転送が行われる。またＰＩＰＥｅとペリフェラル３のエンドポイント１との間ではインタラプトＩＮ転送が行われる。以上のように本実施形態では、パイプ領域（汎用）とそれに対応するエンドポイントとの間では、任意のデータ転送（アイソクロナス転送、バルク転送、インタラプト転送）を行うことができる。
【００７１】
そして本実施形態では、パイプ領域とそれに対応するエンドポイントの間では所与のデータ単位（トータルサイズで指定されるデータ単位）のデータが転送される。このデータ単位としては、例えばＩＲＰ（Ｉ／Ｏリクエストパケット）により転送要求されるデータ単位又はそれを適当なサイズに分割したデータ単位を想定できる。エンドポイントに対するこのデータ単位のデータ転送（一連のトランザクション）を本実施形態における「パイプ」と呼ぶことができ、「パイプ」のデータ（送信データ、受信データ）を記憶する領域がパイプ領域になる。
【００７２】
パイプ領域を用いた所与のデータ単位の転送が終了すると、そのパイプ領域は解放できる。そして解放されたパイプ領域は新たに任意のエンドポイントに割り当てることができる。このように本実施形態では、パイプ領域とエンドポイントとの対応づけを動的に変化させることができる。
【００７３】
また本実施形態では図３（Ｂ）に示すように、ペリフェラル動作時にはパケットバッファ１００にエンドポイント領域ＥＰ０〜ＥＰｅが確保される。そして各エンドポイント領域とホストとの間でデータが転送される。
【００７４】
このように本実施形態では、パケットバッファ１００のバッファ領域を、ホスト動作時にはパイプ領域に割り当て、ペリフェラル動作時にはエンドポイント領域に割り当てている。これにより、ホスト動作時とペリフェラル動作時とでパケットバッファ１００のリソースを共用（兼用）することができ、パケットバッファ１００の使用記憶容量を節約できる。なおパイプ領域、エンドポイント領域の個数は６個に限定されず任意である。
【００７５】
５．パイプ領域の再構築
５．１  再構築処理
さて図３（Ａ）（Ｂ）のようにパケットバッファ１００にパイプ領域を確保してデータ転送を行う手法では、ＵＳＢ上に新たなエンドポイントが追加されたり、既に存在していたエンドポイントが削除された場合には、パイプ領域の再構築(reconstruction）処理が必要になる。ここで再構築処理は、確保されていたパイプ領域（現存するパイプ領域）を削除する処理、新たなパイプ領域（現存しないパイプ領域）を追加する処理、及び確保されていたパイプ領域のサイズを変更する処理の少なくとも一方を含むものである。
【００７６】
例えば図４（Ａ）では、ＵＳＢハブに対してペリフェラル１だけが接続されている。このペリフェラル１（電子機器）はエンドポイントａ、ｂ、ｅを有しているため、パケットバッファ１００には、これらのエンドポイントａ、ｂ、ｅに対応するパイプ領域ＰＩＰＥａ、ＰＩＰＥｂ、ＰＩＰＥｅが確保されている。
【００７７】
一方、図４（Ｂ）では、新たなペリフェラル２がＵＳＢハブに接続されており、ペリフェラル２のエンドポイントｃが追加されている。この場合は、パケットバッファ１００に対して、エンドポイントｃに対応するＰＩＰＥｃを追加して、パイプ領域を再構築する必要がある。逆に図４（Ｂ）のようにペリフェラル２が接続されている状態から、ペリフェラル２の接続が外されると、エンドポイントｃに対応するＰＩＰＥｃを削除して、パイプ領域を再構築する必要がある。
【００７８】
この場合の再構築の１つの手法として、全てのパイプ領域についての全てのデータ転送が終了した後に、図４（Ｂ）に示すようなパイプ構成になるように、パイプ領域ＰＩＰＥａ〜ＰＩＰＥｅの再確保処理を行う手法が考えられる。
【００７９】
しかしながらこの手法では、パイプ領域についてのデータ転送を停止した後、パイプ領域の有効データが空になるのを待ったり、パイプ領域に残っているデータを吸い出し、その後にパイプ領域の再確保処理を行う必要がある。ところがインタラプト転送などでは、転送周期が１〜２５５ｍｓｅｃというように長く、パイプ領域を用いて転送されるＩＲＰデータのサイズが非常に大きい場合もある。このような場合にパイプ領域が空になるまで待つようにすると、パイプ領域の再構築が完了するまでに長時間を要してしまい、ユーザの利便性を害する。またパイプ領域が空になるまで待つ処理や、パイプ領域からデータを吸い出す処理のために、ＣＰＵ（処理部）の処理が複雑化し、処理負荷が重くなってしまう。更に、相手デバイスがどの程度の転送レートでデータを転送してくるかが不明であるため、どの程度の待ち時間が必要かを予測できないという問題もある。
【００８０】
そこで本実施形態では次のような手法を採用している。即ち再構築を行う場合に（処理部により再構築が指示された場合に）、図２の転送コントローラ４０（ホストコントローラ５０）が、パイプ領域（望ましくは全てのパイプ領域）とエンドポイントとの間で現在行われているデータ転送をポーズ（pause)する。具体的にはトランザクション途中で再構築を行う場合には、そのトランザクションが終了した時点でデータ転送をポーズする。なお所与の数のトランザクションの終了後に、データ転送をポーズしてもよい。
【００８１】
そして例えば全てのパイプ領域（一部の例外があってもよい）についてのデータ転送のポーズ処理が完了した後に、バッファコントローラ８０がパイプ領域の再構築処理を行う。具体的には、パイプ領域を削除する処理や追加する処理やサイズを変更する処理を行う。また再構築の前後に存在するパイプ領域については、格納されているデータが破壊（消去）されないようにする処理を行う。即ちそのパイプ領域に格納されるデータのコピー（移動）処理を行う。或いはパイプ領域の物理アドレスは変えずに、論理アドレスだけを変える処理を行うようにしてもよい。その後、パイプ領域の再確保（ReAllocation、SetBuffer）処理を行う。そして例えば全てのパイプ領域の再確保処理の終了後に、転送コントローラ４０が、ポーズしていたデータ転送を再開する。例えば既に完了したトランザクションの次のトランザクションからデータ転送を再開する。
【００８２】
このようにすれば、パイプ領域が受信用なのか送信用なのかを区別して処理する必要もなくなる。またパイプ領域が空になるのを待つ必要もなくなり、パイプ領域の再構築に要する時間も容易に把握できる。従って再構築処理を短時間で終了でき、ファームウェアの処理の簡素化や負荷の軽減化を図れる。
【００８３】
５．２  コピー処理による再構築
本実施形態では、再構築の前後で存在するパイプ領域については、そのパイプ領域に格納されるデータが破壊（消去、上書き）されないように、そのデータをコピー（移動）している。具体的には図５（Ａ）（Ｃ）において、エンドポイントｅ（第１のエンドポイント）に対応して再構築前にパケットバッファ１００に確保されていたパイプ領域ＰＩＰＥｅ（第１のパイプ領域）は、図５（Ｂ）（Ｄ）に示すように再構築後もパケットバッファ１００に確保されている。この場合に本実施形態では、図５（Ａ）（Ｃ）に示すように、再構築前のパイプ領域ＰＩＰＥｅからデータを読み出し、図５（Ｂ）（Ｄ）に示すように、読み出されたデータを再構築後のパイプ領域ＰＩＰＥｅ’に書き込むコピー処理を行っている。
【００８４】
例えば図５（Ａ）（Ｂ）では、再構築前のパイプ領域ＰＩＰＥｅのスタートアドレスStAdr（或いはエンドアドレスEnAdr）よりも、再構築後のＰＩＰＥｅ'のスタートアドレスStAdr'（或いはエンドアドレスEnAdr）の方が大きい。この場合には図５（Ａ）に示すように再構築前のＰＩＰＥｅの読み出しアドレスであるソースアドレスをデクリメントしながら、ＰＩＰＥｅからデータを読み出す。具体的にはソースアドレスをその初期値（CopySourceAdr, EnAdr）から順次デクリメントしながら、複数バイト毎にデータを順次読み出す。そして図５（Ｂ）に示すように、再構築後のＰＩＰＥｅ'の書き込みアドレスであるディスティネーションアドレスをデクリメントしながら、図５（Ａ）で読み出されたデータを再構築後のＰＩＰＥｅ'に書き込む。具体的には、ディスティネーションアドレスをその初期値（CopyDestAdr, EnAdr'）から順次デクリメントしながら、複数バイト毎にデータを順次書き込む。
【００８５】
一方、図５（Ｃ）（Ｄ）では、再構築前のＰＩＰＥｅのStAdr（或いはEnAdr）よりも、再構築後のＰＩＰＥｅ'のStAdr'（或いはEnAdr）の方が小さい。この場合には図５（Ｃ）に示すように、ソースアドレスをその初期値（CopySourceAdr, StAdr）からインクリメントしながら、再構築前のＰＩＰＥｅからデータを読み出す。そして図５（Ｄ）に示すように、ディスティネーションアドレスをその初期値（CopyDestAdr, StAdr'）からデクリメントしながら、図５（Ｃ）で読み出されたデータを再構築後のＰＩＰＥｅ'に書き込む。
【００８６】
以上のようにすれば再構築前にＰＩＰＥｅに格納されていたデータを破壊することなく、このデータを再構築後のＰＩＰＥｅ'にコピーできる。従ってパイプ領域の適正な再構築処理を少ない処理負荷で実現できる。
【００８７】
なおコピー処理のソースアドレス、ディスティネーションアドレスの初期値は、CopySourceAdr、CopyDestAdrにより設定される。またソースアドレス、ディスティネーションアドレスをデクリメントするか或いはインクリメントするかは、CopyIncxDecにより設定される。またコピーされるデータのサイズはCopySizeにより設定される。これらの設定は、ファームウェア（ＣＰＵ、処理部）が、CopySourceAdr、CopyDestAdr、CopyIncxDec、CopySizeのレジスタに所望の値を設定することで実現できる。
【００８８】
またコピー処理の対象となるパイプ領域は、ＰＩＰＥｅのように、再構築処理の前後でスタートアドレスStAdrやエンドアドレスEnAdrが変化するパイプ領域だけであってもよい。或いはＰＩＰＥａ、ＰＩＰＥｂのようにStAdrやEnAdrが変化しないパイプ領域もコピー処理の対象としてもよい。
【００８９】
また本実施形態では図５（Ａ）〜（Ｅ）に示すように、再構築処理の際に書き込みポインタWPtrや読み出しポインタRPtrの移動（コピー、変換）処理も行っている。ここでWPtrは、パイプ領域でのデータの書き込みアドレス（書き込み位置）を指すポインタであり、RPtrは、パイプ領域でのデータの読み出しアドレス（読み出し位置）を指すポインタである。本実施形態では、再構築前のＰＩＰＥｅにおいてWPtr、RPtrが指していたデータの書き込みアドレス、読み出しアドレスに対応する位置を、再構築後のＰＩＰＥｅ’においても再構築後のWPtr'、RPtr'が指すように、ポインタの移動処理を行っている。これにより、再構築後に、データ転送がポーズしていた書き込みアドレス、読み出しアドレスの位置から、データの書き込み処理、読み出し処理を適正に再開できるようになる。
【００９０】
５．３  動作
次に再構築処理時の具体的な動作について図６のフローチャート、図７のタイミング波形図を用いて説明する。まず図７のＦ１に示すように、データ転送（ＵＳＢ転送、ＤＭＡ転送）のポーズ（一時停止）を指示する信号TranPauseを、ファームウェア（Ｆ／Ｗ）が１（アサート）に設定する（ステップＳ５１）。この設定は、データ転送のポーズ処理を指示するためのレジスタであるTranPauseのレジスタに、ファームウェア（広義にはデータ転送制御装置を制御する処理部。他の説明でも同様）がTranPause＝１を書き込むことで実現される。このレジスタは例えば図２のレジスタ部７０に設けられる。
【００９１】
次に図７のＦ２に示すようにファームウェアが再構築条件（CopyIncxDec, CopySourceAdr, CopyDestAdr, CopySize, MaxPktSize, BufferPage）を設定する（ステップＳ５２）。この設定はCopyIncxDec, CopySourceAdr, CopyDestAdr, CopySize, MaxPktSize, BufferPageのレジスタに、ファームウェアがレジスタ値を書き込むことで実現される。これらのレジスタは例えばレジスタ部７０に設けられる。
【００９２】
ここでCopyIncxDecのレジスタ（信号）は、コピー処理の読み出しアドレスであるソースアドレスや書き込みアドレスであるディスティネーションアドレスを、インクリメントするか或いはデクリメントするかを、ファームウェアが指示するためのレジスタ（信号）である。例えば図５（Ａ）（Ｂ）ではCopyIncxDecが０に設定され、ソースアドレス、ディスティネーションアドレスのデクリメントが指示される。一方、図５（Ｃ）（Ｄ）ではCopyIncxDecが１に設定され、ソースアドレス、ディスティネーションアドレスのインクリメントが指示される。
【００９３】
CopySourceAdr, CopyDestAdrのレジスタ（信号）は、ソースアドレス、ディスティネーションアドレスの初期値を、ファームウェアが指示するためのレジスタ（信号）である。例えば図５（Ａ）（Ｂ）では、CopySourceAdrは再構築前のＰＩＰＥｅのエンドアドレスEnAdrに設定され、CopyDestAdrは再構築後のＰＩＰＥｅ'のエンドアドレスEnAdr'に設定される。一方、図５（Ｃ）（Ｄ）では、CopySourceAdrはＰＩＰＥｅのスタートアドレスStAdrに設定され、CopyDestAdrはＰＩＰＥｅ'のスタートアドレスStAdr'に設定される。
【００９４】
CopySizeのレジスタは、コピーすべきデータのサイズを設定するためのレジスタである。MaxPktSize, BufferPageのレジスタは、パイプ領域のマックスパケットサイズ、ページ数を設定するためのレジスタである。
【００９５】
再構築条件を設定した後、図７のＦ３に示すようにファームウェアはCopyGoを１に設定する（ステップＳ５３）。この設定は、パイプ領域についてのコピー処理の開始を指示するためのレジスタであるCopyGoのレジスタに、ファームウェアがCopyGo＝１を書き込むことで実現される。
【００９６】
次にファームウェアは、データ転送（ＵＳＢ転送、ＤＭＡ転送）がポーズされるのを待つ（ステップＳ５４）。具体的には、全てのパイプ領域についてのポーズ処理が完了したことをファームウェアに知らせるためのレジスタであるCopyGoOKのレジスタに、ハードウェア回路（Ｈ／Ｗ）により１が書き込まれるのを待つ。そして図７のＦ４に示すようにCopyGoOK＝１になると、１つのパイプ領域についてのデータのコピーが終了するのを待つ（ステップＳ５５）。具体的には、ハードウェア回路によりCopyGoが０に設定されるのを待つ。
【００９７】
そして図７のＦ５に示すようにCopyGoが０に設定されると、全てのパイプ領域のデータのコピーが終了したか否かが判断され(ステップＳ５６）、終了していない場合にはステップＳ５２に戻る。一方、終了した場合には、図７のＦ５に示すようにファームウェアがPtlClrのレジスタへの設定を行う（ステップＳ５７）。
【００９８】
ここでPtlClrのレジスタは、書き込みポインタWPtr、読み出しポインタRPtrの移動（コピー）処理を行うモードと、これらのポインタをクリアするモードの切り替えを、ファームウェアが設定するためのレジスタである。より具体的には、図５（Ａ）〜（Ｄ）に示すように、再構築前のＰＩＰＥｅでの書き込みアドレス、読み出しアドレスの位置に対応する位置を、再構築後のＰＩＰＥｅ'においても指すように、WPtr、RPtrを移動するモードと、ＰＩＰＥｅ'のスタートアドレスStAdr'、エンドアドレスEnAdr'を指すように、WPtr、RPtrをクリアするモードとの切り替えを、ファームウェアが設定するためのレジスタである。このレジスタは各パイプ領域毎に設けられる。
【００９９】
次に、図７のＦ７に示すようにファームウェアが、パイプ領域の再確保処理をハードウェア回路に指示するためのレジスタであるSetBufferのレジスタに１を設定する（ステップＳ５８）。これにより、各パイプ領域のスタートアドレス、エンドアドレスの再設定処理や、ポインタの移動処理が実行される。そしてファームウェアはSetBuffer（領域再確保）処理が終了するのを待つ（ステップＳ５９）。そしてＦ８に示すようにハードウェア回路によりSetBufferが０（ネゲート）に設定されると、Ｆ９に示すようにファームウェアはTranPauseを０に設定する（ステップＳ６０）。すると、Ｆ１０に示すようにハードウェア回路によりCopyGoOKが０に設定され、ポーズされていたデータ転送が再開される（ステップＳ６１）。
【０１００】
図６、図７のようにファームウェア（ソフトウェア）とハードウェア回路（バッファコントローラ、転送コントローラ）の役割分担を行うことで、効率的で信頼性の高い再構築処理を実現できる。即ち図７のＦ２に示すように再構築条件の設定をファームウェアが行うことで、ハードウェア回路の構成の簡素化、小規模化を図れる。また図７のＦ５に示すように、１つのパイプ領域のコピー処理が終了する毎にハードウェア回路がCopyGoをネゲートして、コピー処理の終了をファームウェアに知らせることで、複数のパイプ領域のコピー処理を少ないレジスタ数で効率良く実行できる。また図７のＦ１、Ｆ９に示すようにデータ転送のポーズ処理の開始と終了をファームウェアがハードウェア回路に指示することで、信頼性の高いポーズ処理と再開処理を実現できる。
【０１０１】
なお複数のパイプ領域のコピー処理を並列に行うようにしてもよい。また再構築条件（CopyIncxDec, CopySourceAdr, CopyDestAdr等）の設定を、ハードウェア回路により自動的に行ってもよい。このようにすると、ハードウェア回路の構成は複雑化するが、ファームウェアは再構築の開始を指示するだけで済むため、ファームウェアの処理負荷を軽減できる。
【０１０２】
５．４  詳細な構成例
次に再構成処理を実現する回路の具体例を説明する。図８にバッファコントローラ８０の構成例を示す。なおバッファコントローラ８０は図８の一部の機能ブロックを省略する構成としてもよい。またこれらの機能ブロックの一部をソフトウェアにより実現してもよい。
【０１０３】
バッファコントローラ８０は領域確保（allocation）回路８１を含む。この領域確保回路８１は、パケットバッファ１００に、バッファ領域を確保する回路である。なおバッファ領域は、ホスト動作時にはパイプ領域に設定され、ペリフェラル動作時にはエンドポイント領域に設定される領域である。
【０１０４】
領域確保回路８１は、領域計算回路８２、ポインタ割り当て回路８３、ポインタ移動回路８４、セットバッファ用シーケンサ８５を含む。なおこれらの一部を省略する構成にしてもよい。
【０１０５】
領域計算回路８２は、マックスパケットサイズ（ページサイズ）やページ数に基づいて、バッファ領域（パイプ領域、エンドポイント領域）の領域サイズ、スタートアドレス、エンドアドレスなどを計算する回路である。
【０１０６】
例えば図９（Ａ）に示すバッファ領域ＰＩＰＥ０／ＥＰ０、ＰＩＰＥａ／ＥＰａ、ＰＩＰＥｂ／ＥＰｂ、ＰＩＰＥｃ／ＥＰｃでは、マックスパケットサイズ（MaxPktSize）が、各々、３２、６４、６４、６４バイトに設定され、ページ数（BufferPage）が、各々、１、１、３、２ページに設定されている。領域計算回路８２は、これらのマックスパケットサイズ、ページ数などに基づいて、バッファ領域ＰＩＰＥ０／ＥＰ０〜ＰＩＰＥｃ／ＥＰｃの領域サイズ、スタートアドレス、エンドアドレスを計算する。例えば図９（Ａ）において、ＰＩＰＥ０／ＥＰ０、ＰＩＰＥａ／ＥＰａ、ＰＩＰＥｂ／ＥＰｂ、ＰＩＰＥｃ／ＥＰｃの領域サイズは、各々、３２（＝３２×１）、６４（＝６４×１）、１９２（＝６４×３）、１２８（＝６４×２）バイトと計算されることになる。
【０１０７】
ポインタ割り当て回路８３は、各バッファ領域の書き込みポインタWPtr（WPtr0、WPtra、WPtrb、WPtrc）、読み出しポインタRPtr（RPtr0、RPtra、RPtrb、RPtrc）を、ＤＭＡ用ポインタ、ＣＰＵ用ポインタ、ＵＳＢ用ポインタに割り当てる回路である。
【０１０８】
例えば図９（Ｂ）に示すように、データ送信時（ＤＭＡ又はＣＰＵからパケットバッファ１００を介してＵＳＢ側にデータが転送される時）であり、且つ、ＤＭＡ転送使用時には、そのバッファ領域の書き込みポインタWPtrはＤＭＡ（ＤＭＡアクセス）用のポインタに割り当てられ、読み出しポインタRPtrはＵＳＢ（ＵＳＢアクセス）用のポインタに割り当てられる。また、データ送信時であり且つＣＰＵ（ＰＩＯ）転送使用時には、そのバッファ領域の書き込みポインタWPtrはＣＰＵ（ＣＰＵアクセス）用のポインタに割り当てられ、読み出しポインタRPtrはＵＳＢ用のポインタに割り当てられる。
【０１０９】
一方、図９（Ｃ）に示すように、データ受信時（ＵＳＢからパケットバッファ１００を介してＤＭＡ又はＣＰＵ側にデータが転送される時）であり、且つ、ＤＭＡ転送使用時には、そのバッファ領域の書き込みポインタWPtrはＵＳＢ用ポインタに割り当てられ、読み出しポインタRPtrはＤＭＡ用ポインタに割り当てられる。また、データ受信時であり且つＣＰＵ転送使用時には、そのバッファ領域の書き込みポインタWPtrはＵＳＢ用ポインタに割り当てられ、読み出しポインタRPtrはＣＰＵ用ポインタに割り当てられる。
【０１１０】
なお、各バッファ領域のWPtr、RPtrの情報（アドレス情報）は、レジスタ部７０の各転送条件レジスタ（ＰＩＰＥ／ＥＰレジスタ）に保持される。
【０１１１】
ポインタ移動回路８４は再構築時に書き込みポインタや読み出しポインタを移動する処理を行う回路である。即ち、再構築前のパイプ領域でのデータの書き込みアドレス、読み出しアドレスに対応する位置を、再構築後のパイプ領域においても指すように、書き込みポインタ、読み出しポインタの移動処理を行う。別の言い方をすれば、再構築の前後で、パイプ領域のスタートアドレスやエンドアドレスからの相対アドレス値が変化しないように、書き込みポインタ、読み出しポインタの移動処理を行う。またポインタ移動回路８４は、図７のＦ６でPtlClrが１に設定された場合には、書き込みポインタ、読み出しポインタをクリアする処理（スタートアドレスやエンドアドレスに移動する処理）も行う。
【０１１２】
セットバッファ用シーケンサ８５は、図７のＦ７に示すようにSetBufferがファームウェアにより１に設定された場合に、バッファ領域の再確保処理のシーケンスを制御する。
【０１１３】
バッファコントローラ８０はポインタ管理回路８６を含む。このポインタ管理回路８６は、ポインタの更新を行いながら、パケットバッファ１００にアクセスするための実アドレスを生成する回路である。このポインタ管理回路８６は、ＣＰＵ用アドレス生成回路８７、ＤＭＡ用アドレス生成回路８８、ＵＳＢ用アドレス生成回路８９を含む。これらの生成回路８７、８８、８９は、各々、ポインタ割り当て回路８３により割り当てられたＣＰＵ用ポインタ、ＤＭＡ用ポインタ、ＵＳＢ用ポインタに基づいて、ＣＰＵ用アドレスCPUAdr、ＤＭＡ用アドレスDMAAdr、ＵＳＢ用アドレスUSBAdrを生成する。また、ＣＰＵ（処理部）、ＤＭＡ（アプリケーション層デバイス）からのアクセス毎に、或いはＵＳＢ（転送コントローラ）のトランザクション終了（ＡＣＫ、ＮＡＫなどのハンドシェーク送受信）毎に、ポインタを更新する処理を行う。なお、更新後のポインタの情報（UpdateWP, UpdateRP）は、領域確保回路８１を介してレジスタ部７０の各転送条件レジスタに書き戻される。
【０１１４】
バッファコントローラ８０はバッファ管理回路９０を含む。このバッファ管理回路９０は、パケットバッファ１００へのアクセス（書き込みアクセス、読み出しアクセス）を管理、制御する回路である。このバッファ管理回路９０は、バッファインターフェース回路９１、再構築用アドレス生成回路９２、アドレスセレクタ９３、読み出しデータラッチ回路９４、書き込みデータセレクタ９５、シーケンサ９６、調停回路９７を含む。なおこれらの一部を省略する構成にしてもよい。
【０１１５】
バッファインターフェース回路９１は、ポインタ管理回路８６からのＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスなどを受け、パケットバッファ１００へのデータの入出力や、アドレス、出力イネーブル、ライトイネーブル、リードイネーブルなどの出力を行う。
【０１１６】
再構築用アドレス生成回路９２は、図５（Ａ）〜（Ｄ）で説明したコピー処理のソースアドレスとディスティネーションアドレスを生成し、生成されたソースアドレス、ディスティネーションアドレスのいずれかを選択して、再構築用アドレスとして出力する。
【０１１７】
アドレスセレクタ９３は、再構築用アドレス生成回路９２からの再構築用アドレスと、ＣＰＵ用アドレスCPUAdr（処理部からのアクセスアドレス）と、ＤＭＡ用アドレスDMAAdr（アプリケーション層デバイスからのアクセスアドレス）と、ＵＳＢ用アドレスUSBAdr（転送コントローラからのアクセスアドレス）のいずれかを選択して、パケットバッファ１００に出力する。
【０１１８】
読み出しデータラッチ回路９４は、パケットバッファ１００から読み出されたデータをラッチする。また書き込みデータセレクタ９５は、読み出しデータラッチ回路９４にラッチされたデータと、ＣＰＵ（処理部）側からの書き込みデータCPUWdataと、ＤＭＡ（アプリケーション層デバイス）側からの書き込みデータDMAWdataと、ＵＳＢ（転送コントローラ）側からの書き込みデータUSBWdataのいずれかを選択し、選択されたデータをパケットバッファ１００に出力する。シーケンサ９６はバッファ管理回路９０内の各回路のシーケンスを制御する。
【０１１９】
調停回路９７は、ＣＰＵ（ＣＰＵインターフェース回路）、ＤＭＡ（ＤＭＡハンドラ回路）、ＵＳＢ（ＨＣ、ＰＣ）からのアクセス(CPUReq, DMAReq, USBReq）を調停する回路である。この調停結果に基づいて、ＣＰＵ用アドレス、ＤＭＡ用アドレス、ＵＳＢ用アドレスのいずれかが、パケットバッファ１００のアクセス・アドレスとして出力され、ＣＰＵ、ＤＭＡ又はＵＳＢとパケットバッファ１００との間のデータ転送経路が設定される。
【０１２０】
なお図８に示すように、レジスタ部７０は、各バッファ領域の転送条件を設定する転送条件レジスタ部７２と、再構築用レジスタ部７４を含む。この再構築用レジスタ部７４は、図６、図７などで説明したTranPause, TargetPIPENumber, CopyIncxDec, CopySourceAdr, CopyDestAdr, CopySize, CopyGo, PtrClr, SetBufferなどを設定するためのレジスタを含む。そしてこれらのレジスタにはＣＰＵ（処理部）がアクセス可能になっており、ＣＰＵは、レジスタ値の書き込みや読み出しができる。
【０１２１】
図１０に図８のバッファ管理回路９０の詳細な構成例を示し、図１１にその動作を説明するためのタイミング波形図を示す。
【０１２２】
図１１のＧ１に示すようにCopyGoがアサートされると、図１０のシーケンサ９６がコピー処理のシーケンスを開始する。そしてソースアドレス生成回路３００が、ソースアドレスSourceAdrをその初期値CopySourceAdrからインクリメント又はデクリメントする処理を行う。またディスティネーションアドレス生成回路３０２が、ディスティネーションアドレスDestAdrをその初期値CopyDestAdrからインクリメント又はデクリメントする処理を行う。即ちCopyIncxDecがＨレベルの場合にはインクリメント（カウントアップ）処理を行い、Ｌレベルの場合にはデクリメント（カウントダウン）処理を行う。またソースアドレス生成回路３００、ディスティネーションアドレス生成回路３０２は図１１のＧ２、Ｇ３に示すように、カウントパルス信号SourceAdrCtPls、DestAdrCtPlsの立ち下がりに同期して、インクリメント又はデクリメント処理を行う。なおＳＣＬＫはクロック信号でありＳＴＡＥはステート信号である。
【０１２３】
セレクタ３０６は図１１のＧ４、Ｇ５に示すように、シーケンサ９６からのアドレス選択信号AdrSxDに基づいて、SourceAdr、DestAdrのいずれかを選択して、再構築用アドレスRestructAdrとして出力する。例えばAdrSxDがＨレベルの場合にはSourceAdrを選択し、Ｌレベルの場合にはDestAdrを選択する。
【０１２４】
アドレスセレクタ９３は、ＣＰＵ用アドレスCPUAdr、ＤＭＡ用アドレスDMAAdr、ＵＳＢ用アドレスUSBAdr、再構築用アドレスRestructAdrのいずれかを選択して、パケットバッファ１００へのアクセスアドレスSRAMAdrを出力する。具体的にはCopyGoOKがＨレベルの場合にはRestructAdrを選択して出力する。
【０１２５】
読み出しデータラッチ回路９４は、バッファインターフェース回路９１を介してパケットバッファ１００から読み出されたデータを、シーケンサ９６からのラッチ信号RDatLtの立ち下がりでラッチする。そしてラッチしたデータを各ブロックや書き込みデータセレクタ９５に出力する。
【０１２６】
なお図１１のRAMCLKはパケットバッファ１００（ＲＡＭ）へのアクセスクロックであり、その立ち上がりでパケットバッファ１００へのデータの書き込み又は読み出しが行われる。具体的にはRxWがＨレベルの場合はデータが読み出され、Ｌレベルの場合はデータが書き込まれる。またRawCSはチップセレクト信号である。
【０１２７】
書き込みデータセレクタ９５は、ＣＰＵ、ＤＭＡ、ＵＳＢからの書き込みデータCPUWData、DMAWData、USBWData、読み出しデータラッチ回路９４からの読み出しデータRDataのいずれかを選択し、パケットバッファ１００への書き込みデータSRAMWDataとして出力する。具体的にはCopyGoOKがＨレベルの場合は図１１のＧ６のようにRDataを選択し、SRAMWDataとしてパケットバッファ１００に出力する。
【０１２８】
以上のようにすることで、図５（Ａ）（Ｃ）においてＰＩＰＥｅのソースアドレスSourceAdrから読み出されたデータRDataが、SRAMWDataとして、図５（Ｂ）（Ｄ）のようにディスティネーションアドレスDestAdrに書き込まれるようになり、コピー処理が実現される。
【０１２９】
６．ポインタの移動処理
６．１  相対アドレスを用いたポインタの移動処理
本実施形態では以下に説明する手法により再構築時のポインタ移動処理を実現している。具体的には図１２のＨ１に示すように、書き込みポインタWPtr、読み出しポインタRPtrが指す絶対書き込みアドレス、絶対読み出しアドレスを、再構築前のＰＩＰＥのスタートアドレスStAdr、エンドアドレスEnAdrを基準とした相対書き込みアドレス、相対読み出しアドレスに変換する。即ちRelWPtr＝WPtr−StAdr、RelRPtr＝EnAdr−RPtrという相対アドレスへの変換処理（PtrConve1）を行う。
【０１３０】
次に図１２のＨ２に示すように再構築後のＰＩＰＥ'の領域の再計算処理を行い、ＰＩＰＥ'のスタートアドレスStAdr'、エンドアドレスEnAdr'を求める。そしてＨ３に示すように、相対書き込みアドレス、相対読み出しアドレスを、再構築後のＰＩＰＥ'のStAdr'、EnAdr'に基づいて、絶対書き込みアドレス、絶対読み出しアドレスに変換する。即ちWPtr'＝StAdr'＋RelWPtr、RPtr'＝EnAdr'−RelRPtrという絶対アドレスへの変換処理（PtrConve2）を行い、ポインタの移動処理を実現する。
【０１３１】
このようにすれば、再構築処理以外の通常の動作時には、ポインタのアドレスとして絶対アドレスを使用できるため、演算量を減らすことができ、処理の高速化を図れる。またアドレス生成回路の小規模化も図れる。また相対アドレスへの変換処理と絶対アドレスの変換処理は、後述するように１つの回路を用いて実現できるため、回路を規模化できる。
【０１３２】
６．２  詳細な構成例
図１３に、本実施形態のポインタの移動処理を実現する領域確保回路８１の詳細な構成例を示す。TranPause, SerBufferがアサートされると、セットバッファ用シーケンサ８５がセットバッファ処理のシーケンスを開始する。そしてセットバッファ用シーケンサ８５が信号PtrConve1Goをアサートすると、ポインタ移動回路８４は、レジスタ部７０のレジスタからのポインタの情報WPtr,RPtr（絶対アドレス情報），WPtrTg, RPtrTg（トグルビット）に基づいて、図１２のＨ１に示す相対アドレスへの変換処理を行い、ポインタを更新する。そして更新後のポインタの情報（相対アドレス情報）は、UpdateWP, UpdateRPとして、更新ポインタセレクタ３１０を介してレジスタ部７０のレジスタに書き戻される。なお信号PtrClrがアサートされた場合にはポインタのクリア処理（スタートアドレス又はエンドアドレスに戻す処理）を行う。またWPUpdatePls, RPUpdatePlsは、ポインタの情報をレジスタ部７０のレジスタに書き込むためのパルス信号である。
【０１３３】
次に、セットバッファ用シーケンサ８５が信号MemAllocGoをアサートすると、領域計算回路８２は領域確保のための計算処理を行う。具体的には図１２のＨ２に示すように再構築後のＰＩＰＥ'のStAdr、EnAdrをMaxPktSize, BufferPageに基づき計算する（図９（Ａ）参照）。そして得られたStAdr、EnAdrは、レジスタ部７０のレジスタに書き戻されると共にポインタ移動回路８４に出力される。
【０１３４】
次に、セットバッファ用シーケンサ８５が信号PtrConve2Goをアサートすると、ポインタ移動回路８４は、レジスタ部７０のレジスタからのポインタの情報WPtr,RPtr（相対アドレス情報），WPtrTg, RPtrTg（トグルビット）に基づいて、図１２のＨ３に示す絶対アドレスへの変換処理を行い、ポインタを更新する。そして更新後のポインタの情報（絶対アドレス情報）は、UpdateWP, UpdateRPとして、更新ポインタセレクタ３１０を介してレジスタ部７０のレジスタに書き戻される。
【０１３５】
なお本実施形態のパイプ領域（バッファ領域）はリングバッファ構造になっている。そしてトグルビットWPtrTg, RPtrTgは、書き込みポインタ、読み出しポインタがパイプ領域を１周する毎に、０から１或いは１から０というようにビット反転する。そしてWPtrとRPtrが一致し、且つ、WPtrTgとRPtrTgも一致していた場合には、パイプ領域のデータはエンプティであると判断できる。一方、WPtrとRPtrが一致し、且つ、WPtrTgとRPtrTgが一致していなかった場合には、パイプ領域のデータはフルであると判断できる。またこれらのWPtrTg,とRPtrTgを用いることで、図１２のＨ１、Ｈ３での演算順序を判別できる。
【０１３６】
図１４にポインタ移動回路８４の構成例を示す。PtrConve1Goがアサートされると、演算シーケンサ３２０からの制御信号に基づいて、ポインタセレクタ３２２、スタート・エンドアドレスセレクタ３２４が、処理対象となるパイプ領域のポインタ情報、スタート・エンドアドレス情報を選択する。そして選択された情報に基づいて加減算器３２６が加減算処理を行うことで、図１２のＨ１で説明したRelWPtr＝WPtr−StAdr、RelRPtr＝EnAdr−RPtrという相対アドレスへの変換処理が行われる。そして得られた更新後のポインタ情報（相対アドレス情報）は、演算結果セレクタ３２８を介してレジスタ部７０のレジスタに書き戻される。以上の処理が、対象となる全てのパイプ領域について行われる。
【０１３７】
次に、PtrConve2Goがアサートされると、演算シーケンサ３２０からの制御信号に基づいて、ポインタセレクタ３２２、スタート・エンドアドレスセレクタ３２４が、処理対象となるパイプ領域のポインタ情報、スタート・エンドアドレス情報を選択する。そして選択された情報に基づいて加減算器３２６が加減算処理を行うことで、図１２のＨ３で説明したWPtr'＝StAdr'＋RelWPtr、RPtr'＝EnAdr'−RelRPtrという絶対アドレスへの変換処理が行われる。そして得られた更新後のポインタ情報（絶対アドレス情報）は、演算結果セレクタ３２８を介してレジスタ部７０のレジスタに書き戻される。以上の処理が、対象となる全てのパイプ領域について行われる。
【０１３８】
６．３  動作
次にポインタ移動処理時の動作について図１５のフローチャート、図１６のタイミング波形図を用いて説明する。まずファームウェアにより各パイプ領域についてのPtrClrの設定が行われ、図１６のＩ１に示すようにSetBufferが１に設定される（ステップＳ７１、Ｓ７２）。
【０１３９】
次に、処理対象となるパイプ領域のPtrClrが１か否かを判断し（ステップＳ７２）、PtrClrが１である場合にはポインタのクリア処理を行う（ステップＳ７４）。即ちWPtr'＝０、RPtr'＝０というように相対アドレス値を０に設定する。
【０１４０】
一方、PtrClrが１ではない場合には、図１６のＩ２に示すようにPtrConve1Goがアサートされ、図１２にＨ１に示す相対アドレス変換処理が行われる（ステップＳ７５）。そして相対アドレス変換処理が全てのパイプ領域について終了したか否かを判断し（ステップＳ７６）、終了していない場合はステップＳ７３に戻る。
【０１４１】
次に図１６のＩ３に示すようにMemAllocGoがアサートされ、図１２のＨ２に示す領域計算処理が行われる（ステップＳ７７）。そして領域計算処理が全てのパイプ領域について終了したか否かを判断し（ステップＳ７８）、終了していない場合はステップＳ７７に戻る。
【０１４２】
次に、図１６のＩ４に示すようにPtrConve2Goがアサートされ、図１２にＨ３に示す絶対アドレス変換処理が行われる（ステップＳ７９）。そして絶対アドレス変換処理が全てのパイプ領域について終了したか否かを判断し（ステップＳ８０）、終了していない場合はステップＳ７９に戻る。一方、終了した場合には、図１６のＩ５に示すようにハードウェア回路によりSetBufferが０に設定される（ステップＳ８１）。
【０１４３】
７．転送条件レジスタ（共用レジスタ）
本実施形態では図１７に示すように、ホスト動作時には、パイプ領域ＰＩＰＥ０〜ＰＩＰＥｅとエンドポイントとの間で行われるデータ転送の転送条件情報が、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定される。即ち、ＰＩＰＥ０、ＰＩＰＥａ、ＰＩＰＥｂ、ＰＩＰＥｃ、ＰＩＰＥｄ、ＰＩＰＥｅの転送条件情報は、各々、ＴＲＥＧ０、ＴＲＥＧａ、ＴＲＥＧｂ、ＴＲＥＧｃ、ＴＲＥＧｄ、ＴＲＥＧｅに設定（記憶）される。この設定は、例えばファームウェア（ＣＰＵ、処理部）により行われる。
【０１４４】
そしてホストコントローラ５０（広義には転送コントローラ）は、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定された転送条件情報に基づいて、エンドポイントに対するトランザクションを発生する。そして、パイプ領域とそれに対応するエンドポイントとの間で、データ（パケット）を自動転送する。
【０１４５】
このように本実施形態では、各パイプ領域（バッファ領域）に対応して各転送条件レジスタが設けられ、この各転送条件レジスタに設定された転送条件情報に基づいて、各パイプ領域のパイプ転送（所与のデータ単位の転送）がホストコントローラ５０により自動的に行われる。従って、ファームウェア（ドライバ、ソフトウェア）は、転送条件レジスタに転送条件情報を設定した後は、データ転送が完了するまで、データ転送制御に関わらなくて済むようになる。そして、所与のデータ単位のパイプ転送が完了すると割り込みが発生し、転送の完了がファームウェアに伝えられる。これにより、ファームウェア（ＣＰＵ）の処理負荷を格段に低減できる。
【０１４６】
なお、本実施形態では図１８に示すようにペリフェラル動作時には、エンドポイント領域ＥＰ０〜ＥＰｅとホストとの間で行われるデータ転送の転送条件情報が、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定される。そしてペリフェラルコントローラ６０（広義には転送コントローラ）は、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅに設定された転送条件情報に基づいて、エンドポイント領域とホストとの間でのデータ転送を行う。
【０１４７】
このように本実施形態では、転送条件レジスタＴＲＥＧ０〜ＴＲＥＧｅが、ホスト動作時とペリフェラル動作時とで共用（兼用）される。これにより、レジスタ部７０のリソースを節約でき、データ転送制御装置を小規模化できる。
【０１４８】
図１９に、レジスタ部７０のレジスタ構成例を示す。なおレジスタ部７０のレジスタの一部を、各ブロック（ＯＴＧＣ、ＨＣ、ＰＣ、Ｘｃｖｒ等）内に含ませてもよい。
【０１４９】
図１９に示すように、レジスタ部７０の転送条件レジスタ（ＴＲＥＧ０〜ＴＲＥＧｅの各々）は、ホスト動作時（ＨＣ、ＰＩＰＥ）とペリフェラル動作時（ＰＣ、ＥＰ）で共用されるＨＣ／ＰＣ共用レジスタ（共用転送条件レジスタ）を含む。また、ホスト動作時にのみ使用されるＨＣ（ＰＩＰＥ）用レジスタ（ホスト用転送条件レジスタ）を含む。また、ペリフェラル動作時にのみ使用されるＰＣ（ＥＰ）用レジスタ（ペリフェラル用転送条件レジスタ）を含む。また、パケットバッファ（ＦＩＦＯ）のアクセス制御などを行うためのレジスタであり、ホスト動作時とペリフェラル動作時で共用されるアクセス制御レジスタを含む。
【０１５０】
例えばデュアルロール・デバイスのホスト動作時にホストコントローラ５０（ＨＣ）は、ＨＣ／ＰＣ共用レジスタとＨＣ用レジスタに設定される転送条件情報に基づいてデータ（パケット）を転送する。一方、ペリフェラル動作時にはペリフェラルコントローラ６０（ＰＣ）が、ＨＣ／ＰＣ共用レジスタとＰＣ用レジスタに設定される転送条件情報に基づいて、データ（パケット）を転送する。
【０１５１】
また、ホスト動作時、ペリフェラル動作時の両方において、バッファコントローラ８０は、共用アクセス制御レジスタに基づいて、パケットバッファ１００へのアクセス制御（リード／ライト・アドレスの発生、データのリード／ライト、アクセスの調停等）を行う。
【０１５２】
図１９のＨＣ／ＰＣ共用レジスタには、データの転送方向（ＩＮ、ＯＵＴ又はＳＥＴＵＰ等）、転送種別（アイソクロナス、バルク、インタラプト、コントロールなどのトランザクションの種別）、エンドポイント番号（各ＵＳＢデバイスのエンドポイントに関連づけられる番号）、マックスパケットサイズ（エンドポイントが送信又は受信可能なパケットの最大ペイロードサイズ。ページサイズ）が設定される。また、バッファ領域（パイプ領域、エンドポイント領域）のページ数（バッファ領域の面数）が設定される。また、ＤＭＡ接続の有無（ＤＭＡハンドラ回路１１２によるＤＭＡ転送の使用の有無）を指示する情報が設定される。
【０１５３】
ＨＣ（ＰＩＰＥ）用レジスタには、インタラプト転送のトークン発行周期（インタラプト・トランザクションを起動する周期、インターバル）が設定される。また、トランザクションの連続実行回数（パイプ領域間の転送比率を設定する情報。各パイプ領域のトランザクションの連続実行回数）が設定される。また、ファンクションアドレス（エンドポイントを有するファンクションのＵＳＢアドレス）、転送データのトータルサイズ（各パイプ領域を介して転送されるデータのトータルサイズ。ＩＲＰなどのデータ単位）が設定される。また、自動トランザクションの開始指示（ホストコントローラに対する自動トランザクション処理の開始指示）が設定される。また、自動コントロール転送モードの指示（コントロール転送のセットアップステージ、データステージ、ステータスステージのトランザクションを自動発生するモードの指示）が設定される。
【０１５４】
ＰＣ（ＥＰ）用レジスタには、エンドポイントイネーブル（エンドポイントのイネーブルやディスエーブルの指示）、ハンドシェーク指定（各トランザクションで行われるハンドシェークの指定）が設定される。
【０１５５】
パケットバッファ（ＦＩＦＯ）用の共用アクセス制御レジスタには、バッファ・Ｉ／Ｏポート（ＣＰＵによりＰＩＯ転送を行う場合のＩ／Ｏポート）が設定される。また、バッファ・フル／エンプティ（各バッファ領域のフル、エンプティの通知）、バッファ・残りデータサイズ（各バッファ領域の残りデータサイズ）が設定される。なおレジスタ部７０は、図１９に示すようにインタラプト系レジスタ、ブロック系レジスタ、ＤＭＡ制御レジスタなども含む。
【０１５６】
以上のように本実施形態では、ホスト動作時とペリフェラル動作時で共用されるレジスタ（ＨＣ／ＰＣ共用レジスタ、共用アクセス制御レジスタ）をレジスタ部７０に設けている。これにより、ホスト動作時用のレジスタとペリフェラル動作時用のレジスタを全く別個に設ける場合に比べて、レジスタ部７０を小規模化できる。また、ＣＰＵ上で動作するファームウェア（処理部）から見た共用レジスタのアクセスアドレスを、ホスト動作時とペリフェラル動作時とで同一にできる。従って、ファームウェアは、これらの共用レジスタを同一アドレスで管理できるようになり、ファームウェア処理を簡素化できる。
【０１５７】
また、ＨＣ用レジスタや、ＰＣ用レジスタを設けることで、ホスト動作時（ＰＩＰＥ）の転送やペリフェラル動作時（ＥＰ）の転送に特有の転送条件を設定できる。例えば、トークン発行周期を設定することで、ホスト動作時にインタラプト転送のトークンを所望の周期で発行することが可能になる。また、連続実行回数を設定することで、ホスト動作時にパイプ領域間の転送比率を任意に設定できる。また、トータルサイズを設定することで、ホスト動作時にパイプ領域を介して自動転送されるデータのサイズを任意に設定できる。またファームウェアは、ホスト動作時に、自動トランザクションの開始を指示したり、自動コントロール転送モードのオン／オフを指示できるようになる。
【０１５８】
８．自動トランザクション
図２０に、ホストコントローラ５０の自動トランザクション（ＩＮ、ＯＵＴ）処理時におけるファームウェア処理のフローチャート例を示す。
【０１５９】
まず、ファームウェア（処理部、ドライバ）は、図１９等で説明した転送条件レジスタに転送条件情報（パイプ情報）を設定する（ステップＳ１）。より具体的には、転送データのトータルサイズ、マックスパケットサイズ（MaxPktSize）、ページ数（BufferPage）、転送方向（ＩＮ、ＯＵＴ又はＳＥＴＵＰ）、転送種別（アイソクロナス、バルク、コントロール、インタラプト）、エンドポイント番号、パイプ領域のトランザクションの連続実行回数（転送比率）、インタラプト転送のトークン発行周期などを、転送条件レジスタに設定する。
【０１６０】
次に、外部のシステムメモリとパケットバッファ１００の間に転送経路を設定する（ステップＳ２）。即ち図２のＤＭＡハンドラ回路１１２を介したＤＭＡ転送経路を設定する。
【０１６１】
次に、ファームウェアは、ＤＭＡ転送の開始指示を行う（ステップＳ３）。即ち、図１９のＤＭＡ制御レジスタのＤＭＡ転送開始指示ビットをアサートする。なお、ＣＰＵによる転送では、図１９のバッファ・Ｉ／Ｏポートにアクセスすることで、パケットバッファ１００にアクセスすることが可能になる。
【０１６２】
次に、ファームウェアは、自動トランザクションの開始指示を行う（ステップＳ４）。即ち、図１９のＨＣ用レジスタ（パイプレジスタ）の自動トランザクション開始指示ビットをアサートする。これにより、ホストコントローラ５０による、自動トランザクション処理、パケット処理（パケットの生成、分解）、スケジューリング処理が行われる。即ち、ホストコントローラ５０は、トータルサイズで指定されるデータを、マックスパケットサイズのペイロードのパケットを用いて、転送方向で指定される方向（ＩＮ、ＯＵＴ）で、自動転送する。
【０１６３】
なお、図２０のステップＳ３、Ｓ４の処理の順序は問わず、自動トランザクション開始指示の後にＤＭＡ転送の開始指示を行ってもよい。
【０１６４】
次に、ファームウェアは、パイプ転送の完了を知らせる割り込みが発生するのを待つ（ステップＳ５）。そして、割り込みが発生すると、ファームウェアは、図１９のインタラプト系レジスタの割り込みステータス（要因）を調べる。そして、処理が正常完了又はエラー終了する（ステップＳ６）。
【０１６５】
このように本実施形態によれば、ファームウェアは、各パイプ領域毎に転送条件情報を設定し（ステップＳ１）、ＤＭＡ転送開始の指示（ステップＳ３）と自動トランザクション開始の指示（ステップＳ４）を行うだけで、その後のデータ転送処理はホストコントローラ５０のハードウェア回路により自動的に行われるようになる。従って、ＯＨＣＩ準拠の手法に比べて、ファームウェアの処理負荷が軽減され、低性能のＣＰＵが組み込まれる携帯機器に最適なデータ転送制御装置を提供できる。
【０１６６】
図２１、図２２に、ホストコントローラ５０による自動トランザクション処理時の信号波形例を示す。なお、これらの図において、「Ｈ→Ｐ」は「ホストからペリフェラルにパケットが転送されること」を表し、「Ｐ→Ｈ」は「ペリフェラルからホストにパケットが転送されること」を表す。
【０１６７】
図２１は、ＩＮトランザクションの場合（転送種別がＩＮの場合）の信号波形例である。図２０のステップＳ４で、ファームウェアが自動トランザクションの開始指示を行うと、図２１のＣ１に示すように、PipeXTranGo（PipeXについてのファームウェアからの転送要求信号）がアサートされる。これにより、そのPipeX（Ｘ＝０〜ｅ）についての、ホストコントローラ５０による自動トランザクション処理が開始する。
【０１６８】
そして、Ｃ２に示すようにPipeTranGo（ホストコントローラ５０内のＨＣシーケンス管理回路からの転送要求信号）がアサートされると、Ｃ３に示すように、ホストコントローラ５０がＩＮトークンパケットを生成して、ＵＳＢを介してペリフェラルに転送する。そして、Ｃ４に示すようにペリフェラルからホストコントローラ５０にＩＮデータパケットが転送されると、ホストコントローラ５０は、Ｃ５に示すようにハンドシェークパケット（ＡＣＫ）を生成して、ペリフェラルに転送する。これにより、Ｃ６に示すようにTranCmpACKがアサートされる。
【０１６９】
同様にして、Ｃ７に示すようにPipeTranGoがアサートされると、Ｃ８、Ｃ９、Ｃ１０に示すパケット転送が行われ、Ｃ１１に示すようにTranCmpACKがアサートされる。そして、Ｃ１２に示すようにPipeXTranComp（ファームウェアへのＩＲＰのデータ単位の転送終了通知信号）がアサートされる。このPipeXTranCompによる割り込みにより、ファームウェアは、そのパイプについての転送が完了したことを知ることができる。
【０１７０】
なお、PipeXTranCompがアサートされると、Ｃ１３に示すようにPipeXTranGoがネゲートされ、そのパイプが非転送状態であることが示されるようになる。
【０１７１】
図２２は、ＯＵＴトランザクションの場合（転送種別がＯＵＴの場合）の信号波形例である。ファームウェアが自動トランザクションの開始指示を行うと、Ｅ１に示すようにPipeXTranGoがアサートされ、Ｅ２に示すようにPipeTranGoがアサートされる。すると、ホストコントローラ５０は、Ｅ３に示すようにＯＵＴトークンパケットをペリフェラルに転送し、Ｅ４に示すようにＯＵＴデータパケットを転送する。そして、Ｅ５に示すようにペリフェラルからハンドシェークパケット（ＡＣＫ）が返ってくると、Ｅ６に示すようにTranCmpACKがアサートされる。
【０１７２】
同様にして、Ｅ７に示すようにPipeTranGoがアサートされると、Ｅ８、Ｅ９、Ｅ１０に示すパケット転送が行われ、Ｅ１１に示すようにTranCmpACKがアサートされる。そして、Ｅ１２に示すようにPipeXTranCompがアサートされる。このPipeXTranCompによる割り込みにより、ファームウェアは、そのパイプについての転送が完了したことを知ることができる。なお、PipeXTranCompがアサートされると、Ｅ１３に示すようにPipeXTranGoがネゲートされる。
【０１７３】
９．電子機器
図２３に本実施形態のデータ転送制御装置を含む電子機器の構成例を示す。この電子機器２００は、本実施形態で説明したデータ転送制御装置２１０、ＡＳＩＣなどで構成されるアプリケーション層デバイス２２０、ＣＰＵ２３０、ＲＯＭ２４０、ＲＡＭ２５０、表示部２６０、操作部２７０を含む。なおこれらの機能ブロックの一部を省略する構成としてもよい。
【０１７４】
ここでアプリケーション層デバイス２２０は、例えばハードディスクドライブ、光ディスクドライブ、或いはプリンタを制御するデバイスや、ＭＰＥＧエンコーダ、ＭＰＥＧデコーダ等を含むデバイスなどである。ＣＰＵ２３０（処理部）はデータ転送制御装置２１０や電子機器全体の制御を行う。ＲＯＭ２４０は制御プログラムや各種データを記憶する。ＲＡＭ２５０はＣＰＵ２３０やデータ転送制御装置２１０のワーク領域やデータ格納領域として機能する。表示部２６０は種々の情報をユーザに表示する。操作部２７０はユーザが電子機器を操作するためのものである。
【０１７５】
なお図２３ではＤＭＡバスとＣＰＵバスが分離されているが、これらを共通化してもよい。またＣＰＵ２３０をデータ転送制御装置２１０に内蔵させたり、データ転送制御装置２１０を制御するＣＰＵと、電子機器を制御するＣＰＵとを別々に設けてもよい。また本実施形態が適用できる電子機器としては、光ディスクドライブ（ＣＤ−ＲＯＭ、ＤＶＤ）、光磁気ディスクドライブ（ＭＯ）、ハードディスクドライブ、ＴＶ、ＴＶチューナ、ＶＴＲ、ビデオカメラ、オーディオ機器、電話機、プロジェクタ、パーソナルコンピュータ、電子手帳、或いはワードプロセッサなどの種々のものがある。
【０１７６】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１７７】
例えば、本発明のデータ転送制御装置の構成は図２等で説明した構成に限定されるものではなく、種々の変形実施が可能である。例えば図２のＯＴＧコントローラ２０、ＨＣ／ＰＣ切り替え回路３０、ペリフェラルコントローラ６０などの構成が省略され、ペリフェラル機能を持たず簡易ホスト機能だけを持つデータ転送制御装置にも、本発明は適用できる。
【０１７８】
また、明細書や図面中の記載において広義な用語（ステートコントローラ、処理部、転送コントローラ、バス、バッファ領域等）として引用された用語（ＯＴＧコントローラ、ＣＰＵ・ファームウェア、ホストコントローラ・ペリフェラルコントローラ、ＵＳＢ、パイプ領域・エンドポイント領域等）は、明細書や図面中の他の記載においても広義な用語に置き換えることができる。
【０１７９】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【０１８０】
また、本実施形態ではＵＳＢのＯＴＧ規格への適用例を説明したが、本発明が適用されるのはＯＴＧ規格に限定されない。例えばＯＴＧ規格と同様の思想に基づく規格やＯＴＧ規格を発展させた規格におけるデータ転送にも本発明は適用できる。
【図面の簡単な説明】
【図１】  図１（Ａ）（Ｂ）（Ｃ）はＵＳＢのＯＴＧ規格の説明図である。
【図２】  本実施形態のデータ転送制御装置の構成例である。
【図３】  図３（Ａ）（Ｂ）はパイプ・エンドポイント領域の説明図である。
【図４】  図４（Ａ）（Ｂ）はパイプ領域の再構築についての説明図である。
【図５】  図５（Ａ）〜（Ｄ）はコピー処理による再構築の説明図である。
【図６】  再構築処理時の動作を説明するフローチャートである。
【図７】  再構築処理時の動作を説明するタイミング波形図である。
【図８】  バッファコントローラの詳細な構成例である。
【図９】  図９（Ａ）、（Ｂ）、（Ｃ）は領域確保手法、ポインタ割り当て手法の説明図である。
【図１０】  バッファ管理回路の詳細な構成例である。
【図１１】  バッファ管理回路の動作を説明するタイミング波形図である。
【図１２】  本実施形態のポインタ移動処理の説明図である。
【図１３】  領域確保回路の詳細な構成例である。
【図１４】  ポインタ移動回路の詳細な構成例である。
【図１５】  ポインタ移動処理時の動作を説明するフローチャートである。
【図１６】  ポインタ移動処理時の動作を説明するタイミング波形図である。
【図１７】  データ転送制御装置のホスト時の動作の説明図である。
【図１８】  データ転送制御装置のペリフェラル時の動作の説明図である。
【図１９】  レジスタ部の説明図である。
【図２０】  ファームウェアの処理を説明するフローチャートである。
【図２１】  自動ＩＮトランザクション処理の信号波形例である。
【図２２】  自動ＯＵＴトランザクション処理の信号波形例である。
【図２３】  電子機器の構成例である。
【符号の説明】
ＰＩＰＥ０〜ＰＩＰＥｅ  パイプ（バッファ）領域、
ＥＰ０〜ＥＰｅ          エンドポイント（バッファ）領域、
ＴＲＥＧ０〜ＴＲＥＧｅ  転送条件レジスタ（共用レジスタ）、
１０  トランシーバ、１２  物理層回路、２０  ＯＴＧコントローラ、
３０  ＨＣ／ＰＣ切り替え回路、３２  ＨＣ／ＰＣセレクタ、
３４  ラインステートコントローラ、４０  転送コントローラ、
５０  ホストコントローラ、６０  ペリフェラルコントローラ、
７０  レジスタ部、７２  転送条件レジスタ部、８０  バッファコントローラ、
１００  パケットバッファ、１１０  インターフェース回路、
１１２  ＤＭＡハンドラ回路、１１４  ＣＰＵインターフェース回路、
１２０  クロックコントローラ
【図１】
0003649226.tif 000002
【図２】
0003649226.tif 000003
【図３】
0003649226.tif 000004
【図４】
0003649226.tif 000005
【図５】
0003649226.tif 000006
【図６】
0003649226.tif 000007
【図７】
0003649226.tif 000008
【図８】
0003649226.tif 000009
【図９】
0003649226.tif 000010
【図１０】
0003649226.tif 000011
【図１１】
0003649226.tif 000012
【図１２】
0003649226.tif 000013
【図１３】
0003649226.tif 000014
【図１４】
0003649226.tif 000015
【図１５】
0003649226.tif 000016
【図１６】
0003649226.tif 000017
【図１７】
0003649226.tif 000018
【図１８】
0003649226.tif 000019
【図１９】
0003649226.tif 000020
【図２０】
0003649226.tif 000021
【図２１】
0003649226.tif 000022
【図２２】
0003649226.tif 000023
【図２３】
0003649226.tif 000024