(57)【要約】【課題】効率的なディスクリプタ返信処理を実現できるデータ転送制御装置、これを含む電子機器、及びデータ転送制御方法を提供すること。【解決手段】データ転送制御装置は、コントロールエンドポイント領域ＥＰ０などのエンドポイント領域が確保されるデータバッファ１６０と、ディスクリプタ取得のデバイスリクエストをホストから受信した場合に、領域ＥＰ０とは別領域に確保されたディスクリプタ領域Ｄｅｓｃにアクセスし、ディスクリプタを読み出すアクセスコントローラ１４０と、読み出されたディスクリプタのデータパケットを、ＩＮトークンパケットをホストから受信する毎に自動送信する転送コントローラ１３０を含む。ホストからのＳＥＴＵＰ又はＯＵＴトークンパケットの受信時に自動送信を停止する。ディスクリプタ返信のイネーブルやディスクリプタの読み出し開始アドレスや読み出しサイズが設定されるレジスタを含む。【選択図】        図１０
2004295594.tif 000002
【特許請求の範囲】
【請求項１】
バスを介したデータ転送のためのデータ転送制御装置であって、
コントロール転送用のコントロールエンドポイント領域を含む複数のエンドポイント領域が確保されるデータバッファと、
ディスクリプタ取得のデバイスリクエストをホストから受信した場合に、前記コントロールエンドポイント領域とは別の領域に確保されたディスクリプタ領域にアクセスし、前記ディスクリプタ領域からディスクリプタを読み出すアクセスコントローラと、
読み出されたディスクリプタのデータパケットを、ＩＮトークンパケットをホストから受信する毎にホストに自動送信する転送コントローラと、
を含むことを特徴とするデータ転送制御装置。
【請求項２】
請求項１において、
前記転送コントローラが、
ディスクリプタのデータパケットを送信するデータステージにおいて、ホストからＳＥＴＵＰトークンパケット又はＯＵＴトークンパケットを受信した場合に、ディスクリプタのデータパケットの自動送信を停止することを特徴とするデータ転送制御装置。
【請求項３】
請求項１又は２において、
ディスクリプタ領域からのディスクリプタ返信のイネーブル、ディスエーブルが設定されるディスクリプタ返信イネーブルレジスタを含み、
前記アクセスコントローラが、
前記ディスクリプタ返信イネーブルレジスタにディスクリプタ返信のイネーブルが設定された場合には、ディスクリプタ取得のデバイスリクエストの受信時に、前記ディスクリプタ領域にアクセスし、
前記ディスクリプタ返信イネーブルレジスタにディスクリプタ返信のディスエーブルが設定された場合には、ディスクリプタ取得のデバイスリクエストの受信時に、前記コントロールエンドポイント領域にアクセスすることを特徴とするデータ転送制御装置。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記ディスクリプタ領域からのディスクリプタの読み出し開始アドレスが設定されるデイスクリプタアドレスレジスタと、
前記ディスクリプタ領域からのディスクリプタの読み出しサイズが設定されるディスクリプタサイズレジスタとを含み、
前記アクセスコントローラが、
前記ディスクリプタアドレスレジスタに設定された開始アドレスから、前記ディスクリプタサイズレジスタに設定されたサイズのディスクリプタを読み出し、
前記転送コントローラが、
読み出されたディスクリプタのデータパケットをホストに自動送信することを特徴とするデータ転送制御装置。
【請求項５】
請求項４において、
前記転送コントローラが、
前記ディスクリプタサイズレジスタに設定されるサイズのディスクリプタの送信完了前に、ホストからＳＥＴＵＰトークンパケット又はＯＵＴトークンパケットを受信した場合に、ディスクリプタのデータパケットの自動送信を停止することを特徴とするデータ転送制御装置。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記ディスクリプタ領域が、前記データバッファに確保されることを特徴とするデータ転送制御装置。
【請求項７】
請求項６において、
コントロールエンドポイント領域と次のエンドポイント領域との間に空き領域がある場合に、その空き領域に、前記ディスクリプタ領域が確保されることを特徴とするデータ転送制御装置。
【請求項８】
請求項１乃至５のいずれかにおいて、
前記ディスクリプタ領域が、前記データバッファのメモリとは別のメモリに確保されることを特徴とするデータ転送制御装置。
【請求項９】
請求項１乃至８のいずれかのデータ転送制御装置と、
前記データ転送制御装置を制御するプロセッサと、
を含むことを特徴とする電子機器。
【請求項１０】
請求項９において、
前記プロセッサが、
電子機器への電源投入後に、前記ディスクリプタ領域にディスクリプタを書き込むことを特徴とする電子機器。
【請求項１１】
バスを介したデータ転送のためのデータ転送制御方法であって、
コントロール転送用のコントロールエンドポイント領域を含む複数のエンドポイント領域を、データバッファに確保し、
ディスクリプタ取得のデバイスリクエストをホストから受信した場合に、前記コントロールエンドポイント領域とは別の領域に確保されたディスクリプタ領域にアクセスし、前記ディスクリプタ領域からディスクリプタを読み出し、
読み出されたディスクリプタのデータパケットを、ＩＮトークンパケットをホストから受信する毎にホストに自動送信することを特徴とするデータ転送制御方法。
【請求項１２】
請求項１１において、
ディスクリプタのデータパケットを送信するデータステージにおいて、ホストからＳＥＴＵＰトークンパケット又はＯＵＴトークンパケットを受信した場合に、ディスクリプタのデータパケットの自動送信を停止することを特徴とするデータ転送制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ転送制御装置、電子機器及びデータ転送制御方法に関する。
【０００２】
【背景技術】
従来より、パーソナルコンピュータと周辺機器（広義には電子機器）とを接続するためのインターフェース規格としてＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）が知られている。このＵＳＢ（高速シリアルバス）には、マウスやキーボードやプリンタなどの機器を同じ規格のコネクタで接続できると共に、いわゆるプラグ＆プレイやホットプラグも実現できるという利点がある。また、従来のＵＳＢ１．１の規格に対する互換性を持ちながら、ＵＳＢ１．１に比べて格段に高速な４８０Ｍｂｐｓ（ＨＳモード）のデータ転送速度を実現できる規格として、ＵＳＢ２．０規格が策定され、注目を浴びている。
【０００３】
【特許文献１】
特開２００２−１３５１３２号公報
【０００４】
【発明が解決しようとする課題】
ＵＳＢでは４種類の転送方式が定義されており、その１つとしてコントロール転送と呼ばれる転送方式が定義されている。このコントロール転送では、ホストがＵＳＢのデバイスに対してデバイスリクエストを送信し、デバイスはそのリクエストを解釈、実行して、レスポンスをホストに返す。
【０００５】
デバイスリクエストには、標準デバイスリクエスト、デバイスクラス固有のリクエスト、ベンダ固有のリクエストがある。そして標準デバイスリクエストの中には、ＧＥＴ−ＤＥＳＣＲＩＰＴＯＲ（ディスクリプタ取得を要求するデバイスリクエスト）と呼ばれるものがある。このＧＥＴ−ＤＥＳＣＲＩＰＴＯＲがコントロール転送を用いてホストから要求されると、デバイスは自身のディスクリプタをホストに返信する。即ちＵＳＢのデバイスは、電源投入後やバス接続後に、自身がどのような能力、特性、属性を持つデバイスであるかをホストに報告する必要があり、この報告する情報がディスクリプタと呼ばれる。
【０００６】
しかしながら、ホストのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のデバイスドライバの仕様によっては、ホストからのＧＥＴ−ＤＥＳＣＲＩＰＴＯＲの要求が、電源投入後やバス接続後に複数回行われる場合がある。このため、ＵＳＢのデバイスが内蔵するデータ転送装置を制御するファームウェア（プロセッサ）は、ＧＥＴ−ＤＥＳＣＲＩＰＴＯＲの要求が来る毎に同じ処理を繰り返さなければならず、ファームウェアの処理のリソースが無駄に消費されてしまう。
【０００７】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、効率的なディスクリプタ返信処理を実現できるデータ転送制御装置、これを含む電子機器、及びデータ転送制御方法を提供することにある。
【０００８】
【課題を解決するための手段】
本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、コントロール転送用のコントロールエンドポイント領域を含む複数のエンドポイント領域が確保されるデータバッファと、ディスクリプタ取得のデバイスリクエストをホストから受信した場合に、前記コントロールエンドポイント領域とは別の領域に確保されたディスクリプタ領域にアクセスし、前記ディスクリプタ領域からディスクリプタを読み出すアクセスコントローラと、読み出されたディスクリプタのデータパケットを、ＩＮトークンパケットをホストから受信する毎にホストに自動送信する転送コントローラとを含むデータ転送制御装置に関係する。
【０００９】
本発明によれば、コントロールエンドポイント領域などの複数のエンドポイント領域がデータバッファに確保される。またコントロールエンドポイント領域とは別の領域にディスクリプタ領域が確保される。そしてディスクリプタ取得を要求するデバイスリクエストをホストから受信すると、アクセスコントローラは、ディスクリプタ領域にアクセスしてディスクリプタを読み出す。そして転送コントローラは、読み出されたディスクリプタのデータパケットを、ＩＮトークンパケットをホストから受信する毎にホストに送信する。このようにすれば、ＩＮトークンパケットをホストから受信する毎にプロセッサ等がコントロールエンドポイント領域にディスクリプタを書き込むというような煩雑な処理を不要にできる。これにより、プロセッサ等の処理負荷を軽減でき、効率の良いディスクリプタ返信を実現できる。
【００１０】
なおディスクリプタ領域は、データバッファに確保してもよいし、データバッファとは物理的に別のメモリに確保してもよい。また電源投入後（バス接続後）にディスクリプタ領域にディスクリプタを予め書き込んでおくことができる。また、ディスクリプタの残り送信サイズがマックスパケットサイズ以上の場合には、ディスクリプタを、ペイロードがマックスパケットサイズとなるパケットに分割して送信することができる。そしてディスクリプタの残り送信サイズがマックスパケットサイズよりも小さい場合には、残りのディスクリプタをショートパケット（ゼロ長パケットを含む）で自動送信することができる。またコントロールエンドポイント領域などのエンドポイント領域については、先に入力された情報が先に出力される領域に設定し、ディスクリプタ領域については、ランダムアクセスが可能な領域（所望のアドレスに自由にアクセスできる領域）に設定することができる。
【００１１】
また本発明では、前記転送コントローラが、ディスクリプタのデータパケットを送信するデータステージにおいて、ホストからＳＥＴＵＰトークンパケット又はＯＵＴトークンパケットを受信した場合に、ディスクリプタのデータパケットの自動送信を停止するようにしてもよい。
【００１２】
このようにすれば、全てのディスクリプタの送信が完了する前に、ホストからＳＥＴＵＰトークンパケットやＯＵＴトークンパケットを受信した場合にも、適正にこれに対応できるようになる。
【００１３】
また本発明では、ディスクリプタ領域からのディスクリプタ返信のイネーブル、ディスエーブルが設定されるディスクリプタ返信イネーブルレジスタを含み、前記アクセスコントローラが、前記ディスクリプタ返信イネーブルレジスタにディスクリプタ返信のイネーブルが設定された場合には、ディスクリプタ取得のデバイスリクエストの受信時に、前記ディスクリプタ領域にアクセスし、前記ディスクリプタ返信イネーブルレジスタにディスクリプタ返信のディスエーブルが設定された場合には、ディスクリプタ取得のデバイスリクエストの受信時に、前記コントロールエンドポイント領域にアクセスするようにしてもよい。
【００１４】
本発明によれば、ディスクリプタ返信イネーブルレジスタにプロセッサ等によりイネーブルが設定されると、ディスクリプタの自動送信が許可される。そしてディスクリプタ取得のデバイスリクエストの受信時に、ディスクリプタ領域からディスクリプタが自動的に読み出され、ホストに自動送信されるようになる（ディスクリプタがハードウェア回路により読み出されて送信されるようになる）。これによりプロセッサ等の処理の簡素化と処理負荷の軽減化を図れる。
【００１５】
また本発明では、前記ディスクリプタ領域からのディスクリプタの読み出し開始アドレスが設定されるデイスクリプタアドレスレジスタと、前記ディスクリプタ領域からのディスクリプタの読み出しサイズが設定されるディスクリプタサイズレジスタとを含み、前記アクセスコントローラが、前記ディスクリプタアドレスレジスタに設定された開始アドレスから、前記ディスクリプタサイズレジスタに設定されたサイズのディスクリプタを読み出し、前記転送コントローラが、読み出されたディスクリプタのデータパケットをホストに自動送信するようにしてもよい。
【００１６】
このようにすれば、ディスクリプタ領域の任意の開始アドレスから、任意のサイズのディスクリプタを読み出して、ホストに自動送信できるようになる。これにより、階層化された複数種類のディスクリプタをディスクリプタ領域に書き込んでおき、これらの複数種類のディスクリプタの中から所望のディスクリプタを自動送信することが可能になる。
【００１７】
また本発明では、前記転送コントローラが、前記ディスクリプタサイズレジスタに設定されるサイズのディスクリプタの送信完了前に、ホストからＳＥＴＵＰトークンパケット又はＯＵＴトークンパケットを受信した場合に、ディスクリプタのデータパケットの自動送信を停止するようにしてもよい。
【００１８】
このようにすれば、全てのディスクリプタの送信が完了する前に、ホストからＳＥＴＵＰトークンパケットやＯＵＴトークンパケットを受信した場合にも、適正にこれに対応できるようになる。
【００１９】
また本発明では、前記ディスクリプタ領域が、前記データバッファに確保されるようにしてもよい。
【００２０】
また本発明では、コントロールエンドポイント領域と次のエンドポイント領域との間に空き領域がある場合に、その空き領域に、前記ディスクリプタ領域が確保されるようにしてもよい。
【００２１】
このようにすれば、データバッファの記憶領域を無駄なく使用できるようになる。
【００２２】
また本発明では、前記ディスクリプタ領域が、前記データバッファのメモリとは別のメモリに確保されるようにしてもよい。
【００２３】
この場合の別メモリは、例えば、電源供給がオフされても、ディスクリプタの情報が消失しないようなメモリ（ＥＥＰＲＯＭ、ＲＯＭ等）を採用できる。
【００２４】
また本発明は、上記のいずれかのデータ転送制御装置と、前記データ転送制御装置を制御するプロセッサとを含む電子機器に関係する。
【００２５】
また本発明では、前記プロセッサが、電子機器への電源投入後に、前記ディスクリプタ領域にディスクリプタを書き込むようにしてもよい。
【００２６】
なおデータ転送制御装置を含むデバイスがバス接続された後の初期段階に、ディスクリプタ領域にディスクリプタを書き込むようにしてもよい。またディスクリプタ領域へのディスクリプタの書き込みは、電源投入後（バス接続後）、ディスクリプタ領域からのディスクリプタの自動返信前に行うことができる。
【００２７】
また本発明は、バスを介したデータ転送のためのデータ転送制御方法であって、コントロール転送用のコントロールエンドポイント領域を含む複数のエンドポイント領域を、データバッファに確保し、ディスクリプタ取得のデバイスリクエストをホストから受信した場合に、前記コントロールエンドポイント領域とは別の領域に確保されたディスクリプタ領域にアクセスし、前記ディスクリプタ領域からディスクリプタを読み出し、読み出されたディスクリプタのデータパケットを、ＩＮトークンパケットをホストから受信する毎にホストに自動送信するデータ転送制御方法に関係する。
【００２８】
【発明の実施の形態】
以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００２９】
１．ＵＳＢのデータ転送手法
ＵＳＢ（広義にはシリアルバス）のデータ転送手法について簡単に説明する。ＵＳＢではデータ転送の主導権をホストが有している。即ち、データ転送のトランザクションを起動するのはホスト側であり、データ転送に関する大部分の制御はホストが行う。従って、デバイス（ターゲット）はホストからの要求に対して単に応えるだけでよい。このため、デバイス側の処理、構成を簡素化でき、デバイスが内蔵するＣＰＵ（広義にはプロセッサ）としても低価格なものを用いることが可能になる。
【００３０】
ＵＳＢでは、このようなホスト主導のデータ転送を実現するために、図１に示すようなエンドポイント（ＥＰ０〜ＥＰ１５）がデバイス側に用意される。ＵＳＢでは、１つのデバイスとホストとの間に、複数の論理的な通信路（パイプ）を持たせることができ、各パイプのデバイス側の端がエンドポイントと呼ばれる。各エンドポイントは、物理的には、少なくとも１パケット分のデータを格納できるＦＩＦＯメモリで実現される。
【００３１】
エンドポイントは、デバイスアドレスとエンドポイント番号により一義的にアドレス指定できる。即ちホストは、デバイスアドレスとエンドポイント番号を指定することで、所望のエンドポイントへのデータ送信や、所望のエンドポイントからのデータ受信を自由に行うことができる。また、エンドポイントの構成の仕方はデバイス側の任意であり、エンドポイント番号の割り当てや、各エンドポイントに割り当てられる記憶領域のデータサイズ等は、エニミュレーション（ｅｎｕｍｅｒａｔｉｏｎ）処理時にホストは知ることができる。
【００３２】
２．コントロール転送
ＵＳＢにおいては、データ転送のタイプとして、コントロール転送、アイソクロナス転送、インタラプト転送、バルク転送が用意されている。
【００３３】
ここで、コントロール転送は、ホストとデバイス（ターゲット、ペリフェラル）との間でコントロールエンドポイント（エンドポイント番号が０のエンドポイントＥＰ０）を介して行われる制御用の転送モードである。このコントロール転送により、デバイスの初期化のためのコンフィグレーション情報等が転送される。このため、ＵＳＢのデバイスは、コントロールエンドポイント（ＥＰ０）については必ず具備する必要がある。
【００３４】
図２に示すようにコントロール転送は、ホストがデバイスにデバイスリクエストを送るセットアップステージと、デバイスリクエストで指定される転送方向でデータを転送するデータステージと、データ転送が成功したか否かを伝えるステータスステージとにより構成される。また、各ステージは少なくとも１つ以上のトランザクションにより構成される。ここでトランザクションは、トークンパケット、オプショナルなデータパケット、オプショナルなハンドシェークパケットにより構成される。このコントロール転送により、デバイスのエニュミレーション（ｅｎｕｍｅｒａｔｉｏｎ）、コンフィギュレーション（ｃｏｎｆｉｇｕｒａｔｉｏｎ）などが行われる。
【００３５】
デバイスリクエストは、ＵＳＢのデバイスに対するホストからのコマンドである。このデバイスリクエストには、標準デバイスリクエスト、デバイスクラス固有のリクエスト、ベンダ固有のリクエストがある。図３に、標準デバイスリクエストの代表例を示す。
【００３６】
図２に示すように、セットアップステージでは、ホストがＳＥＴＵＰトークパケットを生成して、デバイスに送信（発行）する。次に、図２に例示されるデバイスリクエストを含むＳＥＴＵＰデータのパケットを、ホストがデバイスに送信する。ＳＥＴＵＰデータパケットを受信したデバイスは、ＳＥＴＵＰデータパケットに含まれるデバイスリクエストを解析し、ＡＣＫ（ＡＣＫｎｏｗｌｅｄｇｅｍｅｎｔ）のハンドシェークパケットをホストに送信する。デバイスからＡＣＫのハンドシェークパケットが返ってくると、ホストはセットアップステージを終了する。なお図２の「Ｈ→Ｄ」は「ホストからデバイスにパケットが送信されること」を表し、「Ｄ→Ｈ」は「デバイスからホストにパケットが送信されること」を表す（他の図面においても同様）。
【００３７】
セットアップステージが終了するとデータステージに移行する。なおデータステージが無いデバイスリクエスト（図３のＳＥＴ−ＡＤＤＲＥＳＳ、ＳＥＴ−ＦＥＡＴＵＲＥ）では、データステージは省略されてステータスステージに移行する。
【００３８】
データステージでの転送方向が「ＩＮ」であるデバイスリクエスト（図３のＧＥＴ−ＤＥＳＣＲＩＰＴＯＲ）では、データステージにおいてホストがＩＮトランザクションを発生する。このＩＮトランザクションでは、ホストがＩＮトークンパケットをデバイスに送信する。そしてＩＮトークンパケットを受けたデバイスは、ホストにＩＮデータを送信する。例えばデバイスリクエストがＧＥＴ−ＤＥＳＣＲＩＰＴＯＲである場合、デバイスは、ディスクリプタをＩＮデータに含ませてホストに送信する。ホストは、データパケットをデバイスから受信すると、ＡＣＫのハンドシェークパケットをデバイスに返す。そして、このＩＮトランザクションを繰り返して、トータルサイズ分のデータの転送が完了すると、データステージが終了する。
【００３９】
データステージでの転送方向が「ＯＵＴ」であるデバイスリクエスト（図３のＳＥＴ−ＤＥＳＣＲＩＰＴＯＲ）では、データステージにおいてホストがＯＵＴトランザクションを発生する。このＯＵＴトランザクションでは、ホストがＯＵＴトークンパケットをデバイスに送信し、データパケットをデバイスに送信する。デバイスは、データパケットを受信すると、ＡＣＫのハンドシェークパケットをホストに返す。そして、このＯＵＴトランザクションを繰り返して、トータルサイズ分のデータの転送が完了すると、データステージが終了する。
【００４０】
データステージが終了するとステータスステージに移行する。データステージがＩＮトランザクションであった場合には、ホストは、ＯＵＴトークンパケットを送信した後、ゼロ長のデータパケットをデバイスに送信する。そしてホストがＡＣＫのハンドシェークパケットをデバイスから受信すると、ステータスステージが終了する。一方、データステージがＯＵＴトランザクションであった場合やデータステージ無しの場合には、ホストは、ＩＮトークンパケットをデバイスに送信する。そしてホストは、ゼロ長のデータパケットをデバイスから受信すると、ＡＣＫのハンドシェークパケットをデバイスに送信し、これによりステータスステージが終了する。以上のようにしてコントロール転送が終了する。
【００４１】
３．ディスクリプタ
セットアップステージで転送されるＳＥＴＵＰデータのフォーマットを図４に示す。ホストは図４のｂＲｅｑｕｅｓｔでデバイスリクエストのタイプを指定する。そしてディスクリプタ取得を要求するＧＥＴ−ＤＥＳＣＲＩＰＴＯＲのデバイスリクエストが指定されると、デバイスは図５に示すようなディスクリプタをホストに返信する。
【００４２】
デバイスが返信するディスクリプタとしては、図５に示すようにデバイスディスクリプタ、コンフィギュレーションディスクリプタ、インターフェースディスクリプタ、エンドポイントディスクリプタ、ストリングディスクリプタがある。ホストは図４のｗＶａｌｕｅなどでディスクリプタのタイプを指定する。
【００４３】
デバイスディスクリプタにはＵＳＢデバイスの一般的な情報が記述される。コンフィギュレーションディスクリプタにはデバイス構成についての情報が記述される。ＵＳＢでは１つの構成（例えばＣＤドライブ）が複数のインターフェース（ＣＤＲＯＭドライブ、ビデオＣＤドライブ）を持つことができ、インターフェースディスクリプタには構成内のインターフェースについての情報が記述される。エンドポイントディスクリプタにはエンドポイントについての情報が記述される。ストリングディスクリプタにはオプショナルのディスクリプタである。
【００４４】
図５に示すようにディスクリプタの内容はディスクリプタ毎に一義的に決めることができる内容である。従って本来ならば、デバイスはホストに対してディスクリプタを１度だけ報告すればよいはずである。ところがホストのデバイスドライバは階層構造になっているため、各階層毎にディスクリプタの報告を要求してくる場合がある。また階層毎に必要とするディスクリプタのタイプも異なる。このため、電源投入後やバス接続後（バスリセット後）に、ＧＥＴ−ＤＥＳＣＲＩＰＴＯＲ要求が複数回行われる場合がある。
【００４５】
一方、ディスクリプタのデータは、エンドポイント番号が０であるコントロールエンドポイントを介したコントロール転送により転送される。そしてデバイスのデータバッファに確保されるコントロールエンドポイント領域ＥＰ０は、ＦＩＦＯ（リングバッファ構造のＦＩＦＯ）メモリにより構成されるため、前回にＥＰ０に書き込まれたデータは上書きにより消失してしまう。
【００４６】
例えばホストからＧＥＴ−ＤＥＳＣＲＩＰＴＯＲを受信すると、デバイスのデータ転送制御装置を制御するファームウェアは、コントロールエンドポイント領域ＥＰ０にディスクリプタを書き込む。そしてデータ転送制御装置は、書き込まれたディスクリプタをホストに送信する。その後、ホストから例えばＧＥＴ−ＳＴＡＴＵＳを受信すると、データ転送制御装置のファームウェアは、コントロールエンドポイント領域ＥＰ０にデバイスのステータスを書き込む。すると、領域ＥＰ０に既に書き込まれていたディスクリプタは上書きにより消失してしまう。従って、その後、ＧＥＴ−ＤＥＳＣＲＩＰＴＯＲをホストから再び受信した場合には、ファームウェアは、前回に書き込んだものと同内容のディスクリプタを領域ＥＰ０に再度書き込まなければならない。従って、ファームウェアの処理のリソースが無駄に消費されてしまう課題があることが判明した。
【００４７】
４．データ転送制御装置及び電子機器の構成
図６に本実施形態のデータ転送制御装置１００及びこれを含む電子機器１１０の構成例を示す。なおデータ転送制御装置１００及び電子機器１１０は、図６の全ての構成要素を含む必要はなく、その一部を省略する構成にしてもよい。
【００４８】
電子機器１１０は、データ転送制御装置１００と、ＡＳＩＣなどで構成されるアプリケーションデバイス２１０（アプリケーション層のデバイス）と、ＣＰＵ２２０と、ＲＯＭ２３０と、ＲＡＭ２４０と、表示部２５０と、操作部２６０を含む。なおこれらの構成要素の一部を省略する構成にしてもよい。ここでアプリケーションデバイス２１０としては、例えばハードディスクドライブや光ディスクドライブなどのメディアドライブを制御するデバイスや、プリンタやスキャナを制御するデバイスや、ＭＰＥＧエンコーダ、ＭＰＥＧデコーダ等を含むデバイスなどがある。
【００４９】
ＣＰＵ２２０（広義にはプロセッサ）は機器全体の制御などを行う。データ転送制御装置１００を制御するファームウェア（プログラム）は、ＣＰＵ２２０上で動作させることができる。ＲＯＭ２３０は制御プログラムや各種のデータを記憶する。ＲＡＭ２４０はＣＰＵ２２０やデータ転送制御装置１００のワーク領域やデータ格納領域として機能する。表示部２５０は種々の情報をユーザに表示する。操作部２６０はユーザが電子機器を操作するためのものである。
【００５０】
なお図６ではＤＭＡバスとＣＰＵバスが分離されているが、これらを共通化してもよい。またデータ転送制御装置１００の制御に専用のＣＰＵを設けてもよい。また本実施形態が適用できる電子機器としては、光ディスクドライブ（ＣＤ−ＲＯＭ、ＤＶＤ）、光磁気ディスクドライブ（ＭＯ）、ハードディスクドライブ、ＴＶ、ＴＶチューナ、ＶＴＲ、ビデオカメラ、オーディオ機器、電話機、プロジェクタ、パーソナルコンピュータ、電子手帳、或いはワードプロセッサなどの種々のものがある。
【００５１】
データ転送制御装置１００はトランシーバ１２０を含む。このトランシーバ１２０は、ＵＳＢ（シリアルバス）のＦＳ（フルスピード）モードやＨＳ（ハイスピード）モードでのデータ転送を実現する。このトランシーバ１２０としては、例えばＵＳＢ２．０の物理層回路や、論理層回路の一部についてのインターフェースを定義したＵＴＭＩ（ＵＳＢ２．０  Ｔｒａｎｓｃｅｉｖｅｒ  Ｍａｃｒｏｃｅｌｌ  Ｉｎｔｅｒｆａｃｅ）に準拠したマクロセルを用いることができる。このトランシーバ１２０には、例えば、差動信号ＤＰ、ＤＭを用いてＵＳＢ上のデータを送受信するアナログフロントエンド回路（受信回路、送信回路）を含ませることができる。また、ビットスタッフィング、ビットアンスタッフィング、シリアル・パラレル変換、パラレル・シリアル変換、ＮＲＺＩデコード、ＮＲＺＩエンコード、サンプリングクロック生成などの処理を行う回路を含ませることができる。またデータ転送制御装置１００が使用する動作クロックや、サンプリングクロックの生成に使用されるクロックなどを生成するＰＬＬを含ませることができる。
【００５２】
データ転送制御装置１００は転送コントローラ１３０（Ｓｅｒｉａｌ  Ｉｎｔｅｒｆａｃｅ  Ｅｎｇｉｎｅ）を含む。この転送コントローラ１３０は、ＵＳＢのパケット転送処理などの種々の処理を行う。この転送コントローラ１３０（第１のインターフェース）はパケットハンドラ回路１３２、サスペンド＆レジューム制御回路１３４、トランザクション管理回路１３６を含む。ここでパケットハンドラ回路１３２は、ヘッダ及びデータからなるパケットの組み立て（生成）や分解などを行ったり、ＣＲＣの生成や解読を行う。またサスペンド＆レジューム制御回路１３４は、サスペンドやレジューム時のシーケンス制御を行う。またトランザクション管理回路１３６は、トークン、データ、ハンドシェークなどのパケットにより構成されるトランザクションを管理する。そしてトランザクション管理回路１３６は、トークンパケットを受信した場合には、自分宛か否かを確認し、自分宛の場合には、データパケットの転送処理を行い、その後に、ハンドシェークパケットの転送処理を行う。
【００５３】
データ転送制御装置１００はアクセスコントローラ１４０を含む。このアクセスコントローラ１３０はデータバッファ１６０へのアクセス制御（書き込みアクセス制御、読み出しアクセス制御）を行う。より具体的には、アクセスコントローラ１４０は、データバッファ１６０にエンドポイント領域を確保したり管理する処理を行う。またデータバッファ１６０の書き込みアドレスや読み出しアドレスを生成し、データバッファ１６０へのデータの書き込み処理やデータバッファ１６０からのデータの読み出し処理を行う。またデータバッファ１６０に対するＵＳＢ側、ＤＭＡ側、ＣＰＵ側からのアクセスを調停する処理を行う。
【００５４】
データ転送制御装置１００はデータバッファ１６０を含む。このデータバッファ１６０（パケットバッファ、ＦＩＦＯメモリ）は、ＵＳＢを介して転送されるデータ（パケット）を一時的に記憶するものであり、ＵＳＢでのデータ転送速度とＤＭＡバスやＣＰＵバスでのデータ転送速度との速度差を補償する機能などを有する。なおデータバッファ１６０の一部又は全部を外付けのメモリにより構成することも可能である。
【００５５】
データ転送制御装置１００はバルク転送管理回路１７０を含む。このバルク転送管理回路１７０は、ＵＳＢにおけるバルク転送を管理する。またデータ転送制御装置１８０はＤＭＡインターフェース１８０やＣＰＵインターフェース１９０を含む。このＤＭＡインターフェース１８０は、ＤＭＡバスに接続され、外部のアプリケーションデバイス２１０との間でのＤＭＡ転送（ＣＰＵ２２０が介在しないデータ転送）を実現する。またＣＰＵインターフェース１９０はＣＰＵバスに接続され、ＣＰＵ２２０とのインターフェース処理を実現する。
【００５６】
そして本実施形態では、ディスクリプタ取得を要求するデバイスリクエスト（ＧＥＴ−ＤＥＳＣＲＩＰＴＯＲ）をホストから受信すると、アクセスコントローラ１４０が、データバッファ１６０のコントロールエンドポイント領域とは別の領域に確保されたディスクリプタ領域にアクセスし、ディスクリプタ（ディスクリプタデータ）を読み出す。そして転送コントローラ１３０が、読み出されたディスクリプタのデータパケットを、ＩＮトークンパケットをホストから受信する毎にホストに自動送信する。即ちディスクリプタを複数のデータパケットに分割して自動送信する。なお「自動送信」とは、データ送信中にファームウェア（ＣＰＵ）が介在しないハードウェア回路による送信の意味である。
【００５７】
５．データバッファ
図７（Ａ）にデータバッファ１６０（ＦＩＦＯメモリ）のメモリマップの例を示す。図７（Ａ）に示すようにデータバッファ１６０は複数の領域（エンドポイント領域、ディスクリプタ領域）に分割され、複数のエンドポイント領域ＥＰ０、ＥＰａ、ＥＰｂ、ＥＰｃが確保（ａｌｌｏｃａｔｅ）される。より具体的にはデータバッファ１６０には、コントロール転送用のコントロールエンドポイント領域ＥＰ０（エンドポイント０の領域）が確保される。また領域ＥＰ０とは別の領域にディスクリプタ領域Ｄｅｓｃが確保される。更に汎用のエンドポイント領域ＥＰａ、ＥＰｂ、ＥＰｃが確保される。なお汎用エンドポイント領域の数は３個に限定されず、１個、２個でもよく、或いは４個以上でもよい。
【００５８】
これらのデータバッファ１６０の各領域（ａｒｅａ）の境界は、レジスタ１０、１１、１２、１３、１４により設定される。ここでレジスタ１０は領域ＥＰ０のマックスサイズＥＰ０ＭＳを設定するためのレジスタ（ポインタレジスタ）であり、レジスタ１１、１２、１３、各々、領域ＥＰａ、ＥＰｂ、ＥＰｃの開始アドレスＥＰａＳＡ、ＥＰｂＳＡ、ＥＰｃＳＡを設定するためのレジスタである。またレジスタ１４は領域ＥＰｃの終了アドレスＥＰｃＥＡを設定するためのレジスタである。これらのレジスタ１０〜１４はデータ転送制御装置１００のアクセスコントローラ１４０に含ませることができる。そしてファームウェア（ＣＰＵ）がこれらのレジスタ１０〜１４にアドレスを設定することで、データバッファ１６０に領域Ｄｅｓｃ、ＥＰ０〜ＥＰＣが確保される。
【００５９】
領域ＥＰ０は、ＵＳＢで必須のエンドポイント０に使用する領域であり、ＩＮ及びＯＵＴの両方向の転送に使用される。この領域ＥＰ０のサイズは、レジスタ１０に設定されたエンドポイント０のマックスパケットサイズ（ＥＰ０ＭＳ）により一義に決められる。そして領域ＥＰ０で送受信できるパケットは例えば１つになる（シングルバッファ）。但し、領域ＥＰ０はこのような構成に限定されない。
【００６０】
領域ＥＰａ、ＥＰｂ、ＥＰｃは、エンドポイント番号と、ＩＮ又はＯＵＴの転送方向を指定できる汎用のエンドポイント領域である。領域ＥＰａの開始アドレス、終了アドレスはレジスタ１１、１２により設定され、領域ＥＰｂの開始アドレス、終了アドレスはレジスタ１２、１３により設定される。また領域ＥＰｃの開始アドレス、終了アドレスはレジスタ１３、１４により設定される。これらの領域ＥＰａ、ＥＰｂ、ＥＰｃのサイズは、各転送モード（ＦＳモード、ＨＳモード）での最大パケットサイズ以上に設定される。
【００６１】
ディスクリプタ領域Ｄｅｓｃの開始アドレス、終了アドレスは、レジスタ１０、１１により設定される。なお領域Ｄｅｓｃを、図７（Ａ）に示す場所とは異なる場所（例えばフリー領域）に確保してもよい。
【００６２】
本実施形態では図７（Ａ）において、エンドポイント領域ＥＰ０、ＥＰａ、ＥＰｂ、ＥＰｃは、リングバッファ構造のＦＩＦＯ領域になっている。即ち、これらの各領域にデータが書き込まれる毎（或いは読み出される毎）に、書き込みポインタ（或いは読み出しポインタ）の指すアドレスがインクリメントされる（デクリメントでもよい）。そして書き込みポインタの指すアドレスが終了アドレスに達すると、書き込みポインタの指すアドレスは開始アドレスに戻される。このリングバッファ構造のＦＩＦＯでは、過去に各領域に書き込まれたデータは、その後にデータが上書きされることで消失することになる。
【００６３】
一方、ディスクリプタ領域ＤｅｓｃはＦＩＦＯ領域になっておらず、ランダムアクセスが可能な領域になっている。即ちファームウェアは、領域Ｄｅｓｃの任意のアドレスからデータを読み出すことができる。また領域Ｄｅｓｃの任意のアドレスにデータを書き込むことができる。
【００６４】
６．ディスクリプタ領域からの自動返信
本実施形態の特徴は、コントロールエンドポイント領域ＥＰ０とは別の領域にディスクリプタ領域Ｄｅｓｃを設けた点にある。この領域Ｄｅｓｃは、標準デバイスリクエストの動作の一部を簡易且つ高速に行うための領域である。本実施形態では、標準デバイスリクエストのうち、デバイス毎に一義に決定される内容を、電源投入後の初期設定時に領域Ｄｅｓｃにファームウェア（ＣＰＵ）が書き込む。このようにすれば、この書き込んでおいた内容を問うデバイスリクエストがホストから来た場合に、読み出すべきディスクリプタの開始アドレスとサイズを設定するだけで、データ転送制御装置１００が自動的にデバイスリクエストについてのデータステージのデータ転送を行うようになる。従って、ホストからデバイスリクエストを受けてから領域ＥＰ０にデータを書き込むといった処理を行わなくて済むため、簡易且つ高速にホストからのデバイスリクエストに応答できるようになる。
【００６５】
より具体的には本実施形態では、電源投入後（バス接続後）に、ファームウェアが、ディスクリプタ領域Ｄｅｓｃに、図５に示すようなディスクリプタを書き込む。ここでファームウェアはＣＰＵ（電子機器の汎用のＣＰＵ又はデータ転送制御装置に専用のＣＰＵ）上で動作するソフトウェアである。
【００６６】
またデータ転送制御装置１００は図７（Ｂ）（Ｃ）に示すように、領域Ｄｅｓｃからのディスクリプタ返信のイネーブル又はディスエーブルを設定できるレジスタ１４７を含む。そして図７（Ｂ）に示すようにファームウェアによりレジスタ１４７に対してディスクリプタ返信のディスエーブル（ＲｅｐｌｙＤｅｓｃ＝０）が設定されると、アクセスコントローラ１４０はコントロールエンドポイント領域ＥＰ０にアクセスするようになる。即ちＧＥＴ−ＤＥＳＣＲＩＰＴＯＲをホストから受信した場合に領域ＥＰ０にアクセスする。
【００６７】
一方、ファームウェアによりレジスタ１４７に対してイネーブル（ＲｅｐｌｙＤｅｓｃ＝１）が設定されると、アクセスコントローラ１４０は、領域ＥＰ０ではなく領域Ｄｅｓｃにアクセスするようになる。即ちＧＥＴ−ＤＥＳＣＲＩＰＴＯＲをホストから受信した場合に領域Ｄｅｓｃにアクセスし、領域Ｄｅｓｃに書き込まれたディスクリプタを読み出す。
【００６８】
そして読み出されたディスクリプタは、転送コントローラ１３０により、複数のパケット（マックスパケットサイズのパケット及びショートパケット）に分割されてホストに送信される。
【００６９】
従って、電源投入後にＧＥＴ−ＤＥＳＣＲＩＰＴＯＲ要求をホストが複数回行った場合にも、領域Ｄｅｓｃのディスクリプタが自動的にホストに返信されるようになる。従ってファームウェアは、領域Ｄｅｓｃにデスクリプタを、一旦、書き込めば、その後に複数回のＧＥＴ−ＤＥＳＣＲＩＰＴＯＲ要求が来た場合にも、領域ＥＰ０にディスクリプタを書き込まなくても済むようになる。従って、ファームウェアの処理負荷を軽減できると共にディスクリプタ転送を高速化できる。
【００７０】
なおディスクリプタ領域Ｄｅｓｃは、図８（Ａ）に示すようにデータバッファ１６０に確保してもよいが、図８（Ｂ）に示すように、データバッファ１６０のメモリとは物理的に別のメモリ１６９に確保してもよい。このような別メモリ１６９としては例えばＲＯＭやＥＥＰＲＯＭ（電気的にデータの消去が可能なメモリ）などを想定できる。このように、ＲＯＭやＥＥＰＲＯＭなどの別メモリ１６９に領域Ｄｅｓｃを設定するようにすれば、電源が投入される毎に（バスが接続される毎に）、領域Ｄｅｓｃにディスクリプタを書き込まなくても済むようになる。
【００７１】
なお、データバッファ１６０に領域Ｄｅｓｃを確保する場合には、コントロールエンドポイント領域ＥＰ０と、ＥＰ０の次のエンドポイント領域ＥＰａ（アドレス順で並べた時の次のエンドポイント領域）の間に、領域Ｄｅｓｃを確保することが望ましい。
【００７２】
即ち、通常、コントロールエンドポイント領域ＥＰ０のサイズは、エンドポイント領域ＥＰａよりも小さなサイズに設定される。例えばＵＳＢ２．０のＨＳ（ハイスピード）モードでは、領域ＥＰ０のサイズは６４バイトに設定される一方で、領域ＥＰａのサイズは例えば５１２バイト（最大パケットサイズ）に設定される。この場合に図９（Ａ）に示すように、領域ＥＰ０に隣接するように領域ＥＰａを確保すると、領域境界が、ＥＰａＳＡ＝６４、ＥＰｂＳＡ＝５７６というように、ファームウェアにとって取り扱いにくい値になってしまう。
【００７３】
これに対して図９（Ｂ）では、領域ＥＰ０と次の領域ＥＰａとの間の空き領域に、ディスクリプタ領域Ｄｅｓｃを確保している。即ち領域ＥＰ０のサイズが、ＥＰ０の次の領域ＥＰａのサイズよりも小さい場合に（ＥＰ０の終了アドレスが、ＥＰａの開始アドレスよりも小さい場合に）、ＥＰ０とＥＰａの間の空き領域にＤｅｓｃを確保する。このようにすれば、領域境界を、例えばＥＰａＳＡ＝５１２、ＥＰｂＳＡ＝１０２４というように、５１２（最大パケットサイズ）の倍数に設定することが可能になり、ファームウェアにとって取り扱い値に設定できる。これによりファームウェアの処理の簡素化等を図れる。
【００７４】
なお、領域Ｄｅｓｃを例えば、領域ＥＰａ、ＥＰｂ間や領域ＥＰｂ、ＥＰｃ間に確保したり、領域ＥＰｃの上のフリー領域に確保するようにしてもよい。
【００７５】
７．詳細例
図１０にアクセスコントローラ１４０の詳細な構成例を示す。アクセスコントローラ１４０はエンドポイント管理回路１４１とバッファ管理回路１５０を含む。エンドポイント管理回路１４１は、データバッファ１６０の各記憶領域の入り口となるエンドポイントを管理する回路である。バッファ管理回路１５０は、データバッファ１６０へのアクセス（書き込みアクセス、読み出しアクセス）を管理する回路である。より具体的にはバッファ管理回路１５０は、書き込みアドレスや読み出しアドレスを生成し、データバッファ１６０へのデータの書き込み処理やデータバッファ１６０からのデータの読み出し処理を行う。
【００７６】
転送コントローラ１３０（トランザクション管理回路１３６）は、ＵＳＢを介して転送される書き込みデータＵＳＢＷｒＤａｔａをデータバッファ１６０に出力し、読み出しデータＵＳＢＲｄＤａｔａをデータバッファ１６０から入力する。また転送コントローラ１３０は、バッファ管理回路１５０に対して書き込み要求信号ＵＳＢＷｒＲｅｑ、読み出し要求信号ＵＳＢＲｄＲｅｑを出力し、バッファ管理回路１５０から書き込みアクノリッジ信号ＵＳＢＷｒＡｃｋ、読み出しアクノリッジ信号ＵＳＢＲｄＡｃｋを受ける。
【００７７】
また転送コントローラ１３０は、エンドポイント管理回路１４１に対して、トランザクション終了信号ＴｒａｎＥｎｄＰｕｌｓｅ、トランザクションステータス信号ＴｒａｎＳｔａｔｕｓ、エンドポイント番号指定信号ＥＰｎｕｍ、転送方向指定信号Ｄｉｒｅｃｔｉｏｎを出力し、エンドポイント管理回路１４１から、エンドポイント存在信号ＥＰｅｘｉｓｔを受ける。
【００７８】
エンドポイント管理回路１４１は、エンドポイント（ＥＰ０、ＥＰａ、ＥＰｂ、ＥＰｃ）の属性情報（エンドポイント番号、最大パケットサイズ等）を記述するためのレジスタ（レジスタセット）１４２、１４３、１４４、１４５を含む。またエンドポイント管理回路１４１は、ディスクリプタ領域用のレジスタ１４６（Ｄｅｓｃ）を含む。そしてこのレジスタ１４６は、レジスタ１４７、１４８、１４９により構成される。
【００７９】
レジスタ１４７は、ディスクリプタ領域Ｄｅｓｃからのディスクリプタ返信のイネーブル（ＲｅｐｌｙＤｅｓｃ＝１）又はディスエーブル（ＲｅｐｌｙＤｅｓｃ＝０）を設定するためのレジスタである。レジスタ１４８は、領域Ｄｅｓｃからのディスクリプタの読み出し開始アドレス（ＤｅｓｃＡｄｒｓ）を設定するためのレジスタである。レジスタ１４９は、領域Ｄｅｓｃからのディスクリプタの読み出しサイズ（ＤｅｓｃＳｉｚｅ）を設定するためのレジスタである。
【００８０】
ファームウェアによりレジスタ１４７にイネーブル（ＲｅｐｌｙＤｅｓｃ＝１）が設定されると、アクセスコントローラ１４０（バッファ管理回路１５０）が、レジスタ１４８に設定された開始アドレス（ＤｅｓｃＡｄｒｓ）から、レジスタ１４９に設定されたサイズのディスクリプタを読み出す。そして転送コントローラ１３０が、読み出されたディスクリプタデータのパケットをホストに送信する。
【００８１】
図５に示すようにディスクリプタには、デバイスディスクリプタ、コンフィギュレーションディスクリプタ、インターフェースディスクリプタ等の階層化された複数種類のディスクリプタがある。このようにディスクリプタが階層化されている場合には、レジスタ１４８、１４９を設けることで、処理を効率化できる。
【００８２】
即ち電源投入後（バス接続後）にファームウェアは図５の全てのディスクリプタを領域Ｄｅｓｃに書き込んでおく。そしてホストが例えばデバイスディスクリプタの報告を要求して来た場合には、レジスタ１４８、１４９にデバイスディスクリプタの開始アドレスとサイズをファームウェアが設定する。このようにすれば、領域Ｄｅｓｃに書き込まれている全ディスクリプタのうちデバイスディスクリプタだけをホストに送信できるようになる。またホストがインターフェースディスクリプタの報告を要求して来た場合には、レジスタ１４８、１４９にインターフェースディスクリプタの開始アドレスとサイズをファームウェアが設定する。このようにすれば、領域Ｄｅｓｃに書き込まれている全ディスクリプタのうちインターフェースディスクリプタだけをホストに送信できるようになる。
【００８３】
エンドポイント管理回路１４１は、転送コントローラ１３０からの各種信号とレジスタの情報とに基づいて、エンドポイント選択信号ＥＰｓｅｌ、ディスクリプタ返信イネーブル信号ＲｅｐｌｙＤｅｓｃ、ディスクリプタアドレス信号ＤｅｓｃＡｄｒｓ、ディスクリプタサイズ信号ＤｅｓｃＳｉｚｅを生成して、バッファ管理回路１５０に出力する。またエンドポイント管理回路１４１は、バッファ管理回路１５０に対して、ＣＰＵからの書き込み要求信号ＣＰＵＷｒＲｅｑ、読み出し要求信号ＣＰＵＲｄＲｅｑを出力し、バッファ管理回路１５０から、ＣＰＵへの書き込みアクノリッジ信号ＣＰＵＷｒＡｃｋ、読み出しアクノリッジ信号ＣＰＵＲｄＡｃｋを受ける。
【００８４】
バッファ管理回路１５０は、転送コントローラ１３０やエンドポイント管理回路１４１からの書き込み・読み出し要求信号や、エンドポイント管理回路１４１からの信号ＥＰｓｅｌ、ＲｅｐｌｙＤｅｓｃ、ＤｅｓｃＡｄｒｓ、ＤｅｓｃＳｉｚｅを受け、アドレスＡｄｄｒｅｓｓや書き込みパルスｘＷＲ（ｘは負論理を意味する）をデータバッファ１６０に出力する。このバッファ管理回路１５０は、アドレス生成回路１５１、１５２、１５３、１５４、１５５とセレクタ１５６を含む。
【００８５】
ここＤｅｓｃアドレス生成回路１５１は、領域Ｄｅｓｃについての、ＵＳＢＷｒＤａｔａ、ＵＳＢＲｄＤａｔａの書き込み又は読み出しアドレスＡＤ０を生成する。この場合のアドレス生成は信号ＤｅｓｃＡｄｒｓ、ＤｅｓｃＳｉｚｅなどに基づいて行う。即ちＤｅｓｃＡｄｒｓで特定される開始アドレスから、ＤｅｓｃＳｉｚｅで特定される終了アドレスに至るまで、アドレスＡＤ０を順次インクリメント（又はデクリメント）する。
【００８６】
またアドレス生成回路１５２、１５３、１５４、５５は、各々、領域ＥＰ０、ＥＰａ、ＥＰｂ、ＥＰｃについての、ＵＳＢＷｒＤａｔａ、ＵＳＢＲｄＤａｔａの書き込み又は読み出しアドレスＡＤ１、ＡＤ２、ＡＤ３、ＡＤ４を生成する。具体的には、各領域の開始アドレス（図７（Ａ）参照）からアドレスＡＤ１、ＡＤ２、ＡＤ３、ＡＤ４を順次インクリメント（又はデクリメント）する。
【００８７】
セレクタ１５６は、信号ＥＰｓｅｌに基づいてアドレスＡＤ０〜ＡＤ４のいずれかを選択し、Ａｄｄｒｅｓｓとしてデータバッファ１６０に出力すると共に、書き込みパルスｘＷＲをデータバッファ１６０に出力する。具体的には、ＥＰｓｅｌにより領域Ｄｅｓｃが選択指示された場合にはＡＤ０を選択し、領域ＥＰ０が選択指示された場合にはＡＤ１を選択し、領域ＥＰａが選択指示された場合にはＡＤ２を選択し、領域ＥＰｂが選択指示された場合にはＡＤ３を選択し、領域ＥＰｃが選択指示された場合にはＡＤ４を選択して、Ａｄｄｒｅｓｓとしてデータバッファ１６０に出力する。
【００８８】
８．動作
次に本実施形態のデータ転送制御装置１００の詳細な動作例について説明する。図１１はデータステージの最終パケットがショートパケット（ゼロ長パケットを含む）で終わった場合のパケット転送の様子を示した図である。
【００８９】
まず図１１のＡ１に示すようにセットアップステージにおいてホストからデバイス（データ転送制御装置１００）にＧＥＴ−ＤＥＳＣＲＩＰＴＯＲ要求が送信される。次にＡ２に示すようにファームウェア（Ｆ／Ｗ）が図１０のレジスタ１４７、１４８、１４９にＲｅｐｌｙＤｅｓｃ、ＤｅｓｃＡｄｒｓ、ＤｅｓｃＳｉｚｅを設定する。するとＡ３、Ａ４に示すように、データステージにおいて、ホストからＩＮトークパケットが受信される毎に、領域Ｄｅｓｃから読み出されたディスクリプタが、最大パケットサイズのデータパケットに分割されて、ホストに送信される。そしてＡ５に示すように、最後のトランザクションでの残りデータサイズがマックパケットサイズに満たない場合には、自動的にショートパケットが生成されてホストに送信される。するとＡ６に示すようにディスクリプタ返信完了信号ＤｅｓｃＣｍｐがハードウェア（データ転送制御装置１００）によりアクティブにされ、ディスクリプタの自動送信が完了する。そしてＡ７に示すようにステータスステージに移行する。
【００９０】
図１２は、図１１のＡ３、Ａ４の期間での詳細な信号波形例である。図１２ではマックパケットサイズを６４バイトと仮定している。
【００９１】
図１２のＢ１で信号ＲｅｐｌｙＤｅｓｃがアクティブ（「１」）に変化し、これによりＢ２に示すように信号ＥＰｓｅｌが、領域ＥＰ０の選択指示から領域Ｄｅｓｃの選択指示に切り替わる。またＢ３、Ｂ４に示すようにＡｄｄｒｅｓとして、Ｄｅｓｃアドレス生成回路１５１からのＡＤ０が選択出力されるようになる。
【００９２】
なおＢ５、Ｂ６に示すように、ディスクリプタアドレスＤｅｓｃＡｄｒｓにはａ０が設定され、ディスクリプタサイズＤｅｓｃＳｉｚｅにはＮが設定されている。従ってＢ４に示すようにＡＤ０は、ａ０を開始アドレスとして順次インクリメントされる。
【００９３】
図１２のＢ７に示すように、ＵＳＢ（ＤＰ、ＤＭ）上においてホストからＩＮトークンを受信すると、Ｂ８に示すようにＵＳＢＲｄＲｅｑ、ＵＳＢＲｄＡｃｋがアクティブになり、Ｂ９に示すようにうＵＳＢＲｄＤＡＴＡがデータバッファ１６０から読み出される。これによりＢ１０に示すように、ＵＳＢ上でＩＮデータがデバイス（データ転送制御装置１００）からホストに転送される。そしてＢ１１に示すようにホストからＡＣＫが返ってくると、Ｂ１２に示すようにトランザクション終了信号ＴｒａｎＥｎｄＰｕｌｓｅがアクティブになり、Ｂ１１に示すように信号ＴｒａｎＳｔａｔｕｓがトランザクションの成功を示すようになる。これにより図１１のＡ３に示すＩＮデータのトランザクションが終了し、次のトランザクションに移行する。
【００９４】
図１３は、図１１のＡ５、Ａ７の期間での詳細な信号波形例である。図１３のＣ１に示すように最終のショートパケットがＵＳＢ上で転送され、Ｃ２に示すようにホストからＡＣＫが返ってくると、Ｃ３に示すように信号ＴｒａｎＥｎｄＰｕｌｓｅがアクティブになる。またこの時、ＤｅｓｃＳｉｚｅで指定されたサイズのディスクリプタの転送が完了したため、Ｃ４に示すようにディスクリプタ返信完了信号ＤｅｓｃＣｍｐがアクティブになる。これによりハードウェア回路によるディスクリプタの自動返信処理が完了する。そしてＣ５に示すようにホストからセロ長のデータが転送されるステータスステージに移行する。
【００９５】
図１４は、データステージの最終トランザクションでショートパケットが転送されない場合のパケット転送の様子を示した図である。図１４のＤ１の最終トランザクションにおいて最大パケットサイズのＩＮデータパケットが転送される以外は、図１１と同様である。
【００９６】
図１５、図１６はデータステージの途中でホストからＳＥＴＵＰトークンパケットやＯＵＴトークンパケットを受信した場合のパケット転送の様子を示した図である。図１５のＥ１、図１６のＦ１に示すように本実施形態では、ディスクリプタの自動返信のデータステージにおいて、ホストからＳＥＴＵＰトークンパケットやＯＵＴトークンパケットを受信すると、図１５のＥ２、図１６のＦ２示すようにディスクリプタ返信完了信号ＤｅｓｃＣｍｐがアクティブになる。これによりディスクリプタのデータパケットの自動送信が停止する。即ちディスクリプタサイズＤｅｓｃＳｉｚｅのディスクリプタの送信を完了する前に、ホストからＳＥＴＵＰトークンパケットやＯＵＴトークンパケットを受信した場合に、ディスクリプタの自動返信が停止する。このようにすることで、ディスクリプタの自動返信中も、ホストからのＳＥＴＵＰトークンパケットやＯＵＴトークンパケットを受け付けることが可能になり、適正なデータ転送処理を実現できる。
【００９７】
図１７は、図１５のＥ３、Ｅ４の期間での詳細な信号波形例である。図１７のＧ１では信号ＴｒａｎＥｎｄＰｕｌｓｅがアクティブになって、前回のトランザクションが終了している。その後、Ｇ２に示すように、ＵＳＢ上においてホストからＳＥＴＵＰトークンを受信すると、Ｇ３に示すようにディスクリプタ返信完了信号ＤｅｓｃＣｍｐがアクティブになる。これによりＧ４に示すようにＲｅｐｌｙＤｅｓｃが「０」（ディスエーブル）に戻され、ディスクリプタの自動返信機能が停止する。そしてＧ５に示すように信号ＥＰｓｅｌも、領域Ｄｅｓｃの選択指示から領域ＥＰ０の選択指示に切り替わる。これにより、コントロールエンドポイント領域ＥＰ０を用いたコントロール転送が可能になり、適正なデータ転送を実現できる。
【００９８】
以上のように説明した本実施形態のデータ転送制御装置１００によれば次のような効果を得ることができる。
【００９９】
例えば本実施形態の比較例となる手法では、ホストからＩＮトークンを受信する毎にコントロールエンドポイント領域ＥＰ０にデータを書き込んでＩＮトークンに応答するという処理を、全てのディスクリプタの転送完了まで繰り返さなければならない。従ってファームウェアの処理負荷が過大になる。
【０１００】
これに対して本実施形態では、開始アドレスＤｅｓｃＡｄｒｓ、サイズＤｅｓｃＳｉｚｅを設定し、ＲｅｐｌｙＤｅｓｃをイネーブルにするだけで、領域Ｄｅｓｃに予め書き込んでおいたディスクリプタが、ホストからのＩＮトークンを受信する毎（ＩＮトランザクション毎）に最大パケットサイズのパケットに自動分割されて、ホストに自動送信される。また最大パケットサイズに対して端数が生じる場合には、自動的にショートパケットが生成されてホストに送信される。従ってファームウェアは、ホストからのＩＮトークン毎にデータを書き込むという作業を省略できるようになり、上述の比較例に比べてファームウェアの処理負荷を格段に軽減できる。
【０１０１】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１０２】
例えばデータ転送制御装置、電子機器、アクセスコントローラ、転送コントローラの構成は、図６、図１０等で説明した構成に限定されず、種々の変形実施が可能である。
【０１０３】
また、明細書又は図面中の記載において広義な用語（プロセッサ、シリアルバス、電子機器等）として引用された用語（ＣＰＵ、ＵＳＢ、周辺機器等）は、明細書又は図面中の他の記載においても広義な用語に置き換えることができる。
【０１０４】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【０１０５】
また本発明はＵＳＢ１．１、ＵＳＢ２．０を発展した規格やＵＳＢと同様の思想に基づく規格に準拠したデータ転送制御装置にも適用できる。例えば本発明はＯＴＧ（Ｏｎ−Ｔｈｅ−Ｇｏ）規格に準拠したデータ転送制御装置にも適用できる。ＯＴＧ（デュアルロールデバイス）に本発明を適用する場合には、ホストの役割として動作するホスト動作のステートと、ペリフェラルの役割として動作するペリフェラル動作のステートを含む複数のステートの制御を行うステートコントローラをデータ転送制御装置に含ませる。またホスト動作時にホストとしてのデータ転送を行うホストコントローラと、ペリフェラル動作時にペリフェラルとしてのデータ転送を行うペリフェラルコントローラを、転送コントローラに含ませる。そしてこのペリフェラルコントローラが、ペリフェラル動作時に、ディスクリプタの自動返信処理を行うようにすればよい。
【図面の簡単な説明】
【図１】エンドポイントについての説明図である。
【図２】コントロール転送についての説明図である。
【図３】デバイスリクエストの代表例である。
【図４】ＳＥＴＵＰデータのフォーマット例である。
【図５】ディスクリプタの例である。
【図６】本実施形態のデータ転送制御装置、電子機器の構成例である。
【図７】図７（Ａ）（Ｂ）（Ｃ）はメモリマップ等の説明図である。
【図８】図８（Ａ）（Ｂ）はディスクリプタ領域確保の説明図である。
【図９】図９（Ａ）（Ｂ）もディスクリプタ領域確保の説明図である。
【図１０】アクセスコントローラの詳細な構成例である。
【図１１】本実施形態でのパケット転送の様子を示す説明図である。
【図１２】本実施形態の詳細な動作を説明する信号波形図である。
【図１３】本実施形態の詳細な動作を説明する信号波形図である。
【図１４】本実施形態でのパケット転送の様子を示す説明図である。
【図１５】本実施形態でのパケット転送の様子を示す説明図である。
【図１６】本実施形態でのパケット転送の様子を示す説明図である。
【図１７】本実施形態の詳細な動作を説明する信号波形図である。
【符号の説明】
１００  データ転送制御装置、１１０  電子機器、１２０  トランシーバ、
１３０  転送コントローラ、１３２  パケットハンドラ回路、
１３４  サスペンド＆レジューム回路、１３６  トランザクション管理回路
１４０  アクセスコントローラ、１４１  エンドポイント管理回路、
１４２〜１４６  レジスタ、１５０  バッファ管理回路、
１５１〜１５５  アドレス生成回路、１５６  セレクタ、
１６０  データバッファ、１７０  バルク転送管理回路、
１８０  ＤＭＡインターフェース、１９０  ＣＰＵインターフェース、
２１０  アプリケーションデバイス、２２０  ＣＰＵ、２３０  ＲＯＭ、
２４０  ＲＡＭ、２５０  表示部、２６０  操作部、
【図１】
2004295594.tif 000003
【図２】
2004295594.tif 000004
【図３】
2004295594.tif 000005
【図４】
2004295594.tif 000006
【図５】
2004295594.tif 000007
【図６】
2004295594.tif 000008
【図７】
2004295594.tif 000009
【図８】
2004295594.tif 000010
【図９】
2004295594.tif 000011
【図１０】
2004295594.tif 000012
【図１１】
2004295594.tif 000013
【図１２】
2004295594.tif 000014
【図１３】
2004295594.tif 000015
【図１４】
2004295594.tif 000016
【図１５】
2004295594.tif 000017
【図１６】
2004295594.tif 000018
【図１７】
2004295594.tif 000019