(57)【要約】【課題】ＣＰＵの負荷を抑制しつつ、転送効率を向上させることができるＵＳＢホスト制御回路を提供する。【解決手段】ＵＳＢ制御回路にパイプ制御バッファ３１、パイプ情報バッファ３２、転送情報バッファ３３、パイプ選択回路３４、およびプロトコルエンジン３６を設ける。パイプ選択回路３４は、パイプ制御バッファ３１およびパイプ情報バッファ３３に記憶されている情報に従って、ＣＰＵ１０とＵＳＢデバイス４０との間でデータ転送を行うパイプを選択する。さらに、プロトコルエンジン３６からデータ転送に対する応答結果を取得し、当該応答結果に応じて、転送情報バッファ３３の内容を書き換えつつ、データ転送を行うパイプを切り替える。【選択図】　　　　図１
2004046392.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと複数のＵＳＢ（Ｕｎｉｖｅｒｓａｌ　Ｓｅｒｉａｌ　Ｂｕｓ）デバイスとの間のデータ転送を制御するＵＳＢホスト制御回路であって、
各ＵＳＢデバイスのそれぞれが前記ＣＰＵとデータ転送を行うための複数の通信チャネルと、
前記複数の通信チャネルのうちから前記データ転送を行う通信チャネルを選択するチャネル選択手段と、
前記チャネル選択手段により選択された前記通信チャネルによって行われたデータ転送に対する応答結果を取得する取得手段と、
を備え、
前記チャネル選択手段が、
前記取得手段により取得された前記応答結果に応じて、前記通信チャネルの選択を切り替えることを特徴とするＵＳＢホスト制御回路。
【請求項２】
請求項１に記載のＵＳＢホスト制御回路であって、
取得手段は、
通信チャネルにより転送されるトランザクションごとに応答結果を取得することを特徴とするＵＳＢホスト制御回路。
【請求項３】
請求項１または２に記載のＵＳＢホスト制御回路であって、
チャネル選択手段は、
応答結果が、エラーまたはＮＡＫである場合に通信チャネルの選択を切り替えることを特徴とするＵＳＢホスト制御回路。
【請求項４】
請求項１ないし３のいずれかに記載のＵＳＢホスト制御回路であって、
各通信チャネルの優先順位を記憶する記憶手段を備え、
チャネル選択手段は、
前記記憶手段に記憶されている前記優先順位に従って、前記通信チャネルの選択を切り替えることを特徴とするＵＳＢホスト制御回路。
【請求項５】
請求項１ないし４のいずれかに記載のＵＳＢホスト制御回路であって、
チャネル選択手段は、
現時点が、フレーム内の転送有効期間であるか否かを判定する可否判定手段を有し、
応答結果に応じて選択が切り替えられた通信チャネルについては、前記可否判定手段により転送有効期間であると判定された時間内にデータの再転送をさせることを特徴とするＵＳＢホスト制御回路。
【請求項６】
請求項５に記載のＵＳＢホスト制御回路であって、
チャネル選択手段は、
転送されるデータの転送タイプを各通信チャネルごとに判定する転送タイプ判定手段をさらに有し、
前記転送タイプ判定手段により所定の転送タイプであると判定された通信チャネルに対してのみ前記データの再転送をさせることを特徴とするＵＳＢホスト制御回路。
【請求項７】
請求項６に記載のＵＳＢホスト制御回路であって、
所定の転送タイプが、コントロール転送、またはバルク転送であることを特徴とするＵＳＢホスト制御回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はデータ通信技術に関する。より詳しくは、ＵＳＢを介した通信を制御する技術に関する。
【０００２】
【従来の技術】
ＵＳＢを介した通信においては、単一のＵＳＢホストと単一または複数のＵＳＢデバイスとの間で通信（データ転送）が行われる。複数のＵＳＢデバイスとの間でデータ転送を行う場合、ＵＳＢホストとＵＳＢデバイスとはそれぞれのパイプと呼ばれる通信チャネル（論理チャネル）を用いて、時分割処理によりデータ転送を行う。
【０００３】
ＵＳＢホストは複数のＵＳＢデバイスとの通信を行うために、予め転送スケジューリング（通信チャネルのルーチング）を行う。転送スケジューリングとは、フレームと呼ばれる単位時間内の転送有効期間において、どのＵＳＢデバイスがどのパイプで通信を行うかを決定するとともに、各パイプの通信順序（優先順位）を決定することをいう。
【０００４】
これにより、ＵＳＢを用いたデータ転送におけるデータはフレームに分割されて転送され、フレームの中に各ＵＳＢデバイス用のデータ転送時間を割り振ることで、ＵＳＢホストは、各ＵＳＢデバイスに対して公平にデータ転送の機会を与えるように動作することとなる。
【０００５】
従来より、ＵＳＢホストによる転送スケジューリングは、フレームごとに、トランスファ単位で行われ、複数のパイプを用いて通信が行われる場合には各パイプのデータ転送がフレーム内で平均するように構成される。
【０００６】
【発明が解決しようとする課題】
ところが、上記のような従来のＵＳＢホストでは、あるフレーム内でデータを送信するよう割り当てられたパイプがビジー状態であったとしても、転送スケジューリングがフレームごとに行われるため、当該フレームが終了しない限り転送スケジューリングの更新は行われない。したがって、フレームにおいてパイプのビジー状態が続くと、その間、当該フレームにおけるデータ転送は一切行われないことから、通信全体の転送効率が下がるという問題があった。
【０００７】
この問題を解決するため、例えば、各パイプの状態を監視し、通信の状況に合わせて転送スケジューリングを更新しようとした場合、転送スケジューリングにはＣＰＵ処理が必要であることから、ＣＰＵに対する負荷が増大してしまうという問題があった。
【０００８】
特に、１トランスファに含まれるトランザクション数が少ない場合には、１つのフレーム内に定義されるパイプの数が増加し、スケジューリングすべきパイプの数が増加するため、特にＣＰＵの処理が増大するという問題があった。
【０００９】
この発明は上記問題点を解決するためになされたもので、ＣＰＵに対する負荷を抑制しつつ、ＵＳＢにおける転送効率を向上させるＵＳＢホスト制御回路を得ることを目的とする。
【００１０】
【課題を解決するための手段】
上記の課題を解決するため、請求項１の発明は、ＣＰＵと複数のＵＳＢデバイスとの間のデータ転送を制御するＵＳＢホスト制御回路であって、各ＵＳＢデバイスのそれぞれが前記ＣＰＵとデータ転送を行うための複数の通信チャネルと、前記複数の通信チャネルのうちから前記データ転送を行う通信チャネルを選択するチャネル選択手段と、前記チャネル選択手段により選択された前記通信チャネルによって行われたデータ転送に対する応答結果を取得する取得手段とを備え、前記チャネル選択手段が、前記取得手段により取得された前記応答結果に応じて、前記通信チャネルの選択を切り替える。
【００１１】
また、請求項２の発明は、請求項１の発明に係るＵＳＢホスト制御回路であって、取得手段は、通信チャネルにより転送されるトランザクションごとに応答結果を取得する。
【００１２】
また、請求項３の発明は、請求項１または２の発明に係るＵＳＢホスト制御回路であって、チャネル選択手段は、応答結果が、エラーまたはＮＡＫである場合に通信チャネルの選択を切り替える。
【００１３】
また、請求項４の発明は、請求項１ないし３のいずれかの発明に係るＵＳＢホスト制御回路であって、各通信チャネルの優先順位を記憶する記憶手段を備え、チャネル選択手段は、前記記憶手段に記憶されている前記優先順位に従って、前記通信チャネルの選択を切り替える。
【００１４】
また、請求項５の発明は、請求項１ないし４のいずれかの発明に係るＵＳＢホスト制御回路であって、チャネル選択手段は、現時点が、フレーム内の転送有効期間であるか否かを判定する可否判定手段を有し、応答結果に応じて選択が切り替えられた通信チャネルについては、前記可否判定手段により転送有効期間であると判定された時間内にデータの再転送をさせる。
【００１５】
また、請求項６の発明は、請求項５の発明に係るＵＳＢホスト制御回路であって、チャネル選択手段は、転送されるデータの転送タイプを各通信チャネルごとに判定する転送タイプ判定手段をさらに有し、前記転送タイプ判定手段により所定の転送タイプであると判定された通信チャネルに対してのみ前記データの再転送をさせる。
【００１６】
また、請求項７の発明は、請求項６の発明に係るＵＳＢホスト制御回路であって、所定の転送タイプが、コントロール転送、またはバルク転送である。
【００１７】
【発明の実施の形態】
図１はこの発明の実施の形態であるＵＳＢホスト１の構成を他の構成とともに示すブロック図である。ＵＳＢホスト１は、バス３８を介して各ＵＳＢデバイス４１，４２，４３（以下、総称する場合は「ＵＳＢデバイス４０」と称する）との間でデータ転送を行う。
【００１８】
ＵＳＢホスト１は、各種データの演算や制御信号の生成を行うＣＰＵ１０、各種データを保存するメモリ２０、およびＣＰＵ１０とＵＳＢデバイス４０との間でＵＳＢを介したデータ転送を制御するホスト制御回路３０を備える。
【００１９】
ホスト制御回路３０は、パイプ制御バッファ３１、パイプ情報バッファ３２、転送情報バッファ３３、パイプ選択回路３４、データバッファ３５、プロトコルエンジン３６、フレームタイマ３７、およびバス３８を備え、後述する処理を実行する専用のハードウェアとして構成されている。
【００２０】
また、ＵＳＢを介したデータ転送では、前述のように、各ＵＳＢデバイス４１，４２，４３のそれぞれが、ＣＰＵ１０とデータ転送を行うための複数のパイプを定義することにより、時分割処理が行われる。
【００２１】
パイプ制御バッファ３１は、各パイプを制御するための情報（パイプ制御ＰＣ）を保持する記憶バッファであり、具体的には、各パイプにおける転送タイプ、パイプ情報の有効・無効、データバッファ３５に記憶されているＵＳＢデバイス４０への送信データの有効・無効、データバッファ３５におけるＵＳＢデバイス４０からの受信データを保存する領域の有無などが含まれる。なお、これらの情報は、各パイプごとに存在し、図１に示すように、それぞれパイプ制御ＰＣ０、パイプ制御ＰＣ１、・・・、パイプ制御ＰＣｎのように各パイプ番号をキーとして識別可能な状態で保持される（ｎは１２６以下の任意の整数）。
【００２２】
パイプ情報バッファ３２は、各パイプに関する情報（パイプ情報ＰＩ）を保持するための記憶バッファであり、具体的には、各パイプを使用する各ＵＳＢデバイス４１，４２，４３のアドレス、エンドポイント、最大パケットサイズ、転送方向、およびトランザクションの数などが含まれる。また、これらの情報も、パイプ制御ＰＣと同様に、各パイプごとに存在し、それぞれパイプ情報ＰＩ０、パイプ情報ＰＩ１、・・・、パイプ情報ＰＩｎのように識別可能な状態で保持される。
【００２３】
なお、詳細は後述するが、本実施の形態におけるホスト制御回路３０では、転送タイプおよびパイプ番号に基づいてパイプ選択における優先順位が決定される。すなわち、パイプ制御バッファ３１およびパイプ情報バッファ３２が通信チャネルの優先順位を記憶する記憶手段に相当する。
【００２４】
転送情報バッファ３３は、各パイプの通信結果に関する情報（転送情報ＴＩ）を保持する記憶バッファであり、転送完了、転送エラー、転送データ数などが含まれる。また、これらの情報も、各パイプごとに存在し、それぞれ転送情報ＴＩ０、転送情報ＴＩ１、・・・、転送情報ＴＩｎのように識別可能な状態で保持される。
【００２５】
パイプ選択回路３４は、計時機能を有するフレームタイマ３７の出力に基づいて、フレームの開始・終了、その時点が転送有効期間であるか否かの判定などのフレーム管理を行う。
【００２６】
また、パイプ選択回路３４は、パイプ制御バッファ３１、パイプ情報バッファ３２、および転送情報バッファ３３にそれぞれアクセス可能とされており、それらに保持されている情報に基づいて、フレームの転送有効期間中に、データ転送を行うパイプを選択する。
【００２７】
さらに、パイプ選択回路３４は、選択したパイプに関するパイプ情報ＰＩをデータバッファ３５とプロトコルエンジン３６とに伝達するとともに、データバッファ３５からは転送したトランザクション数に関する情報、プロトコルエンジン３６からは各トランザクションごとの各ＵＳＢデバイス４１，４２，４３の応答結果に関する情報をそれぞれ受け取り、転送情報バッファ３３にアクセスして、転送情報ＴＩを必要に応じて書き換える。
【００２８】
データバッファ３５は、パイプ選択回路３４により選択されたパイプによって転送されるデータ（ＣＰＵ１０が送信するデータおよびＵＳＢデバイス４０が送信するデータ）を保持するための記憶バッファであり、プロトコルエンジン３６とメモリ２０との間のデータのやり取りの調停を行う。
【００２９】
また、データバッファ３５は、パイプ制御バッファ３１にアクセスすることにより、ＵＳＢデバイス４０への送信データの有効・無効、ＵＳＢデバイス４０からの受信データを保存する領域の有無など、データバッファ３５の状態をパイプ制御ＰＣとして書き込む。
【００３０】
さらに、転送したデータ数に基づいて、転送されたトランザクション数をカウントするトランザクションカウンタ３５０を備え、パイプ選択回路３４に転送したトランザクション数を通知する。
【００３１】
なお、データが現実に転送されたか否かの判定は、データバッファ３５が、プロトコルエンジン３６から通知される、当該転送データに対する応答結果に関する情報に基づいて行う。また、本実施形態では、トランザクションカウンタ３５０をデータバッファ３５が備えているが、トランザクションカウンタ３５０の機能をパイプ選択回路３４が有していてもよい。その場合、データバッファ３５は、単に転送したデータ数をパイプ選択回路３４に伝達し、当該データ数に基づいて、パイプ選択回路３４が転送されたトランザクション数をカウントする。
【００３２】
プロトコルエンジン３６は、バス３８上に接続されている各ＵＳＢデバイス４１，４２，４３のいずれかとパイプ選択回路３４から供給されたパイプ情報ＰＩに従ってトランザクション単位の応答動作を行い、取得した応答結果をパイプ選択回路３４およびデータバッファ３５に通知する。
【００３３】
また、ＵＳＢホスト１からデータを送信する場合は、送信データをデータバッファ３５から取得し、ＵＳＢデバイス４０からデータを受信する場合は、受信データをデータバッファ３５に伝達する。
【００３４】
以上が実施の形態におけるホスト制御回路３０の構成の説明である。
【００３５】
図２は、ホスト制御回路３０の動作を示す流れ図である。以下、図２を用いてホスト制御回路３０の動作について説明する。まず、フレームによる転送に先立って、ＣＰＵ１０が転送スケジューリングを行って、パイプ制御ＰＣおよびパイプ情報ＰＩを作成し、パイプ制御バッファ３１およびパイプ情報バッファ３２にそれぞれ保存する。
【００３６】
次に、パイプ選択回路３４は、フレームタイマ３７からの入力信号に基づいて、現時点がデータの転送有効期間であるか否かを判定し、転送有効期間になると図２の処理を開始し、選択中の転送タイプの初期化（ステップＳ１１）およびパイプ番号の初期化（ステップＳ１２）を行う。
【００３７】
なお、ＵＳＢによるデータ転送では、
（１）アイソクロナス（Ｉｓｏｃｈｒｏｎｏｕｓ）転送：エラー処理や再送信処理を行わず、リアルタイム性を重視した転送モードで転送時の優先順位が最も高い転送と、
（２）インタラプト（Ｉｎｔｅｒｒｕｐｔ）転送：キーボードなどのヒューマンインタフェースデバイスとの転送に使用される転送モードで、データ量は少量であるが一定周期で優先的にデータ転送を行う必要がある転送と、
（３）コントロール（Ｃｏｎｔｒｏｌ）転送：ＵＳＢホスト１とＵＳＢデバイス４０との間の制御コマンドなどの転送に使用される転送モードと、
（４）バルク（Ｂｕｌｋ）転送：リアルタイム性はさほど重視されないがデータ量の多い転送に使用される転送モードで、転送時の優先順位が最も低い転送と、
の４つの転送タイプ（転送モード）があり、ホスト制御回路３０では、アイソクロナス転送を転送タイプ「０」、インタラプト転送を転送タイプ「１」、コントロール転送を転送タイプ「２」、バルク転送を転送タイプ「３」として識別する。すなわち、ステップＳ１１では、選択中の転送タイプを「０」に初期化することにより、まず、最も優先順位の高いアイソクロナス転送が選択される。
【００３８】
初期化が終了すると、パイプ選択回路３４は、パイプ制御バッファ３１にアクセスすることによりパイプ制御ＰＣを参照し、パイプ番号に示されるパイプについて、パイプ情報が有効（転送すべきデータが存在するパイプであることを示す）であり、かつ、転送タイプが選択中の転送タイプに一致するか否かを判定し（ステップＳ１３）、パイプ情報が有効、かつ、転送タイプが選択中の転送タイプに一致する場合にのみトランザクション転送処理（ステップＳ１４）を行う。
【００３９】
図３は、ステップＳ１４におけるトランザクション転送処理の詳細を示す流れ図である。トランザクション転送処理では、まず、トランザクションカウンタ３５０を「０」にクリアして（ステップＳ３１）、フレームタイマ３７からの入力に基づいてフレームが終了しているか否か、つまり現時点がフレーム内の転送有効期間であるか否かを判定する（ステップＳ３２）。
【００４０】
フレームが終了している場合は、転送情報バッファ３３にアクセスすることにより、転送情報ＴＩの当該パイプに関する部分を更新し（ステップＳ４０）、図２のステップＳ２１の処理に戻り、選択中の転送タイプがバルク転送（転送タイプ「３」）である場合にのみ、パイプ情報が有効なパイプ番号を保存し（ステップＳ２１，Ｓ２２）、処理を終了する。
【００４１】
なお、転送情報ＴＩの更新は、具体的には、トランザクションカウンタ３５０から入力される転送したトランザクション数に基づいて、パイプ選択回路３４が転送したデータ数を算出し、転送情報ＴＩの当該パイプについてのデータ転送数を書き換えることにより行う。
【００４２】
一方、フレームが終了していない場合は選択されているパイプにより、トランザクションを１つ転送するようプロトコルエンジン３６に指示を与え、さらに、プロトコルエンジン３６から当該トランザクションの転送に対する応答結果を取得する（ステップＳ３３）。
【００４３】
ステップＳ３３において、トランザクションが転送される処理を具体的に説明すると、まず、パイプ選択回路３４が、パイプ情報ＰＩのうちの選択されているパイプ番号に関する部分の情報をデータバッファ３５およびプロトコルエンジン３６に伝達する。
【００４４】
データバッファ３５は、受け取ったパイプ情報ＰＩに示される転送方向に基づいて、ＵＳＢホスト１とＵＳＢデバイス４０とのデータ転送が送信・受信のいずれであるかを判定する。
【００４５】
当該データ転送が送信である場合には、必要な送信データをメモリ２０から読み出して保持するとともに、パイプ制御バッファ３１にアクセスして、ＵＳＢデバイス４０への送信データが有効であることを示す情報をパイプ制御ＰＣに書き込む。さらに、プロトコルエンジン３６からの要求に応じて、バッファに保持した送信データをトランザクションごとに伝達する。
【００４６】
プロトコルエンジン３６は、パイプ情報ＰＩに示されるＵＳＢデバイス４０のアドレスおよび転送タイプに従って、データバッファ３５から伝達されたトランザクション（転送データ）をＵＳＢデバイス４０に対して転送するとともに、当該データ転送の応答結果を取得して、パイプ選択回路３４およびデータバッファ３５に伝達する。
【００４７】
一方、データ転送が受信である場合には、データバッファ３５は、バッファ上に必要な記憶領域を確保し、パイプ制御バッファ３１にアクセスして、ＵＳＢデバイス４０からの受信データを保存する領域が確保されたことを示す情報を書き込む。
【００４８】
プロトコルエンジン３６は、パイプ情報ＰＩに示されるＵＳＢデバイス４０のアドレスおよび転送タイプに従って、当該ＵＳＢデバイス４０に対して送信要求を行い、トランザクションを受信してデータバッファ３５に伝達する。さらに、当該データ転送の応答結果を取得して、パイプ選択回路３４およびデータバッファ３５に伝達する。
【００４９】
データバッファ３５は、トランザクション（転送データ）を正常に受信できた場合は、受信したトランザクションを一旦保持しつつ、メモリ２０の所定の領域に書き込む。以上がステップＳ３３の具体的な説明である。
【００５０】
次に、データバッファ３５はステップＳ３４を実行し、ステップＳ３３においてプロトコルエンジン３６から取得した応答結果がＡＣＫ（Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ：肯定応答）である場合は、転送したトランザクションが正常に転送されたことを示していることから、トランザクションカウンタ３５０をカウントアップし（ステップＳ３５）、パイプ選択回路３４に通知する。
【００５１】
パイプ選択回路３４は、データバッファ３５のトランザクションカウンタ３５０からの入力信号とパイプ情報ＰＩとに基づいて、転送を行うトランザクションの転送が終了しているか否かを判定し（ステップＳ３６）、まだ終了していない場合は、さらに当該パイプによるトランザクションの転送を行うため、ステップＳ３２に戻って処理を繰り返す。
【００５２】
これにより、転送が正常に行われている場合（応答結果がＡＣＫである場合）は、転送すべきトランザクションの転送が終了する（ステップＳ３６においてＹｅｓ）か、もしくはフレームの転送有効期間が終了する（ステップＳ３２においてＹｅｓ）まで、ステップＳ３２ないしＳ３６の処理が繰り返され、当該選択されているパイプ（転送権を有するパイプ）によるトランザクションの転送（ステップＳ３３）が繰り返し行われる。
【００５３】
トランザクションの転送が終了した場合は（ステップＳ３６においてＹｅｓ）、その旨をＣＰＵ１０に通知する（ステップＳ３７）とともに、転送情報ＴＩの当該パイプに関する部分を更新し（ステップＳ３９）、選択中のパイプによるトランザクション転送処理を終了して、図２のステップＳ１５に戻る。
【００５４】
これにより、ＣＰＵ１０は、当該パイプによるトランザクションの転送が正常に終了したことを検知することができるとともに、転送情報ＴＩにアクセスすることにより、必要な情報を得ることができる。
【００５５】
プロトコルエンジン３６から取得した応答結果がＡＣＫでなく（ステップＳ３４においてＮｏ）、エラーである場合は（ステップＳ３８においてＹｅｓ）、ＵＳＢホスト１とＵＳＢデバイス４０との間で何らかの転送エラーが生じているため、その旨をＣＰＵ１０に通知する（ステップＳ３７）とともに、転送情報ＴＩの当該パイプに関する部分を更新し（ステップＳ３９）、選択中のパイプによるトランザクション転送処理を終了して、図２のステップＳ１５に戻る。この場合、パイプ選択回路３４は、それまでに転送することができた転送データ数のみならず、転送エラーを示すデータを転送情報ＴＩの当該パイプに関する部分に含める。
【００５６】
これにより、ＣＰＵ１０は、当該パイプによるデータ転送において転送エラーが発生していることを検知することができるとともに、転送情報ＴＩにアクセスすることにより、それまでに転送できたデータ転送数などを確認することができる。
【００５７】
プロトコルエンジン３６から取得した応答結果が、ＡＣＫまたはエラーのいずれでもない場合は（ステップＳ３８においてＮｏ）、プロトコルエンジン３６から取得した応答結果がＮＡＫ（Ｎｏｔ　Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ：否定応答）であると判断できる。したがって、この場合にはパイプ選択回路３４は、ＣＰＵ１０への通知は行わず、転送情報ＴＩのみ更新して（ステップＳ３９）、選択中のパイプによるトランザクション転送処理を終了して、図２のステップＳ１５に戻る。
【００５８】
転送すべきトランザクションの転送終了、あるいは転送データに対する応答結果がエラーまたはＮＡＫであることにより、選択中のパイプのトランザクション転送処理（ステップＳ１４）が終了すると、パイプ選択回路３４は、フレームタイマ３７からの入力に基づいてフレームが終了しているか否かを判定する（ステップＳ１５）。フレームが終了している場合は、ステップＳ２１およびＳ２２を実行して処理を終了する。
【００５９】
一方、フレームが終了していない場合は、パイプ番号をインクリメントしてパイプを切り替えつつ（ステップＳ１６）、すべてのパイプについてステップＳ１３の判定が終了するまでステップＳ１３ないしＳ１７の処理を繰り返す（ステップＳ１７）。すなわち、ステップＳ１６は、データを転送する権利を次の優先順位に対応したパイプ番号を有するパイプに渡してパイプの選択を切り替える処理に相当する。
【００６０】
このように、本実施の形態におけるホスト制御回路３０は、トランザクションごとに取得される応答結果に応じて、データ転送を行うパイプを切り替えることができることから、例えば、ＣＰＵ１０との間でデータ転送を行っているＵＳＢデバイス４１がビジーである場合、つまりデータ転送を行うことができない状態に相当する場合に、ＵＳＢデバイス４１が使用しているパイプの選択を切り替えることにより、他のＵＳＢデバイス（４２または４３）が使用するパイプによるデータ転送を開始することができ、ＵＳＢデバイス４１のビジー状態が解消されるまで他のＵＳＢデバイスが待たされることがなく、転送効率を向上させることができる。
【００６１】
また、当該パイプの選択の切り替え処理は、ＣＰＵ１０による処理がなくてもホスト制御回路３０内で実行することができるため、ＣＰＵ１０の負荷を抑制しつつ、転送効率の向上を図ることができる。
【００６２】
さらに、応答結果は、トランザクションごとに得られるため、データ転送における最小単位であるトランザクションごとにデータ転送を行うパイプを切り替えることができ、さらに転送効率を向上させることができる。
【００６３】
選択中の転送タイプによってデータ転送を行うすべてのパイプについて、参照が終了した場合は（ステップＳ１７においてＹｅｓ）、転送タイプをインクリメントしつつ（ステップＳ１８）、すべての転送タイプについて処理が終了するまでステップＳ１２からの処理を繰り返す（ステップＳ１９）。すなわち、ステップＳ１８は、データを転送する権利を次の優先順位の転送タイプによってデータ転送を行うパイプに渡すことにより、パイプの選択を切り替える処理に相当する。
【００６４】
パイプ選択回路３４がこのような処理を行うことにより、転送タイプは、アイソクロナス転送、インタラプト転送、コントロール転送、バルク転送の順で選択され、各転送タイプごとにパイプ番号順にパイプが選択されてデータ転送が実行される。
【００６５】
なお、優先順位が最も低いバルク転送（転送タイプ「３」）が選択されている状態で、すべてのパイプに対する参照が終了すると、転送タイプが「４」にインクリメントされる（ステップＳ１８）。したがって、パイプ選択回路３４は、パイプ情報が有効となっているすべてのパイプについてデータ転送の機会が与えられた後は（ステップＳ１９においてＹｅｓ）、選択中の転送タイプを転送タイプ「２」（コントロール転送）に戻して（ステップＳ２０）、ステップＳ１２からの処理を繰り返す。
【００６６】
これにより、コントロール転送またはバルク転送によりデータ転送を行うパイプであって、応答結果（エラーまたはＮＡＫ）に応じて切り替えられたパイプについては、再度データ転送を行うパイプとして選択することができ、転送すべきトランザクションが残っているパイプ（パイプ制御ＰＣにおけるパイプ情報が有効となっているパイプ）については、フレームの転送有効期間である限りデータの再転送をさせて、残りのトランザクションを転送する機会を与えることで、さらに転送効率を向上させることができる。
【００６７】
以上の処理について、具体例を元に説明する。図４は、ホスト制御回路３０によるフレーム内のデータ転送の模式図である。なお、図４では、パイプ０とパイプ１とにより、トランスファ０（トランザクションＴ００ないしＴ０３により構成されるトランスファ）およびトランスファ１（トランザクションＴ１０ないしＴ１３により構成されるトランスファ）がそれぞれバルク転送される例を示している。また、図４に示す区間（時間）では、フレームは終了しないものとする。
【００６８】
まず、パイプ選択回路３４が、転送タイプ「３」（バルク転送）を選択中に、パイプ番号「０」を選択することにより、ステップＳ１３においてパイプ０について参照され、トランザクション転送処理（ステップＳ１４）が実行される。
【００６９】
これにより、まず、トランザクションＴ００が転送される。転送に対する応答結果がＡＣＫである限り、さらにトランザクションＴ０１，Ｔ０２が順次転送され、ステップＳ３５により正常に転送されたトランザクションに対して、トランザクションカウンタ３５０がカウントアップされる。すなわち、図４に示す、区間ＴＭ１の間、パイプ０によるバルク転送が行われる。
【００７０】
図４に示す例では、トランザクションＴ０２に対する応答結果が、ＮＡＫ（ステップＳ３４，Ｓ３８がいずれもＮｏと判定される。）となっている。したがって、パイプ選択回路３４は、ここまでに転送されたトランザクション数（Ｔ００，Ｔ０１の２つ）から、転送したデータ数を算出して、転送情報バッファ３３にアクセスすることにり転送情報ＴＩ０を更新し、パイプ０によるトランザクション転送処理を終了する。さらに、パイプ番号をインクリメントすることによって、選択していたパイプ０の切り替えを行い、パイプ１を選択する。
【００７１】
これにより、ステップＳ１３ではパイプ１が参照され、再びトランザクション転送処理（ステップＳ１４）が実行される。
【００７２】
区間ＴＭ２においても、区間ＴＭ１と同様に、まず、トランザクションＴ１０が転送され、当該転送に対する応答結果がＡＣＫであることから、さらにトランザクションＴ１１ないしＴ１３が順次転送されつつ、トランザクションが正常に転送されるたびに、トランザクションカウンタ３５０がカウントアップされる。
【００７３】
図４に示す例では、区間ＴＭ２における転送でも、トランザクションＴ１３に対する応答結果がＮＡＫとなっている。したがって、パイプ選択回路３４は、ここまでに転送されたトランザクション数（Ｔ１０ないしＴ１２の３つ）から、転送したデータ数を算出して、転送情報ＴＩ１を更新し、パイプ１によるトランザクション転送処理を終了する。さらに、パイプ番号がインクリメントされ、パイプ選択の切り替えが行われる。
【００７４】
この時点で、バルク転送におけるすべてのパイプの参照が終了していることから、パイプ選択回路３４は、ステップＳ２０を実行し、転送すべきトランザクションが残っているパイプについて、残りのトランザクションを転送する機会を与える。
【００７５】
図４に示す例では、区間ＴＭ２の後にパイプが切り替えられると、コントロール転送、バルク転送の順に転送タイプが選択される。そして、バルク転送が選択されている間にパイプ０が参照されると、パイプ０は転送すべきトランザクションが残っているため、パイプ０によるトランザクション転送処理（ステップＳ１４）が再開される。
【００７６】
このとき、パイプ選択回路３４は、転送情報ＴＩ０とパイプ情報ＰＩ０とを参照することにより、パイプ０において未転送のトランザクションＴ０２から転送を開始する。
【００７７】
これにより、区間ＴＭ３では、トランザクションＴ０２，Ｔ０３が順次転送され、トランザクションＴ０２，Ｔ０３の転送に対する応答結果がいずれもＡＣＫであることから、パイプ０によるトランザクションの転送が正常に終了する（トランスファが終了する）。したがって、パイプ選択回路３４は、ＣＰＵ１０への通知を行うとともに（ステップＳ３７）、転送情報ＴＩ０を更新し（ステップＳ３９）、パイプ０によるトランザクション転送処理を終了する。
【００７８】
さらに、パイプ番号をインクリメントすることによってパイプの切り替えを行い、パイプ１によるトランザクション転送処理を開始する。この場合も、転送情報ＴＩ１とパイプ情報ＰＩ１とを参照することにより、未転送のトランザクションＴ１３から転送を再開する。
【００７９】
トランザクションＴ１３の転送に対する応答結果がＡＣＫであるため、パイプ１によるトランザクションの転送が正常に終了し、パイプ選択回路３４は、ＣＰＵ１０への通知を行うとともに（ステップＳ３７）、転送情報ＴＩ１を更新し（ステップＳ３９）、パイプ１によるトランザクション転送処理を終了する。
【００８０】
以後、有効なパイプ情報が存在しないことから、トランザクション転送処理が実行されることはなく、フレーム内の転送有効期間が終了（図示せず）することにより、ステップＳ２１，Ｓ２２が実行された後、処理が終了する。
【００８１】
以上のように、ホスト制御回路３０では、パイプ選択回路３４がデータ転送が正常に終了した場合（ステップＳ３６においてＹｅｓ）のみならず、データ転送にエラーが生じた場合や、ＮＡＫ応答（ビジー応答など）があった場合であっても、ＣＰＵ１０による指示を待つことなく、当該パイプによるデータ転送を終了して、他のパイプによるデータ転送を開始させることができ、ＣＰＵ１０の負担を抑制しつつ、転送効率の向上を図ることができる。
【００８２】
また、コントロール転送およびバルク転送によるデータ転送を行うパイプについては、一旦、応答結果としてエラーやＮＡＫを受け取ることにより、データ転送を終了した場合であっても、フレーム内の転送有効期間が残っている限り、再転送を行うことができるため、より転送効率を向上させることができる。
【００８３】
【発明の効果】
以上説明したように、請求項１ないし７に記載の発明では、取得された応答結果に応じて、通信チャネルの選択を切り替えることにより、ＣＰＵの負担を抑制しつつ、転送効率を向上させることができる。
【００８４】
請求項２に記載の発明では、通信チャネルにより転送されるトランザクションごとに応答結果を取得することにより、データ転送の最小単位ごとに応答結果を取得して、通信チャネルの選択の切り替えを行うことができるため、より転送効率を向上させることができる。
【００８５】
請求項３に記載の発明では、応答結果が、エラーまたはＮＡＫである場合に通信チャネルの選択を切り替えることにより、通信チャネルがデータ転送を行うことができない場合に他の通信チャネルに切り替えることができることから、転送効率を向上させることができる。
【００８６】
請求項４に記載の発明では、記憶手段に記憶されている優先順位に従って、通信チャネルの選択を切り替えることにより、通信チャネルを効率よく切り替えることができる。
【００８７】
請求項５に記載の発明では、応答結果に応じて切り替えられた通信チャネルについては、転送有効期間であると判定された時間内にデータの再転送をさせることにより、現時点がフレーム内の転送有効期間である場合には、一旦、中断した通信チャネルについてリトライすることで、さらに転送効率を向上させることができる。
【図面の簡単な説明】
【図１】この発明の実施の形態のホスト制御回路を他の構成とともに示す図である。
【図２】ホスト制御回路の動作を示す流れ図である。
【図３】ホスト制御回路におけるトランザクション転送処理の詳細を示す流れ図である。
【図４】ホスト制御回路によるフレーム内のデータ転送の模式図である。
【符号の説明】
１　ＵＳＢホスト、１０　ＣＰＵ、２０　メモリ、３０　ホスト制御回路、３１　パイプ制御バッファ、３２　パイプ情報バッファ、３３　転送情報バッファ、３４　パイプ選択回路、３５　データバッファ、３５０　トランザクションカウンタ、３６　プロトコルエンジン、３７　フレームタイマ、３８　バス、４０，４１，４２，４３　ＵＳＢデバイス。
【図１】
2004046392.tif 000003
【図２】
2004046392.tif 000004
【図３】
2004046392.tif 000005
【図４】
2004046392.tif 000006