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