(57)【要約】      （修正有）【課題】効率的なデータ転送制御を実現できるデータ転送制御装置、電子機器の提供。【解決手段】コマンドブロック領域とデータ領域とステータスブロック領域とが確保されるデータバッファのアクセス制御を行うバッファコントローラと、データ転送制御を行う転送コントローラを含む。転送コントローラは、自動バルク転送の実行が指示された場合にコマンドトランスポートのバルクＯＵＴ転送のトランザクションを実行してコマンドブロックデータを含むパケットを自動送信し、次にデータトランスポートのバルクＯＵＴ転送又はバルクＩＮ転送のトランザクションを実行して送信データを含むパケットの自動送信又は受信データを含むパケットの自動受信を行い、次にステータストランスポートのバルクＩＮ転送のトランザクションを実行してステータスブロックデータを含むパケットの自動受信を行う。【選択図】図９
2006215891.tif 000002
【特許請求の範囲】
【請求項１】
バスを介したデータ転送のためのデータ転送制御装置であって、
コマンドブロック領域とデータ領域とステータスブロック領域とが確保されるデータバッファのアクセス制御を行うバッファコントローラと、
データ転送制御を行う転送コントローラとを含み、
前記転送コントローラは、
自動バルク転送の実行が指示された場合に、コマンドトランスポートのバルクＯＵＴ転送のトランザクションを実行して、前記コマンドブロック領域に書き込まれたコマンドブロックデータを含むパケットを自動送信し、次に、データトランスポートのバルクＯＵＴ転送又はバルクＩＮ転送のトランザクションを実行して、前記データ領域に書き込まれた送信データを含むパケットの自動送信又は前記データ領域に書き込むべき受信データを含むパケットの自動受信を行い、次に、ステータストランスポートのバルクＩＮ転送のトランザクションを実行して、前記ステータスブロック領域に書き込むべきステータスブロックデータを含むパケットの自動受信を行うことを特徴とするデータ転送制御装置。
【請求項２】
請求項１において、
前記転送コントローラは、
前記コマンドブロック領域に書き込まれた前記コマンドブロックデータに基づいて、前記データトランスポートのトランザクションを制御することを特徴とするデータ転送制御装置。
【請求項３】
請求項２において、
前記転送コントローラは、
前記コマンドブロックデータのデータ転送長が０に設定されていた場合には、前記データトランスポートのトランザクションの実行を省略して、前記ステータストランスポートのトランザクションを実行することを特徴とするデータ転送制御装置。
【請求項４】
請求項２又は３において、
前記転送コントローラは、
前記コマンドブロックデータに基づいて、前記データトランスポートにおいてバルクＯＵＴ転送のトランザクションとバルクＩＮ転送のトランザクションのいずれを実行するかを決定することを特徴とするデータ転送制御装置。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記データバッファに確保されるチャネル領域のチャネル情報が設定されるチャネル情報レジスタを含み、
前記チャネル情報レジスタには、マックスパケットサイズとデバイスのファンクションアドレスとが前記チャネル情報として設定され、
前記データバッファには、前記データ領域が前記チャネル領域として確保され、
前記転送コントローラは、
前記チャネル情報レジスタに設定されるチャネル情報に基づいて、前記自動バルク転送を実行することを特徴とするデータ転送制御装置。
【請求項６】
請求項１乃至５のいずれかにおいて、
バルクＯＵＴ転送のエンドポイントを指定するＯＵＴエンドポイント番号と、バルクＩＮ転送のエンドポイントを指定するＩＮエンドポイント番号とが、自動バルク転送情報として設定される自動バルク転送情報レジスタを含み、
前記転送コントローラは、
前記データトランスポートにおいてバルクＯＵＴ転送のトランザクションを実行する場合には、前記ＯＵＴエンドポイント番号で指定されるエンドポイントに対して、前記送信データを含むパケットを自動送信し、前記データトランスポートにおいてバルクＩＮ転送のトランザクションを実行する場合には、前記ＩＮエンドポイント番号で指定されるエンドポイントから、前記受信データを含むパケットを自動受信することを特徴とするデータ転送制御装置。
【請求項７】
請求項１乃至６のいずれかにおいて、
前記ステータストランスポートにおいて受信されたステータスブロックデータを解析し、前記ステータスブロックデータのエラーを検出する解析回路を含むことを特徴とするデータ転送制御装置。
【請求項８】
請求項７おいて、
前記解析回路は、
前記ステータスブロックデータの複数のフィールドのうちのいずれかのフィールドにエラーが検出された場合に、前記ステータスブロックデータのエラーを処理部に通知することを特徴とするデータ転送制御装置。
【請求項９】
請求項８おいて、
前記ステータスブロックデータのエラーが通知された場合に、前記ステータスブロック領域に書き込まれた前記ステータスブロックデータを解析する前記処理部を含むことを特徴とするデータ転送制御装置。
【請求項１０】
請求項１乃至９のいずれかおいて、
前記転送コントローラは、
コマンドトランスポート、データトランスポート、ステータストランスポートの各トランスポートにおいてトランザクションエラーを検出した場合には、前記自動バルク転送の実行を停止し、エラーが発生したトランスポートを処理部に通知することを特徴とするデータ転送制御装置。
【請求項１１】
請求項１乃至１０のいずれかおいて、
前記コマンドブロック領域として第１、第２のコマンドブロック領域が前記データバッファに確保され、
前記転送コントローラは、
前記第１、第２のコマンドブロック領域のいずれか一方のコマンドブロック領域に対して処理部がコマンドブロックデータを書き込んでいる際に、他方のコマンドブロック領域に書き込まれたコマンドブロックデータに基づいて、前記自動バルク転送を実行することを特徴とするデータ転送制御装置。
【請求項１２】
請求項１乃至１１のいずれかおいて、
前記転送コントローラは、
自動バルク転送の実行が指示された場合に、コマンドトランスポートのバルクＯＵＴ転送のトランザクションの開始を指示する回路と、
開始したコマンドトランスポートのバルクＯＵＴ転送のトランザクションが完了した場合に、データトランスポートの転送方向とデータトランスポートの有無の情報に基づいて、データトランスポートのバルクＯＵＴ転送のトランザクションの実行、データトランスポートのバルクＩＮ転送のトランザクションの実行、或いはデータトランスポート無しのいずれかを選択する回路と、
データトランスポートのバルクＯＵＴ転送のトランザクションの実行が選択された場合には、データトランスポートのバルクＯＵＴ転送のトランザクションの開始を指示し、データトランスポートのバルクＩＮ転送のトランザクションの実行が選択された場合には、データトランスポートのバルクＩＮ転送のトランザクションの開始を指示する回路と、
開始したデータトランスポートのバルクＯＵＴ転送のトランザクション又はバルクＩＮ転送のトランザクションが完了した場合には、コマンドトランスポートのバルクＩＮ転送のトランザクションの開始を指示する回路とを含むことを特徴とするデータ転送制御装置。
【請求項１３】
請求項１乃至１２のいずれかおいて、
前記バスはＵＳＢ（Universal serial Bus）であり、
前記コマンドトランスポート、データトランスポート、ステータストランスポートは、マスストレージクラスのバルクオンリートランスポート規格のトランスポートであることを特徴とするデータ転送制御装置。
【請求項１４】
請求項１乃至１３のいずれかに記載のデータ転送制御装置と、
前記データ転送制御装置により転送されるデータを記憶するストレージと、
を含むことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送制御装置及び電子機器に関する。
【背景技術】
【０００２】
ＵＳＢ（Universal serial Bus）のデバイスは種々のクラスに分類される。そしてハードディスクドライブ（ＨＤＤ）や光ディスクドライブ（ＤＶＤ）などの大容量記憶装置はマスストレージと呼ばれるクラスに属し、このマスストレージクラスには、バルクオンリートランスポートと呼ばれるプロトコルが規格化されている。特開２００２−３４４５３７号公報には、このバルクオンリートランスポートのデータ転送制御を効率化する従来技術が開示されている。
【０００３】
しかしながら、上記従来技術は、ＵＳＢのデバイス側のデータ転送制御の効率化を図るものであり、ホスト側のデータ転送制御の効率化手法については開示されていない。
【０００４】
また、近年、携帯電話機や携帯型オーディオ機器などのペリフェラル機器に対して、ホスト機能を持たせる事への要望が強くなっている。従って、ホスト側のバルクオンリートランスポートのデータ転送制御についても、如何にして効率化するかが課題となる。
【特許文献１】特開２００２−３４４５３７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、効率的なデータ転送制御を実現できるデータ転送制御装置及び電子機器を提供することにある。
【課題を解決するための手段】
【０００６】
本発明は、バスを介したデータ転送のためのデータ転送制御装置であって、コマンドブロック領域とデータ領域とステータスブロック領域とが確保されるデータバッファのアクセス制御を行うバッファコントローラと、データ転送制御を行う転送コントローラとを含み、前記転送コントローラは、自動バルク転送の実行が指示された場合に、コマンドトランスポートのバルクＯＵＴ転送のトランザクションを実行して、前記コマンドブロック領域に書き込まれたコマンドブロックデータを含むパケットを自動送信し、次に、データトランスポートのバルクＯＵＴ転送又はバルクＩＮ転送のトランザクションを実行して、前記データ領域に書き込まれた送信データを含むパケットの自動送信又は前記データ領域に書き込むべき受信データを含むパケットの自動受信を行い、次に、ステータストランスポートのバルクＩＮ転送のトランザクションを実行して、前記ステータスブロック領域に書き込むべきステータスブロックデータを含むパケットの自動受信を行うデータ転送制御装置に関係する。
【０００７】
本発明によれば処理部（ファームウェア）等により自動バルク転送の実行が指示されると、コマンドトランスポート、データトランスポート（データトランスポート有りの場合）、ステータストランスポートのトランザクションが自動的に実行されて、各トランスポートのトランザクションに必要なパケットの自動送信又は自動受信（ファームウェアの介在無しの送信又は受信）が行われる。このように本発明では、自動バルク転送の実行の指示等を行うだけで、コマンドトランスポートの開始からステータストランスポートの完了までの一連の処理が転送コントローラにより自動的に行われる。従ってトランスポート単位で処理部が実行の開始指示等を行う手法に比べて、処理部等の処理負荷を軽減できる。
【０００８】
また本発明では、前記転送コントローラは、前記コマンドブロック領域に書き込まれた前記コマンドブロックデータに基づいて、前記データトランスポートのトランザクションを制御するようにしてもよい。
【０００９】
このようにすれば、データトランスポートについての個別的な設定を行わなくても、コマンドブロックデータに基づいてデータトランスポートのトランザクションを制御できるようになるため、処理部等の処理負荷を更に軽減できる。
【００１０】
また本発明では、前記転送コントローラは、前記コマンドブロックデータのデータ転送長が０に設定されていた場合には、前記データトランスポートのトランザクションの実行を省略して、前記ステータストランスポートのトランザクションを実行するようにしてもよい。
【００１１】
このようにすれば、データトランスポートの有無を簡素な処理で判断できるようになる。
【００１２】
また本発明では、前記転送コントローラは、前記コマンドブロックデータに基づいて、前記データトランスポートにおいてバルクＯＵＴ転送のトランザクションとバルクＩＮ転送のトランザクションのいずれを実行するかを決定するようにしてもよい。
【００１３】
このようにすればデータトランスポートでのトランザクション制御を簡素化できる。
【００１４】
また本発明では、前記データバッファに確保されるチャネル領域のチャネル情報が設定されるチャネル情報レジスタを含み、前記チャネル情報レジスタには、マックスパケットサイズとデバイスのファンクションアドレスとが前記チャネル情報として設定され、前記データバッファには、前記データ領域が前記チャネル領域として確保され、前記転送コントローラは、前記チャネル情報レジスタに設定されるチャネル情報に基づいて、前記自動バルク転送を実行するようにしてもよい。
【００１５】
このようにすれば、例えばバルクＯＵＴ転送とバルクＩＮ転送とでチャネル情報を共用化することが可能になり、処理の効率化や装置の小規模化を図れる。
【００１６】
また本発明では、バルクＯＵＴ転送のエンドポイントを指定するＯＵＴエンドポイント番号と、バルクＩＮ転送のエンドポイントを指定するＩＮエンドポイント番号とが、自動バルク転送情報として設定される自動バルク転送情報レジスタを含み、前記転送コントローラは、前記データトランスポートにおいてバルクＯＵＴ転送のトランザクションを実行する場合には、前記ＯＵＴエンドポイント番号で指定されるエンドポイントに対して、前記送信データを含むパケットを自動送信し、前記データトランスポートにおいてバルクＩＮ転送のトランザクションを実行する場合には、前記ＩＮエンドポイント番号で指定されるエンドポイントから、前記受信データを含むパケットを自動受信するようにしてもよい。
【００１７】
このようにすればデータトランスポートでのトランザクション制御を簡素化できる。
【００１８】
また本発明では、前記ステータストランスポートにおいて受信されたステータスブロックデータを解析し、前記ステータスブロックデータのエラーを検出する解析回路を含むようにしてもよい。
【００１９】
このようにすれば、処理部等によるステータスブロックデータの解析、エラー検出の処理負荷を軽減できる。
【００２０】
また本発明では、前記解析回路は、前記ステータスブロックデータの複数のフィールドのうちのいずれかのフィールドにエラーが検出された場合に、前記ステータスブロックデータのエラーを処理部に通知するようにしてもよい。
【００２１】
このようにすれば、簡素で小規模な構成の解析回路でステータスブロックデータのエラー検出処理を実現できるようになる。
【００２２】
また本発明では、前記ステータスブロックデータのエラーが通知された場合に、前記ステータスブロック領域に書き込まれた前記ステータスブロックデータを解析する前記処理部を含むようにしてもよい。
【００２３】
このようにすれば、ステータスブロックデータの解析、エラー検出の処理を、転送コントローラと処理部とで効率良く分担できるようになる。
【００２４】
また本発明では、前記転送コントローラは、コマンドトランスポート、データトランスポート、ステータストランスポートの各トランスポートにおいてトランザクションエラーを検出した場合には、前記自動バルク転送の実行を停止し、エラーが発生したトランスポートを処理部に通知するようにしてもよい。
【００２５】
このようにすれば、各トランスポートで発生するトランザクションエラーに対して、適正に対応できるようになる。
【００２６】
また本発明では、前記コマンドブロック領域として第１、第２のコマンドブロック領域が前記データバッファに確保され、前記転送コントローラは、前記第１、第２のコマンドブロック領域のいずれか一方のコマンドブロック領域に対して処理部がコマンドブロックデータを書き込んでいる際に、他方のコマンドブロック領域に書き込まれたコマンドブロックデータに基づいて、前記自動バルク転送を実行するようにしてもよい。
【００２７】
このようにすれば、データ転送の効率化や処理部等の処理負荷の軽減化を図れる。
【００２８】
また本発明では、前記転送コントローラは、自動バルク転送の実行が指示された場合に、コマンドトランスポートのバルクＯＵＴ転送のトランザクションの開始を指示する回路と、開始したコマンドトランスポートのバルクＯＵＴ転送のトランザクションが完了した場合に、データトランスポートの転送方向とデータトランスポートの有無の情報に基づいて、データトランスポートのバルクＯＵＴ転送のトランザクションの実行、データトランスポートのバルクＩＮ転送のトランザクションの実行、或いはデータトランスポート無しのいずれかを選択する回路と、データトランスポートのバルクＯＵＴ転送のトランザクションの実行が選択された場合には、データトランスポートのバルクＯＵＴ転送のトランザクションの開始を指示し、データトランスポートのバルクＩＮ転送のトランザクションの実行が選択された場合には、データトランスポートのバルクＩＮ転送のトランザクションの開始を指示する回路と、開始したデータトランスポートのバルクＯＵＴ転送のトランザクション又はバルクＩＮ転送のトランザクションが完了した場合には、コマンドトランスポートのバルクＩＮ転送のトランザクションの開始を指示する回路とを含むようにしてもよい。
【００２９】
また本発明では、前記バスはＵＳＢ（Universal serial Bus）であり、前記コマンドトランスポート、データトランスポート、ステータストランスポートは、マスストレージクラスのバルクオンリートランスポート規格のトランスポートであってもよい。
【００３０】
また本発明は、上記のいずれかに記載のデータ転送制御装置と、前記データ転送制御装置により転送されるデータを記憶するストレージとを含む電子機器に関係する。
【発明を実施するための最良の形態】
【００３１】
以下、本発明の実施形態について詳細に説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００３２】
１．ＵＳＢ
まずＵＳＢのデータ転送について説明する。ＵＳＢでは、図１（Ａ）に示すようなエンドポイント（ＥＰ０〜１５）がデバイス（ＵＳＢデバイス）側に用意される。ホストは、デバイスのファンクションアドレスとエンドポイント番号を指定することで、所望のエンドポイントへのデータ送信や、所望のエンドポイントからのデータ受信を自由に行うことができる。
【００３３】
ＵＳＢでは、転送（transfer）のタイプとして、コントロール転送、アイソクロナス転送、インタラプト転送、バルク転送などが定義されている。コントロール転送は、ホストとデバイス（ターゲット）との間でエンドポイント０を介して行われる制御用の転送モードである。アイソクロナス転送は、画像や音声のデータを定期的に転送するために用意された転送モードである。インタラプト転送は、比較的低い転送速度で少量のデータを定期的に転送するために用意された転送モードである。バルク転送は、不定期に発生する大量のデータを転送するために用意された転送モードである。
【００３４】
これらの各転送（transfer）は一連のトランザクションにより構成される。そしてトランザクションは図１（Ｂ）に示すように、トークンパケットと、オプショナルなデータパケットと、オプショナルなハンドシェークパケットにより構成される。
【００３５】
ＯＵＴトランザクション（ホストがデバイスにデータを出力するトランザクション）では、図１（Ｃ）に示すように、まず、ホストがデバイスに対してＯＵＴトークン（トークンパケット）を発行する。次に、ホストはデバイスに対してＯＵＴデータ（データパケット）を送信する。そして、デバイスは、ＯＵＴデータの受信に成功すれば、ホストに対してＡＣＫ（ハンドシェークパケット）を送信する。このようにすることで、ホストがデバイスにデータを出力する処理が実現される。
【００３６】
一方、ＩＮトランザクション（ホストがデバイスからデータを入力するトランザクション）では、図１（Ｄ）に示すように、まず、ホストがデバイスに対してＩＮトークンを発行する。そしてＩＮトークンを受信したデバイスは、ホストに対してＩＮデータを送信する。そしてホストは、ＩＮデータの受信に成功すると、デバイスに対してＡＣＫを送信する。このようにすることで、ホストがデバイスからデータを入力する処理が実現される。
【００３７】
なお図１（Ｃ）、（Ｄ）において、”Ｄ←Ｈ”は、ホストからデバイスに対して情報が転送されることを意味し、”Ｄ→Ｈ”は、デバイスからホストに対して情報が転送されることを意味する。
【００３８】
２．バルクオンリートランスポート
次に、ＵＳＢのバルクオンリートランスポートのプロトコルについて説明する。ハードディスクドライブや光ディスクドライブなどの大容量記憶装置は、マスストレージと呼ばれるクラスに属する。このマスストレージクラスには、バルクオンリートランスポートというプロトコルが規格化されている。
【００３９】
バルクオンリートランスポートでは、バルクＩＮ、バルクＯＵＴの２つのエンドポイントを用いてパケット転送が行われる。即ち、コマンドには、ＣＢＷ（Command Block Wrapper）と呼ばれる３１バイトのデータが使用され、バルクＯＵＴのエンドポイントを用いて転送される。データ転送には、転送方向に応じてバルクＩＮ、バルクＯＵＴのエンドポイントが使用される。コマンドに対するステータスには、ＣＳＷ（Command Status Wrapper）と呼ばれる１３バイトのデータが使用され、バルクＩＮのエンドポイントを用いて転送される。具体的には図２（Ａ）に示すように、デバイス（ＵＳＢデバイス）は、コントロール、バルクＯＵＴ、バルクＩＮのエンドポイントＥＰ０、１、２を用意する。エンドポイントＥＰ０ではコントロール転送が行われる。エンドポイントＥＰ１では、コマンドトランスポートのＣＢＷデータ（広義にはコマンドブロックデータ）と、データトランスポートのバルクＯＵＴデータの転送が行われる。エンドポイントＥＰ２では、ステータストランスポートのＣＳＷデータ（広義にはステータスブロックデータ）と、データトランスポートのバルクＩＮデータの転送が行われる。
【００４０】
図２（Ｂ）にＣＢＷのフォーマットを示す。ホストは、コマンドトランスポートのＣＢＷを用いてホストの意図（読み込み要求、書き込み要求など）をデバイスに伝える。ＣＢＷはバルクＯＵＴのエンドポイントを使用して転送される３１バイトのデータである。
【００４１】
図２（Ｂ）において、dCBWSignatureはＣＢＷであることを示す識別子である。dCBWTagはＣＢＷのタグとして使用される。このタグはＣＢＷとＣＳＷを結びつけるために使用される。dCBWDataTransferLengthは、ＣＢＷの後に続くデータの転送長を示す。転送すべきデータが無い場合には、dCBWDataTransferLengthは0x00000000の値に設定される。bmCBWFlagsはデータの転送方向を示す。bmCBWFlagsではビット７のみが使用され、ビット７が０ならば転送方向はＯＵＴ方向になり、ビット７が１ならばＩＮ方向になる。dCBWLUNには、ＣＢＷの送り先を示すデバイスの論理ユニット番号が設定される。bCBWCBLengthは、CBWCBのフィールドに格納する有効なコマンドパケット長を示す。CBWCBには、ストレージデバイスを制御する時に使用するコマンドが設定される。
【００４２】
図２（Ｃ）にＣＳＷのフォーマットを示す。デバイスは、ステータストランスポートのＣＳＷを用いてコマンドトランスポートに対する結果（ステータス）をホストに返す。ＣＳＷはバルクＩＮのエンドポイントを使用して転送される１３バイトのデータである。
【００４３】
図２（Ｃ）において、dCSWSignatureはＣＳＷであることを示す識別子である。dCSWTagはＣＳＷのタグとして使用される。具体的にはdCSWTagにはＣＢＷのdCBWTagと同じ値が設定される。dCSWDataResidueは、ＣＢＷのdCBWDataTransferLengthで指定されたデータ転送長（転送数）と、実際にデバイスが転送した有効なデータ長との差分が設定される。bCSWStatusには、コマンドトランスポートに対する処理結果を示す値が設定される。正常終了時にはbCSWStatusに0x00の値が設定され、エラー終了時には0x01の値が設定される。またデータ転送長が合わなかったり、転送方向が違っているなどのエラー（フェーズエラー）の場合には、0x02の値が設定される。
【００４４】
次に、バルクオンリートランスポートの送受信処理について、図３（Ａ）、（Ｂ）を用いて説明する。図３（Ａ）に示すように、ホストがデバイスにデータを送信（出力）する場合には、まずホストがＣＢＷをデバイスに送信するコマンドトランスポートが行われる。具体的には、ホストが、エンドポイントＥＰ１を指定するトークンパケットをデバイスに送信し、次に、ＣＢＷをデバイスのエンドポイントＥＰ１に送信する。このＣＢＷはライトコマンドを含む。そして、デバイスからホストにＡＣＫのハンドシェークパケットが返却されると、コマンドトランスポートが終了する。
【００４５】
コマンドトランスポートが終了するとデータトランスポートに移行する。このデータトランスポートでは、まずホストが、エンドポイントＥＰ１を指定するトークンパケットをデバイスに送信し、次に、ＯＵＴデータをデバイスのエンドポイントＥＰ１に送信する。そして、デバイスからホストにＡＣＫのハンドシェークパケットが返却されると、１つのトランザクションが終了する。そして、このようなトランザクションが繰り返され、ＣＢＷのdCBWDataTransferLength（図２（Ｂ）参照）で指定されるデータ長の分だけデータが送信されると、データトランスポートが終了する。
【００４６】
データトランスポートが終了するとステータストランスポートに移行する。このステータストランスポートでは、まず、ホストが、エンドポイントＥＰ２を指定するトークンパケットをデバイスに送信する。すると、デバイスが、エンドポイントＥＰ２にあるＣＳＷをホストに送信する。そして、ホストからデバイスにＡＣＫのハンドシェークパケットが返却されると、ステータストランスポートが終了する。
【００４７】
一方、図３（Ｂ）に示すように、ホストがデバイスからデータを受信（入力）する場合は、まずホストがエンドポイントＥＰ１を指定するトークンパケットをデバイスに送信し、次に、ＣＢＷをデバイスのエンドポイントＥＰ１に送信する。このＣＢＷはリードコマンドを含む。そして、デバイスからホストにＡＣＫのハンドシェークパケットが返却されると、コマンドトランスポートが終了する。
【００４８】
コマンドトランスポートが終了するとデータトランスポートに移行する。このデータトランスポートでは、まず、ホストが、エンドポイントＥＰ２を指定するトークンパケットをデバイスに送信する。そしてホストは、デバイスのエンドポイントＥＰ２にあるＩＮデータを受信し、ホストがデバイスにＡＣＫのハンドシェークパケットを返却すると、１つのトランザクションが終了する。そして、このようなトランザクションが繰り返され、ＣＢＷのdCBWDataTransferLengthで指定されるデータ長の分だけデータが受信されると、データトランスポートが終了する。
【００４９】
データトランスポートが終了するとステータストランスポートに移行する。このステータストランスポートの処理は図３（Ａ）のデータの送信処理の場合と同様である。
【００５０】
以上のようにバルクオンリートランスポートは、コマンド、データ、ステータスという複数のトランスポートにより構成されている。従って、ＣＰＵ上で動作するファームウェアは、各トランスポート毎に情報設定や実行指示を行う必要があり、ファームウェアの処理負荷が増加する。特に、携帯電話や携帯型オーディオ機器（ＨＤＤプレーヤ）などに組み込まれるＣＰＵは、ＰＣ（パーソナルコンピュータ）に組み込まれるＣＰＵに比べて処理能力が一般的に低い。従って、バルクオンリートランスポートに対するファームウェアの処理負荷が増加すると、データ転送の高速化の妨げとなり、機器全体のパフォーマンスの低下を招く。
【００５１】
３．データ転送制御装置の構成
図４に、以上のような課題を解決できる本実施形態のデータ転送制御装置の構成例を示す。このデータ転送制御装置１２０は、トランシーバ１０、転送コントローラ４０、レジスタ部８０、バッファコントローラ９０、データバッファ１００、ストレージＩ／Ｆ（インターフェース）コントローラ１１０、ＣＰＵＩ／Ｆコントローラ１１２、ＤＭＡ（Direct Memory Access）コントローラ１１４を含む。なお本実施形態のデータ転送制御装置１２０は、これらの一部を省略する構成としてもよく、例えばトランシーバ１０やデータバッファ１００などを含まない構成としてもよい。或いはＣＰＵ１４０を含む構成としてもよい。
【００５２】
トランシーバ１０（デュアルトランシーバ）は、差動信号（ＤＰ、ＤＭ）を用いてＵＳＢ（広義にはバス或いはシリアルバス）のデータを送受信するための回路であり、ホストトランシーバ２０、デバイストランシーバ３０を含む。
【００５３】
ホストトランシーバ２０は、アナログフロントエンド回路（物理層回路）及び高速ロジック回路を有し、ＵＳＢのＨＳモード（４８０Ｍｂｐｓ）、ＦＳモード（１２Ｍｂｐｓ）、ＬＳモード（１．５Ｍｂｐｓ）をサポートする。
【００５４】
デバイストランシーバ３０は、アナログフロントエンド回路（物理層回路）及び高速ロジック回路を有し、ＵＳＢのＨＳモード、ＦＳモードをサポートする。このデバイストランシーバ３０としてはＵＴＭＩ（USB2.0 Transceiver Macrocell Interface）仕様に準拠した回路を用いることができる。
【００５５】
転送コントローラ４０は、ＵＳＢを介したデータ転送を制御するためのコントローラであり、トランザクション層やリンク層などのデータ転送制御を行う。この転送コントローラ４０は、ホストコントローラ５０、デバイスコントローラ６０、ポートセレクタ７０を含む。なおこれらの一部を省略する構成としてもよい。
【００５６】
ホストコントローラ５０（ホストSerial Interface Engine）は、ホストモード時のデータ転送を制御する。具体的にはホストコントローラ５０は、トランザクションのスケジューリング（発行）やトランザクションの管理やパケットの生成＆解析などを行う。またサスペンド、レジューム、リセット等のバスイベントを生成する。更にバスの接続・切断状態の検出やＶＢＵＳの制御などを行う。
【００５７】
ホストコントローラ５０（広義には転送コントローラ）は解析回路５２を含む。この解析回路５２（ＣＢＷ解析回路、ＣＳＷ解析回路）は、ＣＢＷ領域（コマンドブロック領域）に書き込まれたＣＢＷデータ（コマンドブロックデータ）を解析する。このＣＢＷデータの解析結果に基づいて、データトランスポートのトランザクションが制御される。また解析回路５２は、ステータストランスポートにおいて受信されたＣＳＷデータ（ステータスブロックデータ）を解析し、ＣＳＷデータのエラーを検出する。具体的には解析回路５２は、ＣＳＷデータの複数のフィールド（図２（Ｃ）のdCSWSignature、dCSWTag、bCSWStatus）のいずれかのフィールドにエラーが検出された場合に、ＣＳＷデータのエラーをＣＰＵ１４０（ファームウェア）に割り込み等で通知する。するとＣＰＵ１４０は、ＣＳＷ領域に書き込まれたＣＳＷデータを更に詳細に解析する。
【００５８】
デバイスコントローラ６０（デバイスSerial Interface Engine）は、デバイスモード時のデータ転送を制御する。具体的にはデバイスコントローラ６０は、トランザクションの管理やパケットの生成＆解析などを行う。またサスペンド、レジューム、リセット等のバスイベントを制御する。
【００５９】
ポートセレクタ７０は、ホストモードとデバイスモードのいずれかを選択して有効にするためのセレクタである。即ち図４のデータ転送制御装置１２０は、アップストリームポートＵＰＰＴ（広義には第１のポート）とダウンストリームポートＤＷＰＴ（広義には第２のポート）の両方を備えている。そしてレジスタ等の設定によりホストモードが選択されると、ポートセレクタ７０はホストコントローラ５０、ホストトランシーバ２０を選択（イネーブル）する。そしてホストコントローラ５０、ホストトランシーバ２０により、ダウンストリームポートＤＷＰＴに接続されたデバイス（他の電子機器）との間でのデータの送受信が実現される。
【００６０】
一方、レジスタ等の設定によりデバイスモードが選択されると、ポートセレクタ７０はデバイスコントローラ６０、デバイストランシーバ３０を選択（イネーブル）する。そしてデバイスコントローラ６０、デバイストランシーバ３０により、アップストリームポートＵＰＰＴに接続されたホスト（他の電子機器）との間でのデータの送受信が実現される。
【００６１】
レジスタ部８０は、チャネル情報レジスタ８２、バルクオンリーサポート情報レジスタ８４、ステータスレジスタ８６を含む。これらのレジスタはＲＡＭなどのメモリにより構成してもよいし、フリップフロップなどにより構成してもよい。
【００６２】
チャネル情報レジスタ８２には、データバッファ１００に確保されるチャネル領域（複数のチャネル領域）のチャネル情報（各チャネル情報）が設定される。このチャネル情報（転送設定情報）としては、マックスパケットサイズや、ＵＳＢに接続されるデバイスのファンクションアドレス（ＵＳＢアドレス）や、転送速度や、トグルシーケンスビットや、データバッファ１００での各チャネル領域のスタートドレス、エンドアドレスなどがある。
【００６３】
バルクオンリーサポート情報レジスタ８４には、バルクオンリーサポート転送のために必要なバルクオンリーサポート情報（広義には自動バルク転送情報）が設定される。このバルクオンリーサポート情報としては、バルクＯＵＴ転送のエンドポイントを指定するＯＵＴエンドポイント番号や、バルクＩＮ転送のエンドポイントを指定するＩＮエンドポイント番号や、ＯＵＴエンドポイントトグルシーケンスや、ＩＮエンドポイントトグルシーケンスなどがある。
【００６４】
ステータスレジスタ８６には、データ転送制御装置１２０やデータ転送の各種ステータス情報が表示（indicate）される。このステータス情報としては、バルクオンリーサポート完了の割り込みステータス（割り込み要因）や、バルクオンリーサポート停止の割り込みステータスや、エラーが発生したトランスポートを示す情報や、コンディションコードや、チェンジコンディションの割り込みステータスなどがある。
【００６５】
バッファコントローラ９０は、データバッファ１００への領域（チャネル領域、エンドポイント領域等）の確保（allocate）処理や、データバッファ１００へのアクセス制御（ライト、リード制御）を行う。具体的には、データバッファ１００に、ＣＢＷ領域（コマンドブロック領域）やチャネル領域（データ領域）やＣＳＷ領域（ステータスブロック領域）を確保するための処理（スタートアドレス、エンドアドレスの設定等）を行う。またデータバッファ１００に確保される各領域のポインタ制御、ＦＩＦＯ制御などを行う。
【００６６】
データバッファ１００（ＦＩＦＯ、パケットバッファ）は、ＵＳＢ（シリアルバス）を介して転送されるデータ（送信データ、受信データ）を一時的に格納（バッファリング）するためのバッファである。このデータバッファ１００は、ＲＡＭなどのメモリにより実現できる。
【００６７】
ストレージＩ／Ｆコントローラ１１０は、ＨＤＤなどのマスストレージクラスのストレージ１３０とのＩ／Ｆ（インターフェース）制御を行う。具体的にはＩＤＥ（ＡＴＡ／ＡＴＡＰＩ）のＩ／Ｆ制御を行う。またＣＰＵＩ／Ｆコントローラ１１２は、ＣＰＵ１４０（広義には処理部）とのＩ／Ｆ制御を行う。これによりＣＰＵ１４０によるレジスタアクセスなどが可能になる。ＤＭＡコントローラ１１４は、ＣＰＵＩ／ＦでのＤＭＡ制御を行う。これによりＣＰＵ１４０によるデータバッファ１００へのアクセスが可能になる。
【００６８】
４．チャネル
図５、図６にデータバッファ１００に確保される領域（area）の例を示す。図５に示すようにホストモード時には、ＳＥＴＵＰ、ＣＢＷ０（第１のコマンドブロック）、ＣＢＷ１（第２のコマンドブロック）、ＣＳＷ（ステータスブロック）、ＣＨ０〜ＣＨｈ（チャネル）の領域がデータバッファ１００に確保される。ここでＳＥＴＵＰ、ＣＢＷ０、ＣＢＷ１、ＣＳＷは固定サイズの領域である。またＣＨ０〜ＣＨｈは、スタートアドレスとエンドアドレスによりその領域サイズが可変に設定され、ＦＩＦＯとして制御される領域である。そしてＣＨ０はコントロール転送にのみ使用される領域である。またＣＨａ〜ＣＨｃはバルク転送に使用される領域であり、ＣＨｄ〜ＣＨｆはバルク及びインタラプト転送に使用される領域であり、ＣＨｇ、ＣＨｈはバルク、インタラプト及びアイソクロナス転送に使用される領域である。
【００６９】
図６に示すようにデバイスモード時には、ＥＰ０〜ＥＰｃ（エンドポイント）、ディスクリプタ、ＣＢＷ、ＣＳＷの領域がデータバッファ１００に確保される。
【００７０】
本明細書では、パイプと１対１に対応するホスト側のチャネル領域（バッファ領域、パイプ領域）と、そのチャネル領域を介して行われる転送のための各種設定レジスタ（チャネル情報レジスタ）を、まとめて「チャネル」と呼ぶことにする。このチャネルには、ＩＲＰ（I/O Request Packet）単位で転送情報（チャネル情報）が設定される。そして設定された転送情報に基づいて、ＩＲＰ分のデータの転送が自動的に複数のトランザクションに分割されて実行される。チャネルは、ＩＲＰ単位で切り替えることができるため、１本のチャネルで複数のエンドポイントに対応することが可能になる。
【００７１】
具体的にはファームウェア（Ｆ／Ｗ）は、チャネル領域の確保及び転送情報（チャネル情報）の設定を行った後、転送実行を指示する。そしてファームウェアは、転送実行を指示した後は、ＩＲＰ分のデータの転送が完了するまで、チャネル領域にデータを書き込んだり（ＯＵＴ転送時）、チャネル領域からデータを読み出す（ＩＮ転送時）といった処理を繰り返す。
【００７２】
一方、ハードウェア（Ｈ／Ｗ）は、ＩＲＰ分のデータ転送を自動的に複数のトランザクションに分割して実行する。そしてハードウェア（チャネル）は、転送が完了すると、割り込みによってファームウェアに対して通知する。
【００７３】
図７に、ＵＳＢのバルクオンリートランスポートに対応したストレージデバイスであるＨＤＤを１台だけデータ転送制御装置に接続した場合のチャネルの使用例を示す。コントロール転送は、コントロール転送に専用のチャネルＣＨ０を使用して行われる。一方、バルクオンリートランスポート転送は、バルク転送用（汎用）のチャネルＣＨａを使用して行われる。即ちチャネルＣＨａを使用して、ＨＤＤのバルクＩＮ、バルクＯＵＴのエンドポイントとの間でバルクＩＮ転送、バルクＯＵＴ転送が行われる。
【００７４】
なお図７では１台のストレージ（ＨＤＤ）をデータ転送制御装置に接続した場合を示しているが、複数台のストレージを接続することも可能である。この場合には、複数台のストレージでチャネルＣＨ０を共用（時分割）して、コントロール転送を行う。また複数台のストレージでチャネルＣＨａを共用（時分割）して、バルクオンリートランスポートのデータ転送を行う。即ちチャネルＣＨａを用いて第１のストレージのバルクＩＮエンドポイント、バルクＯＵＴエンドポイントとの間のバルクＩＮ転送、バルクＯＵＴ転送を行うと共に、チャネルＣＨａを用いて第２のストレージのバルクＩＮエンドポイント、バルクＯＵＴエンドポイントとの間のバルクＩＮ転送、バルクＯＵＴ転送を行うようにする。
【００７５】
また、図８には、ＵＳＢのコミュニケーションデバイスのクラスに対応したコミュニケーションデバイスＣＤ（無線ＬＡＮアダプタ等）をデータ転送制御装置に接続した場合のチャネルの使用例を示す。この場合には、チャネルＣＨｂ、ＣＨＣｃを用いてバルクＩＮ転送、バルクＯＵＴ転送を行い、チャネルＣＨｄを用いてインタラプト転送を行う。
【００７６】
５．バルクオンリーサポート転送（自動バルク転送）
本実施形態のデータ転送制御装置は、図９に示すように、ＵＳＢのバルクオンリートランスポートの一連のコマンドトランスポート、データトランスポート、ステータストランスポートの実行、管理を自動的に行う機能を有している。
【００７７】
具体的には本実施形態では、データバッファ１００にＣＢＷ（コマンドブロック）領域、ＣＨａ（チャネル、データ）領域、ＣＳＷ（ステータスブロック）領域が確保される。そして図９に示すようにファームウェア（Ｆ／Ｗ）により、チャネル情報やバルクオンリーサポート情報が設定され、バルクオンリーサポート転送（自動バルク転送）の実行（開始）が指示されると、ホストコントローラ５０（転送コントローラ）は、コマンドトランスポートのバルクＯＵＴ転送のトランザクションを実行（発行）して、ＣＢＷ（ＣＢＷ０、ＣＢＷ１）領域に書き込まれたＣＢＷデータを含むパケットを送信する。次にホストコントローラ５０は、データトランスポートのバルクＯＵＴ転送又はバルクＩＮ転送のトランザクションを実行して、ＣＨａ領域に書き込まれた送信データを含むパケットの送信又はＣＨａ領域に書き込むべき受信データを含むパケットの受信を行う。次にホストコントローラ５０は、ステータストランスポートのバルクＩＮ転送のトランザクションを実行して、ＣＳＷ領域に書き込むべきＣＳＷデータを含むパケットの受信を行う。
【００７８】
図１０に本実施形態の比較例の手法を示す。この比較例では、コマンドトランスポート、データトランスポート、ステータストランスポートの各トランスポート毎に、ファームウェアが、情報設定や実行指示を行う必要がある。このため、ファームウェアの処理負荷が重くなる。
【００７９】
これに対して図９の本実施形態によれば、各トランスポートの情報設定や実行指示をファームウェアが個別に行う必要がなくなるため、ファームウエアの処理負荷を軽減できる。従って、ＣＰＵ能力が低い携帯電話機や携帯型オーディオ機器などのペリフェラル機器にホスト機能を持たせようとした場合に、これらのペリフェラル機器に組み込むのに最適なデータ転送制御装置を提供できるようになる。
【００８０】
６．処理、動作の詳細
次に本実施形態の処理、動作の詳細を説明する。図１１は、バルクオンリーサポート機能をオンにした場合のファームウェアの処理例を示すフローチャートである。
【００８１】
まずファームウェアは、チャネル領域を既に確保している場合には、チャネル領域のデータのクリア［FIFOClr］を指示し、未だ確保していない場合には、チャネル領域の確保［StartAdrs，EndAdrs］を指示する（ステップＳ１、Ｓ２、Ｓ３）。即ち各チャネル領域のスタートアドレスやエンドアドレスを指示し、これらのスタートアドレスやエンドアドレスでその領域が指定されるチャネル領域の確保を指示する。
【００８２】
次にファームウェアは、チャネル情報レジスタ８２にチャネル情報（転送設定情報）を設定する（ステップＳ４）。即ち、ＵＳＢデバイスのアドレスであるファンクションアドレス［FuncAdrs］や、チャネルを介して転送されるパケットのマックスパケットサイズ［MaxPktSize］や、トグルシーケンスビット［Toggle］などのチャネル情報を設定する。
【００８３】
次にファームウェアは、バルクオンリーサポート情報（自動バルク転送情報）を設定する（ステップＳ５）。即ち、転送相手となるデバイスのＯＵＴエンドポイントを指定するＯＵＴエンドポイント番号［OUT_EP_Number］や、ＯＵＴエンドポイントトグルシーケンス［OUT_Toggle］や、転送相手となるデバイスのＩＮエンドポイントを指定するＩＮエンドポイント番号［IN_EP_Number］や、ＩＮエンドポイントトグルシーケンス［IN_Toggle］などのバルクオンリーサポート情報を設定する。
【００８４】
次にファームウェアは、ＣＢＷ０又はＣＢＷ１の領域にＣＢＷデータ（３１バイト）を設定する（ステップＳ６）。即ち図２（Ｂ）に示すＣＢＷデータを書き込む。そして、ＣＢＷ０、ＣＢＷ１の領域のうち、ＣＢＷデータを設定した方のＣＢＷイネーブルをセットする［CBW0/1_Enb］（ステップＳ７）。
【００８５】
次にファームウェアは、ＤＭＡ転送を用いる場合にはＤＭＡバスの接続［JoinDMA］を指示する（ステップＳ８、Ｓ９）。そして、バルクオンリーサポート転送の実行［BO_SupportGo］を指示する（ステップＳ１０）。そしてホストコントローラ５０（データ転送制御装置）によりバルクオンリーサポート完了の割込みが発行されるのをウェイトする（ステップＳ１１）。
【００８６】
図１２は、バルクオンリーサポート機能をオフにした場合のファームウェアの処理例を示すフローチャートである。
【００８７】
まずファームウェアは、チャネル領域を既に確保している場合には、チャネル領域のデータのクリアを指示し、未だ確保していない場合には、チャネル領域の確保を指示する（ステップＳ２１、Ｓ２２、Ｓ２３）。次に、ファンクションアドレス、エンドポイント番号、ＰＩＤ、トータルサイズ、マックスパケットサイズ、トグルシーケンスビットなどのチャネル情報を設定する（ステップＳ２４）。そしてＤＭＡ転送を用いる場合にはＤＭＡバスの接続を指示し、トランザクションの実行を指示する（ステップＳ２５、Ｓ２６、Ｓ２７）。そして全トランザクション完了の割り込みが発行されるのをウェイトし、割り込みが発行され、ステータストランスポートの転送が行われた場合には、ＣＳＷデータをチェックする（ステップＳ２８、Ｓ２９、Ｓ３０）。
【００８８】
図１２の比較例では、ファームウェアは、コマンド、データ、ステータスの全てのトランスポートにおいて、ステップＳ２１〜ステップＳ２８等の処理を行う必要があるため、ファームウェアの処理負荷が過大になる。
【００８９】
これに対して図１１の本実施形態では、ファームウェアがチャネル情報やバルクオンリーサポート情報やＣＢＷデータを設定して（ステップＳ４、Ｓ５、Ｓ６）、バルクオンリーサポート転送の実行を指示すると、コマンド、データ、ステータスのトランスポートが自動的に順次実行される。そして最後のステータストランスポートが終了すると、ホストコントローラ５０がバルクオンリーサポート完了の割り込みを発生して、ファームウェアに通知する。
【００９０】
このようにすれば、ファームウェアは、情報設定や実行指示を行った後、バルクオンリーサポート完了の割り込みが発生するまでの期間を、他の処理に使用できるようになる。これによりファームウェア処理やデータ転送処理の効率化を図れる。
【００９１】
なお図１３に本実施形態で使用されるレジスタとその機能を例示する。バルクオンリーサポート実行レジスタは、バルクオンリーサポート転送の実行指示を行うためのレジスタである（図１１のステップＳ１０参照）。ＣＢＷイネーブルレジスタは、ＣＢＷ領域の設定が有効であることを示すためのレジスタである。ＣＢＷイネーブルセット、ＣＢＷイネーブルクリアのレジスタは、ＣＢＷイネーブルをセット、クリアするためのレジスタである（ステップＳ７参照）。ＯＵＴエンドポイントトグルシーケンス、ＯＵＴエンドポイント番号のレジスタは、ＯＵＴエンドポイントのトグルシーケンスの初期値、ＯＵＴエンドポイント番号を設定するためのレジスタであり、ＩＮエンドポイントトグルシーケンス、ＩＮエンドポイント番号のレジスタは、ＩＮエンドポイントのトグルシーケンスの初期値、ＩＮエンドポイント番号を設定するためのレジスタである（ステップＳ５参照）。バルクオンリーサポート実行結果レジスタは、バルクオンリーサポート転送の実行結果を示すためのレジスタである。トランザクションステータス、トランザクションコンディションコードのレジスタは、トランザクション結果、トランザクション結果の詳細を示すためのレジスタである。トランスポートステータスレジスタは、実行中のトランスポートを示したり、トランスポートがエラーで中止された場合にエラーが発生したトランスポートを示すためのレジスタである。
【００９２】
図１４、図１５、図１６は、本実施形態の動作を説明するためのフローチャートである。図１１のステップＳ１０に示すようにファームウェア（処理部）によりバルクオンリーサポート転送の実行指示が行われると、ホストコントローラ５０は、コマンドトランスポートのトランザクションを実行（発行）する（ステップＳ３１）。具体的には、ＯＵＴエンドポイント番号で指定されるエンドポイント（デバイスのバルクＯＵＴエンドポイント）に対して、バルクＯＵＴ転送のトランザクションを発行し、ＣＢＷ領域に書き込まれたＣＢＷデータを送信する（ステップＳ３２）。更に具体的には、ＯＵＴエンドポイント番号で指定されるエンドポイントに対してＯＵＴトークンのパケットを送信し、その後、図２（Ｂ）のＣＢＷデータを含むパケットを送信する。そしてＡＣＫのハンドシェークパケットの受信をウェイトする。
【００９３】
コマンドトランスポートが終了すると、ホストコントローラ５０はデータトランスポートのトランザクションを実行する（ステップＳ３３）。具体的には、ＣＢＷデータのdCBWDataTransferLengthが０ｘ００００００００である場合には、図１５のステップＳ３９に移行する（ステップＳ３４）。一方、DataTransferLengthが０x００００００００ではない場合には、ホストコントローラ５０はＣＢＷデータのbmCBWFlagsのビット７をチェックする（ステップＳ３５）。そしてbmCBWFlagsのビット７が０である場合には、ＯＵＴエンドポイント番号で指定されるエンドポイントに対しバルクＯＵＴ転送のトランザクションを発行し、ＣＨａ領域（データ領域）に書き込まれた送信データを送信する（ステップＳ３６）。具体的には、ＯＵＴエンドポイント番号で指定されるエンドポイントに対してＯＵＴトークンのパケットを送信し、その後、送信データを含むパケットを送信する。そしてＡＣＫのハンドシェークパケットの受信をウェイトする。
【００９４】
一方、bmCBWFlagsのビット７が１である場合には、ホストコントローラ５０はＩＮエンドポイント番号で指定されるエンドポイントに対しバルクＩＮトランザクションを発行し、受信したデータをＣＨａ領域に書き込む（ステップＳ３７）。具体的には、ＩＮエンドポイント番号で指定されるエンドポイントに対してＩＮトークンのパケットを送信する。そして、その後、受信データを含むパケットを受信すると、ＡＣＫのハンドシェークパケットをデバイスに送信すると共に受信データをＣＨａ領域に書き込む。
【００９５】
次にホストコントローラ５０は、dCBWDataTransferLengt分のデータ転送が完了したか否かを判断し（ステップＳ３８）、完了していない場合にはステップＳ３５に戻る。一方、完了した場合には、データトランスポートが終了したと判断し、ステータストランスポートのトランザクションを実行する（図１５のステップＳ３９）。具体的には、ＩＮエンドポイント番号で指定されるエンドポイントに対しバルクＩＮトランザクションを発行し、受信したＣＳＷデータをＣＳＷ領域に書き込む（ステップＳ４０）。更に具体的には、ＩＮエンドポイント番号で指定されるエンドポイントに対してＩＮトークンのパケットを送信する。そして、その後、ＣＳＷデータを含むパケットを受信すると、ＡＣＫのハンドシェークパケットをデバイスに送信すると共にＣＳＷデータをＣＳＷ領域に書き込む。
【００９６】
次にホストコントローラ５０（解析回路５２）はＣＳＷデータを解析し、ＣＳＷデータのエラーを検出する（ステップＳ４１）。具体的には、ＣＳＷデータのデータ長が１３バイトか否か、ＣＳＷのdCSWSignatureが０x５３４２５３５５か否か、ＣＳＷのdCSWTagがＣＢＷのdCBWTagと一致したか否か、ＣＳＷのｂCSWStatusが０x００か否かをチェックする（ステップＳ４２〜Ｓ４５）。
【００９７】
そしてステップＳ４２〜Ｓ４５の全てにおいてエラーが検出されなかった場合には、ＣＢＷイネーブルを自動クリアし、バルクオンリーサポート完了割り込みを発行して、ファームウェアに通知する（ステップＳ４６）。
【００９８】
一方、ステップＳ４２〜Ｓ４５のいずれかにおいてエラーが検出された場合には、バルクオンリーサポート実行（レジスタのビット）を自動クリアして、バルクオンリーサポート転送を停止し、バルクオンリーサポート停止割り込みを発行して、ファームウェアに通知する（ステップＳ４７）。
【００９９】
なお本実施形態では、各トランスポートにおいてトランザクションエラーが検出された場合には（図１６のステップＳ５１）、ホストコントローラ５０は、バルクオンリーサポート実行を自動クリアして、バルクオンリーサポート転送を停止し、バルクオンリーサポート停止割り込みを発行して、ファームウェアに通知する（ステップＳ５２）。またトランスポートステータスレジスタを用いて、エラーが発生したトランスポートを表示する（ステップＳ５３）。またコンディションコードのレジスタの値を適切な値に設定し、チェンジコンディション割り込みを発行して、ファームウェアに通知する（ステップＳ５４）。
【０１００】
以上のように本実施形態では、ＣＢＷ（コマンドブロック）領域に書き込まれたＣＢＷデータに基づいて、データトランスポートのトランザクションを制御（管理、実行）している。
【０１０１】
即ち図１４のステップＳ３４や図１７のＡ１に示すように、ＣＢＷデータのデータ転送長dCBWDataTransferLengthが０である場合には、データトランスポートのトランザクションの実行を省略して、ステータストランスポートのトランザクションを実行する。
【０１０２】
また図１４のステップＳ３６、Ｓ３７、図１７のＡ２に示すように、ＣＢＷデータのbmCBWFlagsのビット７に基づいて、データトランスポートにおいてバルクＯＵＴ転送のトランザクションとバルクＩＮ転送のトランザクションのいずれを実行するかを決定している。
【０１０３】
例えば図１０の比較例では、データトランスポートのトランザクション制御は、データトランスポートの実行前に設定される情報に基づいて行うことになる。即ちコマンドトランスポートの実行終了後、データトランスポートの実行前に、データトランスポートの有無の情報やデータトランスポートでの転送方向（ＯＵＴ、ＩＮ）を設定する必要がある。このためファームウェアの処理負荷が大きくなる。
【０１０４】
これに対して本実施形態では、ＣＢＷデータを解析すれば、データトランスポートの有無の情報やデータトランスポートでの転送方向（ＯＵＴ、ＩＮ）を知ることができる点に着目している。即ちＣＢＷデータの解析処理を行い、ＣＢＷデータのdCBWDataTransferLengthが０である場合にはデータトランスポートが無いと自動判別し、dCBWDataTransferLengthが０以外である場合にはデータトランスポートが有ると自動判別する。またＣＢＷデータのbmCBWFlagsのビット７が０である場合には、データトランスポートの転送方向がＯＵＴ方向（バルクＯＵＴ）であると自動判別し、bmCBWFlagsのビット７が１である場合には、データトランスポートの転送方向がＩＮ方向（バルクＯＵＴ）であると自動判別する。
【０１０５】
このようにすれば、コマンドトランスポートの実行前に設定されたＣＢＷデータに基づいて、データトランスポートのトランザクションが制御されるようになるため、ファームウェアの処理負荷を軽減できる。またファームウェアはデータトランスポートの制御のための情報を個別に設定する必要がなくなるため、ファームウェアの処理負荷を更に軽減できる。即ちファームウェアは図１１のステップＳ５においてデータトランスポートの有無の情報や転送方向を設定する必要がない。そしてファームウェアが図１１のステップＳ６においてＣＢＷデータを設定すれば、設定されたＣＢＷデータに基づいてハードウェア（ホストコントローラ）がデータトランスポートの有無の情報や転送方向を自動判別するため、ファームウェアの処理負荷を軽減できる。
【０１０６】
また本実施形態では図１１のステップＳ４に示すように、マックスパケットサイズ、デバイスのファンクションアドレス等が、チャネル情報としてチャネル情報レジスタ８２に設定される。また図１１のステップＳ５に示すように、バルクＯＵＴ転送のエンドポイントを指定するＯＵＴエンドポイント番号、バルクＩＮ転送のエンドポイントを指定するＩＮエンドポイント番号等が、バルクオンリーサポート情報としてバルクオンリーサポート情報レジスタ８４に設定される。
【０１０７】
そして本実施形態では図１１のステップＳ４でチャネル情報レジスタ８２に設定されたチャネル情報に基づいて、バルクオンリートランスポート（自動バルク転送）が実行される。即ちチャネル情報のファンクションアドレスで指定されるデバイスとの間でバルクＩＮ転送、バルクＯＵＴ転送などが行われる。またファンクションアドレスで指定されるデバイスとの間でコントロール転送なども行われる。そしてこれらのデータ転送の際に、チャネル情報のマックスパケットサイズに基づいてデータが複数のパケットに分割されて転送されるようになる。
【０１０８】
また本実施形態では図１４のステップＳ３６に示すように、データトランスポートにおいてバルクＯＵＴ転送のトランザクションを実行する場合には、図１１のステップＳ５で設定されたＯＵＴエンドポイント番号で指定されるエンドポイントに対して、送信データを含むパケットを自動送信する。具体的にはチャネル情報のファンクションアドレスによりデバイスが指定され、バルクオンリートランスポート情報のＯＵＴエンドポイント番号によりそのデバイスのエンドポイントが指定される。そして指定されたエンドポイントに対してＯＵＴトークンが発行されて、そのエンドポイントにデータパケットが送信される。
【０１０９】
また本実施形態では図１４のステップＳ３７に示すように、データトランスポートにおいてバルクＩＮ転送のトランザクションを実行する場合には、設定されたＩＮエンドポイント番号で指定されるエンドポイントから、受信データを含むパケットを自動受信する。具体的にはチャネル情報のファンクションアドレスによりデバイスが指定され、バルクオンリートランスポート情報のＩＮエンドポイント番号によりそのデバイスのエンドポイントが指定される。そして指定されたエンドポイントに対してＩＮトークンが発行されて、そのエンドポイントからデータパケットが受信される。
【０１１０】
このようにチャネル情報、バルクオンリーサポート情報を設定してバルクオンリートランスポートを実行すれば、ファームウェアの処理負荷を最小限に抑えながら、効率的なデータ転送を実現できる。即ちチャネル転送に必要な情報（ファンクションアドレス、マックスパケットサイズ）はチャネル情報として共通に設定でき、バルクオンリーサポート転送に必要な情報（ＯＵＴエンドポイント番号、ＩＮエンドポイント番号）は、バルクオンリーサポート情報として個別に設定できるため、処理を効率化できる。また図７においてデータ転送制御装置に複数台のストレージを接続する場合や、バルクオンリーサポートのオン・オフの切り替え機能を実現する場合にも、これに容易に対応できるようになる。
【０１１１】
また本実施形態では図１５のステップＳ４１に示すように、ステータストランスポートにおいて受信されたＣＳＷデータが、解析回路５２（ホストコントローラ５０）のＨ／Ｗにより自動解析される。そして図１５のステップＳ４２〜Ｓ４５、図１８に示すように、ＣＳＷデータの複数のフィールド（dCSWSignature、dCSWTag、bCSWStatus）のうちのいずれかのフィールドにエラーが検出されると、図１５のステップＳ４７に示すように、ＣＳＷデータのエラーがファームウェア（処理部）に対して割り込み等を用いて通知される。すると、通知を受けたファームウェアは、ＣＳＷ領域に書き込まれたＣＳＷデータを更に詳細に解析する。
【０１１２】
即ちＣＳＷデータのエラーには複数レベルのエラーがあり、これらの全てのレベルのエラーの解析をファームウェア（Ｆ／Ｗ）に担当させると、ファームウェアの処理負荷が重くなってしまう。この点、本実施形態では、図１５のステップＳ４２〜Ｓ４５に示す低レベルのエラーについては、ファームウェアに代わって、Ｈ／Ｗである解析回路５２が解析するため、ファームウェアの処理負荷を軽減できる。またステップＳ４２〜Ｓ４５に示す低レベルのエラーの解析は、データの一致検出回路や比較回路を含む解析回路５２で実現できるため、回路規模の増加も最小限に抑えることができる。
【０１１３】
一方、図１５のステップＳ４２〜Ｓ４５の低レベルのエラーとは異なる高レベルのエラーを、解析回路５２に解析させようとすると、回路規模が大幅に増加する。即ちバルクオンリートランスポートでは図２（Ａ）に示すように、コマンドトランスポートのＣＢＷとデータトランスポートのバルクＯＵＴデータとが同一のエンドポイント（ＥＰ１）を用いて転送される。またステータストランスポートのＣＳＷとデータトランスポートのバルクＩＮデータも同一のエンドポイントを用いて転送される。このため、ホスト側とデバイス側とで、コマンド、データ、ステータスのトランスポートのフェーズがずれる可能性があり、このフェーズのずれを解消するためのリセットリカバリーの処理が必要になる。このようなリセットリカバリーのための高レベルのエラー検出・回復処理は複雑であり、Ｈ／Ｗである解析回路５２の解析には適さない。
【０１１４】
本実施形態によれば低レベルのエラー検出だけが解析回路５２により行われ、エラーが検出された場合には図１５のステップＳ４７に示すようにエラーの検出がファームウェアに通知される。そして、エラーが通知されたファームウェアは、ＣＳＷ領域のＣＳＷデータをＲＡＭモニタ機能などを用いて読み出して詳細に解析して、リセットリカバリーなどの処理を行うことが可能になる。これによりファームウェアの処理負荷の増加、解析回路５２の回路規模の増加等を最小限に抑えながら、適切なエラー検出・回復処理を実現できるようになる。
【０１１５】
また本実施形態では図１６のステップＳ５１〜Ｓ５４に示すように、コマンド、データト、ステータスの各トランスポートにおいてトランザクションエラーを検出した場合には、バルクオンリーサポート転送の実行を停止し、エラーが発生したトランスポート（トランザクション）をファームウェアに通知している。このようにすれば、バルクオンリートランスポートを構成する一連のコマンド、データ、ステータスのトランスポートのいずれにトランザクションエラーが発生したのかを、ファームウェアは容易に知ることが可能になる。これにより、トランザクションエラー発生時のファームウェアの処理負荷を軽減できる。
【０１１６】
また本実施形態では図５に示すように、ＣＢＷ領域としてＣＢＷ０、ＣＢＷ１領域（第１、第２のコマンドブロック領域）がデータバッファ１００に確保される。即ち２面のＣＢＷ領域が確保される。そしてＣＢＷ０、ＣＢＷ１領域のいずれか一方の領域に対してファームウェアがＣＢＷデータを書き込んでいる際に、他方の領域に書き込まれたＣＢＷデータに基づいて図９のバルクオンリートサポート転送を実行する。即ち図１９（Ａ）では、ファームウェアがＣＢＷ０領域にＣＢＷデータを書き込んでいる際に、ＣＢＷ１領域のＣＢＷデータに基づきバルクオンリートサポート転送を実行している。また図１９（Ｂ）では、ファームウェアがＣＢＷ１領域にＣＢＷデータを書き込んでいる際に、ＣＢＷ０領域のＣＢＷデータに基づきバルクオンリートサポート転送を実行している。なお図１１のステップＳ６、Ｓ７に示すようにファームウェアは、ＣＢＷデータを書き込んだ方のＣＢＷ領域のＣＢＷイネーブルをセットして、そのＣＢＷ領域についてのバルクオンリートサポート転送の実行をホストコントローラ５０に指示する。
【０１１７】
本実施形態の手法によれば、例えば図１９（Ａ）においてファームウェアがＣＢＷ０領域のＣＢＷデータを用意して間に、ＣＢＷ１領域のＣＢＷデータのバルクオンリーサポート転送を実行できるため、データ転送の効率化を図れる。またファームウェアは、ＣＢＷ１領域のバルクオンリートサポート転送が完了するのを待つことなく、所望のタイミングで、ＣＢＷ０領域のＣＢＷデータの用意や書き込みを行うことができるため、ファームウェア処理の効率化を図ることもできる。
【０１１８】
７．詳細な構成例
図２０に、バルクオンリーサポート転送を実現する回路の詳細例を示す。チャネル情報管理回路２４０は、ターゲットとなるチャネルの情報を管理する回路である。このチャネル情報管理回路２４０は、転送実行のターゲットとなるチャネルが指示された場合に、レジスタ部８０のチャネル情報レジスタ８２から、対応するチャネル情報を選択して、図示しないトランザクション管理回路などに渡す処理を行う。
【０１１９】
パケット解析＆生成回路２５０（パケットハンドラ回路）は、受信パケットに含まれる
ＩＮデータを解析したり、ＯＵＴデータを含む送信パケットを生成する。そしてバルクＩＮ転送の場合には、パケット解析＆生成回路２５０が、受信パケットに含まれるＩＮデータをバッファコントローラ９０に出力すると共にライトリクエストを出力する。そしてＩＮデータがデータトランスポートの受信データである場合には、バッファコントローラ９０はＩＮデータをデータバッファ１００のＣＨａ領域（データ領域）に書き込む。一方、ＩＮデータがステータストランスポートのＣＳＷデータである場合には、ＣＳＷデータであるＩＮデータをデータバッファ１００のＣＳＷ領域に書き込む。そしてバッファコントローラ９０はライトＡＣＫ（Acknowledgement）をパケット解析＆生成回路２５０に出力する。
【０１２０】
一方、バルクＯＵＴ転送の場合には、バッファコントローラ９０がデータバッファ１００から読み出されたＯＵＴデータをパケット解析＆生成回路２５０に出力する。そしてＯＵＴデータがデータトランスポートの送信データである場合には、バッファコントローラ９０はＣＨａ領域からＯＵＴデータを読み出してパケット解析＆生成回路２５０に出力すると共にリードＡＣＫを出力する。一方、ＯＵＴデータがコマンドトランスポートのＣＢＷデータである場合には、バッファコントローラ９０はＣＢＷ０又はＣＢＷ１領域からＣＢＷデータであるＯＵＴデータを読み出して、パケット解析＆生成回路２５０に出力すると共にリードＡＣＫを出力する。
【０１２１】
バルクオンリーサポート転送シーケンサ２００は、バルクオンリーサポート転送のシーケンスを管理する回路である。このバルクオンリーサポート転送シーケンサ２００は、バルクオンリーサポート転送判断回路２０２、コマンドトランスポートモニタ回路２０４、データトランスポート選択回路２１０、データトランスポートモニタ回路２２０、ステータストランスポートモニタ回路２３０、ＣＢＷ解析回路２３４、ＣＳＷ解析回路２３６を含む。なお、バルクオンリーサポート転送シーケンサ２００はこれらの全ての回路ブロックを含む必要はなく、その一部を省略してもよい。
【０１２２】
バルクオンリーサポート転送判断回路２０２は、バルクオンリーサポート実行信号を受け、バルクオンリーサポート転送を行うか否かを判断する。そしてバルクオンリーサポート実行信号がアクティブになると、バルクオンリーサポート転送を行うと判断し、バルクオンリーサポートイネーブル信号をアクティブにする。これによりバルクオンリーサポート転送の開始が指示される。
【０１２３】
コマンドトランスポートモニタ回路２０４は、バルクオンリーサポート転送の開始が指示された場合に、コマンドトランスポートのバルクＯＵＴ転送のトランザクションの開始を指示する回路である。即ちコマンドトランスポートモニタ回路２０４は、バルクオンリーサポートイネーブル信号がアクティブになると、ＣＢＷ０イネーブル信号又はＣＢＷ１イネーブル信号をアクティブにして、コマンドトランスポートのトランザクションの開始を指示する。そしてコマンドトランスポートが完了すると、コマンドトランスポート完了信号をアクティブにする。
【０１２４】
データトランスポート選択回路２１０は、コマンドトランスポートのバルクＯＵＴ転送のトランザクションが完了した場合（コマンドトランスポート完了信号がアクティブになった場合）に、データトランスポートの転送方向とデータトランスポートの有無の情報に基づいて、データトランスポートのバルクＯＵＴ転送のトランザクションの実行、データトランスポートのバルクＩＮ転送のトランザクションの実行、或いはデータトランスポート無しのいずれかを選択する回路である。
【０１２５】
即ちデータトランスポート選択回路２１０は、転送方向が「ＯＵＴ」であり、「データトランスポート有り」の場合には、ＯＵＴデータ・スタートトリガをアクティブにして、バルクＯＵＴ転送のトランザクションの実行を選択する。また、転送方向が「ＩＮ」であり、「データトランスポート有り」の場合には、ＩＮデータ・スタートトリガをアクティブにして、バルクＩＮ転送のトランザクションの実行を選択する。一方、「データトランスポート無し」の場合は、ステータス・スタートトリガをアクティブにして、データトランスポートをバイパスし、コマンドトランスポートの実行を開始させる。この場合に、転送方向が「ＩＮ」か「ＯＵＴ」かは、ＣＢＷ解析回路２３４からのデータトランスポート転送方向信号に基づいて判断する。またデータトランスポートが有るか無いかは、ＣＢＷ解析回路２３４からのデータトランスポート有無信号に基づいて判断する。
【０１２６】
データトランスポートモニタ回路２２０は、データトランスポートのバルクＯＵＴ転送のトランザクションの実行が選択された場合には、バルクＯＵＴ転送のトランザクションの開始を指示し、データトランスポートのバルクＩＮ転送のトランザクションの実行が選択された場合には、バルクＩＮ転送のトランザクションの開始を指示する回路である。このデータトランスポートモニタ回路２２０は、ＯＵＴデータトランスポートモニタ回路２２２とＩＮデータトランスポートモニタ回路２２４を含む。
【０１２７】
ここで、ＯＵＴデータトランスポートモニタ回路２２２は、ＯＵＴデータ・スタートトリガがアクティブになると、ＯＵＴデータトランスポートイネーブル信号をアクティブにして、バルクＯＵＴ転送のトランザクションの開始をチャネル情報管理回路２４０に指示する。そして、データトランスポートが完了すると、ステータス・スタートトリガをアクティブにする。
【０１２８】
また、ＩＮデータトランスポートモニタ回路２２４は、ＩＮデータ・スタートトリガがアクティブになると、ＩＮデータトランスポートイネーブル信号をアクティブにして、バルクＩＮ転送のトランザクションの開始をチャネル情報管理回路２４０に指示する。そして、データトランスポートが完了すると、ステータス・スタートトリガをアクティブにする。
【０１２９】
ステータストランスポートモニタ回路２３０は、データトランスポートのバルクＯＵＴ転送のトランザクション又はバルクＩＮ転送のトランザクションが完了した場合に、コマンドトランスポートのバルクＩＮ転送のトランザクションの開始を指示する回路である。具体的には、ステータス・スタートトリガがアクティブになると、ステータストランスポートイネーブル信号をアクティブにして、ステータストランスポートのトランザクションの開始をチャネル情報管理回路２４０に指示する。
【０１３０】
ＣＢＷ解析回路２３４は、ＣＢＷ０領域又はＣＢＷ１領域に書き込まれたＣＢＷデータの解析（デコード）を行う。具体的にはＣＢＷ解析回路２３４は、バッファコントローラ９０からＯＵＴデータを受ける。そしてコマンドトランスポートモニタ回路２０４からのＣＢＷ０イネーブル信号がアクティブである場合には、データバッファ１００のＣＢＷ０領域から読み出されたＯＵＴデータを、ＣＢＷデータとして解析する。一方、ＣＢＷ１イネーブル信号がアクティブである場合には、ＣＢＷ１領域から読み出されたＯＵＴデータを、ＣＢＷデータとして解析する。そして図１７で説明したように、ＣＢＷデータの解析結果に基づいてデータトランスポートの転送方向とデータトランスポートの有無を判断し、データトランスポート転送方向信号とデータトランスポート有無信号をデータトランスポート選択回路２１０に出力する。
【０１３１】
ＣＳＷ解析回路２３６は、ステータストランスポートにおいて受信されたＣＳＷデータの解析（デコード）を行う。具体的にはＣＳＷ解析回路２３６は、パケット解析＆生成回路２５０からＩＮデータであるＣＳＷデータを受ける。そしてステータストランスポートモニタ回路２３０からのステータストランスポートイネーブル信号（ＣＳＷモニタ開始トリガ）がアクティブになると、ＣＳＷデータを解析する。そして図１８で説明したようにＣＳＷデータのエラー検出処理を行い、エラーが検出された場合には、ステータス判定結果信号をアクティブにして、ファームウェアに対して割り込み等を発生する。
【０１３２】
図２０に示すような回路構成を採用することで、コマンド、データ、ステータスの一連のトランスポートを構成するトランザクションを、ファームウェアの介在無しに、自動的に実行できるようになる。
【０１３３】
８．電子機器の構成
図２１（Ａ）（Ｂ）に、本実施形態のデータ転送制御装置を含む電子機器の構成例を示す。電子機器１１０は、図２等で説明したデータ転送制御装置１２０、ストレージ１３０、ＣＰＵ１４０（処理部）、操作部１５０、表示部１６０、音出力部１７０を含む。またアップストリームポートＵＰＰＴとダウンストリームポートＤＷＰＴを含む。なおこれらの一部を省略する構成としてもよい。
【０１３４】
図２１（Ａ）（Ｂ）では、アップストリームポートＵＰＰＴが電子機器１１０の側面ＳＦ１（第１の側面、第１の辺）に設けられている。一方、ダウンストリームポートＤＷＰＴが電子機器１１０の側面ＳＦ２（第２の側面、第２の辺）に設けられている。ここで側面ＳＦ２は、側面ＤＦ１の反対側の面（対面）である。より具体的には、ダウンストリームポートＤＷＰＴは、アップストリームポートＵＰＰＴが設けられている位置（側面ＳＦ１上の位置）に対応する位置（側面ＳＦ２上の位置）に設けられている。更に具体的には、ＵＰＰＴとＤＷＰＴは、側面ＳＦ１に沿って長手方向に延びる線（ＳＦ１の中心線）と、側面ＳＦ２に沿って長手方向に延びる線（ＳＦ２の中心線）の中心線を基準として、線対称の位置に設けられている。
【０１３５】
データ転送制御装置１２０は、アップストリームポートＵＰＰＴ、ダウンストリームポートＤＷＰＴに接続され、ＵＰＰＴを介したデータ転送（アップストリーム方向でのデータ転送）と、ＤＷＰＴを介したデータ転送（ダウンストリーム方向でのデータ転送）を制御する。具体的には、データ転送制御装置１２０は、デバイスモードではＵＰＰＴを介したデータ転送を制御し、ホストモードではＤＷＰＴを介したデータ転送を制御する。
【０１３６】
ストレージ１３０は、音データ（音楽データ、音声データ）や画像データ（静止画データ、映像データ）を記憶するものである。このストレージ１３０としては、ハードディスク（ＨＤＤ）や大容量のメモリ（ＲＡＭ）や光ディスクなどを用いることができる。
【０１３７】
ＣＰＵ１４０は、電子機器１１０の全体の制御等を行うものである。操作部１５０は、ユーザが電子機器１１０を操作するためのものである。表示部１６０（液晶ディスプレイ、有機ＥＬディスプレイ）は、各種画像（静止画、動画）をユーザに表示するためのものである。音出力部１９０（スピーカ、ヘッドホン端子）は、音楽や音声などの音を出力するためのものである。
【０１３８】
例えば電子機器１１０が携帯型音楽プレーヤ（オーディオ機器）である場合には、音楽データが、ＵＰＰＴやＤＷＰＴを介して外部の電子機器（ＰＣ等）からストレージ１３０にダウンロードされて記憶される。そして記憶された音楽データがストレージ１３０から読み出されて再生され、音出力部１７０によりユーザに出力される。また電子機器１１０が携帯型映像プレーヤである場合には、映像データが、ＵＰＰＴやＤＷＰＴを介して外部の電子機器からストレージ１３０にダウンロードされて記憶される。そして記憶された映像データがストレージ１３０から読み出されて、表示部１６０を用いてユーザに表示される。
【０１３９】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。例えば、明細書又は図面中の記載において広義や同義な用語（コマンドブロック、ステータスブロック、バス・シリアルバス、転送コントローラ、自動バルク転送等）として引用された用語（ＣＢＷ、ＣＳＷ、ＵＳＢ、ホストコントローラ、バルクオンリーサポート転送等）は、明細書又は図面中の他の記載においても広義や同義な用語に置き換えることができる。
【０１４０】
また本発明のデータ転送制御装置、電子機器の構成は、図２、図２０、図２１（Ａ）（Ｂ）等に示した構成に限定されず、これらの図の構成要素の一部を省略したり、その接続関係を変更してもよい。
【０１４１】
また本発明は種々の電子機器（携帯型音楽プレーヤ、携帯型映像プレーヤ、携帯電話機、携帯情報端末、ＰＤＡ、電子辞書、又は電子手帳等）に適用できる。
【０１４２】
また本実施形態では、ＵＳＢのバルクオンリートランスポート規格のデータ転送に本発明を適用した場合について説明したが、これと同様の思想に基づく規格やこれを発展させた規格等のデータ転送にも本発明は適用できる。
【図面の簡単な説明】
【０１４３】
【図１】図１（Ａ）〜図１（Ｄ）はＵＳＢのデータ転送の説明図。
【図２】図２（Ａ）（Ｂ）（Ｃ）はバルクオンリートランスポートの説明図。
【図３】図３（Ａ）（Ｂ）もバルクオンリートランスポートの説明図。
【図４】本実施形態のデータ転送制御装置の構成例。
【図５】ホストモード時にデータバッファに確保される領域の例。
【図６】デバイスモード時にデータバッファに確保される領域の例。
【図７】チャネル転送の説明図。
【図８】チャネル転送の説明図。
【図９】本実施形態のバルクオンリートランスポート転送手法の説明図。
【図１０】比較例の転送手法の説明図。
【図１１】本実施形態のファームウェア処理のフローチャート。
【図１２】比較例のファームウェア処理のフローチャート。
【図１３】本実施形態で使用されるレジスタとその機能の説明図。
【図１４】本実施形態の詳細な動作を説明するためのフローチャート。
【図１５】本実施形態の詳細な動作を説明するためのフローチャート。
【図１６】本実施形態の詳細な動作を説明するためのフローチャート。
【図１７】ＣＢＷデータに基づくデータトランスポートの制御手法の説明図。
【図１８】ＣＳＷのエラー検出手法の説明図。
【図１９】図１９（Ａ）（Ｂ）はＣＢＷ０、ＣＢＷ１領域を使用する手法の説明図。
【図２０】バルクオンリーサポート転送を実現する回路の詳細例。
【図２１】図２１（Ａ）（Ｂ）は本実施形態の電子機器の構成例。
【符号の説明】
【０１４４】
ＵＰＰＴ  アップストリームポート、ＤＷＰＴ  ダウンストリームポート、
ＣＢＷ  コマンドブロックデータ、ＣＳＷ  ステータスブロックデータ、
１０  トランシーバ、２０  ホストトランシーバ、３０  デバイストランシーバ、
４０  転送コントローラ、５０  ホストコントローラ、５２  解析回路、
６０  デバイスコントローラ、７０  ポートセレクタ、８０  レジスタ部、
８２  チャネル情報レジスタ、８４  バルクオンリーサポート情報レジスタ、
８６  ステータスレジスタ、９０  バッファコントローラ、１００  データバッファ、
１１０  ストレージＩ／Ｆコントローラ、１１２  ＣＰＵＩ／Ｆコントローラ、
１１４  ＤＭＡコントローラ、１２０  データ転送制御装置、１３０  ストレージ、
１４０  ＣＰＵ（処理部）
【図１】
2006215891.tif 000003
【図２】
2006215891.tif 000004
【図３】
2006215891.tif 000005
【図４】
2006215891.tif 000006
【図５】
2006215891.tif 000007
【図６】
2006215891.tif 000008
【図７】
2006215891.tif 000009
【図８】
2006215891.tif 000010
【図９】
2006215891.tif 000011
【図１０】
2006215891.tif 000012
【図１１】
2006215891.tif 000013
【図１２】
2006215891.tif 000014
【図１３】
2006215891.tif 000015
【図１４】
2006215891.tif 000016
【図１５】
2006215891.tif 000017
【図１６】
2006215891.tif 000018
【図１７】
2006215891.tif 000019
【図１８】
2006215891.tif 000020
【図１９】
2006215891.tif 000021
【図２０】
2006215891.tif 000022
【図２１】
2006215891.tif 000023
【手続補正書】
【提出日】平成18年3月10日(2006.3.10)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００７５
【補正方法】変更
【補正の内容】
【００７５】
また、図８には、ＵＳＢのコミュニケーションデバイスのクラスに対応したコミュニケーションデバイスＣＤ（無線ＬＡＮアダプタ等）をデータ転送制御装置に接続した場合のチャネルの使用例を示す。この場合には、チャネルＣＨｂ、ＣＨｃを用いてバルクＩＮ転送、バルクＯＵＴ転送を行い、チャネルＣＨｄを用いてインタラプト転送を行う。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００９３
【補正方法】変更
【補正の内容】
【００９３】
コマンドトランスポートが終了すると、ホストコントローラ５０はデータトランスポートのトランザクションを実行する（ステップＳ３３）。具体的には、ＣＢＷデータのdCBWDataTransferLengthが０ｘ００００００００である場合には、図１５のステップＳ３９に移行する（ステップＳ３４）。一方、dCBWDataTransferLengthが０x００００００００ではない場合には、ホストコントローラ５０はＣＢＷデータのbmCBWFlagsのビット７をチェックする（ステップＳ３５）。そしてbmCBWFlagsのビット７が０である場合には、ＯＵＴエンドポイント番号で指定されるエンドポイントに対しバルクＯＵＴ転送のトランザクションを発行し、ＣＨａ領域（データ領域）に書き込まれた送信データを送信する（ステップＳ３６）。具体的には、ＯＵＴエンドポイント番号で指定されるエンドポイントに対してＯＵＴトークンのパケットを送信し、その後、送信データを含むパケットを送信する。そしてＡＣＫのハンドシェークパケットの受信をウェイトする。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００９５
【補正方法】変更
【補正の内容】
【００９５】
次にホストコントローラ５０は、dCBWDataTransferLength分のデータ転送が完了したか否かを判断し（ステップＳ３８）、完了していない場合にはステップＳ３５に戻る。一方、完了した場合には、データトランスポートが終了したと判断し、ステータストランスポートのトランザクションを実行する（図１５のステップＳ３９）。具体的には、ＩＮエンドポイント番号で指定されるエンドポイントに対しバルクＩＮトランザクションを発行し、受信したＣＳＷデータをＣＳＷ領域に書き込む（ステップＳ４０）。更に具体的には、ＩＮエンドポイント番号で指定されるエンドポイントに対してＩＮトークンのパケットを送信する。そして、その後、ＣＳＷデータを含むパケットを受信すると、ＡＣＫのハンドシェークパケットをデバイスに送信すると共にＣＳＷデータをＣＳＷ領域に書き込む。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１０４
【補正方法】変更
【補正の内容】
【０１０４】
これに対して本実施形態では、ＣＢＷデータを解析すれば、データトランスポートの有無の情報やデータトランスポートでの転送方向（ＯＵＴ、ＩＮ）を知ることができる点に着目している。即ちＣＢＷデータの解析処理を行い、ＣＢＷデータのdCBWDataTransferLengthが０である場合にはデータトランスポートが無いと自動判別し、dCBWDataTransferLengthが０以外である場合にはデータトランスポートが有ると自動判別する。またＣＢＷデータのbmCBWFlagsのビット７が０である場合には、データトランスポートの転送方向がＯＵＴ方向（バルクＯＵＴ）であると自動判別し、bmCBWFlagsのビット７が１である場合には、データトランスポートの転送方向がＩＮ方向（バルクＩＮ）であると自動判別する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１３７
【補正方法】変更
【補正の内容】
【０１３７】
ＣＰＵ１４０は、電子機器１１０の全体の制御等を行うものである。操作部１５０は、ユーザが電子機器１１０を操作するためのものである。表示部１６０（液晶ディスプレイ、有機ＥＬディスプレイ）は、各種画像（静止画、動画）をユーザに表示するためのものである。音出力部１７０（スピーカ、ヘッドホン端子）は、音楽や音声などの音を出力するためのものである。
【手続補正６】
【補正対象書類名】図面
【補正対象項目名】図１２
【補正方法】変更
【補正の内容】
【図１２】
2006215891.tif 000024