(57)【特許請求の範囲】
【請求項１】
バスを介したデータ転送のためのデータ転送制御装置であって、
第１の方向のデータ転送においては、第１のバスを介して受信され第２のバスを介して送信されるデータを記憶し、第２の方向のデータ転送においては、第２のバスを介して受信され第１のバスを介して送信されるデータを記憶するデータ記憶領域を有するバッファと、
前記バッファの前記データ記憶領域へのデータの書き込み及び前記データ記憶領域からのデータの読み出しの管理を行うバッファ管理回路とを含み、
前記第１の方向のデータ転送においては、第２のバスを介したデータ送信が終了したことを条件に、データ転送を行うデータフェーズが終了したと判断し、前記第２の方向のデータ転送においては、第２のバスを介したデータ受信が終了したと判断された後に、前記バッファの前記データ記憶領域が空になり最後のデータのパケットの送信に対するアクノリッジが前記第１のバスを介して返ってきた場合に、データ転送を行うデータフェーズが終了したと判断することを特徴とするデータ転送制御装置。
【請求項２】
請求項１において、
前記第１、第２のバスのうち第２のバス側にのみ、バスを介して送信又は受信されるデータのサイズをカウントするカウンタを設け、前記カウンタを用いて、前記第２のバスを介したデータ送信の終了と、前記第２のバスを介したデータ受信の終了を判断することを特徴とするデータ転送制御装置。
【請求項３】
請求項１又は２において、
前記第２のバスを介したデータ受信の終了後、データフェーズの終了までの期間において、前記第２のバスを介したデータ受信のステータスを取得し、取得したステータスに基づきステータスブロックを作成し、作成されたステータスブロックを、データフェーズの終了後のステータスフェーズにおいて、前記第１のバスを介して送信することを特徴とするデータ転送制御装置。
【請求項４】
請求項３において、
１つのエンドポイントを介して転送される情報として、前記第２の方向で転送されるデータと、ステータスブロックとが割り当てられている場合に、データ用のデータ記憶領域とステータス用のステータス記憶領域とが、前記バッファに確保され、
前記データフェーズでは前記データ記憶領域のデータについての処理を行いながら前記ステータス記憶領域のステータスブロックについての処理を行い、
データフェーズからステータスフェーズに切り替わった場合に、前記ステータス記憶領域からステータスブロックを読み出して、前記第１のバスを介して送信することを特徴とするデータ転送制御装置。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記第２のバスを介したデータ受信が終了し、且つ、前記バッファの前記データ記憶領域の残りデータサイズが最大パケットサイズ未満である場合には、前記データ記憶領域のショートパケットを前記第１のバスを介して自動送信することを特徴とするデータ転送制御装置。
【請求項６】
請求項５において、
前記データ記憶領域のショートパケットの自動送信を有効又は無効に設定するショートパケット自動送信信号がアクティブである場合に、ショートパケットの自動送信を行うことを特徴とするデータ転送制御装置。
【請求項７】
請求項６において、
前記第２のバスを介して受信されたデータに所与の情報が付加されて前記第１のバスを介して送信される場合には、前記ショートパケット自動送信信号が非アクティブに設定されることを特徴とするデータ転送制御装置。
【請求項８】
請求項１乃至７のいずれかにおいて、
前記第２のバスを介したデータ受信が終了し、且つ、前記バッファの前記データ記憶領域の残りデータサイズが最大パケットサイズ未満である場合には、前記データ記憶領域にショートパケットが存在することを処理手段に知らせることを特徴とするデータ転送制御装置。
【請求項９】
請求項１乃至８のいずれかにおいて、
前記データ記憶領域が、先に入力された情報が先に出力される記憶領域であることを特徴とするデータ転送制御装置。
【請求項１０】
請求項１乃至９のいずれかにおいて、
ＵＳＢ（Universal Serial Bus)の規格に準拠したデータ転送を行うことを特徴とするデータ転送制御装置。
【請求項１１】
請求項１乃至１０のいずれかのデータ転送制御装置と、
前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置と、
を含むことを特徴とする電子機器。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ転送制御装置及び電子機器に関する。
【０００２】
【背景技術及び発明が解決しようとする課題】
近年、パーソナルコンピュータと周辺機器（広義には電子機器）とを接続するためのインターフェース規格として、ＵＳＢ（Universal Serial Bus)が注目を集めている。このＵＳＢには、従来は別々の規格のコネクタで接続されていたマウスやキーボードやプリンタなどの周辺機器を、同じ規格のコネクタで接続できると共にいわゆるプラグ＆プレイやホットプラグも実現できるという利点がある。
【０００３】
一方、このＵＳＢには、同じくシリアルバスインターフェース規格として脚光を浴びているＩＥＥＥ１３９４に比べて、転送速度が遅いという問題点がある。
【０００４】
そこで、従来のＵＳＢ１．１の規格に対する互換性を持ちながら、ＵＳＢ１．１に比べて格段に高速な４８０Ｍｂｐｓ（ＨＳモード）のデータ転送速度を実現できるＵＳＢ２．０規格が策定され、注目を浴びている。
【０００５】
さて、このＵＳＢ２．０では、ＨＳ（High Speed）モード時には４８０Ｍｂｐｓでデータ転送が行われる。従って、高速な転送速度が要求されるハードディスクドライブや光ディスクドライブなどのストレージ機器のインターフェースとして用いることができるという利点がある。
【０００６】
しかしながら、その一方で、ＵＳＢバスに接続されるデータ転送制御装置は、４８０Ｍｂｐｓという高速で転送されてくるデータを処理しなければならない。従って、データ転送制御装置の処理速度や、データ転送制御装置を制御するファームウェア（ＣＰＵ）の処理速度が遅いと、実効的な転送速度を確保できず、バス帯域をロスしてしまうという課題がある。
【０００７】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、実効的なバスの転送速度を向上できるデータ転送制御装置及び電子機器を提供することにある。
【０００８】
また本発明の他の目的は、回路構成や回路制御を簡素化できるデータ転送制御装置及び電子機器を提供することにある。
【０００９】
【課題を解決するための手段】
上記課題を解決するために本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、第１の方向のデータ転送においては、第１のバスを介して受信され第２のバスを介して送信されるデータを記憶し、第２の方向のデータ転送においては、第２のバスを介して受信され第１のバスを介して送信されるデータを記憶するデータ記憶領域を有するバッファと、前記バッファの前記データ記憶領域へのデータの書き込み及び前記データ記憶領域からのデータの読み出しの管理を行うバッファ管理回路とを含み、前記第１の方向のデータ転送においては、第２のバスを介したデータ送信が終了したことを条件に、データ転送を行うデータフェーズが終了したと判断し、前記第２の方向のデータ転送においては、第２のバスを介したデータ受信が終了し、且つ、前記バッファの前記データ記憶領域が空になったことを条件に、データ転送を行うデータフェーズが終了したと判断することを特徴とする。
【００１０】
本発明によれば、第１の方向のデータ転送においては、第２のバスを介したデータ送信（例えばＤＭＡ転送）が終了したことを条件に、データフェーズ（データトランスポート。全データの転送）が終了したと判断される。一方、第２の方向のデータ転送においては、第２のバスを介したデータ受信が終了し、その後に、データ記憶領域が空になったことを条件に、データフェーズが終了したと判断される。
【００１１】
このようにすれば、第２のバス側での転送データサイズ（データ長）をチェックするだけで、第１、第２の方向のデータ転送の両方において、データフェーズの終了を簡易に判断できるようになる。これにより、回路構成や回路制御を簡素化でき、データ転送制御装置を制御する処理手段の処理負荷を軽減できる。
【００１２】
また本発明は、前記第２のバスを介して送信又は受信されるデータのサイズをカウントするカウンタを含むことを特徴とする。
【００１３】
このようなカウンタを設けることで、第２のバス側での転送データサイズを容易にチェックできるようになる。しかも、第１のバス側にカウンタを設けなくても済むため、カウンタの制御を簡素化できる。
【００１４】
また本発明は、前記第２のバスを介したデータ受信のステータスを取得し、取得したステータスを、データフェーズの終了後のステータスフェーズにおいて、前記第１のバスを介して送信することを特徴とする。
【００１５】
このようにすれば、第２のバスを介したデータ受信の終了後、データフェーズの終了までの期間を有効利用して、ステータスに関する処理を行うことができるようになり、実効的な転送速度を向上できる。
【００１６】
また本発明は、前記第２のバスを介したデータ受信が終了し、且つ、前記バッファの前記データ記憶領域の残りデータサイズが最大パケットサイズ未満である場合には、前記データ記憶領域のショートパケットを前記第１のバスを介して自動送信することを特徴とする。
【００１７】
このようにすれば、処理手段が介在することなく、例えばハードウェアにより、データ記憶領域のショートパケットを自動的に送信できるようになる。これにより、処理手段の処理負荷を軽減でき、実効的な転送速度を向上できる。
【００１８】
また本発明は、前記データ記憶領域のショートパケットの自動送信を有効又は無効に設定する手段を含むことを特徴とする。
【００１９】
このようにすれば、ショートパケットの自動送信が許されるデバイスと、自動送信が許されないデバイスの両方に対応できるようになり、データ転送制御装置の汎用性を高めることができる。
【００２０】
また本発明は、前記第２のバスを介して受信されたデータに所与の情報が付加されて前記第１のバスを介して送信される場合には、前記自動送信が無効に設定されることを特徴とする。
【００２１】
このようにすれば、第１のバスに接続されるホスト等が、データフェーズの終了ではないのに、データフェーズの終了であると誤認識する事態を、効果的に防止できる。
【００２２】
また本発明は、前記第２のバスを介したデータ受信が終了し、且つ、前記バッファの前記データ記憶領域の残りデータサイズが最大パケットサイズ未満である場合には、前記データ記憶領域にショートパケットが存在することを処理手段に知らせることを特徴とする。
【００２３】
このようにすれば、状況に応じた適切な処理を処理手段が行うことが可能になり、例えば、ショートパケットの自動送信が許されないようなデバイスにおいても、適切なデータ転送の制御を実現できる。
【００２４】
また本発明は、前記データ記憶領域が、先に入力された情報が先に出力される記憶領域であることを特徴とする。
【００２５】
このように、データ記憶領域を、先入れ先出しの記憶領域に設定することで、ＤＭＡ（Direct Memory Access）転送などにおいて効率的なデータ送受信を実現できる。
【００２６】
また本発明は、ＵＳＢ（Universal Serial Bus)の規格に準拠したデータ転送を行うことを特徴とする。
【００２７】
但し、本発明はＵＳＢ以外の規格（ＵＳＢの思想を受け継ぐ規格）に準拠したデータ転送に適用することも可能である。
【００２８】
また本発明に係る電子機器は、上記のいずれかのデータ転送制御装置と、前記データ転送制御装置及びバスを介して転送されるデータの出力処理又は取り込み処理又は記憶処理を行う装置とを含むことを特徴とする。
【００２９】
本発明によれば、データ転送制御装置のデータ転送を制御する処理手段（ファームウェア等）の処理負荷を軽減できるため、電子機器の低コスト化、小規模化などを図れる。
【００３０】
【発明の実施の形態】
以下、本実施形態について図面を用いて詳細に説明する。
【００３１】
なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を何ら限定するものではない。また本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００３２】
１．ＵＳＢ
１．１  データ転送手法
まず、ＵＳＢ（ＵＳＢ２．０）のデータ転送手法について簡単に説明する。
【００３３】
ＵＳＢでは、ＩＥＥＥ１３９４等とは異なり、データ転送の主導権をホストが有している。即ち、データ転送のトランザクションを起動するのはホスト側であり、データ転送に関する大部分の制御はホストが行う。このため、ホストの処理負荷は重くなるが、ホストとなるＰＣ（パーソナルコンピュータ）等は高速で高性能なＣＰＵ（プロセッサ）を有しているため、このように負荷の重い処理もそれほど問題にはならない。
【００３４】
一方、ＵＳＢにおいては、デバイス（ターゲット）はホストからの要求に対して単に応えるだけでよいため、デバイス側の処理、構成については簡素化できる。従って、デバイス側ではホストのような高性能で高速なＣＰＵを使用する必要が無く、低価格なＣＰＵ（マイコン）を使用できるようになり、低コスト化を図れる。
【００３５】
さて、ＵＳＢではこのようなホスト主導のデータ転送を実現するために、図１（Ａ）に示すようなエンドポイント（ＥＰ０〜１５）がデバイス側に用意される。ここで、エンドポイントは、ホストとデバイスとの間でデータ転送を行うためのバッファ（ＦＩＦＯ）の入り口に相当するものであり、ＵＳＢでのデータ転送は、全て、このエンドポイントを経由して行われる。
【００３６】
そして、このエンドポイントは、デバイスアドレスとエンドポイント番号により一義的にアドレス指定できるようになっている。即ちホストは、デバイスアドレスとエンドポイント番号を指定することで、所望のエンドポイントへのデータ送信や、所望のエンドポイントからのデータ受信を自由に行うことができる。
【００３７】
また、エンドポイントの設定はデバイス側の任意であり、エンドポイント番号の割り当てや、各エンドポイントに割り当てられる記憶領域のデータサイズ等は、エニミュレーション（enumeration）処理時にホストは知ることができる。
【００３８】
なお、ＵＳＢにおいては、データ転送のタイプとして、コントロール転送、アイソクロナス転送、インタラプト転送、バルク転送が用意されている。
【００３９】
ここで、コントロール転送は、ホストとデバイス（ターゲット）との間でコントロールエンドポイントを介して行われる制御用の転送モードである。このコントロール転送により、デバイスの初期化のためのコンフィグレーション情報等が転送される。
【００４０】
アイソクロナス転送は、画像データや音声データのように、データの正当性よりもバンド幅の確保が優先されるデータの転送のために用意された転送モードである。このアイソクロナス転送では、一定周期に一定量のデータを転送できることが保証されるため、データのリアルタイム性が重要なアプリケーションに有効な転送モードとなる。
【００４１】
インタラプト転送は、比較的低い転送速度で少量のデータを転送するために用意された転送モードである。
【００４２】
バルク転送は、不定期に発生する大量のデータを転送するために用意された転送モードである。このバルク転送では、アイソクロナス転送やインタラプト転送により使用された時間以外の空いた時間においてデータ転送が行われると共に、データの正当性がチェックされる。従って、リアルタイム性はあまり重要ではないが、データの信頼性は確保したいデータの転送に有効な転送モードである。
【００４３】
１．２  トランザクション構成
さて、図１（Ｂ）に示すように、ＵＳＢのバルク転送におけるトランザクションは基本的に、トークンパケット、データパケット、ハンドシェークパケットという３つのパケットにより構成される。なお、アイソクロナス転送の場合は、ハンドシェークパケットは不要になる。
【００４４】
ここでトークンパケットは、ホストがデバイス（ターゲット）のエンドポイントのリードやライトを要求する場合等に使用されるパケットである。このトークンパケットは、例えば、ＰＩＤ（ＯＵＴ、ＩＮ、ＳＯＦ、ＳＥＴＵＰなどのパケットＩＤ）、ＡＤＤＲ（デバイスアドレス）、ＥＮＤＰ（エンドポイント番号）、ＣＲＣ（Cyclic Redundancy Check）のフィールドを有する。
【００４５】
また、データパケットは、データの実体を送るためのパケットであり、ＰＩＤ（ＤＡＴＡ０、ＤＡＴＡ１）、ＤＡＴＡ（データの実体）、ＣＲＣのフィールドを有する。
【００４６】
また、ハンドシェークパケットは、データ受信に成功したか否かを受信側が送信側に伝えるためのパケットであり、ＰＩＤ（ＡＣＫ、ＮＡＫ、ＳＴＡＬＬ）のフィールドを有する。
【００４７】
ＯＵＴトランザクション（ホストがデバイスに情報を出力するトランザクション）では、図１（Ｃ）に示すように、まず、ホストがデバイスに対してＯＵＴトークンパケットを転送する。次に、ホストはデバイスに対してＯＵＴのデータパケットを転送する。そして、デバイスは、ＯＵＴのデータパケットの受信に成功すると、ホストに対してＡＣＫのハンドシェークパケットを転送する。
【００４８】
一方、ＩＮトランザクション（ホストがデバイスから情報を入力するトランザクション）では、図１（Ｄ）に示すように、まず、ホストがデバイスに対してＩＮトークンパケットを転送する。そして、ＩＮトークンパケットを受信したデバイスは、ホストに対してＩＮのデータパケットを転送する。そして、ホストは、ＩＮのデータパケットの受信に成功すると、デバイスに対してＡＣＫのハンドシェークパケットを転送する。
【００４９】
なお、図１（Ｃ）、（Ｄ）において、”Ｄ←Ｈ”は、ホストからデバイスに対して情報が転送されることを意味し、”Ｄ→Ｈ”は、デバイスからホストに対して情報が転送されることを意味する（以下の説明及び図でも同様）。
【００５０】
１．３  Ｂｕｌｋ−Ｏｎｌｙ
さて、ＵＳＢのデバイスは種々のクラスに分類される。そして、ハードディスクドライブや光ディスクドライブなどのデバイスは、マスストレージと呼ばれるクラスに属し、このマスストレージクラスには、電子機器のベンダ等により作成されたＣＢＩ（Control/Bulk/Interrupt)やＢｕｌｋ−Ｏｎｌｙなどの仕様がある。
【００５１】
そして、ＣＢＩ仕様では図２（Ａ）に示すように、デバイスは、コントロール、バルクアウト、バルクイン、インタラプトのエンドポイントＥＰ０、１、２、３を用意する。ここで、エンドポイントＥＰ０では、ＵＳＢ層のコントロールのパケットや、コマンドのパケットが転送される。また、ＥＰ１ではＯＵＴデータ（ホストからデバイスに転送されるデータ）、ＥＰ２ではＩＮデータ（デバイスからホストに転送されるデータ）、ＥＰ３ではインタラプトＩＮのパケットが転送される。なお、ＥＰ１〜１５のいずれを、バルクアウト、バルクイン、インタラプトＩＮのエンドポイントに割り当てるかは、デバイス側の任意である。
【００５２】
一方、Ｂｕｌｋ−Ｏｎｌｙ仕様では図２（Ｂ）に示すように、デバイスは、コントロール、バルクアウト、バルクインのエンドポイントＥＰ０、１、２を用意する。ここで、エンドポイントＥＰ０では、ＵＳＢ層のコントロールのパケットが転送される。また、ＥＰ１ではコマンド（ＣＢＷ）及びＯＵＴデータ、ＥＰ２ではステータス（ＣＳＷ）及びＩＮデータのパケットが転送される。なお、ＥＰ１〜１５のいずれを、バルクアウト、バルクインのエンドポイントに設定するかは、デバイス側の任意である。
【００５３】
ここで、ＣＢＷ（Command Block Wrapper）は、コマンドブロック及びこれに関連する情報を含むパケットであり、図３にそのフォーマットが示される。また、ＣＳＷ（Command Status Wrapper）は、コマンドブロックのステータスを含むパケットであり、図４にそのフォーマットが示される。
【００５４】
図３において、dCBWSignatureは、当該パケットをＣＢＷとして識別するための情報であり、dCBWTagは、コマンドブロックのタグであり、dCBWDataTransferLengthはデータフェーズにおいて転送されるデータの長さを指定する。また、bmCBWFlagsは転送方向等を指定するためのフラグであり、dCBWLUNはロジカルユニット番号であり、bCBWCBLengthはコマンド長であり、CBWCBは、ＡＴＡ／ＡＴＡＰＩやＳＣＳＩなどのコマンドがカプセル化されて記述されるコマンドブロックである。
【００５５】
また図４において、dCSWSignatureは、当該パケットをＣＳＷとして識別するための情報である。また、dCSWTagは、ステータスブロックのタグであり、当該ＣＳＷに対応するＣＢＷのdCBWTagの値が書き込まれる。また、CSWDataResidueは、ＣＢＷのdCBWDataTransferLengthにより指定されたデータの長さとデバイスが実際に処理したデータの長さの差であり、bCSWStatusはステータスブロックである。
【００５６】
次に、図２（Ｂ）のＢｕｌｋ−Ｏｎｌｙ仕様におけるデータの書き込み処理、読み出し処理について、図５（Ａ）、（Ｂ）を用いて説明する。
【００５７】
ホストがデバイスにデータを書き込む場合には、図５（Ａ）に示すように、まず、ホストがＣＢＷをデバイスに転送するコマンドフェーズ（コマンドトランスポート）が行われる。具体的には、ホストが、エンドポイントＥＰ１を指定するトークンパケットをデバイスに転送し、次に、ＣＢＷ（図２（Ｂ）のＡ１、図３参照）をデバイスのエンドポイントＥＰ１に転送する。このＣＢＷにはライトコマンドが含まれる。そして、デバイスからホストにＡＣＫのハンドシェーク（Ｈ.Ｓ）が返却されると、コマンドフェーズが終了する。
【００５８】
コマンドフェーズ（コマンドトランスポート）が終了するとデータフェーズ（データトランスポート）に移行する。このデータフェーズでは、まず、ホストが、エンドポイントＥＰ１を指定するトークンパケットをデバイスに転送し、次に、ＯＵＴデータ（図２（Ｂ）のＡ２参照）をデバイスのエンドポイントＥＰ１に転送する。そして、デバイスからホストにＡＣＫのハンドシェークが返却されると、１つのトランザクションが終了する。そして、このようなトランザクションが繰り返され、ＣＢＷのdCBWDataTransferLength（図３参照）で指定されるデータ長の分だけデータが転送されると、データフェーズが終了する。
【００５９】
データフェーズ（データトランスポート）が終了するとステータスフェーズ（ステータストランスポート）に移行する。このステータスフェーズでは、まず、ホストが、エンドポイントＥＰ２を指定するトークンパケットをデバイスに転送する。すると、デバイスが、エンドポイントＥＰ２にあるＣＳＷ（図２（Ｂ）のＡ３、図４参照）をホストに転送する。そして、ホストからデバイスにＡＣＫのハンドシェークが返却されると、ステータスフェーズが終了する。
【００６０】
ホストがデータを読み出す場合は、図５（Ｂ）に示すように、まず、ホストが、エンドポイントＥＰ１を指定するトークンパケットをデバイスに転送し、次に、ＣＢＷをデバイスのエンドポイントＥＰ１に転送する。このＣＢＷはリードコマンドを含む。そして、デバイスからホストにＡＣＫのハンドシェークが返却されると、コマンドフェーズが終了する。
【００６１】
コマンドフェーズが終了するとデータフェーズに移行する。このデータフェーズでは、まず、ホストが、エンドポイントＥＰ２を指定するトークンパケットをデバイスに転送する。すると、デバイスが、エンドポイントＥＰ２にあるＩＮデータ（図２（Ｂ）のＡ４参照）をホストに転送し、ホストからデバイスにＡＣＫのハンドシェークが返却されると、１つのトランザクションが終了する。そして、このようなトランザクションが繰り返され、ＣＢＷのdCBWDataTransferLengthで指定されるデータ長の分だけデータが転送されると、データフェーズが終了する。
【００６２】
データフェーズが終了するとステータスフェーズに移行する。このステータスフェーズの処理は図５（Ａ）のデータの書き込み処理の場合と同様である。
【００６３】
２．本実施形態の特徴
２．１  構成例
図６に本実施形態のデータ転送制御装置の構成例を示す。
【００６４】
本実施形態のデータ転送制御装置は、トランシーバマクロ２０、ＳＩＥ３０、エンドポイント管理回路４０、バッファ管理回路５０、バッファ６０、バルク転送管理回路７０、ＤＭＡＣ８０を含む。なお、本発明のデータ転送制御装置は、図６に示す回路ブロックの全てを含む必要はなく、それらの一部を省略する構成としてもよい。
【００６５】
ここで、トランシーバマクロ２０は、ＵＳＢ（第１のバス）のＦＳモードやＨＳモードでのデータ転送を実現するための回路である。このトランシーバマクロ２０としては、例えばＵＳＢ２．０の物理層回路や、論理層回路の一部についてのインターフェースを定義したＵＴＭＩ（USB2.0 Transceiver Macrocell Interface）に準拠したマクロセルを用いることができる。このトランシーバマクロ２０は、トランシーバ回路２２、クロック生成回路２４を含む。
【００６６】
トランシーバ回路２２は、差動信号ＤＰ、ＤＭを用いてＵＳＢ（第１のバス）上のデータを送受信するアナログフロントエンド回路（受信回路、送信回路）を含む。また、ビットスタッフィング、ビットアンスタッフィング、シリアル・パラレル変換、パラレル・シリアル変換、ＮＲＺＩデコード、ＮＲＺＩエンコード、サンプリングクロック生成などの処理を行う回路を含む。
【００６７】
またクロック生成回路２４は、データ転送制御装置が使用する動作クロックや、サンプリングクロックの生成に使用されるクロックなどを生成する回路であり、４８０ＭＨｚや６０ＭＨｚのクロックを生成するＰＬＬや発振回路などを含む。
【００６８】
ＳＩＥ（Serial Interface Engine）は、ＵＳＢのパケット転送処理などの種々の処理を行う回路であり、パケットハンドラ回路３２、サスペンド＆レジューム制御回路３４、トランザクション管理回路３６を含む。
【００６９】
パケットハンドラ回路３２は、ヘッダ及びデータからなるパケットの組み立て（生成）や分解などを行う回路であり、ＣＲＣの生成や解読を行うＣＲＣ処理回路３３を含む。
【００７０】
サスペンド＆レジューム制御回路３４は、サスペンドやレジューム時のシーケンス制御を行う回路である。
【００７１】
トランザクション管理回路３６は、トークン、データ、ハンドシェークなどのパケットにより構成されるトランザクションを管理する回路である。具体的には、トークンパケットを受信した場合には、自分宛か否かを確認し、自分宛の場合には、ホストとの間でデータパケットの転送処理を行い、その後に、ハンドシェークパケットの転送処理を行う。
【００７２】
エンドポイント管理回路４０は、バッファ６０の各記憶領域の入り口となるエンドポイントを管理する回路であり、エンドポイントの属性情報を記憶するレジスタ（レジスタセット）などを含む。
【００７３】
バッファ管理回路５０は、例えばＲＡＭなどで構成されるバッファ６０を管理する回路である。より具体的には、書き込みアドレスや読み出しアドレスを生成し、バッファ６０へのデータの書き込み処理やバッファ６０からのデータの読み出し処理を行う。
【００７４】
バッファ６０（パケット記憶手段）は、ＵＳＢを介して転送されるデータ（パケット）を一時的に記憶するものであり、ＵＳＢ（第１のバス）でのデータ転送速度と、ＥＢＵＳ（第２のバス。ＤＭＡバス）でのデータ転送速度との速度差を補償する機能などを有する。なお、ＥＢＵＳは、ハードディスクドライブやＣＤドライブやスキャナなどのデバイスに接続される外部バスである。
【００７５】
そして本実施形態では、第１の方向のデータ転送（ＯＵＴトランザクション）においては、ＵＳＢ（第１のバス）を介して受信されＥＢＵＳ（第２のバス）を介して送信されるデータ（ＯＵＴデータ）を記憶し、第２の方向のデータ転送（ＩＮトランザクション）においては、ＥＢＵＳを介して受信されＵＳＢを介して送信されるデータ（ＩＮデータ）を記憶するデータ記憶領域６２（ＦＩＦＯ。ＦＩＦＯ設定の記憶領域）を、バッファ６０が有する。
【００７６】
そして本実施形態のデータ転送制御装置は、第１の方向のデータ転送においては、ＥＢＵＳを介したデータ送信が終了したことを条件に、データフェーズ（データトランスポート。全データの転送）が終了したと判断する。一方、第２の方向のデータ転送においては、ＥＢＵＳを介したデータ受信が終了し、バッファ６０のデータ記憶領域６２が空になったこと（最後のデータのパケットについてのアクノリッジがＵＳＢを介して返ってきたこと）を条件に、データフェーズが終了したと判断する。
【００７７】
また本実施形態のデータ転送制御装置は、ＥＢＵＳを介したデータ受信が終了し、バッファ６０のデータ記憶領域６２（ＦＩＦＯ。ＦＩＦＯ設定の記憶領域）の残りデータサイズ（データ長、転送数）が最大パケットサイズ未満である場合には、データ記憶領域６２のショートパケット（最大パケットサイズ未満のサイズのパケット）をＵＳＢを介して自動送信したり、ショートパケットの存在を、割り込み信号等を用いてＣＰＵ（ファームウェア、処理手段）に知らせるようにしている。
【００７８】
更に本実施形態では、１つのエンドポイント（図２（Ｂ）のＥＰ１）を介して転送される情報として、コマンドブロック（第１の情報）とデータ（第２の情報。ＯＵＴデータ）とが割り当てられている場合に（図２（Ｂ）のＡ１、Ａ２参照）、コマンドブロック用のコマンド記憶領域（第１の記憶領域）とデータ用のデータ記憶領域（第２の記憶領域）とが、バッファ６０上に用意（確保）される。
【００７９】
そしてバッファ管理回路６０は、ＵＳＢ（第１のバス）を介してコマンドブロックが転送されるコマンドフェーズ（第１のフェーズ）では、ホストからエンドポイント（ＥＰ１）に向けて転送される情報を、コマンドブロック用のコマンド記憶領域に書き込み、ＵＳＢを介してデータ（ＯＵＴデータ）が転送されるデータフェーズ（第２のフェーズ）では、ホストからエンドポイントに向けて転送される情報を、データ用のデータ記憶領域に書き込む。即ち、フェーズが切り替わったことを条件に、情報（コマンドブロック、データ）の書き込み領域を切り替えている。
【００８０】
或いは本実施形態では、１つのエンドポイント（図２（Ｂ）のＥＰ２）を介して転送される情報として、データ（第３の情報。ＩＮデータ）とステータスブロック（第４の情報）が割り当てられている場合に（図２（Ｂ）のＡ３、Ａ４参照）、データ用のデータ記憶領域（第３の記憶領域）とステータスブロック用のステータス記憶領域（第４の記憶領域）とが、バッファ６０上に用意される。
【００８１】
そしてバッファ管理回路６０は、ＵＳＢを介してデータ（ＩＮデータ）が転送されるデータフェーズ（第３のフェーズ）では、エンドポイント（ＥＰ２）からホストに向けて転送される情報を、データ用のデータ記憶領域から読み出し、ＵＳＢを介してステータスブロックが転送されるステータスフェーズ（第４のフェーズ）では、エンドポイントからホストに向けて転送される情報を、ステータス用のステータス記憶領域から読み出す。即ち、フェーズが切り替わったことを条件に、情報（データ、ステータスブロック）の読み出し領域を切り替えている。
【００８２】
このようにすることで、１つのエンドポイントに複数種類の情報（コマンドブロック、ＯＵＴデータ、ＩＮデータ、ステータスブロック）が割り当てられている場合にも、コマンド記憶領域のコマンドブロックについての処理を行いながら、データ記憶領域のＯＵＴデータについての処理を行うことが可能になる。或いは、データ記憶領域のＩＮデータについての処理を行いながら、ステータス記憶領域のステータスブロックについての処理を行うことが可能になる。従って、データ転送制御装置の処理速度の向上や、ファームウェア（処理手段）の負荷を軽減することが可能になり、実効的なバスの転送速度を向上できる。
【００８３】
バルク転送管理回路７０は、ＵＳＢにおけるバルク転送を管理するための回路である。
【００８４】
ＤＭＡＣ８０は、ＥＢＵＳを介してＤＭＡ転送を行うためのＤＭＡコントローラであり、ＤＭＡカウンタ８２を含む。そしてＤＭＡカウンタ８２は、ＥＢＵＳ（第２のバス）を介して送信又は受信されるデータのサイズ（転送数、データ長）をカウントする回路である。
【００８５】
２．２  詳細な接続例
図７に、ＳＩＥ３０、エンドポイント管理回路４０、バッファ管理回路５０、バッファ６０、バルク転送管理回路７０、ＤＭＡＣ８０の詳細な接続例を示す。
【００８６】
図７において、ＳＩＥＲｅａｄＤａｔａは、バッファ６０（データ記憶領域６２）から読み出され、ＵＳＢ（第１のバス）を介してホストに転送されるデータ（ＩＮデータ）である。ＳＩＥＷｒｉｔｅＤａｔａは、ＵＳＢを介してホストから転送され、バッファ６０に書き込まれるデータ（ＯＵＴデータ)である。ＤＭＡＲｅａｄＤａｔａは、バッファ６０から読み出され、ＥＢＵＳ（第２のバス）を介してハードディスクドライブＨＤＤなどのデバイスに転送（ＤＭＡ転送）されるデータである。ＤＭＡＷｒｉｔｅＤａｔａは、ＥＢＵＳを介してＨＤＤ等から転送され、バッファ６０に書き込まれるデータである。
【００８７】
また、ＳＩＥ３０が出力するＳＩＥＲｅａｄＲｅｑは、ＳＩＥＲｅａｄＤａｔａの読み出しを要求する信号であり、エンドポイント管理回路４０が出力するＳＩＥＲｅａｄＡｃｋは、ＳＩＥＲｅａｄＲｅｑに対するアクノリッジ信号である。同様に、ＳＩＥＷｒｉｔｅＲｅｑは、ＳＩＥＷｒｉｔｅＤａｔａの書き込みを要求する信号であり、ＳＩＥＷｒｉｔｅＡｃｋは、ＳＩＥＷｒｉｔｅＲｅｑに対するアクノリッジ信号である。
【００８８】
また、ＤＭＡＣ８０が出力するＤＭＡＲｅａｄＲｅｑは、ＤＭＡＲｅａｄＤａｔａの読み出しを要求する信号であり、エンドポイント管理回路４０が出力するＤＭＡＲｅａｄＡｃｋは、ＤＭＡＲｅａｄＲｅｑに対するアクノリッジ信号である。同様に、ＤＭＡＷｒｉｔｅＲｅｑは、ＤＭＡＷｒｉｔｅＤａｔａの書き込みを要求する信号であり、ＤＭＡＷｒｉｔｅＡｃｋは、ＤＭＡＷｒｉｔｅＲｅｑに対するアクノリッジ信号である。
【００８９】
Ｆｕｌｌは、バッファ６０のデータ記憶領域６２がフルか否かを示す信号であり、Ｅｍｐｔｙは、データ記憶領域６２が空（エンプティ）か否かを示す信号である。この場合に、データ記憶領域６２がフルか否か、或いは空か否かは、データ記憶領域６２の残りデータサイズ（残りデータエリア）をカウントする残りデータサイズカウンタ４１からのカウント値等に基づいて判断される。
【００９０】
なお、本実施形態のデータ記憶領域６２は、先に入力された情報が先に出力される領域（ＦＩＦＯ。ＦＩＦＯ設定の領域）になっている。この場合、データ記憶領域６２を、直列接続のレジスタ、メモリ等で構成することで、先入れ先出しの領域に設定してもよいし、ＲＡＭのアドレス制御を工夫することで、先入れ先出しの領域に設定してもよい。
【００９１】
エンドポイント管理回路４０が出力するＨａｖｅＭＰＳは、バッファ６０のデータ記憶領域６２の残りデータサイズ（データ長）が、最大パケットサイズか否かを示す信号である。最大パケットサイズが５１２バイトの場合を例にとれば、残りデータサイズが５１２バイト（以上）の時にはＨａｖｅＭＰＳがアクティブ（Ｈレベル）になり、残りデータサイズが０〜５１１バイトの時にはＨａｖｅＭＰＳが非アクティブ（Ｌレベル）になる。この場合の残りデータサイズは、残りデータサイズカウンタ４１により求められる。
【００９２】
ＨＤＤＡＴＡは、ＥＢＵＳ（第２のバス）を介してＤＭＡ転送されるデータであり、ｘＤＭＡＣＫは、このＤＭＡ転送のアクノリッジ信号であり、ｘＤＭＡＲＱは、ＤＭＡ転送の要求信号である。また、ｘＨＩＯＲは、読み出しパルス信号であり、ｘＨＩＯＷは、書き込みパルス信号である。
【００９３】
ＤＭＡ＿Ｓｔａｒｔは、ＤＭＡ転送の開始をＣＰＵ（ファームウェア）が指示するための信号である。ＤＭＡ＿Ｒｕｎｎｉｎｇは、ＥＢＵＳを介したＤＭＡ転送が行われていることを示す信号であり、ＥＢＵＳによるＤＭＡ転送の開始によりアクティブ（Ｈレベル）になり、ＤＭＡ転送の終了により非アクティブ（Ｌレベル）になる。即ち、ＥＢＵＳでのデータ転送（データフェーズ）期間において、ＤＭＡ＿Ｒｕｎｎｉｎｇはアクティブになる。
【００９４】
ＡｕｔｏＥｎＳｈｏｒｔは、バッファ６０のデータ記憶領域６２に存在するショートパケットの自動送信を有効又は無効に設定するための信号である。また、ＥｎＳｈｏｒｔＰｋｔは、ショートパケットの転送をＳＩＥ３０に指示するための信号である。
【００９５】
例えば、ＡｕｔｏＥｎＳｈｏｒｔがＨレベルに設定されている場合には、ＥＢＵＳを介したデータ受信が終了し、且つ、データ記憶領域６２の残りデータサイズが最大パケットサイズ未満になると、ＥｎＳｈｏｒｔＰｋｔがアクティブになる。これにより、データ記憶領域６２に存在するショートパケット（最大パケットサイズ未満のパケット）が、ＳＩＥ３０によりＵＢＳを介して自動送信される。
【００９６】
より具体的には、ＤＭＡ＿Ｒｕｎｎｉｎｇが非アクティブ（データ受信終了）になった後に、ＨａｖｅＭＰＳが非アクティブ（最大パケットサイズ未満）になると、ＥｎＳｈｏｒｔＰｋｔがアクティブになり、データ記憶領域６２のショートパケットがＳＩＥ３０により自動送信される。
【００９７】
ＩＮＴｒａｎＡＣＫは、ＩＮトランザクションに対するアクノリッジが、ホストから適正に返された場合にアクティブになる信号である。ＢｕｌｋＤＭＡＣｍｐは、バルク転送におけるデータフェーズ（全データの転送）が終了したことを示すための信号である。
【００９８】
例えば、ＥＢＵＳを介したデータ受信が終了した後、データ記憶領域６２が空になり、最後のデータ（ＩＮデータ）のパケットの送信に対するアクノリッジがホストから返ってくると、ＩＮＴｒａｎＡＣＫがアクティブになる。すると、ＢｕｌｋＤＭＡＣｍｐがアクティブになり、データフェーズ（全データの転送）が終了したことが、ファームウェア（ＣＰＵ）に伝えられる。これにより、ファームウェアは、次のステータスフェーズの処理に移行できる。
【００９９】
２．３  動作
次に本実施形態の動作について説明する。
【０１００】
図８（Ａ）は、ＯＵＴトランザクション（ホストからデバイスにデータが転送される第１の方向のデータ転送）において、バッファ６０のデータ記憶領域６２（ＦＩＦＯ）の残りエリア（空きエリア）のサイズが、ホストから転送されてくるデータのサイズ（データ長）以上である場合のタイミング波形図である。この場合には、ホストからのデータの全てをデータ記憶領域６２に書き込むことができるため、図８（Ａ）のＣ１に示すようにホストに対してＡＣＫを返すことができる。
【０１０１】
なお、ＨＳモード時において、データ記憶領域６２が、ダブルバッファ構造ではなく、シングルバッファ構造である場合には、データ記憶領域６２に空きが生じるまでは、ホストからの次のパケットを受信できない。従って、この場合には、ＡＣＫの代わりにＮＹＥＴがホストに返される。また、ダブルバッファ構造であっても、両方のバッファが使用中であり、次のデータを受け取ることができない場合には、同様に、ＡＣＫの代わりＮＹＥＴがホストに返される。
【０１０２】
図８（Ｂ）は、ＯＵＴトランザクションにおいて、データ記憶領域６２の残りエリアサイズがデータサイズよりも小さい場合のタイミング波形図である。
【０１０３】
この場合には、ホストからのデータの全てをデータ記憶領域６２に書き込むことができないため、図８（Ｂ）のＣ２に示すようにホストに対してＮＡＫを返すことになる。そして、今回のＯＵＴトークンに対するデータ転送により受け取ったデータを破棄するために、Ｃ３に示すようにＲｅｗｉｎｄ信号がアクティブになる。
【０１０４】
なお、図８（Ａ）、（Ｂ）のＣ４、Ｃ５において、ＳＩＥ３０がＳＩＥＷｒｉｔｅＲｅｑをアクティブにすると、エンドポイント管理回路４０の指示により、バッファ管理回路５０がＳＩＥＷｒｉｔｅＤａｔａの書き込みアドレスを生成して、バッファ６０に出力する。これにより、例えば４バイトのＳＩＥＷｒｉｔｅＤａｔａがバッファ６０のデータ記憶領域６２に書き込まれ、ＳＩＥ３０に対してＳＩＥＷｒｉｔｅＡｃｋが返される。そして、このような４バイトずつの書き込み処理を繰り返すことで、ホストからのデータ（例えば５１２バイトのデータ）がデータ記憶領域６２に順次書き込まれる。
【０１０５】
図８（Ｃ）、（Ｄ）は、データ記憶領域６２に空きがあるか否かをホストがデバイスに問い合わせるＰＩＮＧトランザクション（ＰＩＮＧプロトコル）についてのタイミング波形図である。このＰＩＮＧトランザクションはＵＳＢのＨＳモードにおいてサポートされているものである。このプロトコルは、ホストからのＯＵＴトークンやＯＵＴのデータに対して、デバイスからＮＹＥＴを受け取った場合に使用される。
【０１０６】
そして、このＰＩＮＧトランザクションにおいてはデータ記憶領域６２の残りエリアサイズ（空きサイズ）がデータサイズ以上である場合には、図８（Ｃ）のＣ６に示すようにホストに対してＡＣＫが返される。一方、データ記憶領域６２の残りエリアサイズがデータサイズよりも小さい場合には、図８（Ｄ）のＣ７に示すようにホストに対してＮＡＫが返されることになる。
【０１０７】
図９（Ａ）は、ＩＮトランザクション（デバイスからホストにデータが転送される第２の方向のデータ転送）において、データ記憶領域６２の残りデータ（有効データ）のサイズが、最大パケットサイズ以上である場合のタイミング波形図である。この場合には、最大パケットサイズ分のデータがホストに転送されると、図９（Ａ）のＤ１に示すようにホストからデバイスにＡＣＫが返される。
【０１０８】
なお、図９（Ａ）のＤ２において、ＳＩＥ３０がＳＩＥＲｅａｄＲｅｑをアクティブにすると、エンドポイント管理回路４０の指示により、バッファ管理回路５０がＳＩＥＲｅａｄＤａｔａの読み出しアドレスを生成して、バッファ６０に出力する。これにより、例えば４バイトのＳＩＥＲｅａｄＤａｔａがデータ記憶領域６２から読み出され、ＳＩＥ３０に対してＳＩＥＲｅａｄＡｃｋが返される。そして、このような４バイトずつの読み出し処理を繰り返すことで、ホストに対して転送すべきデータがデータ記憶領域６２から順次読み出される。
【０１０９】
図９（Ｂ）は、ＩＮトランザクションにおいて、データ記憶領域６２の残りデータのサイズが最大パケットサイズよりも小さく、且つ、ＥｎＳｈｏｒｔＰｋｔ（図７参照）がＬレベル（非アクティブ）である場合のタイミング波形図である。この場合には、図９（Ｂ）のＤ３、Ｄ４、Ｄ５に示すようにＥｎＳｈｏｒｔＰｋｔがＬレベルであるため、ショートパケット（最大パケットサイズ未満のパケット）の転送が禁止される。従って、ホストからのＩＮトークンに対して、Ｄ６、Ｄ７、Ｄ８に示すようにＮＡＫが返されることになる。
【０１１０】
図９（Ｃ）は、ＩＮトランザクションにおいて、データ記憶領域６２の残りデータのサイズが最大パケットサイズよりも小さく、且つ、ＥｎＳｈｏｒｔＰｋｔがＨレベル（アクティブ）になった場合のタイミング波形図である。この場合には、図９（Ｃ）のＤ９に示すように、ＥｎＳｈｏｒｔＰｋｔがＨレベルになることでショートパケットの転送が許可され、Ｄ１０に示すように、データ記憶領域６２に存在するショートパケットがホストに適正に転送されることになる。
【０１１１】
なお、バッファ６０のデータ記憶領域６２は、ＯＵＴトランザクションとＩＮトランザクションとで共用の領域にしてもよいし、別領域にしてもよい。
【０１１２】
図１０は、ハードディスクドライブＨＤＤなどのデバイスへのデータ送信時におけるＤＭＡ転送のタイミング波形図である。
【０１１３】
図１０のＥ１、Ｅ２に示すように、ハードディスクドライブＨＤＤからのＨＤＭＡＲＱ（図７参照）、ＣＰＵからのＤＭＡ＿Ｓｔａｒｔがアクティブになると、ＤＭＡ転送が開始し、Ｅ３に示すように、ＤＭＡ＿Ｒｕｎｎｉｎｇがアクティブになる。
【０１１４】
そして、Ｅ４、Ｅ５に示すように、ＤＭＡＲｅａｄＲｅｑ、ＤＭＡＲｅａｄＡｃｋを用いたハンドシェークが行われ、バッファ６０のデータ記憶領域６２から例えば４バイト（３２ビット）のデータが読み出される。読み出された４バイトのデータは、Ｅ６、Ｅ７に示すように、書き込みパルス信号ｘＨＩＯＷを用いて、１６ビットのバスＥＢＵＳを介して例えば２バイトずつＨＤＤに送信される。
【０１１５】
そして、データが送信される毎に、Ｅ８に示すように、ＤＭＡカウンタ８２のカウント値Ｃｏｕｎｔ（データ転送数）がデクリメントされる。なお、Ｃｏｕｎｔの初期値Ｎは、コマンドフェーズにおいて、図３のＣＢＷのdCBWDTransuferLengthに基づき設定される。
【０１１６】
Ｅ９に示すように、Ｃｏｕｎｔが０になり、ＥＢＵＳにおける全データの転送が終了すると、Ｅ１０に示すように、ＤＭＡ＿Ｒｕｎｎｉｎｇが非アクティブになる。
【０１１７】
図１１は、ハードディスクドライブＨＤＤなどのデバイスからのデータ受信時におけるＤＭＡ転送のタイミング波形図である。
【０１１８】
図１１のＦ１、Ｆ２に示すようにＨＤＭＡＲＱ、ＤＭＡ＿Ｓｔａｒｔがアクティブになると、ＤＭＡ転送が開始し、Ｆ３に示すように、ＤＭＡ＿Ｒｕｎｎｉｎｇがアクティブになる。
【０１１９】
そして、Ｆ４、Ｆ５に示すように、読み出しパルス信号ｘＨＩＯＲを用いてＥＢＵＳを介しＨＤＤからデータが受信される。受信されたデータは、Ｆ６、Ｆ７に示すように、ＤＭＡＷｒｉｔｅＲｅｑ、ＤＭＡＷｒｉｔｅＡｃｋを用いたハンドシェークにより、バッファ６０のデータ記憶領域６２に書き込まれる。
【０１２０】
Ｆ８に示すように、データが受信される毎に、Ｃｏｕｎｔ（データ転送数）がデクリメントされる。そして、Ｆ９に示すように、Ｃｏｕｎｔが０になり、ＥＢＵＳにおける全データの転送が終了すると、Ｆ１０に示すように、ＤＭＡ＿Ｒｕｎｎｉｎｇが非アクティブになる。
【０１２１】
２．４  データフェーズ（データトランスポート）の終了の検出
さて、ＵＳＢにおいては、図５（Ａ）、（Ｂ）で説明したように、ホスト側とデバイス側とで、常にフェーズを整合させながらデータ転送を行う必要がある。
【０１２２】
例えば図５（Ｂ）において、ホストは、現在のフェーズがデータフェーズであると認識しているのに対して、デバイスは、現在のフェーズがステータスフェーズであると認識していたとする。すると、ホストから転送されたＩＮトークン（図５（Ｂ）のＢ４のトークン）を、デバイスはＣＳＷ（Ｂ６）に対するＩＮトークンであると誤認識してしまい、データ転送にエラーが生じてしまう。
【０１２３】
また、図２（Ｂ）に示すＢｕｌｋ−Ｏｎｌｙ仕様では、１つのエンドポイントを介して転送される情報として、複数種類の情報が割り当てられている。具体的には、図２（Ｂ）では、バルクアウトエンドポイントＥＰ１を介して転送される情報として、ＣＢＷ（コマンド）及びＯＵＴデータが割り当てられ、バルクインエンドポイントＥＰ２を介して転送される情報として、ＣＳＷ（ステータス）及びＩＮデータが割り当てられている。従って、ホスト及びデバイスは、各エンドポイントを介して転送される情報がどの情報なのかを判別する必要があり、Ｂｕｌｋ−Ｏｎｌｙ仕様では、現在のフェーズがどのフェーズなのかをホスト及びデバイスが判断して、この情報の判別を行っている。
【０１２４】
例えば、図５（Ａ）、（Ｂ）のＢ１、Ｂ２では、現在のフェーズがコマンドフェーズであるため、エンドポイントＥＰ１を介して転送される情報はＣＢＷであると判断される。また、Ｂ３、Ｂ４では、現在のフェーズがデータフェーズであるため、エンドポイントＥＰ１を介して転送される情報はＯＵＴデータであると判断され、エンドポイントＥＰ２を介して転送される情報はＩＮデータであると判断される。また、Ｂ５、Ｂ６では、現在のフェーズがステータスフェーズであるため、エンドポイントＥＰ２を介して転送される情報はＣＳＷであると判断される。
【０１２５】
このようにＵＳＢにおいては、現在のフェーズがどのフェーズなのかをホスト及びデバイスは正確に認識する必要がある。従って、例えば、データフェーズからステータスフェーズへの切り替わりのタイミングについても、正確に判断できることが望まれる。
【０１２６】
そこで、本実施形態では、データフェーズからステータスフェーズへの切り替わりの判断、即ちデータフェーズの終了の判断を、以下に説明するような手法で実現している。
【０１２７】
例えばホストからデバイスにＯＵＴデータが転送されるＯＵＴトランザクション（第１の方向のデータ転送）の場合には、図１２のようにしてデータフェーズの終了（全データ転送の終了。フェーズの切り替わり）を判断している。
【０１２８】
具体的には、まず、図１２のＧ１に示すようにＵＳＢ（第１のバス）におけるデータ転送（データフェーズ）がスタートする。そして、転送されたデータがバッファ６０のデータ記憶領域６２に書き込まれると、Ｇ２に示すようにデータ記憶領域６２が空（エンプティ）か否かを示す信号Ｅｍｐｔｙが非アクティブになり、データ記憶領域６２が空でないことが示される。
【０１２９】
次に、Ｇ３、Ｇ４に示すように、ＣＰＵがＤＭＡ＿Ｓｔａｒｔをアクティブに設定することで、ＤＭＡ＿Ｒｕｎｎｉｎｇがアクティブになり、ＥＢＵＳ（第２のバス）におけるデータ転送（ＥＢＵＳのデータフェーズ）がスタートする。
【０１３０】
そして、Ｇ５に示すようにＵＳＢにおけるデータ転送が終了し、Ｇ６に示すようにＥＢＵＳにおけるデータ転送（ＤＭＡ転送）が終了すると、データフェーズが終了して、データフェーズからステータスフェーズに切り替わったと判断される。
【０１３１】
このＧ６のタイミングは、ＵＳＢでのデータ転送が終了するＧ５のタイミングよりも遅いタイミングとなる。また、このＧ６のタイミングは、バッファ６０のデータ記憶領域６２が空になり、Ｅｍｐｔｙ信号がアクティブになるＧ７のタイミングと一致する。そして本実施形態では、このＧ６のタイミングを、ＥＢＵＳ側に設けられた図１２のＤＭＡカウンタ８２を用いて、ＥＢＵＳで転送されるデータサイズ（転送数。データ長）をカウントすることで判断している（図１０のＥ９参照）。
【０１３２】
このように本実施形態では、ＯＵＴトランザクション（第１の方向のデータ転送）においては、ＥＢＵＳ（第２のバス）を介したデータ送信が終了したことを条件に、データフェーズが終了したと判断している。
【０１３３】
一方、デバイスからホストにＩＮデータが転送されるＩＮトランザクション（第２の方向のデータ転送）の場合には、図１３のようにしてデータフェーズの終了（全データ転送の終了。フェーズの切り替わり）を判断している。
【０１３４】
具体的には、まず、Ｈ１、Ｈ２に示すように、ＣＰＵがＤＭＡ＿Ｓｔａｒｔをアクティブに設定することで、ＤＭＡ＿Ｒｕｎｎｉｎｇがアクティブになり、ＥＢＵＳにおけるＤＭＡ転送がスタートする。そして、ＥＢＵＳを介して転送されたデータがバッファ６０のデータ記憶領域６２に書き込まれると、Ｈ３に示すように、Ｅｍｐｔｙが非アクティブになり、データ記憶領域６２が空でないことが示される。
【０１３５】
次に、Ｈ４に示すようにＵＳＢにおけるデータ転送がスタートする。そして、ＵＳＢを介して転送されるデータがデータ記憶領域６２から読み出され、もし、データ記憶領域６２が空になると、Ｅｍｐｔｙがアクティブになる。
【０１３６】
そして本実施形態では、Ｈ６に示すように、ＥＢＵＳ（第２のバス）を介したデータ転送が終了したと判断された後、Ｈ７に示すように、データ記憶領域６２が空になり、Ｅｍｐｔｙ信号がアクティブになったタイミングで、データフェーズ（全データの転送）が終了したと判断する。この場合、Ｈ６のタイミングは、ＥＢＵＳ側に設けられたＤＭＡカウンタ８２を用いて、ＥＢＵＳで転送されるデータサイズをカウントすることで判断できる。また、Ｈ７のタイミングは、ＵＳＢ（第１のバス）でのデータ転送（データフェーズ）が終了するＨ８のタイミングと一致する。
【０１３７】
このように本実施形態では、ＩＮトランザクション（第２の方向のデータ転送）においては、ＥＢＵＳ（第２のバス）を介したデータ受信が終了し、且つ、バッファ６０のデータ記憶領域が空になったことを条件に、データフェーズが終了したと判断している。
【０１３８】
例えば、図１２、図１３の本実施形態の手法とは異なる手法として、ＥＢＵＳ側とＵＳＢ側の両方に、データサイズをカウントするカウンタを設ける手法を考えることができる。この手法では、例えば、ＯＵＴトランザクションにおいては、ＥＢＵＳ側のカウンタのカウント値が０になったことを条件に、データフェーズが終了したと判断し、ＩＮトランザクションにおいては、ＵＳＢ側のカウンタのカウント値が０になったことを条件に、データフェーズが終了したと判断する。
【０１３９】
しかしながら、この手法では、２つのカウンタを設ける必要が生じ、これらの２つのカウンタを制御する処理が煩雑化してしまう。この結果、回路制御や回路構成が複雑化してしまい、データ転送制御装置の大規模化、高コスト化を招く。また、データ転送制御装置を制御するファームウェア（ＣＰＵ）の処理も複雑化し、その処理のオーバーヘッドのために、実効的なデータ転送速度が低下するおそれもある。
【０１４０】
これに対して、図１２、図１３の本実施形態の手法によれば、図７に示すようにＥＢＵＳ（第２のバス）側にだけカウンタを設ければよく、ＵＳＢ（第１のバス）側にカウンタを設ける必要がなくなる。従って、回路制御を容易化できると共に回路構成を簡素化でき、データ転送制御装置のコンパクト化、低コスト化を図れる。また、データ転送制御装置を制御するファームウェアの処理も簡素化でき、実効的なデータ転送速度を向上できる。
【０１４１】
なお、本実施形態では、図１３のＨ９に示すように、ＥＢＵＳ（第２のバス）を介したデータ受信が終了すると、このデータ受信のステータスをハードディスクドライブＨＤＤ側から取得し、この取得されたステータスに基づいて、図４に示すＣＳＷ（ステータス）を作成する。このＣＳＷの作成処理は、例えばファームウエア等により行われる。
【０１４２】
そして、図１３のＨ１０に示すように、この作成されたＣＳＷを、データフェーズの終了後のステータスフェーズにおいて、ＵＳＢ（第１のバス）を介して、ホスト側に送信する。
【０１４３】
このようにすれば、図１３のＨ９に示すように、ＵＳＢにおいてデータ転送を行っている期間を有効利用して、ＨＤＤ側からステータスを取得し、ＣＳＷを作成できるようになる。そして、Ｈ１０に示すように、データフェーズからステータスフェーズに移行した後に、直ぐに、ホストからのＩＮトークンに対してＣＳＷを返すことが可能になる。従って、ステータスフェーズにおいて、ホストからのＩＮトークンに対してＮＡＫを返す頻度を少なくでき、実効的なデータ転送速度を向上できる。
【０１４４】
２．５  ショートパケットの自動送信
さて、ＵＳＢでは、ペイロードサイズが最大パケットサイズ未満であるショートパケットは特別な意味を有する。
【０１４５】
即ち、ホストは、デバイスからショートパケットが転送されて来ると、データフェーズは終了したと判断し、ステータスフェーズに移行してしまう。従って、デバイスは、データフェーズを終了させる場合以外では、ショートパケットをホストに転送しないようデータ転送を制御する。
【０１４６】
具体的には、デバイスは、バッファ６０のデータ記憶領域６２の残りデータサイズを常にチェックする。そして、残りデータサイズが最大パケットサイズ以上の場合には、残りデータの中から最大パケットサイズのデータパケットを作成して、ホストに転送する。そして、残りデータサイズが最大パケットサイズ未満と判断されると、ショートパケットの転送を許可して、その残りデータサイズのパケットをショートパケットしてホストに転送する。これにより、データフェーズが終了することになる。
【０１４７】
しかしながら、このように、データ記憶領域６２の残りデータサイズを常にチェックし、チェック結果に応じた処理を行おうとすると、このチェック処理を行うファームウェア（ＣＰＵ）の処理負荷が非常に重くなってしまう。そして、このファームウェアの処理のオーバーヘッドに起因して、実効的なデータ転送が低下してしまう事態を招く。
【０１４８】
そこで本実施形態では、ＥＢＵＳ（第２のバス）を介したデータ受信（ＤＭＡ転送）が終了し、且つ、データ記憶領域６２の残りデータサイズ（有効データ）が最大パケットサイズ未満である場合には、データ記憶領域６２のショートパケットを、ＵＳＢ（第１のバス）を介して自動的に（ファームウェアの処理を介さずにハードウェアの処理により）送信する手法を採用している。
【０１４９】
例えば図１４に、ＩＮトランザクション（第２の方向のデータ転送）において、データ記憶領域６２の残りデータサイズが最大パケットサイズ未満の場合のタイミング波形図を示す。
【０１５０】
図１４では、Ｉ１に示すように、ショートパケットの自動送信（自動転送）の有効、無効を設定する信号であるＡｕｔｏＥｎＳｈｏｒｔ（図７参照）がアクティブ（Ｈレベル）に設定されている。このＡｕｔｏＥｎＳｈｏｒｔのレベルは、例えばエニミュレーション時にファームウェア（ＣＰＵ）が、ＡｕｔｏＥｎＳｈｏｒｔのレジスタに所与の値を書き込むことで設定される。この場合に、例えば、マスストレージデバイスのようにショートパケットの自動送信を常に有効にすべきデバイスでは、ＡｕｔｏＥｎＳｈｏｒｔを固定的にアクティブに設定してもよい。
【０１５１】
そして、図１４のＩ１のようにＡｕｔｏＥｎＳｈｏｒｔがアクティブに設定された状態で、Ｉ２に示すようにＥＢＵＳを介したデータ転送が終了し、Ｉ３に示すように、最後の最大パケットサイズ（例えば５１２バイト）のパケットＤn-1がＵＳＢを介して転送されたとする。
【０１５２】
この場合に、データ記憶領域６２の残りデータサイズが最大パケットサイズ未満であると、Ｉ４に示すように、ショートパケットの自動送信をＳＩＥ３０に指示するＥｎＳｈｏｒｔＰｋｔがアクティブになる。即ち、図７において、ＡｕｔｏＥｎＳｈｏｒｔがアクティブであり、残りデータサイズが最大パケットサイズか否かを示すＨａｖｅＭＰＳが非アクティブである場合には、ＥｎＳｈｏｒｔＰｋｔがアクティブになる。
【０１５３】
そして、ＥｎＳｈｏｒｔＰｋｔがアクティブになると、図１４のＩ５に示すように、データ記憶領域６２に存在するショートパケットが、ファームウェアの処理が介在することなくハードウェア（ＳＩＥ３０）によりホストに自動的に送信される。そして、ショートパケットがＵＳＢを介して転送されると、Ｉ６に示すようにデータフェーズが終了して、ステータスフェーズに移行する。
【０１５４】
このように図１４の本実施形態の手法では、ＡｕｔｏＥｎＳｈｏｒｔをアクティブに設定することで、データ記憶領域６２のショートパケットをハードウェアにより自動送信できる。従って、データ記憶領域６２の残りデータサイズをチェックする処理を、ファームウェアが行う必要がなくなる。この結果、ファームウェアの処理負荷を軽減でき、実効的なデータ転送速度を向上できる。
【０１５５】
特に、デバイス側では、低コスト化の要請から、例えば２０〜５０ＭＨｚ程度のクロック周波数で動作する安価なＣＰＵが使用される場合が多い。従って、残りデータサイズのチェック処理をＣＰＵ上で動作するファームウェアが行うと、チェック処理に非常に時間を費やしてしまい、Ｉ６に示すステータスフェーズへの移行タイミングが非常に遅れてしまう可能性がある。
【０１５６】
これに対して、図１４の本実施形態の手法では、残りデータのチェック処理をファームウェアが行わなくて済むため、早い段階でステータスフェーズに移行できるようになる。この結果、残りデータサイズのチェック処理をファームウェアで行う場合に比べて、実効的なデータ転送速度を格段に向上できる。
【０１５７】
なお、本実施形態では、ＡｕｔｏＥｎＳｈｏｒｔの設定を変更することで、ショートパケットの自動送信の有効、無効を任意に設定できるようになっている。
【０１５８】
例えば、ハードディスクドライブやＣＤドライブなどのマスストレージデバイスでは、ショートパケットの自動送信が常に有効になるように、ＡｕｔｏＥｎＳｈｏｒｔを設定する。このようにすれば、ファームウェアの処理を介在させることなく、ショートパケットを自動送信して、ステータスフェーズに移行できるようになる。
【０１５９】
一方、スキャナなどのデバイスのように、ＥＢＵＳ（第２のバス）を介して受信されたデータに、データサイズなどの情報が付加されて、ＵＳＢ（第１のバス）を介して送信されるようなデバイスでは、ＡｕｔｏＥｎＳｈｏｒｔを非アクティブ（Ｌレベル）に設定する。
【０１６０】
即ち、スキャナでは、データの取り込みが完了した後でなければ、最終的なデータサイズが確定しない。従って、データ転送制御装置は、スキャナからの受信データの最後に、データサイズを含む制御情報（ヘッダ、フッタ）を付加して、ホストに転送することになる。このため、ＥＢＵＳを介して転送されるデータのサイズと、ＵＳＢを介して転送されるデータのサイズが一致せず、ショートパケットをホストに無条件に転送することは許されなくなり、ＡｕｔｏＥｎＳｈｏｒｔを非アクティブに設定する必要が生じる。
【０１６１】
本実施形態にように、ショートパケットの自動送信の有効、無効を任意に設定可能にすることで、ハードディスクドライブなどのマスストレージデバイスのみならず、スキャナなどのデバイスにおけるデータ転送にも柔軟に対応できるようになる。
【０１６２】
２．６  ショートパケットの存在の通知
さて、図１４では、ＡｕｔｏＥｎＳｈｏｒｔ信号を用いて、データ記憶領域６２のショートパケットを自動送信している。
【０１６３】
これに対して、データ記憶領域６２でのショートパケットの存在をＣＰＵ（ファームウェア）に知らせるようにしてもよい。具体的には、ＥＢＵＳ（第２のバス）を介したデータ受信が終了し、且つ、データ記憶領域６２の残りデータサイズが最大パケットサイズ未満である場合に、データ記憶領域６２にショートパケットが存在することを、割り込み等を用いてＣＰＵ（処理手段）に通知するようにする。
【０１６４】
このような手法を採用する場合での、ＳＩＥ３０、エンドポイント管理回路４０、バッファ管理回路５０、バッファ６０、バルク転送管理回路７０、ＤＭＡＣ８０の詳細な接続例を図１５に示す。
【０１６５】
図１５が、前述の図７と異なるのは、図１５では、バルク転送管理回路７０がＣＰＵ（ＣＰＵがアクセス可能なレジスタ）に対して割り込み信号ＳｈｏｒｔＩＮＴを出力している点と、ＥｎＳｈｏｒｔＰｋｔがＣＰＵにより設定されて、ＳＩＥ３０に入力される点である。
【０１６６】
ここで、ＳｈｏｒｔＩＮＴは、データ記憶領域６２にショートパケットが存在することをＣＰＵに伝えるための割り込み信号であり、ＥｎＳｈｏｒｔＰｋｔは、ショートパケットの転送をＣＰＵがＳＩＥ３０に指示するための信号である。
【０１６７】
そして、例えば、ＤＭＡ＿Ｒｕｎｎｉｎｇが非アクティブ（データ受信終了）になった後に、ＨａｖｅＭＰＳが非アクティブ（最大パケットサイズ未満）になると、ＳｈｏｒｔＩＮＴがアクティブになり、転送可能なショートパケットがデータ記憶領域６２に存在することが、ＣＰＵに対して通知される。
【０１６８】
すると、ＣＰＵは、ショートパケットの転送のための判断処理を行い、ショートパケットを転送してよいと判断した場合には、ＥｎＳｈｏｒｔＰｋｔをアクティブに設定する。これにより、ＳＩＥ３０は、データ記憶領域６２に存在するショートパケットを読み出して、ＵＳＢを介してホストに転送する処理を行うことになる。
【０１６９】
図１６に、ＩＮトランザクション（第２の方向のデータ転送）において、データ記憶領域６２の残りデータサイズが最大パケットサイズ未満の時のタイミング波形図を示す。
【０１７０】
図１６では、Ｊ１に示すように、ショートパケットの自動送信の有効、無効を設定するＡｕｔｏＥｎＳｈｏｒｔは非アクティブ（Ｌレベル）になっている。この状態で、Ｊ２に示すようにＥＢＵＳを介したデータ転送が終了し、Ｊ３に示すように、最後の最大パケットサイズのパケットＤn-1がＵＳＢを介して転送されたとする。
【０１７１】
この場合に、データ記憶領域６２の残りデータサイズが最大パケットサイズ未満であると、Ｊ４に示すように、ショートパケットの存在をＣＰＵに通知する割り込み信号ＳｈｏｒｔＩＮＴがアクティブになる。即ち、図１５において、ＤＭＡ＿Ｒｕｎｎｉｎｇが非アクティブであり、残りデータサイズが最大パケットサイズか否かを示すＨａｖｅＭＰＳが非アクティブである場合には、ＳｈｏｒｔＩＮＴがアクティブになる。
【０１７２】
すると、このＳｈｏｒｔＩＮＴを受けたＣＰＵ（ファームウェア）は、例えば、データサイズなどの情報を受信データに付加する処理（付加情報をデータ記憶領域６２に書き込む処理）などを行う。そして、その後に、Ｊ５に示すようにＥｎＳｈｏｒｔＰｋｔをアクティブにする。これにより、Ｊ６に示すように、データ記憶領域６２のデータがＳＩＥ３０によりホストに転送される。そして、Ｊ７に示すようにデータフェーズが終了して、ステータスフェーズに移行する。
【０１７３】
このように図１６の本実施形態の手法では、ＳｈｏｒｔＩＮＴを用いて、データ記憶領域６２でのショートパケットの存在を、ＣＰＵ上で動作するファームウェアに知らせている。これにより、例えば、データサイズなどの情報が受信データの最後に付加されるスキャナなどのデバイスにおいても、適正なデータ転送を実現できる。
【０１７４】
２．７  ファームウェアの処理
図１７（Ａ）に、ＩＮトランザクションにおける比較例のファームウェアの処理のフローチャートを示す。また、図１７（Ｂ）に、ショートパケットを自動送信する本実施形態の手法におけるファームウェアの処理のフローチャートを示す。
【０１７５】
図１７（Ａ）の比較例では、ファームウェアは、まず、ＤＭＡ＿Ｓｔａｒｔを１（Ｈレベル）にセットして、ＥＢＵＳでのＤＭＡ転送をスタートさせる（ステップＳ１）。そして、ＤＭＡ＿Ｒｕｎｎｉｎｇをチェックして、ＥＢＵＳでのＤＭＡ転送が終了したか否かを判断する（ステップＳ２）。
【０１７６】
ＤＭＡ転送が終了したと判断された場合には、ＩｎｔｒａｎＡＣＫを用いて、ＵＳＢ側からのＡＣＫを検出する（ステップＳ３）。そして、ＡＣＫが検出された場合には、バッファのデータ記憶領域の残りデータサイズＲＤＳをチェックする（ステップＳ４）。そして、ＲＤＳ≧最大パケットサイズＭａｘＰａｃｋｅｔＳｉｚｅの場合は、ステップＳ３に戻り、次のＡＣＫが来るのを待つ。
【０１７７】
一方、ＲＤＳ＜ＭａｘＰａｃｋｅｔＳｉｚｅの場合には、ＥｎＳｈｏｒｔＰｋｔを１にセットする（ステップＳ５）。これにより、データ記憶領域のショートパケットがホストに転送される。そして、その後にステップＳ３に戻り、次のＡＣＫが来るのを待つ。
【０１７８】
また、ＲＤＳ＝０の場合には、データ記憶領域のデータが全て転送されたと考えられるので、ＥＢＵＳ側のステータスを取得する（ステップＳ６）。そして、この取得されたステータスに基づきＣＳＷを作成して、ＵＳＢ側に送るべきステータスをセットする（ステップＳ７）。
【０１７９】
図１７（Ｂ）の本実施形態では、ファームウェアは、まず、ＤＭＡ＿Ｓｔａｒｔを１にセットして、ＥＢＵＳでのＤＭＡ転送をスタートさせる（ステップＳ１１）。なお、ＡｕｔｏＥｎＳｈｏｒｔは、ＤＭＡ転送の前に１にセットされている。そして、ＤＭＡ＿Ｒｕｎｎｉｎｇをチェックして、ＥＢＵＳでのＤＭＡ転送が終了したか否かを判断する（ステップＳ１２）。
【０１８０】
ＤＭＡ転送が終了したと判断された場合には（図１４のＩ２）、ＥＢＵＳ側のステータスを取得する（ステップＳ１３）。そして、データフェーズ（全データの転送）が終了したか否かを判断する（ステップＳ１４）。即ち、バッファのデータ記憶領域が空になり、最後のパケットに対するＡＣＫがホストから返ってきたか否かを判断する。そして、データフェーズが終了したと判断した場合には、ステップＳ１３で取得されたステータスに基づきＣＳＷを作成して、ＵＳＢ側に送るべきステータスをセットする（ステップＳ１５）。
【０１８１】
このように、図１７（Ｂ）の本実施形態では、図１７（Ａ）の比較例で必要な残りデータサイズのチェック処理（ステップＳ４）が不要になる。また、ＥｎｓｈｏｒｔＰｋｔをアクティブにセットする処理も、ハードウェアにより行われ、ファームウェアが行わなくても済むようになる。従って、ファームウェアの処理負荷を軽減でき、実効的なデータ転送速度を向上できる。
【０１８２】
図１８に、割り込みを用いてショートパケットの存在をファームウェアに通知する手法（図１５、図１６）におけるファームウェアの処理のフローチャートを示す。
【０１８３】
図１８では、ファームウェアは、まず、ＥＢＵＳでのＤＭＡ転送をスタートさせ、その後、ＤＭＡ転送が終了したか否かを判断する（ステップＳ２１、Ｓ２２）。
【０１８４】
ＤＭＡ転送が終了したと判断された場合には、割り込み信号ＳｈｏｒｔＩＮＴが検出（図１６のＪ４）されたか否かを判断する（ステップＳ２３）。そして、ＳｈｏｒｔＩＮＴが検出された場合には、ＤＭＡ転送の受信データに付加すべき情報（例えばデータサイズ）を、データ記憶領域（ＦＩＦＯ）に書き込む（ステップＳ２４）。
【０１８５】
そして、全ての情報が付加されたと判断されると（ステップＳ２５）、ＥｎＳｈｏｒｔＰｋｔを１にセットする（ステップＳ２６）。
【０１８６】
次に、ＵＳＢ側からのＡＣＫを検出する（ステップＳ２７）。そして、ＡＣＫが検出された場合には、データ記憶領域の残りデータサイズＲＤＳが０か否かをチェックする（ステップＳ２８）。そして、ＲＤＳが０でない場合には、ステップＳ２７に戻り、次のＡＣＫが検出されるのを待つ。
【０１８７】
一方、ＲＤＳが０の場合には、データ記憶領域の全てのデータが転送されたと考えられるので、ＥＢＵＳ側のステータスを取得する（ステップＳ２９）。そして、この取得されたステータスに基づきＣＳＷを作成して、ＵＳＢ側に送るべきステータスをセットする（ステップＳ３０）。
【０１８８】
３．電子機器
次に、本実施形態のデータ転送制御装置を含む電子機器の例について説明する。
【０１８９】
例えば図１９（Ａ）に電子機器の１つであるプリンタの内部ブロック図を示し、図２０（Ａ）にその外観図を示す。ＣＰＵ（マイクロコンピュータ）５１０はシステム全体の制御などを行う。操作部５１１はプリンタをユーザが操作するためのものである。ＲＯＭ５１６には、制御プログラム、フォントなどが格納され、ＲＡＭ５１７はＣＰＵ５１０のワーク領域として機能する。ＤＭＡＣ５１８は、ＣＰＵ５１０を介さずにデータ転送を行うためのＤＭＡコントローラである。表示パネル５１９はプリンタの動作状態をユーザに知らせるためのものである。
【０１９０】
ＵＳＢを介してパーソナルコンピュータなどの他のデバイスから送られてきたシリアルの印字データは、データ転送制御装置５００によりパラレルの印字データに変換される。そして、変換後のパラレル印字データは、ＣＰＵ５１０又はＤＭＡＣ５１８により、印字処理部（プリンタエンジン）５１２に送られる。そして、印字処理部５１２においてパラレル印字データに対して所与の処理が施され、プリントヘッダなどからなる印字部（データの出力処理を行う装置）５１４により紙に印字されて出力される。
【０１９１】
図１９（Ｂ）に電子機器の１つであるスキャナの内部ブロック図を示し、図２０（Ｂ）にその外観図を示す。ＣＰＵ５２０はシステム全体の制御などを行う。操作部５２１はスキャナをユーザが操作するためのものである。ＲＯＭ５２６には制御プログラムなどが格納され、ＲＡＭ５２７はＣＰＵ５２０のワーク領域として機能する。ＤＭＡＣ５２８はＤＭＡコントローラである。
【０１９２】
光源、光電変換器などからなる画像読み取り部（データの取り込み処理を行う装置）５２２により原稿の画像が読み取られ、読み取られた画像のデータは画像処理部（スキャナエンジン）５２４により処理される。そして、処理後の画像データは、ＣＰＵ５２０又はＤＭＡＣ５２８によりデータ転送制御装置５００に送られる。データ転送制御装置５００は、このパラレルの画像データをシリアルデータに変換し、ＵＳＢを介してパーソナルコンピュータなどの他のデバイスに送信する。
【０１９３】
図１９（Ｃ）に電子機器の１つであるＣＤ−ＲＷドライブの内部ブロック図を示し、図２０（Ｃ）にその外観図を示す。ＣＰＵ５３０はシステム全体の制御などを行う。操作部５３１はＣＤ−ＲＷをユーザが操作するためのものである。ＲＯＭ５３６には制御プログラムなどが格納され、ＲＡＭ５３７はＣＰＵ５３０のワーク領域として機能する。ＤＭＡＣ５３８はＤＭＡコントローラである。
【０１９４】
レーザ、モータ、光学系などからなる読み取り＆書き込み部（データの取り込み処理を行う装置又はデータの記憶処理を行うための装置）５３３によりＣＤ−ＲＷ５３２から読み取られたデータは、信号処理部５３４に入力され、エラー訂正処理などの所与の信号処理が施される。そして、信号処理が施されたデータが、ＣＰＵ５３０又はＤＭＡＣ５３８によりデータ転送制御装置５００に送られる。データ転送制御装置５００は、このパラレルのデータをシリアルデータに変換し、ＵＳＢを介してパーソナルコンピュータなどの他のデバイスに送信する。
【０１９５】
一方、ＵＳＢを介して他のデバイスから送られてきたシリアルのデータは、データ転送制御装置５００によりパラレルのデータに変換される。そして、このパラレルデータは、ＣＰＵ５３０又はＤＭＡＣ５３８により信号処理部５３４に送られる。そして、信号処理部５３４においてこのパラレルデータに対して所与の信号処理が施され、読み取り＆書き込み部５３３によりＣＤ−ＲＷ５３２に記憶される。
【０１９６】
なお、図１９（Ａ）、（Ｂ）、（Ｃ）において、ＣＰＵ５１０、５２０、５３０の他に、データ転送制御装置５００でのデータ転送制御のためのＣＰＵを別に設けるようにしてもよい。
【０１９７】
本実施形態のデータ転送制御装置を電子機器に用いれば、ＣＰＵ上で動作するファームウェアの処理負荷が軽減され、安価なＣＰＵを用いることが可能になる。更に、データ転送制御装置の低コスト化、小規模化を図れるため、電子機器の低コスト化、小規模化も図れるようになる。
【０１９８】
また、本実施形態のデータ転送制御装置を電子機器に用いれば、ＵＳＢ２．０におけるＨＳモードでのデータ転送を適正に行うことが可能になる。従って、ユーザがパーソナルコンピュータなどによりプリントアウトの指示を行った場合に、少ないタイムラグで印字が完了するようになる。また、スキャナへの画像取り込みの指示の後に、少ないタイムラグで読み取り画像をユーザは見ることができるようになる。また、ＣＤ−ＲＷからのデータの読み取りや、ＣＤ−ＲＷへのデータの書き込みを高速に行うことが可能になる。
【０１９９】
なお本実施形態のデータ転送制御装置を適用できる電子機器としては、上記以外にも例えば、種々の光ディスクドライブ（ＣＤ−ＲＯＭ、ＤＶＤ）、光磁気ディスクドライブ（ＭＯ）、ハードディスクドライブ、ＴＶ、ＶＴＲ、ビデオカメラ、オーディオ機器、電話機、プロジェクタ、パーソナルコンピュータ、電子手帳、ワードプロセッサなど種々のものを考えることができる。
【０２００】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０２０１】
例えば、本発明のデータ転送制御装置の構成は、図６、図７、図１５に示す構成に限定されるものではなく、種々の変形実施が可能である。
【０２０２】
また本実施形態では、ＵＳＢのＢｕｌｋ−Ｏｎｌｙ仕様への適用例を説明したが、本発明が適用されるのは、ＵＳＢのＢｕｌｋ−Ｏｎｌｙ仕様に限定されるものではない。
【０２０３】
また、本発明は、ＵＳＢ２．０でのデータ転送に適用されることが特に望ましいが、これに限定されるものではない。例えばＵＳＢ２．０と同様の思想に基づく規格やＵＳＢ２．０を発展させた規格におけるデータ転送にも本発明は適用できる。
【図面の簡単な説明】
【図１】図１（Ａ）、（Ｂ）、（Ｃ）、（Ｄ）は、ＵＳＢのエンドポイントやトランザクション構成について説明するための図である。
【図２】図２（Ａ）、（Ｂ）は、ＣＢＩ仕様とＢｕｌｋ−Ｏｎｌｙ仕様について説明するための図である。
【図３】ＣＢＷのフォーマットについて示す図である。
【図４】ＣＳＷのフォーマットについて示す図である。
【図５】図５（Ａ）、（Ｂ）は、Ｂｕｌｋ−Ｏｎｌｙにおけるデータの書き込み処理、読み出し処理について説明するための図である。
【図６】本実施形態のデータ転送制御装置の構成例を示す図である。
【図７】本実施形態のデータ転送制御装置の詳細な接続例を示す図である。
【図８】図８（Ａ）、（Ｂ）、（Ｃ）、（Ｄ）は、ＯＵＴトランザクション、ＰＩＮＧトランザクションについて説明するためのタイミング波形図である。
【図９】図９（Ａ）、（Ｂ）、（Ｃ）は、ＩＮトランザクションについて説明するためのタイミング波形図である。
【図１０】ＨＤＤへの送信時におけるＤＭＡ転送について説明するためのタイミング波形図である。
【図１１】ＨＤＤからの受信時におけるＤＭＡ転送について説明するためのタイミング波形図である。
【図１２】ＯＵＴトランザクション（第１の方向のデータ転送）における本実施形態の動作について説明するためのタイミング波形図である。
【図１３】ＩＮトランザクション（第２の方向のデータ転送）における本実施形態の動作について説明するためのタイミング波形図である。
【図１４】ショートパケットを自動送信する手法について説明するためのタイミング波形図である。
【図１５】本実施形態のデータ転送制御装置の詳細な他の接続例を示す図である。
【図１６】ショートパケットの存在をファームウェアに通知する手法について説明するためのタイミング波形図である。
【図１７】図１７（Ａ）、（Ｂ）は、比較例と本実施形態のファームウェアの処理を示すフローチャートである。
【図１８】ショートパケットの存在をファームウェアに通知する手法におけるファームウェアの処理を示すフローチャートである。
【図１９】図１９（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の内部ブロック図の例である。
【図２０】図２０（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の外観図の例である。
【符号の説明】
２０    トランシーバマクロ
２２    トランシーバ回路
２４    クロック生成回路
３０    ＳＩＥ
３２    パケットハンドラ回路
３３    ＣＲＣ処理回路
３４    サスペンド＆レジューム回路
３６    トランザクション管理回路
４０    エンドポイント管理回路
４１    残りデータサイズカウンタ
５０    バッファ管理回路
６０    バッファ
６２    データ記憶領域
７０    バルク転送管理回路
８０    ＤＭＡＣ
８２    ＤＭＡカウンタ
【図１】
0003870717.tif 000002
【図２】
0003870717.tif 000003
【図３】
0003870717.tif 000004
【図４】
0003870717.tif 000005
【図５】
0003870717.tif 000006
【図６】
0003870717.tif 000007
【図７】
0003870717.tif 000008
【図８】
0003870717.tif 000009
【図９】
0003870717.tif 000010
【図１０】
0003870717.tif 000011
【図１１】
0003870717.tif 000012
【図１２】
0003870717.tif 000013
【図１３】
0003870717.tif 000014
【図１４】
0003870717.tif 000015
【図１５】
0003870717.tif 000016
【図１６】
0003870717.tif 000017
【図１７】
0003870717.tif 000018
【図１８】
0003870717.tif 000019
【図１９】
0003870717.tif 000020
【図２０】
0003870717.tif 000021