JP2004046392A - Usbホスト制御回路 - Google Patents
Usbホスト制御回路 Download PDFInfo
- Publication number
- JP2004046392A JP2004046392A JP2002200792A JP2002200792A JP2004046392A JP 2004046392 A JP2004046392 A JP 2004046392A JP 2002200792 A JP2002200792 A JP 2002200792A JP 2002200792 A JP2002200792 A JP 2002200792A JP 2004046392 A JP2004046392 A JP 2004046392A
- Authority
- JP
- Japan
- Prior art keywords
- transfer
- pipe
- control circuit
- data
- host control
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012546 transfer Methods 0.000 claims abstract description 255
- 230000004044 response Effects 0.000 claims abstract description 44
- 238000004891 communication Methods 0.000 claims description 48
- 239000000872 buffer Substances 0.000 abstract description 55
- 238000012545 processing Methods 0.000 description 24
- 238000000034 method Methods 0.000 description 21
- 230000005540 biological transmission Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 4
- 239000012536 storage buffer Substances 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- ATJFFYVFTNAWJD-UHFFFAOYSA-N Tin Chemical compound [Sn] ATJFFYVFTNAWJD-UHFFFAOYSA-N 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
Images
Landscapes
- Information Transfer Systems (AREA)
- Bus Control (AREA)
Abstract
【課題】CPUの負荷を抑制しつつ、転送効率を向上させることができるUSBホスト制御回路を提供する。
【解決手段】USB制御回路にパイプ制御バッファ31、パイプ情報バッファ32、転送情報バッファ33、パイプ選択回路34、およびプロトコルエンジン36を設ける。パイプ選択回路34は、パイプ制御バッファ31およびパイプ情報バッファ33に記憶されている情報に従って、CPU10とUSBデバイス40との間でデータ転送を行うパイプを選択する。さらに、プロトコルエンジン36からデータ転送に対する応答結果を取得し、当該応答結果に応じて、転送情報バッファ33の内容を書き換えつつ、データ転送を行うパイプを切り替える。
【選択図】 図1
【解決手段】USB制御回路にパイプ制御バッファ31、パイプ情報バッファ32、転送情報バッファ33、パイプ選択回路34、およびプロトコルエンジン36を設ける。パイプ選択回路34は、パイプ制御バッファ31およびパイプ情報バッファ33に記憶されている情報に従って、CPU10とUSBデバイス40との間でデータ転送を行うパイプを選択する。さらに、プロトコルエンジン36からデータ転送に対する応答結果を取得し、当該応答結果に応じて、転送情報バッファ33の内容を書き換えつつ、データ転送を行うパイプを切り替える。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
この発明はデータ通信技術に関する。より詳しくは、USBを介した通信を制御する技術に関する。
【0002】
【従来の技術】
USBを介した通信においては、単一のUSBホストと単一または複数のUSBデバイスとの間で通信(データ転送)が行われる。複数のUSBデバイスとの間でデータ転送を行う場合、USBホストとUSBデバイスとはそれぞれのパイプと呼ばれる通信チャネル(論理チャネル)を用いて、時分割処理によりデータ転送を行う。
【0003】
USBホストは複数のUSBデバイスとの通信を行うために、予め転送スケジューリング(通信チャネルのルーチング)を行う。転送スケジューリングとは、フレームと呼ばれる単位時間内の転送有効期間において、どのUSBデバイスがどのパイプで通信を行うかを決定するとともに、各パイプの通信順序(優先順位)を決定することをいう。
【0004】
これにより、USBを用いたデータ転送におけるデータはフレームに分割されて転送され、フレームの中に各USBデバイス用のデータ転送時間を割り振ることで、USBホストは、各USBデバイスに対して公平にデータ転送の機会を与えるように動作することとなる。
【0005】
従来より、USBホストによる転送スケジューリングは、フレームごとに、トランスファ単位で行われ、複数のパイプを用いて通信が行われる場合には各パイプのデータ転送がフレーム内で平均するように構成される。
【0006】
【発明が解決しようとする課題】
ところが、上記のような従来のUSBホストでは、あるフレーム内でデータを送信するよう割り当てられたパイプがビジー状態であったとしても、転送スケジューリングがフレームごとに行われるため、当該フレームが終了しない限り転送スケジューリングの更新は行われない。したがって、フレームにおいてパイプのビジー状態が続くと、その間、当該フレームにおけるデータ転送は一切行われないことから、通信全体の転送効率が下がるという問題があった。
【0007】
この問題を解決するため、例えば、各パイプの状態を監視し、通信の状況に合わせて転送スケジューリングを更新しようとした場合、転送スケジューリングにはCPU処理が必要であることから、CPUに対する負荷が増大してしまうという問題があった。
【0008】
特に、1トランスファに含まれるトランザクション数が少ない場合には、1つのフレーム内に定義されるパイプの数が増加し、スケジューリングすべきパイプの数が増加するため、特にCPUの処理が増大するという問題があった。
【0009】
この発明は上記問題点を解決するためになされたもので、CPUに対する負荷を抑制しつつ、USBにおける転送効率を向上させるUSBホスト制御回路を得ることを目的とする。
【0010】
【課題を解決するための手段】
上記の課題を解決するため、請求項1の発明は、CPUと複数のUSBデバイスとの間のデータ転送を制御するUSBホスト制御回路であって、各USBデバイスのそれぞれが前記CPUとデータ転送を行うための複数の通信チャネルと、前記複数の通信チャネルのうちから前記データ転送を行う通信チャネルを選択するチャネル選択手段と、前記チャネル選択手段により選択された前記通信チャネルによって行われたデータ転送に対する応答結果を取得する取得手段とを備え、前記チャネル選択手段が、前記取得手段により取得された前記応答結果に応じて、前記通信チャネルの選択を切り替える。
【0011】
また、請求項2の発明は、請求項1の発明に係るUSBホスト制御回路であって、取得手段は、通信チャネルにより転送されるトランザクションごとに応答結果を取得する。
【0012】
また、請求項3の発明は、請求項1または2の発明に係るUSBホスト制御回路であって、チャネル選択手段は、応答結果が、エラーまたはNAKである場合に通信チャネルの選択を切り替える。
【0013】
また、請求項4の発明は、請求項1ないし3のいずれかの発明に係るUSBホスト制御回路であって、各通信チャネルの優先順位を記憶する記憶手段を備え、チャネル選択手段は、前記記憶手段に記憶されている前記優先順位に従って、前記通信チャネルの選択を切り替える。
【0014】
また、請求項5の発明は、請求項1ないし4のいずれかの発明に係るUSBホスト制御回路であって、チャネル選択手段は、現時点が、フレーム内の転送有効期間であるか否かを判定する可否判定手段を有し、応答結果に応じて選択が切り替えられた通信チャネルについては、前記可否判定手段により転送有効期間であると判定された時間内にデータの再転送をさせる。
【0015】
また、請求項6の発明は、請求項5の発明に係るUSBホスト制御回路であって、チャネル選択手段は、転送されるデータの転送タイプを各通信チャネルごとに判定する転送タイプ判定手段をさらに有し、前記転送タイプ判定手段により所定の転送タイプであると判定された通信チャネルに対してのみ前記データの再転送をさせる。
【0016】
また、請求項7の発明は、請求項6の発明に係るUSBホスト制御回路であって、所定の転送タイプが、コントロール転送、またはバルク転送である。
【0017】
【発明の実施の形態】
図1はこの発明の実施の形態であるUSBホスト1の構成を他の構成とともに示すブロック図である。USBホスト1は、バス38を介して各USBデバイス41,42,43(以下、総称する場合は「USBデバイス40」と称する)との間でデータ転送を行う。
【0018】
USBホスト1は、各種データの演算や制御信号の生成を行うCPU10、各種データを保存するメモリ20、およびCPU10とUSBデバイス40との間でUSBを介したデータ転送を制御するホスト制御回路30を備える。
【0019】
ホスト制御回路30は、パイプ制御バッファ31、パイプ情報バッファ32、転送情報バッファ33、パイプ選択回路34、データバッファ35、プロトコルエンジン36、フレームタイマ37、およびバス38を備え、後述する処理を実行する専用のハードウェアとして構成されている。
【0020】
また、USBを介したデータ転送では、前述のように、各USBデバイス41,42,43のそれぞれが、CPU10とデータ転送を行うための複数のパイプを定義することにより、時分割処理が行われる。
【0021】
パイプ制御バッファ31は、各パイプを制御するための情報(パイプ制御PC)を保持する記憶バッファであり、具体的には、各パイプにおける転送タイプ、パイプ情報の有効・無効、データバッファ35に記憶されているUSBデバイス40への送信データの有効・無効、データバッファ35におけるUSBデバイス40からの受信データを保存する領域の有無などが含まれる。なお、これらの情報は、各パイプごとに存在し、図1に示すように、それぞれパイプ制御PC0、パイプ制御PC1、・・・、パイプ制御PCnのように各パイプ番号をキーとして識別可能な状態で保持される(nは126以下の任意の整数)。
【0022】
パイプ情報バッファ32は、各パイプに関する情報(パイプ情報PI)を保持するための記憶バッファであり、具体的には、各パイプを使用する各USBデバイス41,42,43のアドレス、エンドポイント、最大パケットサイズ、転送方向、およびトランザクションの数などが含まれる。また、これらの情報も、パイプ制御PCと同様に、各パイプごとに存在し、それぞれパイプ情報PI0、パイプ情報PI1、・・・、パイプ情報PInのように識別可能な状態で保持される。
【0023】
なお、詳細は後述するが、本実施の形態におけるホスト制御回路30では、転送タイプおよびパイプ番号に基づいてパイプ選択における優先順位が決定される。すなわち、パイプ制御バッファ31およびパイプ情報バッファ32が通信チャネルの優先順位を記憶する記憶手段に相当する。
【0024】
転送情報バッファ33は、各パイプの通信結果に関する情報(転送情報TI)を保持する記憶バッファであり、転送完了、転送エラー、転送データ数などが含まれる。また、これらの情報も、各パイプごとに存在し、それぞれ転送情報TI0、転送情報TI1、・・・、転送情報TInのように識別可能な状態で保持される。
【0025】
パイプ選択回路34は、計時機能を有するフレームタイマ37の出力に基づいて、フレームの開始・終了、その時点が転送有効期間であるか否かの判定などのフレーム管理を行う。
【0026】
また、パイプ選択回路34は、パイプ制御バッファ31、パイプ情報バッファ32、および転送情報バッファ33にそれぞれアクセス可能とされており、それらに保持されている情報に基づいて、フレームの転送有効期間中に、データ転送を行うパイプを選択する。
【0027】
さらに、パイプ選択回路34は、選択したパイプに関するパイプ情報PIをデータバッファ35とプロトコルエンジン36とに伝達するとともに、データバッファ35からは転送したトランザクション数に関する情報、プロトコルエンジン36からは各トランザクションごとの各USBデバイス41,42,43の応答結果に関する情報をそれぞれ受け取り、転送情報バッファ33にアクセスして、転送情報TIを必要に応じて書き換える。
【0028】
データバッファ35は、パイプ選択回路34により選択されたパイプによって転送されるデータ(CPU10が送信するデータおよびUSBデバイス40が送信するデータ)を保持するための記憶バッファであり、プロトコルエンジン36とメモリ20との間のデータのやり取りの調停を行う。
【0029】
また、データバッファ35は、パイプ制御バッファ31にアクセスすることにより、USBデバイス40への送信データの有効・無効、USBデバイス40からの受信データを保存する領域の有無など、データバッファ35の状態をパイプ制御PCとして書き込む。
【0030】
さらに、転送したデータ数に基づいて、転送されたトランザクション数をカウントするトランザクションカウンタ350を備え、パイプ選択回路34に転送したトランザクション数を通知する。
【0031】
なお、データが現実に転送されたか否かの判定は、データバッファ35が、プロトコルエンジン36から通知される、当該転送データに対する応答結果に関する情報に基づいて行う。また、本実施形態では、トランザクションカウンタ350をデータバッファ35が備えているが、トランザクションカウンタ350の機能をパイプ選択回路34が有していてもよい。その場合、データバッファ35は、単に転送したデータ数をパイプ選択回路34に伝達し、当該データ数に基づいて、パイプ選択回路34が転送されたトランザクション数をカウントする。
【0032】
プロトコルエンジン36は、バス38上に接続されている各USBデバイス41,42,43のいずれかとパイプ選択回路34から供給されたパイプ情報PIに従ってトランザクション単位の応答動作を行い、取得した応答結果をパイプ選択回路34およびデータバッファ35に通知する。
【0033】
また、USBホスト1からデータを送信する場合は、送信データをデータバッファ35から取得し、USBデバイス40からデータを受信する場合は、受信データをデータバッファ35に伝達する。
【0034】
以上が実施の形態におけるホスト制御回路30の構成の説明である。
【0035】
図2は、ホスト制御回路30の動作を示す流れ図である。以下、図2を用いてホスト制御回路30の動作について説明する。まず、フレームによる転送に先立って、CPU10が転送スケジューリングを行って、パイプ制御PCおよびパイプ情報PIを作成し、パイプ制御バッファ31およびパイプ情報バッファ32にそれぞれ保存する。
【0036】
次に、パイプ選択回路34は、フレームタイマ37からの入力信号に基づいて、現時点がデータの転送有効期間であるか否かを判定し、転送有効期間になると図2の処理を開始し、選択中の転送タイプの初期化(ステップS11)およびパイプ番号の初期化(ステップS12)を行う。
【0037】
なお、USBによるデータ転送では、
(1)アイソクロナス(Isochronous)転送:エラー処理や再送信処理を行わず、リアルタイム性を重視した転送モードで転送時の優先順位が最も高い転送と、
(2)インタラプト(Interrupt)転送:キーボードなどのヒューマンインタフェースデバイスとの転送に使用される転送モードで、データ量は少量であるが一定周期で優先的にデータ転送を行う必要がある転送と、
(3)コントロール(Control)転送:USBホスト1とUSBデバイス40との間の制御コマンドなどの転送に使用される転送モードと、
(4)バルク(Bulk)転送:リアルタイム性はさほど重視されないがデータ量の多い転送に使用される転送モードで、転送時の優先順位が最も低い転送と、
の4つの転送タイプ(転送モード)があり、ホスト制御回路30では、アイソクロナス転送を転送タイプ「0」、インタラプト転送を転送タイプ「1」、コントロール転送を転送タイプ「2」、バルク転送を転送タイプ「3」として識別する。すなわち、ステップS11では、選択中の転送タイプを「0」に初期化することにより、まず、最も優先順位の高いアイソクロナス転送が選択される。
【0038】
初期化が終了すると、パイプ選択回路34は、パイプ制御バッファ31にアクセスすることによりパイプ制御PCを参照し、パイプ番号に示されるパイプについて、パイプ情報が有効(転送すべきデータが存在するパイプであることを示す)であり、かつ、転送タイプが選択中の転送タイプに一致するか否かを判定し(ステップS13)、パイプ情報が有効、かつ、転送タイプが選択中の転送タイプに一致する場合にのみトランザクション転送処理(ステップS14)を行う。
【0039】
図3は、ステップS14におけるトランザクション転送処理の詳細を示す流れ図である。トランザクション転送処理では、まず、トランザクションカウンタ350を「0」にクリアして(ステップS31)、フレームタイマ37からの入力に基づいてフレームが終了しているか否か、つまり現時点がフレーム内の転送有効期間であるか否かを判定する(ステップS32)。
【0040】
フレームが終了している場合は、転送情報バッファ33にアクセスすることにより、転送情報TIの当該パイプに関する部分を更新し(ステップS40)、図2のステップS21の処理に戻り、選択中の転送タイプがバルク転送(転送タイプ「3」)である場合にのみ、パイプ情報が有効なパイプ番号を保存し(ステップS21,S22)、処理を終了する。
【0041】
なお、転送情報TIの更新は、具体的には、トランザクションカウンタ350から入力される転送したトランザクション数に基づいて、パイプ選択回路34が転送したデータ数を算出し、転送情報TIの当該パイプについてのデータ転送数を書き換えることにより行う。
【0042】
一方、フレームが終了していない場合は選択されているパイプにより、トランザクションを1つ転送するようプロトコルエンジン36に指示を与え、さらに、プロトコルエンジン36から当該トランザクションの転送に対する応答結果を取得する(ステップS33)。
【0043】
ステップS33において、トランザクションが転送される処理を具体的に説明すると、まず、パイプ選択回路34が、パイプ情報PIのうちの選択されているパイプ番号に関する部分の情報をデータバッファ35およびプロトコルエンジン36に伝達する。
【0044】
データバッファ35は、受け取ったパイプ情報PIに示される転送方向に基づいて、USBホスト1とUSBデバイス40とのデータ転送が送信・受信のいずれであるかを判定する。
【0045】
当該データ転送が送信である場合には、必要な送信データをメモリ20から読み出して保持するとともに、パイプ制御バッファ31にアクセスして、USBデバイス40への送信データが有効であることを示す情報をパイプ制御PCに書き込む。さらに、プロトコルエンジン36からの要求に応じて、バッファに保持した送信データをトランザクションごとに伝達する。
【0046】
プロトコルエンジン36は、パイプ情報PIに示されるUSBデバイス40のアドレスおよび転送タイプに従って、データバッファ35から伝達されたトランザクション(転送データ)をUSBデバイス40に対して転送するとともに、当該データ転送の応答結果を取得して、パイプ選択回路34およびデータバッファ35に伝達する。
【0047】
一方、データ転送が受信である場合には、データバッファ35は、バッファ上に必要な記憶領域を確保し、パイプ制御バッファ31にアクセスして、USBデバイス40からの受信データを保存する領域が確保されたことを示す情報を書き込む。
【0048】
プロトコルエンジン36は、パイプ情報PIに示されるUSBデバイス40のアドレスおよび転送タイプに従って、当該USBデバイス40に対して送信要求を行い、トランザクションを受信してデータバッファ35に伝達する。さらに、当該データ転送の応答結果を取得して、パイプ選択回路34およびデータバッファ35に伝達する。
【0049】
データバッファ35は、トランザクション(転送データ)を正常に受信できた場合は、受信したトランザクションを一旦保持しつつ、メモリ20の所定の領域に書き込む。以上がステップS33の具体的な説明である。
【0050】
次に、データバッファ35はステップS34を実行し、ステップS33においてプロトコルエンジン36から取得した応答結果がACK(Acknowledgement:肯定応答)である場合は、転送したトランザクションが正常に転送されたことを示していることから、トランザクションカウンタ350をカウントアップし(ステップS35)、パイプ選択回路34に通知する。
【0051】
パイプ選択回路34は、データバッファ35のトランザクションカウンタ350からの入力信号とパイプ情報PIとに基づいて、転送を行うトランザクションの転送が終了しているか否かを判定し(ステップS36)、まだ終了していない場合は、さらに当該パイプによるトランザクションの転送を行うため、ステップS32に戻って処理を繰り返す。
【0052】
これにより、転送が正常に行われている場合(応答結果がACKである場合)は、転送すべきトランザクションの転送が終了する(ステップS36においてYes)か、もしくはフレームの転送有効期間が終了する(ステップS32においてYes)まで、ステップS32ないしS36の処理が繰り返され、当該選択されているパイプ(転送権を有するパイプ)によるトランザクションの転送(ステップS33)が繰り返し行われる。
【0053】
トランザクションの転送が終了した場合は(ステップS36においてYes)、その旨をCPU10に通知する(ステップS37)とともに、転送情報TIの当該パイプに関する部分を更新し(ステップS39)、選択中のパイプによるトランザクション転送処理を終了して、図2のステップS15に戻る。
【0054】
これにより、CPU10は、当該パイプによるトランザクションの転送が正常に終了したことを検知することができるとともに、転送情報TIにアクセスすることにより、必要な情報を得ることができる。
【0055】
プロトコルエンジン36から取得した応答結果がACKでなく(ステップS34においてNo)、エラーである場合は(ステップS38においてYes)、USBホスト1とUSBデバイス40との間で何らかの転送エラーが生じているため、その旨をCPU10に通知する(ステップS37)とともに、転送情報TIの当該パイプに関する部分を更新し(ステップS39)、選択中のパイプによるトランザクション転送処理を終了して、図2のステップS15に戻る。この場合、パイプ選択回路34は、それまでに転送することができた転送データ数のみならず、転送エラーを示すデータを転送情報TIの当該パイプに関する部分に含める。
【0056】
これにより、CPU10は、当該パイプによるデータ転送において転送エラーが発生していることを検知することができるとともに、転送情報TIにアクセスすることにより、それまでに転送できたデータ転送数などを確認することができる。
【0057】
プロトコルエンジン36から取得した応答結果が、ACKまたはエラーのいずれでもない場合は(ステップS38においてNo)、プロトコルエンジン36から取得した応答結果がNAK(Not Acknowledgement:否定応答)であると判断できる。したがって、この場合にはパイプ選択回路34は、CPU10への通知は行わず、転送情報TIのみ更新して(ステップS39)、選択中のパイプによるトランザクション転送処理を終了して、図2のステップS15に戻る。
【0058】
転送すべきトランザクションの転送終了、あるいは転送データに対する応答結果がエラーまたはNAKであることにより、選択中のパイプのトランザクション転送処理(ステップS14)が終了すると、パイプ選択回路34は、フレームタイマ37からの入力に基づいてフレームが終了しているか否かを判定する(ステップS15)。フレームが終了している場合は、ステップS21およびS22を実行して処理を終了する。
【0059】
一方、フレームが終了していない場合は、パイプ番号をインクリメントしてパイプを切り替えつつ(ステップS16)、すべてのパイプについてステップS13の判定が終了するまでステップS13ないしS17の処理を繰り返す(ステップS17)。すなわち、ステップS16は、データを転送する権利を次の優先順位に対応したパイプ番号を有するパイプに渡してパイプの選択を切り替える処理に相当する。
【0060】
このように、本実施の形態におけるホスト制御回路30は、トランザクションごとに取得される応答結果に応じて、データ転送を行うパイプを切り替えることができることから、例えば、CPU10との間でデータ転送を行っているUSBデバイス41がビジーである場合、つまりデータ転送を行うことができない状態に相当する場合に、USBデバイス41が使用しているパイプの選択を切り替えることにより、他のUSBデバイス(42または43)が使用するパイプによるデータ転送を開始することができ、USBデバイス41のビジー状態が解消されるまで他のUSBデバイスが待たされることがなく、転送効率を向上させることができる。
【0061】
また、当該パイプの選択の切り替え処理は、CPU10による処理がなくてもホスト制御回路30内で実行することができるため、CPU10の負荷を抑制しつつ、転送効率の向上を図ることができる。
【0062】
さらに、応答結果は、トランザクションごとに得られるため、データ転送における最小単位であるトランザクションごとにデータ転送を行うパイプを切り替えることができ、さらに転送効率を向上させることができる。
【0063】
選択中の転送タイプによってデータ転送を行うすべてのパイプについて、参照が終了した場合は(ステップS17においてYes)、転送タイプをインクリメントしつつ(ステップS18)、すべての転送タイプについて処理が終了するまでステップS12からの処理を繰り返す(ステップS19)。すなわち、ステップS18は、データを転送する権利を次の優先順位の転送タイプによってデータ転送を行うパイプに渡すことにより、パイプの選択を切り替える処理に相当する。
【0064】
パイプ選択回路34がこのような処理を行うことにより、転送タイプは、アイソクロナス転送、インタラプト転送、コントロール転送、バルク転送の順で選択され、各転送タイプごとにパイプ番号順にパイプが選択されてデータ転送が実行される。
【0065】
なお、優先順位が最も低いバルク転送(転送タイプ「3」)が選択されている状態で、すべてのパイプに対する参照が終了すると、転送タイプが「4」にインクリメントされる(ステップS18)。したがって、パイプ選択回路34は、パイプ情報が有効となっているすべてのパイプについてデータ転送の機会が与えられた後は(ステップS19においてYes)、選択中の転送タイプを転送タイプ「2」(コントロール転送)に戻して(ステップS20)、ステップS12からの処理を繰り返す。
【0066】
これにより、コントロール転送またはバルク転送によりデータ転送を行うパイプであって、応答結果(エラーまたはNAK)に応じて切り替えられたパイプについては、再度データ転送を行うパイプとして選択することができ、転送すべきトランザクションが残っているパイプ(パイプ制御PCにおけるパイプ情報が有効となっているパイプ)については、フレームの転送有効期間である限りデータの再転送をさせて、残りのトランザクションを転送する機会を与えることで、さらに転送効率を向上させることができる。
【0067】
以上の処理について、具体例を元に説明する。図4は、ホスト制御回路30によるフレーム内のデータ転送の模式図である。なお、図4では、パイプ0とパイプ1とにより、トランスファ0(トランザクションT00ないしT03により構成されるトランスファ)およびトランスファ1(トランザクションT10ないしT13により構成されるトランスファ)がそれぞれバルク転送される例を示している。また、図4に示す区間(時間)では、フレームは終了しないものとする。
【0068】
まず、パイプ選択回路34が、転送タイプ「3」(バルク転送)を選択中に、パイプ番号「0」を選択することにより、ステップS13においてパイプ0について参照され、トランザクション転送処理(ステップS14)が実行される。
【0069】
これにより、まず、トランザクションT00が転送される。転送に対する応答結果がACKである限り、さらにトランザクションT01,T02が順次転送され、ステップS35により正常に転送されたトランザクションに対して、トランザクションカウンタ350がカウントアップされる。すなわち、図4に示す、区間TM1の間、パイプ0によるバルク転送が行われる。
【0070】
図4に示す例では、トランザクションT02に対する応答結果が、NAK(ステップS34,S38がいずれもNoと判定される。)となっている。したがって、パイプ選択回路34は、ここまでに転送されたトランザクション数(T00,T01の2つ)から、転送したデータ数を算出して、転送情報バッファ33にアクセスすることにり転送情報TI0を更新し、パイプ0によるトランザクション転送処理を終了する。さらに、パイプ番号をインクリメントすることによって、選択していたパイプ0の切り替えを行い、パイプ1を選択する。
【0071】
これにより、ステップS13ではパイプ1が参照され、再びトランザクション転送処理(ステップS14)が実行される。
【0072】
区間TM2においても、区間TM1と同様に、まず、トランザクションT10が転送され、当該転送に対する応答結果がACKであることから、さらにトランザクションT11ないしT13が順次転送されつつ、トランザクションが正常に転送されるたびに、トランザクションカウンタ350がカウントアップされる。
【0073】
図4に示す例では、区間TM2における転送でも、トランザクションT13に対する応答結果がNAKとなっている。したがって、パイプ選択回路34は、ここまでに転送されたトランザクション数(T10ないしT12の3つ)から、転送したデータ数を算出して、転送情報TI1を更新し、パイプ1によるトランザクション転送処理を終了する。さらに、パイプ番号がインクリメントされ、パイプ選択の切り替えが行われる。
【0074】
この時点で、バルク転送におけるすべてのパイプの参照が終了していることから、パイプ選択回路34は、ステップS20を実行し、転送すべきトランザクションが残っているパイプについて、残りのトランザクションを転送する機会を与える。
【0075】
図4に示す例では、区間TM2の後にパイプが切り替えられると、コントロール転送、バルク転送の順に転送タイプが選択される。そして、バルク転送が選択されている間にパイプ0が参照されると、パイプ0は転送すべきトランザクションが残っているため、パイプ0によるトランザクション転送処理(ステップS14)が再開される。
【0076】
このとき、パイプ選択回路34は、転送情報TI0とパイプ情報PI0とを参照することにより、パイプ0において未転送のトランザクションT02から転送を開始する。
【0077】
これにより、区間TM3では、トランザクションT02,T03が順次転送され、トランザクションT02,T03の転送に対する応答結果がいずれもACKであることから、パイプ0によるトランザクションの転送が正常に終了する(トランスファが終了する)。したがって、パイプ選択回路34は、CPU10への通知を行うとともに(ステップS37)、転送情報TI0を更新し(ステップS39)、パイプ0によるトランザクション転送処理を終了する。
【0078】
さらに、パイプ番号をインクリメントすることによってパイプの切り替えを行い、パイプ1によるトランザクション転送処理を開始する。この場合も、転送情報TI1とパイプ情報PI1とを参照することにより、未転送のトランザクションT13から転送を再開する。
【0079】
トランザクションT13の転送に対する応答結果がACKであるため、パイプ1によるトランザクションの転送が正常に終了し、パイプ選択回路34は、CPU10への通知を行うとともに(ステップS37)、転送情報TI1を更新し(ステップS39)、パイプ1によるトランザクション転送処理を終了する。
【0080】
以後、有効なパイプ情報が存在しないことから、トランザクション転送処理が実行されることはなく、フレーム内の転送有効期間が終了(図示せず)することにより、ステップS21,S22が実行された後、処理が終了する。
【0081】
以上のように、ホスト制御回路30では、パイプ選択回路34がデータ転送が正常に終了した場合(ステップS36においてYes)のみならず、データ転送にエラーが生じた場合や、NAK応答(ビジー応答など)があった場合であっても、CPU10による指示を待つことなく、当該パイプによるデータ転送を終了して、他のパイプによるデータ転送を開始させることができ、CPU10の負担を抑制しつつ、転送効率の向上を図ることができる。
【0082】
また、コントロール転送およびバルク転送によるデータ転送を行うパイプについては、一旦、応答結果としてエラーやNAKを受け取ることにより、データ転送を終了した場合であっても、フレーム内の転送有効期間が残っている限り、再転送を行うことができるため、より転送効率を向上させることができる。
【0083】
【発明の効果】
以上説明したように、請求項1ないし7に記載の発明では、取得された応答結果に応じて、通信チャネルの選択を切り替えることにより、CPUの負担を抑制しつつ、転送効率を向上させることができる。
【0084】
請求項2に記載の発明では、通信チャネルにより転送されるトランザクションごとに応答結果を取得することにより、データ転送の最小単位ごとに応答結果を取得して、通信チャネルの選択の切り替えを行うことができるため、より転送効率を向上させることができる。
【0085】
請求項3に記載の発明では、応答結果が、エラーまたはNAKである場合に通信チャネルの選択を切り替えることにより、通信チャネルがデータ転送を行うことができない場合に他の通信チャネルに切り替えることができることから、転送効率を向上させることができる。
【0086】
請求項4に記載の発明では、記憶手段に記憶されている優先順位に従って、通信チャネルの選択を切り替えることにより、通信チャネルを効率よく切り替えることができる。
【0087】
請求項5に記載の発明では、応答結果に応じて切り替えられた通信チャネルについては、転送有効期間であると判定された時間内にデータの再転送をさせることにより、現時点がフレーム内の転送有効期間である場合には、一旦、中断した通信チャネルについてリトライすることで、さらに転送効率を向上させることができる。
【図面の簡単な説明】
【図1】この発明の実施の形態のホスト制御回路を他の構成とともに示す図である。
【図2】ホスト制御回路の動作を示す流れ図である。
【図3】ホスト制御回路におけるトランザクション転送処理の詳細を示す流れ図である。
【図4】ホスト制御回路によるフレーム内のデータ転送の模式図である。
【符号の説明】
1 USBホスト、10 CPU、20 メモリ、30 ホスト制御回路、31 パイプ制御バッファ、32 パイプ情報バッファ、33 転送情報バッファ、34 パイプ選択回路、35 データバッファ、350 トランザクションカウンタ、36 プロトコルエンジン、37 フレームタイマ、38 バス、40,41,42,43 USBデバイス。
【発明の属する技術分野】
この発明はデータ通信技術に関する。より詳しくは、USBを介した通信を制御する技術に関する。
【0002】
【従来の技術】
USBを介した通信においては、単一のUSBホストと単一または複数のUSBデバイスとの間で通信(データ転送)が行われる。複数のUSBデバイスとの間でデータ転送を行う場合、USBホストとUSBデバイスとはそれぞれのパイプと呼ばれる通信チャネル(論理チャネル)を用いて、時分割処理によりデータ転送を行う。
【0003】
USBホストは複数のUSBデバイスとの通信を行うために、予め転送スケジューリング(通信チャネルのルーチング)を行う。転送スケジューリングとは、フレームと呼ばれる単位時間内の転送有効期間において、どのUSBデバイスがどのパイプで通信を行うかを決定するとともに、各パイプの通信順序(優先順位)を決定することをいう。
【0004】
これにより、USBを用いたデータ転送におけるデータはフレームに分割されて転送され、フレームの中に各USBデバイス用のデータ転送時間を割り振ることで、USBホストは、各USBデバイスに対して公平にデータ転送の機会を与えるように動作することとなる。
【0005】
従来より、USBホストによる転送スケジューリングは、フレームごとに、トランスファ単位で行われ、複数のパイプを用いて通信が行われる場合には各パイプのデータ転送がフレーム内で平均するように構成される。
【0006】
【発明が解決しようとする課題】
ところが、上記のような従来のUSBホストでは、あるフレーム内でデータを送信するよう割り当てられたパイプがビジー状態であったとしても、転送スケジューリングがフレームごとに行われるため、当該フレームが終了しない限り転送スケジューリングの更新は行われない。したがって、フレームにおいてパイプのビジー状態が続くと、その間、当該フレームにおけるデータ転送は一切行われないことから、通信全体の転送効率が下がるという問題があった。
【0007】
この問題を解決するため、例えば、各パイプの状態を監視し、通信の状況に合わせて転送スケジューリングを更新しようとした場合、転送スケジューリングにはCPU処理が必要であることから、CPUに対する負荷が増大してしまうという問題があった。
【0008】
特に、1トランスファに含まれるトランザクション数が少ない場合には、1つのフレーム内に定義されるパイプの数が増加し、スケジューリングすべきパイプの数が増加するため、特にCPUの処理が増大するという問題があった。
【0009】
この発明は上記問題点を解決するためになされたもので、CPUに対する負荷を抑制しつつ、USBにおける転送効率を向上させるUSBホスト制御回路を得ることを目的とする。
【0010】
【課題を解決するための手段】
上記の課題を解決するため、請求項1の発明は、CPUと複数のUSBデバイスとの間のデータ転送を制御するUSBホスト制御回路であって、各USBデバイスのそれぞれが前記CPUとデータ転送を行うための複数の通信チャネルと、前記複数の通信チャネルのうちから前記データ転送を行う通信チャネルを選択するチャネル選択手段と、前記チャネル選択手段により選択された前記通信チャネルによって行われたデータ転送に対する応答結果を取得する取得手段とを備え、前記チャネル選択手段が、前記取得手段により取得された前記応答結果に応じて、前記通信チャネルの選択を切り替える。
【0011】
また、請求項2の発明は、請求項1の発明に係るUSBホスト制御回路であって、取得手段は、通信チャネルにより転送されるトランザクションごとに応答結果を取得する。
【0012】
また、請求項3の発明は、請求項1または2の発明に係るUSBホスト制御回路であって、チャネル選択手段は、応答結果が、エラーまたはNAKである場合に通信チャネルの選択を切り替える。
【0013】
また、請求項4の発明は、請求項1ないし3のいずれかの発明に係るUSBホスト制御回路であって、各通信チャネルの優先順位を記憶する記憶手段を備え、チャネル選択手段は、前記記憶手段に記憶されている前記優先順位に従って、前記通信チャネルの選択を切り替える。
【0014】
また、請求項5の発明は、請求項1ないし4のいずれかの発明に係るUSBホスト制御回路であって、チャネル選択手段は、現時点が、フレーム内の転送有効期間であるか否かを判定する可否判定手段を有し、応答結果に応じて選択が切り替えられた通信チャネルについては、前記可否判定手段により転送有効期間であると判定された時間内にデータの再転送をさせる。
【0015】
また、請求項6の発明は、請求項5の発明に係るUSBホスト制御回路であって、チャネル選択手段は、転送されるデータの転送タイプを各通信チャネルごとに判定する転送タイプ判定手段をさらに有し、前記転送タイプ判定手段により所定の転送タイプであると判定された通信チャネルに対してのみ前記データの再転送をさせる。
【0016】
また、請求項7の発明は、請求項6の発明に係るUSBホスト制御回路であって、所定の転送タイプが、コントロール転送、またはバルク転送である。
【0017】
【発明の実施の形態】
図1はこの発明の実施の形態であるUSBホスト1の構成を他の構成とともに示すブロック図である。USBホスト1は、バス38を介して各USBデバイス41,42,43(以下、総称する場合は「USBデバイス40」と称する)との間でデータ転送を行う。
【0018】
USBホスト1は、各種データの演算や制御信号の生成を行うCPU10、各種データを保存するメモリ20、およびCPU10とUSBデバイス40との間でUSBを介したデータ転送を制御するホスト制御回路30を備える。
【0019】
ホスト制御回路30は、パイプ制御バッファ31、パイプ情報バッファ32、転送情報バッファ33、パイプ選択回路34、データバッファ35、プロトコルエンジン36、フレームタイマ37、およびバス38を備え、後述する処理を実行する専用のハードウェアとして構成されている。
【0020】
また、USBを介したデータ転送では、前述のように、各USBデバイス41,42,43のそれぞれが、CPU10とデータ転送を行うための複数のパイプを定義することにより、時分割処理が行われる。
【0021】
パイプ制御バッファ31は、各パイプを制御するための情報(パイプ制御PC)を保持する記憶バッファであり、具体的には、各パイプにおける転送タイプ、パイプ情報の有効・無効、データバッファ35に記憶されているUSBデバイス40への送信データの有効・無効、データバッファ35におけるUSBデバイス40からの受信データを保存する領域の有無などが含まれる。なお、これらの情報は、各パイプごとに存在し、図1に示すように、それぞれパイプ制御PC0、パイプ制御PC1、・・・、パイプ制御PCnのように各パイプ番号をキーとして識別可能な状態で保持される(nは126以下の任意の整数)。
【0022】
パイプ情報バッファ32は、各パイプに関する情報(パイプ情報PI)を保持するための記憶バッファであり、具体的には、各パイプを使用する各USBデバイス41,42,43のアドレス、エンドポイント、最大パケットサイズ、転送方向、およびトランザクションの数などが含まれる。また、これらの情報も、パイプ制御PCと同様に、各パイプごとに存在し、それぞれパイプ情報PI0、パイプ情報PI1、・・・、パイプ情報PInのように識別可能な状態で保持される。
【0023】
なお、詳細は後述するが、本実施の形態におけるホスト制御回路30では、転送タイプおよびパイプ番号に基づいてパイプ選択における優先順位が決定される。すなわち、パイプ制御バッファ31およびパイプ情報バッファ32が通信チャネルの優先順位を記憶する記憶手段に相当する。
【0024】
転送情報バッファ33は、各パイプの通信結果に関する情報(転送情報TI)を保持する記憶バッファであり、転送完了、転送エラー、転送データ数などが含まれる。また、これらの情報も、各パイプごとに存在し、それぞれ転送情報TI0、転送情報TI1、・・・、転送情報TInのように識別可能な状態で保持される。
【0025】
パイプ選択回路34は、計時機能を有するフレームタイマ37の出力に基づいて、フレームの開始・終了、その時点が転送有効期間であるか否かの判定などのフレーム管理を行う。
【0026】
また、パイプ選択回路34は、パイプ制御バッファ31、パイプ情報バッファ32、および転送情報バッファ33にそれぞれアクセス可能とされており、それらに保持されている情報に基づいて、フレームの転送有効期間中に、データ転送を行うパイプを選択する。
【0027】
さらに、パイプ選択回路34は、選択したパイプに関するパイプ情報PIをデータバッファ35とプロトコルエンジン36とに伝達するとともに、データバッファ35からは転送したトランザクション数に関する情報、プロトコルエンジン36からは各トランザクションごとの各USBデバイス41,42,43の応答結果に関する情報をそれぞれ受け取り、転送情報バッファ33にアクセスして、転送情報TIを必要に応じて書き換える。
【0028】
データバッファ35は、パイプ選択回路34により選択されたパイプによって転送されるデータ(CPU10が送信するデータおよびUSBデバイス40が送信するデータ)を保持するための記憶バッファであり、プロトコルエンジン36とメモリ20との間のデータのやり取りの調停を行う。
【0029】
また、データバッファ35は、パイプ制御バッファ31にアクセスすることにより、USBデバイス40への送信データの有効・無効、USBデバイス40からの受信データを保存する領域の有無など、データバッファ35の状態をパイプ制御PCとして書き込む。
【0030】
さらに、転送したデータ数に基づいて、転送されたトランザクション数をカウントするトランザクションカウンタ350を備え、パイプ選択回路34に転送したトランザクション数を通知する。
【0031】
なお、データが現実に転送されたか否かの判定は、データバッファ35が、プロトコルエンジン36から通知される、当該転送データに対する応答結果に関する情報に基づいて行う。また、本実施形態では、トランザクションカウンタ350をデータバッファ35が備えているが、トランザクションカウンタ350の機能をパイプ選択回路34が有していてもよい。その場合、データバッファ35は、単に転送したデータ数をパイプ選択回路34に伝達し、当該データ数に基づいて、パイプ選択回路34が転送されたトランザクション数をカウントする。
【0032】
プロトコルエンジン36は、バス38上に接続されている各USBデバイス41,42,43のいずれかとパイプ選択回路34から供給されたパイプ情報PIに従ってトランザクション単位の応答動作を行い、取得した応答結果をパイプ選択回路34およびデータバッファ35に通知する。
【0033】
また、USBホスト1からデータを送信する場合は、送信データをデータバッファ35から取得し、USBデバイス40からデータを受信する場合は、受信データをデータバッファ35に伝達する。
【0034】
以上が実施の形態におけるホスト制御回路30の構成の説明である。
【0035】
図2は、ホスト制御回路30の動作を示す流れ図である。以下、図2を用いてホスト制御回路30の動作について説明する。まず、フレームによる転送に先立って、CPU10が転送スケジューリングを行って、パイプ制御PCおよびパイプ情報PIを作成し、パイプ制御バッファ31およびパイプ情報バッファ32にそれぞれ保存する。
【0036】
次に、パイプ選択回路34は、フレームタイマ37からの入力信号に基づいて、現時点がデータの転送有効期間であるか否かを判定し、転送有効期間になると図2の処理を開始し、選択中の転送タイプの初期化(ステップS11)およびパイプ番号の初期化(ステップS12)を行う。
【0037】
なお、USBによるデータ転送では、
(1)アイソクロナス(Isochronous)転送:エラー処理や再送信処理を行わず、リアルタイム性を重視した転送モードで転送時の優先順位が最も高い転送と、
(2)インタラプト(Interrupt)転送:キーボードなどのヒューマンインタフェースデバイスとの転送に使用される転送モードで、データ量は少量であるが一定周期で優先的にデータ転送を行う必要がある転送と、
(3)コントロール(Control)転送:USBホスト1とUSBデバイス40との間の制御コマンドなどの転送に使用される転送モードと、
(4)バルク(Bulk)転送:リアルタイム性はさほど重視されないがデータ量の多い転送に使用される転送モードで、転送時の優先順位が最も低い転送と、
の4つの転送タイプ(転送モード)があり、ホスト制御回路30では、アイソクロナス転送を転送タイプ「0」、インタラプト転送を転送タイプ「1」、コントロール転送を転送タイプ「2」、バルク転送を転送タイプ「3」として識別する。すなわち、ステップS11では、選択中の転送タイプを「0」に初期化することにより、まず、最も優先順位の高いアイソクロナス転送が選択される。
【0038】
初期化が終了すると、パイプ選択回路34は、パイプ制御バッファ31にアクセスすることによりパイプ制御PCを参照し、パイプ番号に示されるパイプについて、パイプ情報が有効(転送すべきデータが存在するパイプであることを示す)であり、かつ、転送タイプが選択中の転送タイプに一致するか否かを判定し(ステップS13)、パイプ情報が有効、かつ、転送タイプが選択中の転送タイプに一致する場合にのみトランザクション転送処理(ステップS14)を行う。
【0039】
図3は、ステップS14におけるトランザクション転送処理の詳細を示す流れ図である。トランザクション転送処理では、まず、トランザクションカウンタ350を「0」にクリアして(ステップS31)、フレームタイマ37からの入力に基づいてフレームが終了しているか否か、つまり現時点がフレーム内の転送有効期間であるか否かを判定する(ステップS32)。
【0040】
フレームが終了している場合は、転送情報バッファ33にアクセスすることにより、転送情報TIの当該パイプに関する部分を更新し(ステップS40)、図2のステップS21の処理に戻り、選択中の転送タイプがバルク転送(転送タイプ「3」)である場合にのみ、パイプ情報が有効なパイプ番号を保存し(ステップS21,S22)、処理を終了する。
【0041】
なお、転送情報TIの更新は、具体的には、トランザクションカウンタ350から入力される転送したトランザクション数に基づいて、パイプ選択回路34が転送したデータ数を算出し、転送情報TIの当該パイプについてのデータ転送数を書き換えることにより行う。
【0042】
一方、フレームが終了していない場合は選択されているパイプにより、トランザクションを1つ転送するようプロトコルエンジン36に指示を与え、さらに、プロトコルエンジン36から当該トランザクションの転送に対する応答結果を取得する(ステップS33)。
【0043】
ステップS33において、トランザクションが転送される処理を具体的に説明すると、まず、パイプ選択回路34が、パイプ情報PIのうちの選択されているパイプ番号に関する部分の情報をデータバッファ35およびプロトコルエンジン36に伝達する。
【0044】
データバッファ35は、受け取ったパイプ情報PIに示される転送方向に基づいて、USBホスト1とUSBデバイス40とのデータ転送が送信・受信のいずれであるかを判定する。
【0045】
当該データ転送が送信である場合には、必要な送信データをメモリ20から読み出して保持するとともに、パイプ制御バッファ31にアクセスして、USBデバイス40への送信データが有効であることを示す情報をパイプ制御PCに書き込む。さらに、プロトコルエンジン36からの要求に応じて、バッファに保持した送信データをトランザクションごとに伝達する。
【0046】
プロトコルエンジン36は、パイプ情報PIに示されるUSBデバイス40のアドレスおよび転送タイプに従って、データバッファ35から伝達されたトランザクション(転送データ)をUSBデバイス40に対して転送するとともに、当該データ転送の応答結果を取得して、パイプ選択回路34およびデータバッファ35に伝達する。
【0047】
一方、データ転送が受信である場合には、データバッファ35は、バッファ上に必要な記憶領域を確保し、パイプ制御バッファ31にアクセスして、USBデバイス40からの受信データを保存する領域が確保されたことを示す情報を書き込む。
【0048】
プロトコルエンジン36は、パイプ情報PIに示されるUSBデバイス40のアドレスおよび転送タイプに従って、当該USBデバイス40に対して送信要求を行い、トランザクションを受信してデータバッファ35に伝達する。さらに、当該データ転送の応答結果を取得して、パイプ選択回路34およびデータバッファ35に伝達する。
【0049】
データバッファ35は、トランザクション(転送データ)を正常に受信できた場合は、受信したトランザクションを一旦保持しつつ、メモリ20の所定の領域に書き込む。以上がステップS33の具体的な説明である。
【0050】
次に、データバッファ35はステップS34を実行し、ステップS33においてプロトコルエンジン36から取得した応答結果がACK(Acknowledgement:肯定応答)である場合は、転送したトランザクションが正常に転送されたことを示していることから、トランザクションカウンタ350をカウントアップし(ステップS35)、パイプ選択回路34に通知する。
【0051】
パイプ選択回路34は、データバッファ35のトランザクションカウンタ350からの入力信号とパイプ情報PIとに基づいて、転送を行うトランザクションの転送が終了しているか否かを判定し(ステップS36)、まだ終了していない場合は、さらに当該パイプによるトランザクションの転送を行うため、ステップS32に戻って処理を繰り返す。
【0052】
これにより、転送が正常に行われている場合(応答結果がACKである場合)は、転送すべきトランザクションの転送が終了する(ステップS36においてYes)か、もしくはフレームの転送有効期間が終了する(ステップS32においてYes)まで、ステップS32ないしS36の処理が繰り返され、当該選択されているパイプ(転送権を有するパイプ)によるトランザクションの転送(ステップS33)が繰り返し行われる。
【0053】
トランザクションの転送が終了した場合は(ステップS36においてYes)、その旨をCPU10に通知する(ステップS37)とともに、転送情報TIの当該パイプに関する部分を更新し(ステップS39)、選択中のパイプによるトランザクション転送処理を終了して、図2のステップS15に戻る。
【0054】
これにより、CPU10は、当該パイプによるトランザクションの転送が正常に終了したことを検知することができるとともに、転送情報TIにアクセスすることにより、必要な情報を得ることができる。
【0055】
プロトコルエンジン36から取得した応答結果がACKでなく(ステップS34においてNo)、エラーである場合は(ステップS38においてYes)、USBホスト1とUSBデバイス40との間で何らかの転送エラーが生じているため、その旨をCPU10に通知する(ステップS37)とともに、転送情報TIの当該パイプに関する部分を更新し(ステップS39)、選択中のパイプによるトランザクション転送処理を終了して、図2のステップS15に戻る。この場合、パイプ選択回路34は、それまでに転送することができた転送データ数のみならず、転送エラーを示すデータを転送情報TIの当該パイプに関する部分に含める。
【0056】
これにより、CPU10は、当該パイプによるデータ転送において転送エラーが発生していることを検知することができるとともに、転送情報TIにアクセスすることにより、それまでに転送できたデータ転送数などを確認することができる。
【0057】
プロトコルエンジン36から取得した応答結果が、ACKまたはエラーのいずれでもない場合は(ステップS38においてNo)、プロトコルエンジン36から取得した応答結果がNAK(Not Acknowledgement:否定応答)であると判断できる。したがって、この場合にはパイプ選択回路34は、CPU10への通知は行わず、転送情報TIのみ更新して(ステップS39)、選択中のパイプによるトランザクション転送処理を終了して、図2のステップS15に戻る。
【0058】
転送すべきトランザクションの転送終了、あるいは転送データに対する応答結果がエラーまたはNAKであることにより、選択中のパイプのトランザクション転送処理(ステップS14)が終了すると、パイプ選択回路34は、フレームタイマ37からの入力に基づいてフレームが終了しているか否かを判定する(ステップS15)。フレームが終了している場合は、ステップS21およびS22を実行して処理を終了する。
【0059】
一方、フレームが終了していない場合は、パイプ番号をインクリメントしてパイプを切り替えつつ(ステップS16)、すべてのパイプについてステップS13の判定が終了するまでステップS13ないしS17の処理を繰り返す(ステップS17)。すなわち、ステップS16は、データを転送する権利を次の優先順位に対応したパイプ番号を有するパイプに渡してパイプの選択を切り替える処理に相当する。
【0060】
このように、本実施の形態におけるホスト制御回路30は、トランザクションごとに取得される応答結果に応じて、データ転送を行うパイプを切り替えることができることから、例えば、CPU10との間でデータ転送を行っているUSBデバイス41がビジーである場合、つまりデータ転送を行うことができない状態に相当する場合に、USBデバイス41が使用しているパイプの選択を切り替えることにより、他のUSBデバイス(42または43)が使用するパイプによるデータ転送を開始することができ、USBデバイス41のビジー状態が解消されるまで他のUSBデバイスが待たされることがなく、転送効率を向上させることができる。
【0061】
また、当該パイプの選択の切り替え処理は、CPU10による処理がなくてもホスト制御回路30内で実行することができるため、CPU10の負荷を抑制しつつ、転送効率の向上を図ることができる。
【0062】
さらに、応答結果は、トランザクションごとに得られるため、データ転送における最小単位であるトランザクションごとにデータ転送を行うパイプを切り替えることができ、さらに転送効率を向上させることができる。
【0063】
選択中の転送タイプによってデータ転送を行うすべてのパイプについて、参照が終了した場合は(ステップS17においてYes)、転送タイプをインクリメントしつつ(ステップS18)、すべての転送タイプについて処理が終了するまでステップS12からの処理を繰り返す(ステップS19)。すなわち、ステップS18は、データを転送する権利を次の優先順位の転送タイプによってデータ転送を行うパイプに渡すことにより、パイプの選択を切り替える処理に相当する。
【0064】
パイプ選択回路34がこのような処理を行うことにより、転送タイプは、アイソクロナス転送、インタラプト転送、コントロール転送、バルク転送の順で選択され、各転送タイプごとにパイプ番号順にパイプが選択されてデータ転送が実行される。
【0065】
なお、優先順位が最も低いバルク転送(転送タイプ「3」)が選択されている状態で、すべてのパイプに対する参照が終了すると、転送タイプが「4」にインクリメントされる(ステップS18)。したがって、パイプ選択回路34は、パイプ情報が有効となっているすべてのパイプについてデータ転送の機会が与えられた後は(ステップS19においてYes)、選択中の転送タイプを転送タイプ「2」(コントロール転送)に戻して(ステップS20)、ステップS12からの処理を繰り返す。
【0066】
これにより、コントロール転送またはバルク転送によりデータ転送を行うパイプであって、応答結果(エラーまたはNAK)に応じて切り替えられたパイプについては、再度データ転送を行うパイプとして選択することができ、転送すべきトランザクションが残っているパイプ(パイプ制御PCにおけるパイプ情報が有効となっているパイプ)については、フレームの転送有効期間である限りデータの再転送をさせて、残りのトランザクションを転送する機会を与えることで、さらに転送効率を向上させることができる。
【0067】
以上の処理について、具体例を元に説明する。図4は、ホスト制御回路30によるフレーム内のデータ転送の模式図である。なお、図4では、パイプ0とパイプ1とにより、トランスファ0(トランザクションT00ないしT03により構成されるトランスファ)およびトランスファ1(トランザクションT10ないしT13により構成されるトランスファ)がそれぞれバルク転送される例を示している。また、図4に示す区間(時間)では、フレームは終了しないものとする。
【0068】
まず、パイプ選択回路34が、転送タイプ「3」(バルク転送)を選択中に、パイプ番号「0」を選択することにより、ステップS13においてパイプ0について参照され、トランザクション転送処理(ステップS14)が実行される。
【0069】
これにより、まず、トランザクションT00が転送される。転送に対する応答結果がACKである限り、さらにトランザクションT01,T02が順次転送され、ステップS35により正常に転送されたトランザクションに対して、トランザクションカウンタ350がカウントアップされる。すなわち、図4に示す、区間TM1の間、パイプ0によるバルク転送が行われる。
【0070】
図4に示す例では、トランザクションT02に対する応答結果が、NAK(ステップS34,S38がいずれもNoと判定される。)となっている。したがって、パイプ選択回路34は、ここまでに転送されたトランザクション数(T00,T01の2つ)から、転送したデータ数を算出して、転送情報バッファ33にアクセスすることにり転送情報TI0を更新し、パイプ0によるトランザクション転送処理を終了する。さらに、パイプ番号をインクリメントすることによって、選択していたパイプ0の切り替えを行い、パイプ1を選択する。
【0071】
これにより、ステップS13ではパイプ1が参照され、再びトランザクション転送処理(ステップS14)が実行される。
【0072】
区間TM2においても、区間TM1と同様に、まず、トランザクションT10が転送され、当該転送に対する応答結果がACKであることから、さらにトランザクションT11ないしT13が順次転送されつつ、トランザクションが正常に転送されるたびに、トランザクションカウンタ350がカウントアップされる。
【0073】
図4に示す例では、区間TM2における転送でも、トランザクションT13に対する応答結果がNAKとなっている。したがって、パイプ選択回路34は、ここまでに転送されたトランザクション数(T10ないしT12の3つ)から、転送したデータ数を算出して、転送情報TI1を更新し、パイプ1によるトランザクション転送処理を終了する。さらに、パイプ番号がインクリメントされ、パイプ選択の切り替えが行われる。
【0074】
この時点で、バルク転送におけるすべてのパイプの参照が終了していることから、パイプ選択回路34は、ステップS20を実行し、転送すべきトランザクションが残っているパイプについて、残りのトランザクションを転送する機会を与える。
【0075】
図4に示す例では、区間TM2の後にパイプが切り替えられると、コントロール転送、バルク転送の順に転送タイプが選択される。そして、バルク転送が選択されている間にパイプ0が参照されると、パイプ0は転送すべきトランザクションが残っているため、パイプ0によるトランザクション転送処理(ステップS14)が再開される。
【0076】
このとき、パイプ選択回路34は、転送情報TI0とパイプ情報PI0とを参照することにより、パイプ0において未転送のトランザクションT02から転送を開始する。
【0077】
これにより、区間TM3では、トランザクションT02,T03が順次転送され、トランザクションT02,T03の転送に対する応答結果がいずれもACKであることから、パイプ0によるトランザクションの転送が正常に終了する(トランスファが終了する)。したがって、パイプ選択回路34は、CPU10への通知を行うとともに(ステップS37)、転送情報TI0を更新し(ステップS39)、パイプ0によるトランザクション転送処理を終了する。
【0078】
さらに、パイプ番号をインクリメントすることによってパイプの切り替えを行い、パイプ1によるトランザクション転送処理を開始する。この場合も、転送情報TI1とパイプ情報PI1とを参照することにより、未転送のトランザクションT13から転送を再開する。
【0079】
トランザクションT13の転送に対する応答結果がACKであるため、パイプ1によるトランザクションの転送が正常に終了し、パイプ選択回路34は、CPU10への通知を行うとともに(ステップS37)、転送情報TI1を更新し(ステップS39)、パイプ1によるトランザクション転送処理を終了する。
【0080】
以後、有効なパイプ情報が存在しないことから、トランザクション転送処理が実行されることはなく、フレーム内の転送有効期間が終了(図示せず)することにより、ステップS21,S22が実行された後、処理が終了する。
【0081】
以上のように、ホスト制御回路30では、パイプ選択回路34がデータ転送が正常に終了した場合(ステップS36においてYes)のみならず、データ転送にエラーが生じた場合や、NAK応答(ビジー応答など)があった場合であっても、CPU10による指示を待つことなく、当該パイプによるデータ転送を終了して、他のパイプによるデータ転送を開始させることができ、CPU10の負担を抑制しつつ、転送効率の向上を図ることができる。
【0082】
また、コントロール転送およびバルク転送によるデータ転送を行うパイプについては、一旦、応答結果としてエラーやNAKを受け取ることにより、データ転送を終了した場合であっても、フレーム内の転送有効期間が残っている限り、再転送を行うことができるため、より転送効率を向上させることができる。
【0083】
【発明の効果】
以上説明したように、請求項1ないし7に記載の発明では、取得された応答結果に応じて、通信チャネルの選択を切り替えることにより、CPUの負担を抑制しつつ、転送効率を向上させることができる。
【0084】
請求項2に記載の発明では、通信チャネルにより転送されるトランザクションごとに応答結果を取得することにより、データ転送の最小単位ごとに応答結果を取得して、通信チャネルの選択の切り替えを行うことができるため、より転送効率を向上させることができる。
【0085】
請求項3に記載の発明では、応答結果が、エラーまたはNAKである場合に通信チャネルの選択を切り替えることにより、通信チャネルがデータ転送を行うことができない場合に他の通信チャネルに切り替えることができることから、転送効率を向上させることができる。
【0086】
請求項4に記載の発明では、記憶手段に記憶されている優先順位に従って、通信チャネルの選択を切り替えることにより、通信チャネルを効率よく切り替えることができる。
【0087】
請求項5に記載の発明では、応答結果に応じて切り替えられた通信チャネルについては、転送有効期間であると判定された時間内にデータの再転送をさせることにより、現時点がフレーム内の転送有効期間である場合には、一旦、中断した通信チャネルについてリトライすることで、さらに転送効率を向上させることができる。
【図面の簡単な説明】
【図1】この発明の実施の形態のホスト制御回路を他の構成とともに示す図である。
【図2】ホスト制御回路の動作を示す流れ図である。
【図3】ホスト制御回路におけるトランザクション転送処理の詳細を示す流れ図である。
【図4】ホスト制御回路によるフレーム内のデータ転送の模式図である。
【符号の説明】
1 USBホスト、10 CPU、20 メモリ、30 ホスト制御回路、31 パイプ制御バッファ、32 パイプ情報バッファ、33 転送情報バッファ、34 パイプ選択回路、35 データバッファ、350 トランザクションカウンタ、36 プロトコルエンジン、37 フレームタイマ、38 バス、40,41,42,43 USBデバイス。
Claims (7)
- CPUと複数のUSB(Universal Serial Bus)デバイスとの間のデータ転送を制御するUSBホスト制御回路であって、
各USBデバイスのそれぞれが前記CPUとデータ転送を行うための複数の通信チャネルと、
前記複数の通信チャネルのうちから前記データ転送を行う通信チャネルを選択するチャネル選択手段と、
前記チャネル選択手段により選択された前記通信チャネルによって行われたデータ転送に対する応答結果を取得する取得手段と、
を備え、
前記チャネル選択手段が、
前記取得手段により取得された前記応答結果に応じて、前記通信チャネルの選択を切り替えることを特徴とするUSBホスト制御回路。 - 請求項1に記載のUSBホスト制御回路であって、
取得手段は、
通信チャネルにより転送されるトランザクションごとに応答結果を取得することを特徴とするUSBホスト制御回路。 - 請求項1または2に記載のUSBホスト制御回路であって、
チャネル選択手段は、
応答結果が、エラーまたはNAKである場合に通信チャネルの選択を切り替えることを特徴とするUSBホスト制御回路。 - 請求項1ないし3のいずれかに記載のUSBホスト制御回路であって、
各通信チャネルの優先順位を記憶する記憶手段を備え、
チャネル選択手段は、
前記記憶手段に記憶されている前記優先順位に従って、前記通信チャネルの選択を切り替えることを特徴とするUSBホスト制御回路。 - 請求項1ないし4のいずれかに記載のUSBホスト制御回路であって、
チャネル選択手段は、
現時点が、フレーム内の転送有効期間であるか否かを判定する可否判定手段を有し、
応答結果に応じて選択が切り替えられた通信チャネルについては、前記可否判定手段により転送有効期間であると判定された時間内にデータの再転送をさせることを特徴とするUSBホスト制御回路。 - 請求項5に記載のUSBホスト制御回路であって、
チャネル選択手段は、
転送されるデータの転送タイプを各通信チャネルごとに判定する転送タイプ判定手段をさらに有し、
前記転送タイプ判定手段により所定の転送タイプであると判定された通信チャネルに対してのみ前記データの再転送をさせることを特徴とするUSBホスト制御回路。 - 請求項6に記載のUSBホスト制御回路であって、
所定の転送タイプが、コントロール転送、またはバルク転送であることを特徴とするUSBホスト制御回路。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2002200792A JP2004046392A (ja) | 2002-07-10 | 2002-07-10 | Usbホスト制御回路 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2002200792A JP2004046392A (ja) | 2002-07-10 | 2002-07-10 | Usbホスト制御回路 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2004046392A true JP2004046392A (ja) | 2004-02-12 |
Family
ID=31707511
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2002200792A Pending JP2004046392A (ja) | 2002-07-10 | 2002-07-10 | Usbホスト制御回路 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2004046392A (ja) |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7725623B2 (en) | 2005-06-14 | 2010-05-25 | Sony Computer Entertainment Inc. | Command transfer controlling apparatus and command transfer controlling method |
| CN101814011A (zh) * | 2009-02-24 | 2010-08-25 | 恩益禧电子股份有限公司 | Usb主机控制器以及用于usb主机控制器的控制方法 |
| CN102043741A (zh) * | 2009-10-22 | 2011-05-04 | 瑞萨电子株式会社 | 用于管道仲裁的电路和方法 |
| JP2014081952A (ja) * | 2014-01-08 | 2014-05-08 | Renesas Electronics Corp | ホストコントローラ |
-
2002
- 2002-07-10 JP JP2002200792A patent/JP2004046392A/ja active Pending
Cited By (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7725623B2 (en) | 2005-06-14 | 2010-05-25 | Sony Computer Entertainment Inc. | Command transfer controlling apparatus and command transfer controlling method |
| CN101814011A (zh) * | 2009-02-24 | 2010-08-25 | 恩益禧电子股份有限公司 | Usb主机控制器以及用于usb主机控制器的控制方法 |
| JP2010198171A (ja) * | 2009-02-24 | 2010-09-09 | Renesas Electronics Corp | Usbホストコントローラ、及びusbホストコントローラの制御方法 |
| DE102010008907A1 (de) | 2009-02-24 | 2010-10-07 | Nec Electronics Corp., Kawasaki | USB-Hostcontroller und Steuerverfahren für USB-Hostcontroller |
| US8386725B2 (en) | 2009-02-24 | 2013-02-26 | Renesas Electronics Corporation | USB host controller and controlling method for USB host controller |
| CN101814011B (zh) * | 2009-02-24 | 2014-06-18 | 瑞萨电子株式会社 | Usb主机控制器以及用于usb主机控制器的控制方法 |
| CN102043741A (zh) * | 2009-10-22 | 2011-05-04 | 瑞萨电子株式会社 | 用于管道仲裁的电路和方法 |
| CN102043741B (zh) * | 2009-10-22 | 2015-02-25 | 瑞萨电子株式会社 | 用于管道仲裁的电路和方法 |
| CN104636280A (zh) * | 2009-10-22 | 2015-05-20 | 瑞萨电子株式会社 | 用于管道仲裁的电路和方法 |
| JP2014081952A (ja) * | 2014-01-08 | 2014-05-08 | Renesas Electronics Corp | ホストコントローラ |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| KR960012686B1 (ko) | 통신 시스템용 스테이션 및 그 통신방법 | |
| KR910001789B1 (ko) | 디지탈 컴퓨터 시스템의 다중 프로세서 시스템용 캐쉬 무효 장치 | |
| US7502876B1 (en) | Background memory manager that determines if data structures fits in memory with memory state transactions map | |
| US7581015B2 (en) | Communication device having transmitting and receiving units supports RDMA communication | |
| KR910001791B1 (ko) | 동기식 버스를 갖고 있는 컴퓨터 시스템용 버스 제어 장치 및 이의 방법 | |
| US20040093454A1 (en) | USB endpoint controller flexible memory management | |
| CN101227388B (zh) | 操作计算机系统的方法和具有网络接口重发的计算机系统 | |
| US20090235008A1 (en) | PCI express multi-root IOV endpoint retry buffer controller | |
| JP3664664B2 (ja) | バスシステム及びそのバス仲裁方法 | |
| JPH1093623A (ja) | パケット送受信装置及びパケット受信装置 | |
| US5978879A (en) | Bus bridge apparatus | |
| CN116893991B (zh) | 一种axi协议下的存储模块转换接口及其转换方法 | |
| JP2004046392A (ja) | Usbホスト制御回路 | |
| CN1161696C (zh) | 在一条共用线上传输信号的方法与装置 | |
| US7039730B2 (en) | Storage device control apparatus and method | |
| CN114153756A (zh) | 面向多核处理器目录协议的可配置微操作机制 | |
| JP2003108513A (ja) | ハードウェア・チェーン・プル | |
| JP2004157795A (ja) | 二重系計算機及びその共有データ一致化方法 | |
| JPH103436A (ja) | 自動転送機能付シリアル入出力回路 | |
| WO2007096712A1 (en) | A method and device for exchanging data using a virtual fifo data structure | |
| JPH06132981A (ja) | パケット送信方式 | |
| EP1139228A2 (en) | An intelligent bus interconnect unit | |
| CN117880364B (zh) | 一种数据传输方法、系统以及相关装置 | |
| KR100205055B1 (ko) | 송신 연결망 인터페이스에서의 긴급 메시지 송신 제어 방법 | |
| JPH1011387A (ja) | 情報処理装置 |