(57)【要約】【課題】ＵＳＢにおいてもより高い転送レートを実現できる構成が要望されている。【解決手段】ホストコントローラは、ホストポートに接続されたバスを介して１または複数のノードと通信する機能を有する。１または複数のノードは、バスの終端に位置する端末と、上位側のポートを１または複数のポートにカスケード接続するハブとの少なくとも一方を含む。ホストコントローラは、ホストポートからパケットが送出されてから、転送先の端末にて受信されるとともに、当該端末にて受信されたパケットに応じて送出された応答がホストポートで受信されるまで、に要する時間の長さに関連付けられる情報を取得する。そして、ホストコントローラは、当該取得された情報に基づいて、１つのフレームに割り当てるパケットの数または間隔を調整する。【選択図】図５
2017111729.tif 000002
【特許請求の範囲】
【請求項１】
ホストポートに接続されたバスを介して１または複数のノードと通信する機能を有するホストコントローラであって、前記１または複数のノードは、バスの終端に位置する端末と、上位側のポートを１または複数のポートにカスケード接続するハブとの少なくとも一方を含み、
予め定められた周期を有するフレームごとに１または複数のパケットを割り当てるスケジューリング手段と、
前記スケジューリング手段による割り当てに従って、前記バスのデータ転送方向を時間的に切り替えることで双方向に通信を行なう通信手段と、
前記ホストポートからパケットが送出されてから、転送先の端末にて受信されるとともに、当該端末にて受信されたパケットに応じて送出された応答が前記ホストポートで受信されるまで、に要する時間の長さに関連付けられる情報を取得する取得手段とを備え、
前記スケジューリング手段は、前記取得手段により取得された情報に基づいて、１つのフレームに割り当てるパケットの数または間隔を調整する、ホストコントローラ。
【請求項２】
前記ホストコントローラは、前記１または複数のノードとの通信を利用するアプリケーションソフトウェア、および、前記ホストコントローラを制御するドライバソフトウェアを実行する演算主体と接続され、
前記取得手段は、前記ドライバソフトウェアが保持するドライバ情報を参照することで前記情報を取得する、請求項１に記載のホストコントローラ。
【請求項３】
前記取得手段は、前記ドライバ情報に基づいて、前記ホストポートから各端末までの経路上に存在するハブの数を前記情報として取得する、請求項２に記載のホストコントローラ。
【請求項４】
前記取得手段は、前記ホストポートに接続されているそれぞれの端末について、前記ホストポートからの経路上に存在するハブの数の最大値を前記情報として取得する、請求項３に記載のホストコントローラ。
【請求項５】
前記取得手段は、前記ホストポートに接続されている端末ごとに、前記ホストポートからの経路上に存在するハブの数をそれぞれ取得する、請求項３に記載のホストコントローラ。
【請求項６】
前記通信手段は、バスに新たなノードが接続されると、各ノードにアドレスを割り当てる初期化処理を実施し、
前記取得手段は、前記通信手段による初期化処理の実施中に、前記ホストポートから対象の端末までの経路上に存在するハブの数を前記情報として取得する、請求項２に記載のホストコントローラ。
【請求項７】
前記通信手段は、前記初期化処理において、特定のハブのポートを有効化する命令を発行し、
前記取得手段は、前記特定のハブのポートを有効化する命令に基づいて、当該ハブのポートに接続されている端末について、前記ホストポートからの経路上に存在するハブの数を取得する、請求項６に記載のホストコントローラ。
【請求項８】
前記取得手段は、前記ホストポートに接続されている端末ごとに、前記ホストポートからの経路上に存在するハブの数をそれぞれ取得する、請求項６または７に記載のホストコントローラ。
【請求項９】
前記取得手段は、前記ホストポートに接続されているそれぞれの端末について、前記ホストポートからの経路上に存在するハブの数の最大値を前記情報として取得する、請求項６または７に記載のホストコントローラ。
【請求項１０】
前記取得手段は、前記ホストポートからパケットが送出されてから、転送先の端末にて受信されるとともに、当該端末にて受信されたパケットに応じて送出された応答が前記ホストポートで受信されるまで、に要する時間を測定し、
前記スケジューリング手段は、転送先にパケットを送出してから、前記取得手段により測定された時間に応じた期間にわたって当該パケットに対する応答を待つように、スケジューリングを実施する、請求項１に記載のホストコントローラ。
【請求項１１】
前記取得手段は、同一の転送先について測定される複数の時間のうち、最小のものを測定結果として保持し、
転送先にパケットを送出してから当該パケットに対する応答を待つ期間は、前記取得手段による測定結果に、予め定められた期間を加算することで算出される、請求項１０に記載のホストコントローラ。
【請求項１２】
前記取得手段は、前記ホストポートに接続されている端末ごとに、前記時間を測定する、請求項１０または１１に記載のホストコントローラ。
【請求項１３】
前記取得手段は、前記ホストポートに接続されているそれぞれの端末について測定された時間のうち最大のものを前記情報として取得する、請求項１０または１１に記載のホストコントローラ。
【請求項１４】
ホストポートに接続されたバスを介して１または複数のノードと通信する機能を有するホストコントローラで実行されるプログラムであって、前記１または複数のノードは、バスの終端に位置する端末と、上位側のポートを１または複数のポートにカスケード接続するハブとの少なくとも一方を含み、前記プログラムは前記ホストコントローラに
予め定められた周期を有するフレームごとに１または複数のパケットを割り当てるステップと、
前記ホストポートからパケットが送出されてから、転送先の端末にて受信されるとともに、当該端末にて受信されたパケットに応じて送出された応答が前記ホストポートで受信されるまで、に要する時間の長さに関連付けられる情報を取得するステップと、
前記取得された情報に基づいて、１つのフレームに割り当てるパケットの数または間隔を調整するステップとを実行させ、
前記ホストコントローラは、前記１または複数のパケットの割り当てに従って、前記バスのデータ転送方向を時間的に切り替えることで双方向に通信を行なう、ホストコントローラで実行されるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ホストポートに接続されたバスを介して１または複数のノードと通信する機能を有するホストコントローラ、および当該ホストコントローラで実行されるプログラムに関する。
【背景技術】
【０００２】
例えば、パーソナルコンピュータと周辺デバイスとを接続するインターフェイスとして、ＵＳＢ（Universal Serial Bus）が普及している。ＵＳＢには複数のリビジョンが存在する。例えば、「Universal Serial Bus Specification Revision 2.0」（非特許文献１）は、ＵＳＢリビジョン２．０（以下、「ＵＳＢ２．０」とも記す。）の規格を定義する。
【０００３】
ＵＳＢは、一種のマスタ−スレーブ接続であり、ある接続構成においては、デバイス間のデータ転送を管理する１つのホスト（Host）と、転送先のデバイスに対応するファンクション（function）とが存在することになる。すなわち、ホストがマスタとして機能し、各ファンクションがスレーブとして機能する。接続の多様性を実現するために、これらの主体に加えて、転送経路を１または複数に分岐するハブ（Hub）も存在し得る。例えば、あるポートにハブを接続することで、単一のポートに複数のファンクションを接続することができる。但し、ハブが介在することで、ホストとファンクションとの間には、介在するハブの数に応じた遅延が生じ得る。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】「Universal Serial Bus Specification Revision 2.0」，２０００年４月２７日，Compaq Computer Corporation, Hewlett-Packard Company, Intel Corporation, Lucent Technologies Inc, Microsoft Corporation, NEC Corporation, Koninklijke Philips Electronics N.V.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＵＳＢ２．０においては、半二重通信（half duplex）方式を用いて双方向のデータ転送を実現している。すなわち、予め定められた周期に従って、データ転送の向き（ホストから各ファンクション（ダウンストリーム）および各ファンクションからホスト（アップストリーム））を切り替える方式が採用されている。また、ＵＳＢ２．０においては、所定周期ごとに転送されるフレーム単位でデータ伝送が行なわれる。このとき、転送スケジューリングが実施され、各フレーム単位内で、パケット転送およびいずれかのファンクションからの応答が完結するように、各フレームに対して１または複数のパケットが割り当てられる。
【０００６】
基本的には、どのような通信規格であっても、転送レートは高いほど好ましい。ＵＳＢ２．０においても、より高い転送レートを実現できる構成が要望されている。
【０００７】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００８】
ある実施の形態に従うホストコントローラは、ホストポートに接続されたバスを介して１または複数のノードと通信する機能を有する。１または複数のノードは、バスの終端に位置する端末と、上位側のポートを１または複数のポートにカスケード接続するハブとの少なくとも一方を含む。ホストコントローラは、ホストポートからパケットが送出されてから、転送先の端末にて受信されるとともに、当該端末にて受信されたパケットに応じて送出された応答がホストポートで受信されるまで、に要する時間の長さに関連付けられる情報を取得する。そして、ホストコントローラは、当該取得された情報に基づいて、１つのフレームに割り当てるパケットの数または間隔を調整する。
【発明の効果】
【０００９】
ある実施の形態によれば、より高い転送レートを実現できるホストコントローラを実現できる。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態の関連技術に従うＵＳＢ通信システムの一例を示す図である。
【図２】図１に示すＵＳＢ通信システムにおけるデータ転送を説明するためのタイムチャートの一例である。
【図３】本実施の形態の関連技術に従う転送スケジューリングを説明するための模式図である。
【図４】本実施の形態の関連技術に従う転送スケジューリングでの課題およびそれに対する解決手段の一例を説明するための模式図である。
【図５】実施の形態１に従うＵＳＢ通信システムのシステム構成を示す模式図である。
【図６】ＵＳＢホストの機能構成を説明するための模式図である。
【図７】実施の形態１に従うＵＳＢ通信システムにおけるハブの最大接続段数を取得する処理手順を示すフローチャートである。
【図８】図７に示すハブの最大接続段数を取得する処理手順によって取得されるドライバ情報の一例を示す模式図である。
【図９】実施の形態１に従うＵＳＢ通信システムにおける転送スケジューリングの処理手順を示すフローチャートである。
【図１０】実施の形態２に従うＵＳＢ通信システムのシステム構成を示す模式図である。
【図１１】実施の形態２に従うＵＳＢ通信システムの接続段数レジスタに格納されるデータの一例を示す図である。
【図１２】実施の形態２に従うＵＳＢ通信システムにおける転送スケジューリングを説明するための模式図である。
【図１３】実施の形態２に従うＵＳＢ通信システムにおける転送スケジューリングの処理手順を示すフローチャートである。
【図１４】実施の形態３に従うＵＳＢ通信システムのシステム構成を示す模式図である。
【図１５】実施の形態３に従うＵＳＢ通信システムにおけるアドレス設定の処理手順を示す模式図である。
【図１６】図１５に示すアドレス設定に対応して、接続段数レジスタおよび有効接続段数レジスタの更新処理を説明するための模式図である。
【図１７】実施の形態３に従うＵＳＢ通信システムにおけるハブの接続段数を取得する処理手順を示すフローチャートである。
【図１８】実施の形態４に従うＵＳＢ通信システムにおけるハブの最大接続段数を取得する処理を説明するための模式図である。
【図１９】実施の形態５に従うＵＳＢ通信システムのシステム構成を示す模式図である。
【図２０】実施の形態５に従うＵＳＢ通信システムの測定値格納レジスタに格納されるデータの一例を示す図である。
【図２１】実施の形態５に従うＵＳＢ通信システムにおけるデータ転送に要する時間の測定を説明するための模式図である。
【図２２】実施の形態５に従うＵＳＢ通信システムにおける応答時間の測定手順を示すフローチャートである。
【図２３】本実施の形態に従う転送スケジューリングによる転送レートの改善効果の一例を示す模式図である。
【図２４】本実施の形態に従うホストコントローラの構成例を示す模式図である。
【発明を実施するための形態】
【００１１】
いくつかの実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【００１２】
［Ａ．関連技術］
まず、本実施の形態に従うＵＳＢ通信システムについて説明する前に、ＵＳＢ２．０でのデータ転送処理について説明する。以下の説明においては、あるＵＳＢ２．０に従う接続構成において、当該接続されたデバイス間のデータ転送を制御する（すなわち、一種のマスタとして機能する）デバイスを「ホスト」と称する。ホストは、自身のポート（ホストポート）に接続されたバスを介して１または複数のノードと通信する。
【００１３】
ホストの制御下でデータを遣り取りする（すなわち、一種のスレーブとして機能する）デバイスを、その提供する機能に着目して「ファンクション」と称する。ファンクションであるデバイスは、バスの終端に位置する端末に相当する。なお、同一のデバイスが複数の機能（ファンクション）を有する場合もあり、この場合には、各機能（ファンクション）がそれぞれ独立した転送先として取り扱われる。また、転送経路を１または複数に分岐するデバイスを「ハブ」と称す。すなわち、ハブは、上位側のポートを１または複数のポートにカスケード接続する。なお、ホストは「ルートハブ」としても機能する。これらの名称は、ＵＳＢ２．０規格に従うものであり、より詳細な構成については、上述の「Universal Serial Bus Specification Revision 2.0」（非特許文献１）などを参照されたい。
【００１４】
上述したように、ホスト（ルートノード）が通信する対象となる１または複数ノードは、ファンクションおよびハブの少なくとも一方を含む。
【００１５】
なお、説明の便宜上、ＵＳＢ２．０に基づく構成を前提として、本実施の形態に従うデータ転送の方法などについて説明するが、ＵＳＢ規格の他のリビジョン、あるいは、他の通信システムにも適用し得る。
【００１６】
図１は、本実施の形態の関連技術に従うＵＳＢ通信システム１の一例を示す図である。図１には、ホスト１０と、３つのハブ２０＿１，２０＿２，２０＿３と、２つのファンクション３０＿１，３０＿２とからなるＵＳＢ通信システム１の接続構成例を示す。より具体的には、ホスト１０のダウンストリーム側にハブ２０＿１が接続されており、ハブ２０＿１のダウンストリーム側にファンクション３０＿２およびハブ２０＿２が接続されている。さらに、ハブ２０＿２のダウンストリーム側にファンクション３０＿１およびハブ２０＿３が接続されている。
【００１７】
例えば、ホスト１０からファンクション３０＿１へのデータ転送は、ホストにて生成されたフレームがハブ２０＿１およびハブ２０＿２を経由して転送される。逆に、ファンクション３０＿１からホスト１０へのデータ転送は、ファンクション３０＿１にて生成された応答がハブ２０＿２およびハブ２０＿１を経由して転送される。
【００１８】
ＵＳＢにおいては、所定周期ごとに送出されるフレーム単位でデータ転送が管理される。各フレームには、１または複数のパケットが割り当てられる。パケットは送受信の単位であり、典型的には、（１）コントロール転送、（２）ホスト１０からファンクション３０宛て、（３）ファンクション３０からホスト１０宛て、の３種類が存在する。単一のフレーム内に異なる種類のパケットが割り当てられることもある。
【００１９】
説明の便宜上、以下では、ホスト１０からファンクション３０へパケットを転送する場合を主として説明する。但し、ファンクション３０からホスト１０へパケットを転送する場合についても同様に適用可能である。
【００２０】
ホスト１０からファンクション３０へデータを転送する場合には、各パケットの転送はホスト１０から開始され、ファンクション３０からの応答を受けて完了する。逆に、ファンクション３０からホスト１０へデータを転送する場合には、ホスト１０からの送信タイミングを通知するパケットを受けてファンクション３０がデータを送出し、その送出されたデータに応じた応答がホスト１０からファンクション３０へ戻されることで完了する。
【００２１】
このようなデータ転送を実現するために、転送スケジューリングが実施される。具体的には、各フレーム単位内で、パケット転送およびいずれかの転送先からの応答が完結するように、各フレームに対して１または複数のパケットが割り当てられる。このとき、転送先の応答時間は、ハブの接続数が規格にて定められている最大数である５の場合（ワーストケース）を考慮して設定される。
【００２２】
図２は、図１に示すＵＳＢ通信システム１におけるデータ転送を説明するためのタイムチャートの一例である。図２（Ａ）には、ホスト１０とファンクション３０＿２との間の転送処理を示し、図２（Ｂ）には、ホスト１０とファンクション３０＿１との間の転送処理を示す。図２に示す各要素の時間幅は実際のものとは必ずしも同一ではなく、説明の便宜上、その時間幅を適宜変更して描いている。
【００２３】
図２（Ａ）を参照して、１つのフレーム（フレーム１）には、転送スケジューリングの結果に従って、１または複数のパケットが割り当てられる。あるフレーム内のあるパケットがホスト１０から送出され、転送先のファンクション３０にて受信された後、何らかの応答が当該転送先のファンクションからホストに転送されるまでに要する時間（遅延）を考慮して、後続のパケットおよびフレームがスケジューリングされる。
【００２４】
ホストからファンクションまでのデータ転送において生じる遅延としては、典型的には、（１）ケーブル遅延、（２）ハブ遅延、（３）ファンクションでの応答遅延などが存在する。ケーブル遅延は、ホスト、ハブ、ファンクションの間を接続するケーブルをデータが伝送するのに要する時間を意味し、信号がケーブルを伝送するのに要する時間に加えて、信号の送信側または受信側での処理に要する時間を含み得る。ハブ遅延は、受信したデータをダウンストリーム側またはアップストリーム側にリピートする処理に要する時間を含む。ファンクションでの応答遅延は、ファンクションがデータを受信し、当該受信したデータを処理して、その処理結果に応じた応答を生成および送出するのに要する時間を含む。
【００２５】
図２（Ａ）に示す遅延を考慮して、いずれかのフレーム（フレーム１）内に割り当てられたパケットの終了タイミングから次のパケットが割り当てられるまでの間は、ファンクションからの応答を待つ期間（応答待ち期間）として設定される。なお、応答待ち期間の間にファンクションからの応答が受信されない場合には、タイムアウトとなり、該当のパケットの転送が失敗したと判断される。必要に応じて、パケットの再送処理が実施される。
【００２６】
図２（Ｂ）に示すように、ホスト１０とファンクション３０＿１との間の転送処理についても同様であるが、ホスト１０とファンクション３０＿１との間には２つのハブ（ハブ２０＿１およびハブ２０＿２）が介在しているため、ホスト１０が何らかのパケットを送出した後、ファンクション３０＿１からの応答を受信するまでに要する時間は、図２（Ａ）の場合に比較して長くなっている。
【００２７】
すなわち、ホストと転送先のファンクションとの間の転送経路に介在するハブの数（以下では、「接続段数」または「段数」とも称す。）に依存して、ファンクションから応答を受信するまでの遅延時間が変化するため、どのような接続構成においても、単一のフレーム内でパケットの送出および応答の受信が完結するように、転送スケジューリングを実施する必要がある。
【００２８】
ＵＳＢ２．０においては、ハブの接続段数は最大で「５」と定められているので、パケットのスケジューリングにおいては、規格最大のハブ５段の場合に要するファンクションの応答時間（ワーストケース）が前提とされる。すなわち、ハブの接続段数が「５」であることを前提として、パケットの送出と応答の受信との組を基本単位として、各フレーム内への割り当てがスケジューリングされる。
【００２９】
図３は、本実施の形態の関連技術に従う転送スケジューリングを説明するための模式図である。図３を参照して、１つのフレームの後半部分に、ハブの接続段数が「５」である場合を前提としたフリー期間を規定し、当該フリー期間と重複しないように、１つのフレームに１または複数のパケットが割り当てられる。このフリー期間は、最後のパケットに対するファンクションからの応答を待つ期間に相当する。
【００３０】
［Ｂ．新たな課題の着想および課題解決の手法］
本願発明者らは、上述のようなＵＳＢ規格に従う通信方式に対して、以下のような新規な課題を見出した。すなわち、フレーム単位での転送スケジューリングは、ファンクションの応答時間を規格上最大の段数のハブが接続されている場合を想定している。しかしながら、接続段数が少ない場合またはハブを使用しない場合には、ファンクションの実際の応答時間は、想定されている応答時間より短くなる。そのため、データ転送に使用されないアイドル時間が発生するという課題が存在する。
【００３１】
図４は、本実施の形態の関連技術に従う転送スケジューリングでの課題およびそれに対する解決手段の一例を説明するための模式図である。図４（Ａ）を参照して、１つのフレーム内には、ファンクションの応答時間を考慮して、各パケットを割り当てるタイミングが決定される。すなわち、１番目のパケットを割り当てた後、ファンクションの応答時間を考慮して、２番目のパケットを割り当てるタイミング（位置）が決定される。このように順次パケットが割り当てられていき、フレーム内の最終のパケットは、フレームの最後から予め定められた応答待ち期間（図４には「フリー期間」として描いている。）と重複しないように、設定される。このフリー期間が規格上最大の接続段数（ＵＳＢ２．０の場合には５段）に応じた長さに固定的に設定されているため、実際に生じ得る応答時間に対して過剰な応答待ち期間が設定されてしまう場合がある。その結果、パケットを割り当てることができなかった期間は、アイドル時間となってしまい、転送レートの向上には寄与しないことになる。
【００３２】
これに対して、図４（Ｂ）には、上述のような課題に対する解決手段の一例を図示している。図４（Ｂ）に示す転送スケジューリングにおいては、実際の接続構成を考慮して、応答待ち期間（フリー期間）を設定する。このとき、ファンクションからの応答も含めて、フリー期間に含めないようにスケジューリングする。例えば、図４（Ｂ）には、接続段数が「２」であるとした場合のフリー期間が設定されている例を示す。図４（Ｂ）に示す転送スケジューリング例においては、図４（Ａ）に示す転送スケジューリング例に比較して、単一フレーム内に、１つだけ多いパケットが割り当てられていることがわかる。
【００３３】
このように、本実施の形態においては、実際の接続構成を考慮して、転送スケジューリングを実施することで、上述したような課題を解決し、転送レートを向上させる。より具体的には、本実施の形態に従うホストコントローラは、ホスト１０のポートからパケットが送出されてから、転送先の端末であるファンクション３０にて受信されるとともに、当該端末にて受信されたパケットに応じて送出された応答がホスト１０のポートで受信されるまで、に要する時間の長さに関連付けられる情報を取得する機能を有する。そして、この機能により取得された情報に基づいて、１つのフレームに割り当てるパケットの数または間隔が調整される。このような機能の組み合わせを採用することで、転送レートを向上できる。
【００３４】
なお、説明の便宜上、図４には、フレームの最後に設定されるフリー期間の長さを変更する例を示すが、これに限らず、実際の接続構成を考慮した転送スケジューリングを実施することができる。例えば、後述するように、フレーム内に配置される先行のパケットとそれに続くパケットとの間の間隔などを、実際の接続構成に応じて調整すればよい。
【００３５】
［Ｃ．実施の形態１］
まず、実施の形態１に従うＵＳＢ通信システムについて説明する。実施の形態１に従うＵＳＢ通信システムは、対象の接続構成における、ホストからそれぞれのファンクションまでの経路上に存在するハブの数のうち最大のもの（ハブの最大接続段数）を予め取得し、その取得した最大接続段数に応じた応答時間に基づいて、転送スケジューリングを実施する。
【００３６】
（ｃ１：システム構成）
図５は、実施の形態１に従うＵＳＢ通信システム１Ａのシステム構成を示す模式図である。図５を参照して、ＵＳＢ通信システム１Ａは、ホスト１０と、１または複数のハブ２０＿１，２０＿２，２０＿３，…（以下、「ハブ２０」と総称することもある。）と、１または複数のファンクション３０＿１，３０＿２，３０＿３，…（以下、「ファンクション３０」と総称することもある。）とを含む。
【００３７】
ホスト１０は、典型的には、パーソナルコンピュータ、汎用マイクロコンピュータ、特定用途向けの専用装置などとして実装される。ホスト１０は、ＵＳＢでのデータ転送に係る機能構成として、プロセッサの一例であるＣＰＵ（Central Processing Unit）１０２と、システムメモリ１１０と、ホストコントローラ１２０Ａとを含む。これらのコンポーネントは、システムバス１０４を介して互いに通信可能に構成される。なお、システムバス１０４に、複数のホストコントローラ１２０Ａが接続される場合もある。
【００３８】
ホストコントローラ１２０Ａは、スケジューラ１２２と、転送サイズレジスタ１２４と、フレームカウンタ１２６と、データ転送コントローラ１２８と、ドライバ情報取得モジュール１４０と、最大接続段数レジスタ１４２Ａと、応答時間算出モジュール１４４Ａとを含む。
【００３９】
スケジューラ１２２は、予め定められた周期を有するフレームごとに１または複数のパケットを割り当てる。より具体的には、スケジューラ１２２は、転送サイズレジスタ１２４に格納される転送すべきデータのサイズ、フレームカウンタ１２６に格納されるフレーム番号、および、応答時間算出モジュール１４４Ａにより算出される応答時間などに基づいて、転送スケジューリングを実施する。スケジューラ１２２は、転送スケジューリングの実施に伴って、フレームカウンタ１２６に格納されるフレーム番号などを順次更新する。
【００４０】
ＣＰＵ１０２からのデータ転送命令がホストコントローラ１２０Ａに与えられると、データ転送対象のデータの大きさが転送サイズレジスタ１２４に書き込まれる。
【００４１】
データ転送コントローラ１２８は、スケジューラ１２２によるパケットの割り当てに従って、ＵＳＢバスのデータ転送方向を時間的に切り替えることで双方向に通信を行なう。より具体的には、データ転送コントローラ１２８は、スケジューラ１２２による転送スケジューリング結果に従って、１または複数のパケットが割り当てられたフレームを順次生成し、当該生成したフレームをポート１３０から送出する。なお、ポート１３０は、ルートハブとして機能する。
【００４２】
送出したフレームに含まれるいずれかのパケットに対するファンクション３０からの応答を応答待ち期間内に受信できない場合（タイムアウトした場合）には、データ転送コントローラ１２８は、当該パケットのデータ転送が失敗したと判断し、データ転送が失敗したパケットを特定する情報をスケジューラ１２２へ出力する。スケジューラ１２２は、データ転送が失敗したパケットを再送するためのスケジューリングを実施する。
【００４３】
ドライバ情報取得モジュール１４０は、ホスト１０のポート１３０からパケットが送出されてから、転送先の端末であるファンクション３０にて受信されるとともに、当該端末にて受信されたパケットに応じて送出された応答がホスト１０のポート１３０で受信されるまで、に要する時間の長さに関連付けられる情報を取得する。より具体的には、ドライバ情報取得モジュール１４０は、後述するように、ドライバ情報を取得し、ポート１３０に接続されているそれぞれのファンクション３０までの経路に存在するハブ２０の最大接続段数を取得する。
【００４４】
ドライバ情報取得モジュール１４０は、最大接続段数を最大接続段数レジスタ１４２Ａに格納する。応答時間算出モジュール１４４Ａは、最大接続段数レジスタ１４２Ａに格納される最大接続段数に基づいて、パケットを送出した後に、転送先のファンクションからの応答がホスト１０に転送されるまでに要する時間（応答時間）の最大値を算出する。
【００４５】
このように、実施の形態１に従うホストコントローラ１２０Ａは、ハブ２０の最大接続段数に応じてファンクションの応答時間を算出し、算出されたファンクションの応答時間に応じてフレームについての転送スケジューリングを実施する。
【００４６】
システムメモリ１１０は、クライエントソフトウェア１１２と、ＵＳＢドライバ１１４と、ホストコントローラドライバ１１６とを格納する。ここで、これらのコンポーネントの機能などについて説明する。
【００４７】
（ｃ２：ソフトウェア／ハードウェアの階層化構造）
図６は、ＵＳＢホストの機能構成を説明するための模式図である。図６を参照して、ＵＳＢでのデータ転送を実現するために、階層化された複数のコンポーネント間で処理を分担する。
【００４８】
クライエントソフトウェア１１２は、１または複数のファンクション（ノード）との通信を利用するアプリケーションソフトウェアであり、ホスト１０とファンクション３０との間のデータの遣り取りの全体を制御する。クライエントソフトウェア１１２は、何らかのデータを特定のファンクション３０へ転送するために、１または複数のＩ／Ｏ要求パケット（ＩＲＰ：I/O Request Packet）をＵＳＢドライバ１１４へ与える。Ｉ／Ｏ要求パケットは、対象のデータをパッケージ化したものであり、転送先の情報などを含む。
【００４９】
ＵＳＢドライバ１１４は、ホストコントローラ１２０Ａを制御するドライバソフトウェアであり、Ｉ／Ｏ要求パケットをホストコントローラドライバ１１６へ出力するとともに、ファンクション３０からのパケットを受信して、クライエントソフトウェア１１２へ出力する。
【００５０】
ホストコントローラドライバ１１６は、パケットの送受信を管理する転送処理を実施する。ホストコントローラドライバ１１６は、ハブ２０またはファンクション３０との間でパケットをエンコードした信号を遣り取りする。ホストコントローラドライバ１１６とホストコントローラドライバ１１６とは、トランザクションリストに基づいて、パケットごとにトランザクション（データの遣り取り）を管理することになる。いずれかのファンクション３０からの応答、または、いずれかのファンクション３０から受信したパケットは、逆の経路を辿って、クライエントソフトウェア１１２へ出力される。
【００５１】
クライエントソフトウェア１１２とＵＳＢドライバ１１４との間には、ＵＳＢドライバインターフェイスが存在し、ＵＳＢドライバ１１４とホストコントローラドライバ１１６との間には、ホストコントローラインターフェイスが存在することになる。
【００５２】
ホストコントローラ１２０Ａは、クライエントソフトウェア１１２およびＵＳＢドライバ１１４を実行する演算主体である、ＣＰＵ１０２と接続されている。ホストコントローラドライバ１１６およびホストコントローラ１２０Ａが実際のデータ転送を実現し、両者の間には、ハードウェア／ソフトウェアインターフェイスが存在することになる。より具体的には、ホストコントローラドライバ１１６は、クライエントソフトウェア１１２からの命令に従って、ホストコントローラ１２０Ａが理解できる命令に置換する。
【００５３】
（ｃ３：ハブの最大接続段数の取得）
次に、ホスト１０に接続されているファンクションについての最大接続段数を取得する方法について説明する。
【００５４】
実施の形態１に従う通信システム１Ａにおいては、ドライバ情報取得モジュール１４０が、ドライバソフトウェアであるＵＳＢドライバ１１４が保持するドライバ情報を参照することで、ホスト１０のポート１３０からパケットが送出されてから、転送先の端末であるファンクション３０からの応答を受信するまでの時間の長さに関連付けられる情報を取得する。すなわち、ドライバ情報取得モジュール１４０は、ドライバ情報に基づいて、ホスト１０のポート１３０から各ファンクションまでの経路上に存在するハブ２０の数を取得する。
【００５５】
このとき、ホスト１０のポート１３０に接続されているそれぞれのファンクションについて、ホスト１０のポート１３０からの経路上に存在するハブ２０の数の最大値が取得される。すなわち、ＵＳＢドライバ１１４が保持するドライバ情報を参照することで、ホスト１０から各ファンクション３０までの経路を追跡し、ファンクション３０までの経路上に存在するハブ２０の最大数（段数の最大値）を決定する。
【００５６】
図７は、実施の形態１に従うＵＳＢ通信システム１Ａにおけるハブ２０の最大接続段数を取得する処理手順を示すフローチャートである。図７に示す各ステップは、基本的には、ホストコントローラ１２０Ａのドライバ情報取得モジュール１４０（図５）によって実行される。
【００５７】
図７を参照して、ホストコントローラ１２０Ａは、ポート１３０に何らかのデバイス（ハブ２０またはファンクション３０）が接続されたか否かを判断する（ステップＳ１００）。具体的には、ホスト１０のポート１３０またはハブ２０のポートに何らかのデバイスが接続されると、割込信号が発生する。ホストコントローラ１２０Ａは、割込信号の発生の有無によって、ポート１３０へのデバイスの接続の有無を判断する。ポート１３０に何らのデバイスも接続されていなければ（ステップＳ１００においてＮＯの場合）、ステップＳ１００の処理が繰り返される。
【００５８】
これに対して、ポート１３０に何らかのデバイスが接続されると（ステップＳ１００においてＹＥＳの場合）、ホストコントローラ１２０Ａは、段数を示す変数Ｎに「１」をセットし（ステップＳ１０２）、Ｎ段目のデバイスに係るドライバ情報を取得する（ステップＳ１０４）。すなわち、ステップＳ１０４の最初の実行時には、ホスト１０のポート１３０に接続されている１段目のデバイスについての情報が取得される。
【００５９】
続いて、ホストコントローラ１２０Ａは、取得したＮ段目のデバイスに係るドライバ情報に基づいて、Ｎ段目にハブ２０が存在するか否かを判断する（ステップＳ１０６）。Ｎ段目にハブ２０が存在すれば（ステップＳ１０６においてＹＥＳの場合）、ホストコントローラ１２０Ａは、変数Ｎが規格上の最大数（ＵＳＢ２．０の場合には「５」）に到達しているか否かを判断する（ステップＳ１０８）。変数Ｎが規格上の最大数に到達していなければ（ステップＳ１０８においてＮＯの場合）、ホストコントローラ１２０Ａは、変数Ｎを１だけインクリメントし（ステップＳ１１０）、ステップＳ１０４以下の処理を繰り返す。
【００６０】
すなわち、１段目のデバイスとしてハブ２０が含まれている場合には、ホストコントローラ１２０Ａは、当該ハブ２０に接続されているすべてのデバイス（すなわち、２段目のデバイス）のドライバ情報を取得する。同様に、２段目のデバイスとしてハブ２０が含まれている場合には、ホストコントローラ１２０Ａは、当該ハブ２０に接続されているすべてのデバイス（すなわち、３段目のデバイス）のドライバ情報を取得する。同様に、３段目のデバイスとしてハブ２０が含まれている場合には、ホストコントローラ１２０Ａは、当該ハブ２０に接続されているすべてのデバイス（すなわち、４段目のデバイス）のドライバ情報を取得する。同様に、４段目のデバイスとしてハブ２０が含まれている場合には、ホストコントローラ１２０Ａは、当該ハブ２０に接続されているすべてのデバイス（すなわち、５段目のデバイス）のドライバ情報を取得する。
【００６１】
Ｎ段目にハブ２０が存在しなければ（ステップＳ１０６においてＮＯの場合）、または、変数Ｎが規格上の最大数に到達していれば（ステップＳ１０８においてＹＥＳの場合）、ホストコントローラ１２０Ａは、現時点の変数Ｎの値をハブ２０の最大接続段数として設定する（ステップＳ１１２）。この設定された最大接続段数は、最大接続段数レジスタ１４２Ａに格納される。そして、ハブ２０の最大接続段数の取得処理は終了する。
【００６２】
図８は、図７に示すハブ２０の最大接続段数を取得する処理手順によって取得されるドライバ情報の一例を示す模式図である。図７に示すハブ２０の最大接続段数を取得する処理手順によって、図８に示すように、アップストリーム側にあるデバイスから順次その接続関係が取得される。そして、接続されているデバイスのうち最もダウンストリーム側、すなわち接続段数が最大となるデバイスおよびそのときの接続段数が取得される。
【００６３】
なお、図８に示すようなドライバ情報を一括で取得できるような構成においては、図７に示す処理手順とは異なる手順に従ってドライバ情報を一括して取得し、取得したドライバ情報を解析することで、最大接続段数を決定するようにしてもよい。
【００６４】
（ｃ４：転送スケジューリング）
次に、ホスト１０での転送スケジューリングについて説明する。図９は、実施の形態１に従うＵＳＢ通信システム１Ａにおける転送スケジューリングの処理手順を示すフローチャートである。図９に示す各ステップは、基本的には、ホストコントローラ１２０Ａのスケジューラ１２２（図５）によって実行される。
【００６５】
図９を参照して、ホストコントローラ１２０Ａは、初期化処理の一部として、最大接続段数に応じて算出されるファンクションの応答時間を取得する（ステップＳ１５０）。このファンクションの応答時間は、応答時間算出モジュール１４４Ａ（図５）が最大接続段数レジスタ１４２Ａに格納されている最大接続段数に基づいて算出する。
【００６６】
続いて、ホストコントローラ１２０Ａは、クライエントソフトウェア１１２からのデータ転送要求（Ｉ／Ｏ要求パケット）が存在しているか否かを判断する（ステップＳ１５２）。データ転送要求が存在していなければ（ステップＳ１５２においてＮＯの場合）、ステップＳ１５２の処理が繰り返される。
【００６７】
データ転送要求が存在していれば（ステップＳ１５２においてＹＥＳの場合）、ホストコントローラ１２０Ａは、データ転送要求に含まれるパケットを単一のフレーム内に割り当てる（ステップＳ１５４）。すなわち、ホストコントローラ１２０Ａは、予め定められた周期を有するフレームごとに１または複数のパケットを割り当てる。そして、ホストコントローラ１２０Ａは、パケットの割り当て後に、データ転送要求（Ｉ／Ｏ要求パケット）が未だ残っているか否かを判断する（ステップＳ１５６）。データ転送要求（Ｉ／Ｏ要求パケット）が未だ残っていれば（ステップＳ１５６においてＹＥＳの場合）、ホストコントローラ１２０Ａは、パケット割り当て後の残りフレームサイズ（残り時間）がパケットのデータサイズ（送信期間の長さ）とファンクションの応答待ち期間の長さとの合計以上残っているか否かを判断する（ステップＳ１５８）。パケット割り当て後の残りフレームサイズがパケットのデータサイズとファンクションの応答待ち期間の長さとの合計以上残っていれば（ステップＳ１５８においてＹＥＳの場合）、ホストコントローラ１２０Ａは、ステップＳ１５４以下の処理を繰り返す。
【００６８】
データ転送要求（Ｉ／Ｏ要求パケット）が残っていなければ（ステップＳ１５６においてＮＯの場合）、または、パケット割り当て後の残りフレームサイズがパケットのデータサイズとファンクションの応答待ち期間の長さとの合計以上残っていなければ（ステップＳ１５８においてＮＯの場合）、１または複数のパケットを割り当てたフレームを送出する（ステップＳ１６０）。そして、ステップＳ１５２以下の処理が繰り返される。
【００６９】
このように、ホストコントローラ１２０Ａのスケジューラ１２２は、ドライバ情報取得モジュール１４０により取得されたドライバ情報に基づいて、１つのフレームに割り当てるパケットの数または間隔を調整する。
【００７０】
（ｃ５：利点）
実施の形態１に従うホストコントローラ１２０Ａは、ＵＳＢドライバ１１４が保持するドライバ情報を参照することで、各ファンクションについてのハブの接続段数を容易に取得することができる。このような情報を取得することで、実際の接続構成において生じ得る、データ転送に係る遅延時間に応じて、あるパケットを送出後の応答待ち時間を最適化できる。すなわち、上述の関連技術のように、規格上最大の接続段数に応じて一律に応答待ち時間を設定するのではなく、実際の接続構成（すなわち、接続段数の最大値）に応じて、応答待ち時間を短縮することができる。これによって、フレーム内に割り当てるパケットの数を増大させることができ、この結果、転送レートを向上させることができる。
【００７１】
［Ｄ．実施の形態２］
上述の実施の形態１においては、ＵＳＢドライバ１１４が管理するドライバ情報を参照して、実際の接続構成についてのハブ２０の最大接続段数を取得し、当該取得したハブ２０の最大接続段数に基づいて、ファンクションの応答時間を一律に設定する処理例について説明した。これに対して、転送先となるファンクションの接続段数の別に、応答時間をそれぞれ設定してもよい。
【００７２】
以下、実施の形態２として、ファンクションごとに応答時間をそれぞれ設定した上で、転送スケジューリングを実現するための構成について説明する。
【００７３】
（ｄ１：システム構成）
図１０は、実施の形態２に従うＵＳＢ通信システム１Ｂのシステム構成を示す模式図である。図１０を参照して、ＵＳＢ通信システム１Ｂは、図５に示す実施の形態１に従うＵＳＢ通信システム１Ａに比較して、ホストコントローラ１２０Ａに代えてホストコントローラ１２０Ｂが採用されている。ホストコントローラ１２０Ｂにおいては、図５に示すホストコントローラ１２０Ａに比較して、最大接続段数レジスタ１４２Ａおよび応答時間算出モジュール１４４Ａに代えて、接続段数レジスタ１４３および応答時間算出モジュール１４４Ｂがそれぞれ採用されている。
【００７４】
接続段数レジスタ１４３は、デバイス（ハブ２０およびファンクション３０）ごとの接続段数を格納する。図１１は、実施の形態２に従うＵＳＢ通信システム１Ｂの接続段数レジスタ１４３に格納されるデータの一例を示す図である。図１１を参照して、例えば、デバイスのアドレスごとに、当該デバイスの接続段数が格納される。
【００７５】
ドライバ情報取得モジュール１４０は、ホスト１０のポート１３０に接続されている端末であるファンクション３０ごとに、ホスト１０のポート１３０からの経路上に存在するハブ２０の数をそれぞれ取得する。より具体的には、ドライバ情報取得モジュール１４０は、上述したような手順に従って、ＵＳＢドライバ１１４が保持するドライバ情報を取得し、取得したドライバ情報に基づいて、各デバイスの接続段数を取得する。そして、ドライバ情報取得モジュール１４０は、取得した各デバイスの接続段数を接続段数レジスタ１４３に格納する。
【００７６】
応答時間算出モジュール１４４Ｂは、接続段数レジスタ１４３に格納されるデバイスごとの接続段数に基づいて、各転送先にパケットを送出した後に、当該転送先のファンクションからの応答がホスト１０に転送されるまでに要する時間（応答時間）をそれぞれ算出する。なお、応答時間算出モジュール１４４Ｂは、転送先のファンクションごとに応答時間を算出してもよいし、接続段数が同一であるファンクションの間では応答時間が同じであるとみなして、接続段数ごとに応答時間を算出してもよい。
【００７７】
スケジューラ１２２における転送スケジューリングについては、後述する。その他のコンポーネントについては、実施の形態１において詳述したので、詳細な説明は繰り返さない。
【００７８】
（ｄ２：転送スケジューリング）
次に、ホスト１０での転送スケジューリングについて説明する。
【００７９】
図１２は、実施の形態２に従うＵＳＢ通信システム１Ｂにおける転送スケジューリングを説明するための模式図である。図１２（Ａ）には、転送先のファンクションの接続段数が少ない場合の転送スケジューリングの一例を示し、図１２（Ｂ）には、転送先のファンクションの接続段数が多い場合の転送スケジューリングの一例を示す。
【００８０】
図１２（Ａ）に示すように、転送先のファンクションの接続段数が少ない場合には、ホストとファンクションとの間のデータ転送において生じる遅延が小さいので、フレーム内に配置されるパケット間の間隔（応答待ち期間）も短く設定される。併せて、フレームの最後を基準に設定されるフリー期間も短く設定される。このような応答待ち期間を短くすることで、フレーム内により多くのパケットを割り当てることができる。
【００８１】
一方、図１２（Ｂ）に示すように、転送先のファンクションの接続段数が多い場合には、ホストとファンクションとの間のデータ転送において生じる遅延が大きいので、フレーム内に配置されるパケット間の間隔（応答待ち期間）も長く設定される。併せて、フレームの最後を基準に設定されるフリー期間も長く設定される。応答待ち期間が長く設定されることで、フレーム内に割り当てることのできるパケットの数が減少する。
【００８２】
図１２（Ａ）および図１２（Ｂ）に示すように、転送先のファンクションの接続段数に応じて応答待ち期間の長さを調整することで、転送レートを向上させることができる。
【００８３】
図１３は、実施の形態２に従うＵＳＢ通信システム１Ｂにおける転送スケジューリングの処理手順を示すフローチャートである。図１３に示す各ステップは、基本的には、ホストコントローラ１２０Ｂのスケジューラ１２２（図１０）によって実行される。
【００８４】
図１３を参照して、ホストコントローラ１２０Ｂは、クライエントソフトウェア１１２からのデータ転送要求（Ｉ／Ｏ要求パケット）が存在しているか否かを判断する（ステップＳ２５０）。データ転送要求が存在していなければ（ステップＳ２５０においてＮＯの場合）、ステップＳ２５０の処理が繰り返される。
【００８５】
データ転送要求が存在していれば（ステップＳ２５０においてＹＥＳの場合）、ホストコントローラ１２０Ｂは、データ転送要求により指定されている転送先のファンクションの応答時間を取得する（ステップＳ２５２）。このファンクションの応答時間は、応答時間算出モジュール１４４Ｂ（図１０）が接続段数レジスタ１４３に格納されている転送先のファンクションの接続段数に基づいて算出する。続いて、ホストコントローラ１２０Ｂは、データ転送要求に含まれるパケットを単一のフレーム内に割り当てる（ステップＳ２５４）。そして、ホストコントローラ１２０Ｂは、パケットの割り当て後に、データ転送要求（Ｉ／Ｏ要求パケット）が未だ残っているか否かを判断する（ステップＳ２５６）。データ転送要求（Ｉ／Ｏ要求パケット）が未だ残っていれば（ステップＳ２５６においてＹＥＳの場合）、ホストコントローラ１２０Ｂは、パケット割り当て後の残りフレームサイズ（残り時間）がパケットのデータサイズ（送信期間の長さ）と転送先のファンクションの応答待ち期間の長さとの合計以上残っているか否かを判断する（ステップＳ２５８）。パケット割り当て後の残りフレームサイズがパケットのデータサイズと転送先のファンクションの応答待ち期間の長さとの合計以上残っていれば（ステップＳ２５８においてＹＥＳの場合）、ホストコントローラ１２０Ｂは、ステップＳ２５４以下の処理を繰り返す。
【００８６】
データ転送要求（Ｉ／Ｏ要求パケット）が残っていなければ（ステップＳ２５６においてＮＯの場合）、または、パケット割り当て後の残りフレームサイズがパケットのデータサイズと転送先のファンクションの応答待ち期間の長さとの合計以上残っていなければ（ステップＳ２５８においてＮＯの場合）、１または複数のパケットを割り当てたフレームを送出する（ステップＳ２６０）。そして、ステップＳ２５０以下の処理が繰り返される。
【００８７】
このように、ホストコントローラ１２０Ｂのスケジューラ１２２は、ドライバ情報取得モジュール１４０により取得されたドライバ情報に基づいて、１つのフレームに割り当てるパケットの数または間隔を調整する。
【００８８】
（ｄ３：利点）
実施の形態１に従うホストコントローラ１２０Ｂによれば、上述の実施の形態１に従うホストコントローラ１２０Ａによって得られる利点に加えて、次のような利点がある。すなわち、ホスト１０のポート１３０に接続されたファンクション３０ごとに、最適な応答待ち時間をそれぞれ設定することができる。そのため、例えば、接続段数が最大接続段数より小さいファンクション３０が多く存在する場合には、実施の形態１に比較して、より転送レートを向上させることができる。
【００８９】
［Ｅ．実施の形態３］
上述の実施の形態１および２においては、ＵＳＢドライバからドライバ情報を取得することで、ファンクションの応答時間の算出に必要な接続段数を取得する構成について例示した。これに対して、実施の形態３においては、デバイス接続時のポート有効化およびアドレス設定の処理中に、接続段数を取得する構成について例示する。すなわち、ホストコントローラの機能のみを用いて、ファンクションの接続段数を取得する構成について例示する。
【００９０】
（ｅ１：システム構成）
図１４は、実施の形態３に従うＵＳＢ通信システム１Ｃのシステム構成を示す模式図である。図１４を参照して、ＵＳＢ通信システム１Ｃは、図１０に示す実施の形態２に従うＵＳＢ通信システム１Ｂに比較して、ホストコントローラ１２０Ｂに代えてホストコントローラ１２０Ｃが採用されている。ホストコントローラ１２０Ｃにおいては、図１０に示すホストコントローラ１２０Ｂに比較して、ドライバ情報取得モジュール１４０に代えて、パケット解析モジュール１４６および有効接続段数レジスタ１４８が採用されている。
【００９１】
実施の形態３においては、パケット解析モジュール１４６が、ホスト１０のポート１３０からパケットが送出されてから、転送先の端末であるファンクション３０からの応答を受信するまでの時間の長さに関連付けられる情報を取得する。
【００９２】
パケット解析モジュール１４６は、ポート１３０から送出またはポート１３０で受信されるパケットの内容を解析する。特に、パケット解析モジュール１４６は、ポート１３０に何らかのデバイス（ハブ２０またはファンクション３０）が接続されてアドレスが割り当てられる処理に用いられるパケット（トークン・パケット、データ・パケット、ハンドシェイク・パケットなど）を検出し、有効接続段数レジスタ１４８に格納される有効化されたポートのハブの接続段数を更新するとともに、接続段数レジスタ１４３に格納されるデバイス（ハブ２０およびファンクション３０）ごとの接続段数を更新する。
【００９３】
有効接続段数レジスタ１４８は、ポート１３０（ルートハブ）に接続される各デバイスの接続段数を算出するためのワークデータとして、対象のデバイスまでの経路上に存在するハブ２０の数を保持する。
【００９４】
接続段数レジスタ１４３には、上述の図１１に示すように、例えば、デバイスのアドレスごとに、当該デバイスの接続段数が格納される。
【００９５】
ハブの接続段数を取得する処理については、後述する。その他のコンポーネントについては、実施の形態１または２において詳述したので、詳細な説明は繰り返さない。
【００９６】
（ｅ２：ハブの接続段数の取得）
次に、ホスト１０に接続されているファンクションについての接続段数を取得する処理について説明する。
【００９７】
ホストコントローラ１２０Ｃのデータ転送コントローラ１２８は、ＵＳＢバスに新たなノード（ハブ２０またはファンクション３０）が接続されると、各ノードにアドレスを割り当てる初期化処理を実施する。より具体的には、ホストコントローラ１２０Ｃのデータ転送コントローラ１２８は、初期化処理の一部として、ルートとなるポート１３０の有効化、ハブ２０のポートの有効化、ポートを有効化するハブ２０のアドレスの設定および取得、ハブ２０に接続されているファンクション３０のアドレスの設定および取得などを実施する。パケット解析モジュール１４６は、ＵＳＢバス上を伝送される転送データを解析する。パケット解析モジュール１４６は、ポートが有効化されたときのハブ２０のアドレスと、有効接続段数レジスタ１４８に先に格納されている接続段数とに基づいて、あるポートが有効化されたときのハブの接続段数を決定する。
【００９８】
図１５は、実施の形態３に従うＵＳＢ通信システム１Ｃにおけるアドレス設定の処理手順を示す模式図である。図１６は、図１５に示すアドレス設定に対応して、接続段数レジスタ１４３および有効接続段数レジスタ１４８の更新処理を説明するための模式図である。図１５および図１６に示される処理は、ＵＳＢバスの初期化処理の一部に含まれてもよい。
【００９９】
図１５（Ａ）〜（Ｄ）には、ポート１３０に接続されたデバイス群に対して順次アドレスが設定される処理例を示す。図１５（Ａ）〜（Ｄ）において、デバイス名に引き続くカッコ内に示される数字は、割り当てられたアドレスを示す。なお、接続直後はいずれのデバイスにもアドレスが設定されておらず、各デバイスは、アドレスが設定されていないことを示す「０」を格納する。
【０１００】
図１５（Ａ）に示すように、まず、ホストコントローラ１２０Ｃのデータ転送コントローラ１２８は、ポート１３０のダウンストリームポートを有効化する。すなわち、データ転送コントローラ１２８は、ポート１３０を有効化し、ポート１３０に直接接続されているハブ２０＿１との通信を開始する。このとき、パケット解析モジュール１４６は、データ転送コントローラ１２８から送出されるパケットの内容を解析し、ポート１３０から転送先のデバイス（すなわち、ハブ２０＿１）までの経路上に介在しているハブ２０の数がゼロであると判断し、有効接続段数レジスタ１４８に「０」をセットする（図１６（Ａ）の（１）更新）。
【０１０１】
続いて、データ転送コントローラ１２８は、ハブ２０＿１にアドレス「１」を割り当てる。すなわち、データ転送コントローラ１２８は、ハブ２０＿１に対して、アドレスを「０」から「１」に変更する命令を送出する。このアドレスの設定に応じて、パケット解析モジュール１４６は、接続段数レジスタ１４３のアドレス「１」に対応する接続段数として、有効接続段数レジスタ１４８に格納されている「有効接続段数＋１」（すなわち、「１」）をセットする（図１６（Ａ）の（２）更新）。
【０１０２】
次に、図１５（Ｂ）に示すように、データ転送コントローラ１２８は、アドレス１が設定されたハブ２０＿１に対して、その１番目のポートを有効化する命令を送出する。すなわち、データ転送コントローラ１２８は、ハブ２０＿１の１番目のポートを有効化し、ハブ２０＿１の１番目のポートに直接接続されているファンクション３０＿１との通信を開始する。このとき、パケット解析モジュール１４６は、データ転送コントローラ１２８から送出されるパケットの内容を解析し、ポート１３０から転送先のデバイス（すなわち、ファンクション３０＿１）までの経路上にハブ２０＿１が介在していると判断し、有効接続段数レジスタ１４８に「１」をセットする（図１６（Ｂ）の（３）更新）。
【０１０３】
続いて、データ転送コントローラ１２８は、ファンクション３０＿１にアドレス「２」を割り当てる。すなわち、データ転送コントローラ１２８は、ファンクション３０＿１に対して、アドレスを「０」から「２」に変更する命令を送出する。このアドレスの設定に応じて、パケット解析モジュール１４６は、接続段数レジスタ１４３のアドレス「２」に対応する接続段数として、有効接続段数レジスタ１４８に格納されている「有効接続段数＋１」（すなわち、「２」）をセットする（図１６（Ｂ）の（４）更新）。
【０１０４】
次に、図１５（Ｃ）に示すように、データ転送コントローラ１２８は、アドレス１が設定されたハブ２０＿１に対して、その２番目のポートを有効化する命令を送出する。すなわち、データ転送コントローラ１２８は、ハブ２０＿１の２番目のポートを有効化し、ハブ２０＿１の２番目のポートに直接接続されているハブ２０＿３との通信を開始する。このとき、パケット解析モジュール１４６は、データ転送コントローラ１２８から送出されるパケットの内容を解析し、ポート１３０から転送先のデバイス（すなわち、ハブ２０＿３）までの経路上にハブ２０＿１が介在していると判断し、有効接続段数レジスタ１４８に「１」をセットする（図１６（Ｃ）の（５）更新）。
【０１０５】
続いて、データ転送コントローラ１２８は、ハブ２０＿３にアドレス「３」を割り当てる。すなわち、データ転送コントローラ１２８は、ハブ２０＿３に対して、アドレスを「０」から「３」に変更する命令を送出する。このアドレスの設定に応じて、パケット解析モジュール１４６は、接続段数レジスタ１４３のアドレス「３」に対応する接続段数として、有効接続段数レジスタ１４８に格納されている「有効接続段数＋１」（すなわち、「２」）をセットする（図１６（Ｃ）の（６）更新）。
【０１０６】
以下同様の手順によって、各デバイスに対してアドレスが設定されるとともに、アドレスの設定に応じて、有効接続段数レジスタ１４８および接続段数レジスタ１４３の値が順次更新される。すなわち、データ転送コントローラ１２８は、初期化処理において、特定のハブ２０のポートを有効化する命令を発行し、パケット解析モジュール１４６は、この特定のハブ２０のポートを有効化する命令に基づいて、当該ハブ２０のポートに接続されているファンクション３０について、ホスト１０のポート１３０からの経路上に存在するハブの数を取得する。なお、図１６に示すように、デバイスのアドレスごとに、当該デバイスの接続段数が格納される。
【０１０７】
最終的に、図１５（Ｄ）に示すように、アドレス４が設定されたハブ２０＿２に対して、その１番目のポートを有効化する命令が送出されると、パケット解析モジュール１４６は、データ転送コントローラ１２８から送出されるパケットの内容を解析し、ポート１３０から転送先のデバイス（すなわち、ファンクション３０＿２）までの経路上にハブ２０＿１およびハブ２０＿２が介在していると判断し、有効接続段数レジスタ１４８に「２」をセットする（図１６（Ｄ）の（７）更新）。そして、ファンクション３０＿２にアドレス「７」が割り当てられると、パケット解析モジュール１４６は、接続段数レジスタ１４３のアドレス「７」に対応する接続段数として、有効接続段数レジスタ１４８に格納されている「有効接続段数＋１」（すなわち、「３」）をセットする（図１６（Ｄ）の（８）更新）。
【０１０８】
以上のような処理によって、デバイスごとの接続段数が取得される。すなわち、パケット解析モジュール１４６は、データ転送コントローラ１２８による初期化処理の実施中に、ホスト１０のポート１３０から対象の端末であるファンクション３０までの経路上に存在するハブ２０の数を取得する。そして、取得された接続段数に応じて、ファンクションごとに応答時間が算出される。
【０１０９】
図１７は、実施の形態３に従うＵＳＢ通信システム１Ｃにおけるハブの接続段数を取得する処理手順を示すフローチャートである。図１７に示す各ステップは、基本的には、ホストコントローラ１２０Ｃのパケット解析モジュール１４６（図１４）によって実行される。
【０１１０】
図１７を参照して、パケット解析モジュール１４６は、データ転送コントローラ１２８による初期化処理が開始されたか否かを判断する（ステップＳ３００）。初期化処理が開始されていなければ（ステップＳ３００においてＮＯの場合）、ステップＳ３００の処理が繰り返される。
【０１１１】
初期化処理が開始されると（ステップＳ３００においてＹＥＳの場合）、パケット解析モジュール１４６は、データ転送コントローラ１２８によりポートを有効化する命令が送出されたか否かを判断する（ステップＳ３０２）。ポートを有効化する命令が送出されていなければ（ステップＳ３０２においてＮＯの場合）、ステップＳ３０２の処理が繰り返される。
【０１１２】
ポートを有効化する命令が送出されると（ステップＳ３０２においてＹＥＳの場合）、パケット解析モジュール１４６は、送出されたポートを有効化する命令に基づいて、有効接続段数レジスタ１４８に有効接続段数をセットする（ステップＳ３０４）。すなわち、パケット解析モジュール１４６は、有効接続段数レジスタ１４８の値を更新する。続いて、パケット解析モジュール１４６は、データ転送コントローラ１２８によりアドレスを設定する命令が送出されたか否かを判断する（ステップＳ３０６）。アドレスを設定する命令が送出されていなければ（ステップＳ３０６においてＮＯの場合）、ステップＳ３０６の処理が繰り返される。
【０１１３】
アドレスを設定する命令が送出されると（ステップＳ３０６においてＹＥＳの場合）、パケット解析モジュール１４６は、有効接続段数レジスタ１４８にセットされている値と、アドレスを設定する命令に含まれるアドレスとを用いて、アドレスごとの接続段数を接続段数レジスタ１４３にセットする（ステップＳ３０８）。
【０１１４】
続いて、パケット解析モジュール１４６は、データ転送コントローラ１２８による初期化処理が終了したか否かを判断する（ステップＳ３１０）。初期化処理が終了していなければ（ステップＳ３１０においてＮＯの場合）、ステップＳ３０２以下の処理が繰り返される。これに対して、初期化処理が終了していれば（ステップＳ３１０においてＹＥＳの場合）、処理はステップＳ３００に戻る。
【０１１５】
以上のような処理手順によって、図１６に示すような、転送先のデバイス（アドレス）ごとに接続段数が取得される。
【０１１６】
（ｅ３：転送スケジューリング）
次に、ホスト１０での転送スケジューリングについては、基本的には、上述した実施の形態２に従うＵＳＢ通信システム１Ｂにおける転送スケジューリングの処理手順と同様である。すなわち、図１３に示すフローチャートに従って、転送スケジューリングが実施される。そのため、詳細な説明は繰り返さない。
【０１１７】
（ｅ４：利点）
実施の形態３に従うホストコントローラ１２０Ｃは、デバイス（ハブ２０またはファンクション３０）がホスト１０のポート１３０に接続されて開始される初期化処理において、各ファンクションについてのハブの接続段数を容易に取得することができる。このような情報を取得することで、実際の接続構成において生じ得る、データ転送に係る遅延時間に応じて、あるパケットを送出後の応答待ち時間を最適化できる。すなわち、上述の関連技術のように、規格上最大の接続段数に応じて一律に応答待ち時間を設定するのではなく、実際の接続構成（すなわち、接続段数の最大値）に応じて、応答待ち時間を短縮することができる。これによって、フレーム内に割り当てるパケットの数を増大させることができ、この結果、転送レートを向上させることができる。
【０１１８】
また、実施の形態３の構成は、上述した関連技術の構成に対して、初期化処理中に発行される命令を解析する機能などを追加することで実現できる。つまり、関連技術に従うホストコントローラに対して、比較的簡単な改良を施すだけで、実施の形態３に従うホストコントローラ１２０Ｃを実現できる。
【０１１９】
［Ｆ．実施の形態４］
上述の実施の形態３においては、接続段数に応じてファンクションごとの応答時間を算出する構成について例示したが、取得されたデバイスごとの接続段数のうち最大のもの（最大接続段数）を用いて、応答時間を一律に決定してもよい。
【０１２０】
実施の形態４に従うＵＳＢ通信システムにおいては、上述の実施の形態３と同様の処理手順に従って、デバイスごとの接続段数が取得される。
【０１２１】
図１８は、実施の形態４に従うＵＳＢ通信システムにおけるハブの最大接続段数を取得する処理を説明するための模式図である。図１８を参照して、例えば、接続段数レジスタ１４３に格納された、デバイス（ハブ２０およびファンクション３０）ごとの接続段数のうち、最大のものが最大接続段数として決定される。すなわち、ホスト１０のポート１３０に接続されているそれぞれのファンクション３０について、ホスト１０のポート１３０からの経路上に存在するハブの数の最大値（最大接続段数）が取得される。そして、ホストコントローラは、この取得された最大接続段数に応じた応答時間に基づいて、転送スケジューリングを実施する。
【０１２２】
実施の形態４に従うＵＳＢ通信システムにおける転送スケジューリングの処理手順は、基本的には、上述した実施の形態１に従うＵＳＢ通信システム１Ａにおける転送スケジューリングの処理手順と同様である。すなわち、図９に示すフローチャートに従って、転送スケジューリングが実施される。そのため、詳細な説明は繰り返さない。
【０１２３】
実施の形態４に従うホストコントローラによれば、上述の実施の形態３に従うホストコントローラ１２０Ｃによって得られる利点に加えて、次のような利点がある。すなわち、応答待ち時間をファンクション３０ごとに管理する必要がないので、実施の形態３に比較して、処理ロジックを簡素化できる。
【０１２４】
［Ｇ．実施の形態５］
上述の実施の形態１〜４においては、各デバイスの接続関係に基づいて、応答時間を静的に決定する構成について例示した。これに対して、実施の形態５においては、実際のデータ転送に要する時間に基づいて、応答時間を動的に決定する構成について例示する。
【０１２５】
（ｇ１：システム構成）
図１９は、実施の形態５に従うＵＳＢ通信システム１Ｅのシステム構成を示す模式図である。図１９を参照して、ＵＳＢ通信システム１Ｅは、図５に示す実施の形態１に従うＵＳＢ通信システム１Ａに比較して、ホストコントローラ１２０Ａに代えてホストコントローラ１２０Ｅが採用されている。ホストコントローラ１２０Ｅにおいては、図５に示すホストコントローラ１２０Ａに比較して、ドライバ情報取得モジュール１４０に代えて、データ転送時間測定モジュール１５０と、測定値格納レジスタ１５２とが採用されている。また、応答時間算出モジュール１４４Ａに代えて、応答時間算出モジュール１４４Ｅが採用されている。
【０１２６】
データ転送時間測定モジュール１５０は、ホスト１０のポートからパケットが送出されてから、転送先の端末であるファンクション３０にて受信されるとともに、当該端末にて受信されたパケットに応じて送出された応答がホスト１０のポートで受信されるまで、に要する時間を測定する。より具体的には、データ転送時間測定モジュール１５０は、ポート１３０から送出またはポート１３０で受信されるパケットの内容を解析して、データ転送に要する時間を測定する。すなわち、データ転送時間測定モジュール１５０は、ＵＳＢバス上の転送データを解析して、ホスト１０から送出された送信データに対するファンクション３０からの受信データの応答時間を測定する。
【０１２７】
測定値格納レジスタ１５２は、データ転送時間測定モジュール１５０により測定された応答時間を格納する。基本的には、測定値格納レジスタ１５２には、転送先のデバイス（アドレス）ごとに測定された応答時間が格納される。図２０は、実施の形態５に従うＵＳＢ通信システム１Ｅの測定値格納レジスタ１５２に格納されるデータの一例を示す図である。図２０を参照して、例えば、デバイスのアドレスごとに、当該デバイスの応答時間が格納される。すなわち、ホスト１０のポート１３０に接続されているファンクション３０ごとに、応答時間が測定される。応答時間の単位としては、例えば、ビットタイム（１ビットを送受信するのに回線を占有する期間）などが用いられる。
【０１２８】
１つのデバイス（アドレス）について、複数の測定結果（応答時間）が格納されるようにしてもよいし、あるいは、後述するように、１つのデバイス（アドレス）について、最も短い測定結果（応答時間）のみを格納するようにしてもよい。後者の場合には、データ転送時間測定モジュール１５０は、いずれかのデバイスについて応答時間を測定し、その測定された応答時間が測定値格納レジスタ１５２に格納されている応答時間より短い場合には、測定された応答時間で測定値格納レジスタ１５２の値を更新するようにしてもよい。すなわち、データ転送時間測定モジュール１５０は、同一の転送先について測定される複数の応答時間のうち、最小のものを測定結果として保持するようにしてもよい。
【０１２９】
そして、ホストコントローラ１２０Ｅのスケジューラ１２２は、転送先にパケットを送出してから、データ転送時間測定モジュール１５０により測定された時間に応じた期間にわたって当該パケットに対する応答を待つように、スケジューリングを実施する。より具体的には、応答時間算出モジュール１４４Ｅが、測定値格納レジスタ１５２に格納されている測定結果に基づいて、各転送先にパケットを送出した後に、当該転送先のファンクションからの応答がホスト１０に転送されるまでに要する時間（応答時間）をそれぞれ算出する。転送先のアドレスごとの応答時間に応じて、応答待ち期間の長さが決定され、決定された応答待ち期間の長さに応じて、転送スケジューリングが実施される。
【０１３０】
応答時間算出モジュール１４４Ｅは、測定値格納レジスタ１５２に格納されている測定結果を、そのまま応答待ち期間として決定してもよいし、パケットのデータサイズなどに応じて、応答待ち期間の長さを調整するようにしてもよい。応答待ち期間の決定方法については、後述する。
【０１３１】
それ以外の機能および処理については、実施の形態１〜４において詳述したので、詳細な説明は繰り返さない。
【０１３２】
（ｇ２：データ転送の時間測定および応答時間の取得）
次に、データ転送に要する時間の測定、および、応答時間の取得の方法について説明する。データ転送時間測定モジュール１５０は、ＵＳＢバス上を伝送される転送データを解析することで、ポート１３０からのある送信データの送出が完了してから、当該送信データに対する応答を転送先のファンクションから受信するまでの期間の長さを測定する。
【０１３３】
図２１は、実施の形態５に従うＵＳＢ通信システム１Ｅにおけるデータ転送に要する時間の測定を説明するための模式図である。図２１を参照して、データ転送時間測定モジュール１５０は、ホスト１０（ポート１３０）からのパケットの送出が完了してから、転送先のファンクション３０からの当該パケットに対する応答を受信するまでの期間を、応答時間として測定する。この応答時間の測定は、転送先のデバイス（アドレス）ごとに実施される。応答時間の測定は、初期化処理の間に実施されてもよいし、通常のデータ転送時に実施されてもよい。
【０１３４】
測定される応答時間は、パケットに依存して変化する可能性のあるもの（ファンクションでの応答遅延）と、パケットによらず一定であるもの（ケーブル遅延およびハブ遅延）とに分類できる。そのため、測定された応答時間の最小値に、パケットに依存して変化する可能性がある時間を加算した値を、ファンクションの応答待ち期間の長さとして設定してもよい。すなわち、実施の形態５に従うＵＳＢ通信システム１Ｅにおいては、転送先のデバイス（アドレス）ごとに応答時間の最小値を測定しておき、測定された各応答時間の最小値に所定のマージンを加えた時間を、ファンクションの応答待ち期間の長さとして設定する。このように、転送先にパケットを送出してから当該パケットに対する応答を待つ期間（応答待ち期間）は、データ転送時間測定モジュール１５０による測定結果に、予め定められた期間を加算することで算出される。
【０１３５】
なお、別の構成として、測定された応答時間の最大値（すなわちワースト値）をファンクションの応答待ち期間の長さとして設定してもよい。
【０１３６】
さらに別の構成として、測定される応答時間を、測定対象のパケットの種別またはデータサイズに基づいて、パケットに依存して変化する可能性のあるものと、パケットによらず一定であるものとに、統計的に分類するようにしてもよい。このように２つの成分を分離して取得しておくことで、送出対象のパケットに応じて、応答待ち期間の長さを動的に設定することもできる。
【０１３７】
図２２は、実施の形態５に従うＵＳＢ通信システム１Ｅにおける応答時間の測定手順を示すフローチャートである。図２２に示す各ステップは、基本的には、ホストコントローラ１２０Ｅのデータ転送時間測定モジュール１５０（図１９）によって実行される。
【０１３８】
図２２を参照して、ホストコントローラ１２０Ｅは、ポート１３０からパケットの送出が開始されたか否かを判断する（ステップＳ５００）。ポート１３０からパケットの送出が開始されていなければ（ステップＳ５００においてＮＯの場合）、ステップＳ５００の処理が繰り返される。
【０１３９】
これに対して、ポート１３０からパケットの送出が開始されると（ステップＳ５００においてＹＥＳの場合）、ホストコントローラ１２０Ｅは、当該パケットの送出先のデバイスのアドレスを取得する（ステップＳ５０２）。続いて、ホストコントローラ１２０Ｅは、パケットの送出が完了したか否かを判断する（ステップＳ５０４）。パケットの送出が完了していなければ（ステップＳ５０４においてＮＯの場合）、ステップＳ５０４の処理が繰り返される。
【０１４０】
これに対して、パケットの送出が完了すると（ステップＳ５０４においてＹＥＳの場合）、ホストコントローラ１２０Ｅは、タイマを起動し、応答時間の測定を開始する（ステップＳ５０６）。そして、ホストコントローラ１２０Ｅは、先に送出したパケットに対する応答を転送先のデバイスから受信したか否かを判断する（ステップＳ５０８）。先に送出したパケットに対する応答を転送先のデバイスから受信していなければ（ステップＳ５０８においてＮＯの場合）、ステップＳ５０８の処理が繰り返される。
【０１４１】
先に送出したパケットに対する応答を転送先のデバイスから受信すると（ステップＳ５０８においてＹＥＳの場合）、ホストコントローラ１２０Ｅは、タイマを停止し、応答時間の測定を終了する（ステップＳ５１０）。
【０１４２】
ホストコントローラ１２０Ｅは、送出先のデバイスのアドレスについて、測定された応答時間が測定値格納レジスタ１５２に格納されている応答時間より短いか否かを判断する（ステップＳ５１２）。測定された応答時間が先に取得されている応答時間より短ければ（ステップＳ５１２においてＹＥＳの場合）、ホストコントローラ１２０Ｅは、測定された応答時間を新たな応答時間として、測定値格納レジスタ１５２に格納する（ステップＳ５１４）。そして、処理はステップＳ５００に戻る。
【０１４３】
これに対して、測定された応答時間が先に取得されている応答時間以上であれば（ステップＳ５１２においてＮＯの場合）、ステップＳ５１４の更新処理は実施されず、処理はステップＳ５００に戻る。
【０１４４】
このように、ホストコントローラ１２０Ｅは、ホストからのデータ送信開始時に、転送先のアドレスを取得するとともに、データ送信完了時に測定を開始する。そして、ホストコントローラ１２０Ｅは、ホストでの応答データ受信開始時に測定を完了し、データ転送先のファンクションのアドレスごとに、測定値を格納済みの送受信間隔と比較し、短い場合にその値を更新する。
【０１４５】
（ｇ３：転送スケジューリング）
次に、ホスト１０での転送スケジューリングについては、基本的には、上述した実施の形態２に従うＵＳＢ通信システム１Ｂにおける転送スケジューリングの処理手順と同様である。すなわち、図１３に示すフローチャートに従って、転送スケジューリングが実施される。そのため、詳細な説明は繰り返さない。
【０１４６】
（ｇ４：利点）
実施の形態５に従うホストコントローラ１２０Ｅは、ホスト１０とデバイス（ハブ２０またはファンクション３０）との間のデータの遣り取り（トランザクション）を観測することで、各ファンクション３０についての応答時間を実測することができる。そして、各ファンクション３０について実装された応答時間に基づいて、あるパケットを送出後の応答待ち時間を最適化できる。すなわち、上述の関連技術のように、規格上最大の接続段数に応じて一律に応答待ち時間を設定するのではなく、実際の接続構成（すなわち、接続段数の最大値）に応じて、応答待ち時間を短縮することができる。これによって、フレーム内に割り当てるパケットの数を増大させることができ、この結果、転送レートを向上させることができる。
【０１４７】
また、実施の形態５の構成は、上述した関連技術の構成に対して、ホスト１０とデバイス（ハブ２０またはファンクション３０）との間のデータの遣り取り（トランザクション）を観測する機能などを追加することで実現できる。つまり、関連技術に従うホストコントローラに対して、比較的簡単な改良を施すだけで、実施の形態５に従うホストコントローラ１２０Ｅを実現できる。
【０１４８】
［Ｈ．実施の形態６］
上述の実施の形態５においては、接続段数に応じてファンクションごとの応答時間を算出する構成について例示したが、取得されたデバイスごとの接続段数のうち最大のもの（最大接続段数）を用いて、応答時間を一律に決定してもよい。
【０１４９】
実施の形態６に従うＵＳＢ通信システムにおいては、上述の実施の形態５と同様の処理手順に従って、デバイス（アドレス）ごとに応答時間が測定される。そして、デバイス（ハブ２０およびファンクション３０）ごとの応答時間のうち、最大のものが最大応答時間として決定される。すなわち、ホスト１０のポート１３０に接続されているそれぞれのファンクション３０について測定された応答時間のうち最大のものが、対象の接続構成における応答時間（代表値）として取得される。ホストコントローラは、この決定された最大応答時間に応じて応答待ち期間の長さを決定し、転送スケジューリングを実施する。
【０１５０】
実施の形態６に従うＵＳＢ通信システムにおける転送スケジューリングの処理手順は、基本的には、上述した実施の形態１に従うＵＳＢ通信システム１Ａにおける転送スケジューリングの処理手順と同様である。すなわち、図９に示すフローチャートに従って、転送スケジューリングが実施される。そのため、詳細な説明は繰り返さない。
【０１５１】
実施の形態６に従うホストコントローラによれば、上述の実施の形態５に従うホストコントローラ１２０Ｅによって得られる利点に加えて、次のような利点がある。すなわち、応答待ち時間をファンクション３０ごとに管理する必要がないので、実施の形態５に比較して、処理ロジックを簡素化できる。
【０１５２】
［Ｉ．転送レートの改善効果］
次に、本実施の形態に従う転送スケジューリングによる転送レートの改善効果について説明する。
【０１５３】
図２３は、本実施の形態に従う転送スケジューリングによる転送レートの改善効果の一例を示す模式図である。図２３には、接続段数が「５」および「０」である場合にそれぞれ設定される応答待ち期間の例を示す。
【０１５４】
接続段数が「５」である場合に設定される応答待ち期間では、１フレームに５パケットだけが割り当てられ、一方、接続段数が「０」である場合に設定される応答待ち期間では、１フレームに６パケットを割り当てることが可能である。すなわち、上述の関連技術では、いずれの場合も接続段数が「５」であるとの前提で応答待ち期間の設定および転送スケジューリングが実施されるのに対して、本実施の形態に従う転送スケジューリングでは、実際の接続構成に応じて、応答待ち期間が設定されるので、より多くのパケットを割り当てることができる。
【０１５５】
例えば、１つのパケットのデータサイズが１０２４バイトであり、１フレームの周期が１２５μｓであるとすれば、転送レートは以下のように算出される。
【０１５６】
＜関連技術＞
１フレーム（１２５μｓ）ごとに５つのパケット（１０２４バイト）が転送される。
【０１５７】
８０００フレーム／ｓ×１０２４バイト×５回×８ビット＝３２７．６Ｍｂｐｓ
＜本実施の形態＞
１フレーム（１２５μｓ）ごとに６つのパケット（１０２４バイト）が転送される。
【０１５８】
８０００フレーム／ｓ×１０２４バイト×６回×８ビット＝３９３．２Ｍｂｐｓ
転送レートの改善効果としては、３９３．２１６／３２７．６＝１２０（％）となり、転送レートを２０％向上できる。
【０１５９】
［Ｊ．実装形態］
本実施の形態に従うホスト１０は、典型的には、パーソナルコンピュータ、汎用マイクロコンピュータ、特定用途向けの専用装置などとして実装される。ホストコントローラについては、パーソナルコンピュータのバスに接続される基板またはチップとして実装されてもよい。あるいは、同一の基板上に、プロセッサに加えて、ホストコントローラおよびキャッシュメモリなどを実装するようにしてもよい（例えば、ＳｏＣ（System-on-a-Chip））。
【０１６０】
本実施の形態に従うホストコントローラは、ＬＳＩ（Large-Scale Integration）といった集積回路、または、ハードワイヤードロジックなどの純粋なハードウェアとして実装してもよい。
【０１６１】
あるいは、ハードウェアとソフトウェアとの組み合わせ、例えば、通信回路と、通信回路を制御するためのおよびマイクロコントローラとを用いて構成するとともに、マイクロコントローラに必要な処理を実行させるためのプログラム（例えば、ファームウェア）をＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）またはフラッシュメモリなどに格納してもよい。
【０１６２】
さらにあるいは、ＤＳＰ（Digital Signal Processor）などの高速に信号処理可能なデバイスを用いて、ホストコントローラに必要な処理のすべてをソフトウェアにより実装するようにしてもよい。
【０１６３】
図２４は、本実施の形態に従うホストコントローラ１２０の構成例を示す模式図である。図２４には、通信回路とマイクロプロセッサとの組み合わせによりホストコントローラ１２０を実装する構成例を示す。より具体的には、ホストコントローラ１２０は、マイクロプロセッサ１２０１と、バスインターフェイス回路１２０２と、ＵＳＢバス通信回路１２０３と、ＲＡＭ（Random Access Memory）１２０４と、フラッシュメモリ１２０５とを含む。
【０１６４】
バスインターフェイス回路１２０２は、システムバスを介して、ＣＰＵおよびシステムメモリ（いずれも図５参照）などとの間で信号を遣り取りする。ＵＳＢバス通信回路１２０３は、転送スケジューリングおよびデータ転送を担当する。すなわち、ＵＳＢバス通信回路１２０３は、スケジューラ１２２およびデータ転送コントローラ１２８（図５など参照）に相当する機能を提供する。
【０１６５】
マイクロプロセッサ１２０１は、バスインターフェイス回路１２０２およびＵＳＢバス通信回路１２０３を制御することで、両者間のデータの遣り取りを仲介する。具体的には、マイクロプロセッサ１２０１は、フラッシュメモリ１２０５に格納されているファームウェア１２０６を読み込んで実行することで、必要な処理を実現する。ＲＡＭ１２０４は、マイクロプロセッサ１２０１がファームウェア１２０６を実行するために必要なデータを一時的に格納するワークメモリとして機能する。
【０１６６】
ファームウェア１２０６は、一種の補助プログラムであり、外部からインストールまたは更新が可能になっている。フラッシュメモリ１２０５は、ファームウェア１２０６を含む各種データを不揮発的に記憶する。ＲＡＭ１２０４は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）またはＳＲＡＭ（Static Random Access Memory）などにより実装される。
【０１６７】
ファームウェア１２０６は、例えば、非一時的（non-transitory）な記録媒体に格納された状態で流通し、フラッシュメモリ１２０５にインストールまたは更新（アップデート）されてもよい。非一時的な記録媒体としては、光学ディスクなどの光学記録媒体、フラッシュメモリなどの半導体記録媒体、ハードディスクまたはストレージテープなどの磁気記録媒体、ＭＯ（Magneto-Optical disk）などの光磁気記録媒体を用いてもよい。すなわち、本実施の形態は、上述したような処理および機能を実現するためのコンピュータ読取可能なプログラム、および、当該プログラムを格納した記録媒体も含み得る。
【０１６８】
別の形態として、インターネットまたはイントラネットを介してサーバ装置からファームウェア１２０６をダウンロードするようにしてもよい。
【０１６９】
当業者であれば、本発明が実施される時代に応じた技術を適宜用いて、本実施の形態に従うホストコントローラおよびホストコントローラを含むホストを実現するであろう。
【０１７０】
［Ｋ．まとめ］
上述の実施の形態１〜６を参照して説明したように、実際の接続構成に応じて、応答待ち時間を最適化し、その最適化された応答待ち時間に応じて、転送スケジューリングを実施することで、単位フレームが予め定められた周期で繰り返し送受信されるという制約下で、転送レートを向上させることができる。
【０１７１】
以上、本発明者らによってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【符号の説明】
【０１７２】
１，１Ａ，１Ｂ，１Ｃ，１Ｅ  通信システム、１０  ホスト、２０，２０＿１，２０＿２，…  ハブ、３０，３０＿１，３０＿２，…  ファンクション、１０２  ＣＰＵ、１０４  システムバス、１１０  システムメモリ、１１２  クライエントソフトウェア、１１４  ドライバ、１１６  ホストコントローラドライバ、１２０，１２０Ａ，１２０Ｂ，１２０Ｃ，１２０Ｅ  ホストコントローラ、１２２  スケジューラ、１２４  転送サイズレジスタ、１２６  フレームカウンタ、１２８  データ転送コントローラ、１３０  ポート、１４０  ドライバ情報取得モジュール、１４２Ａ  最大接続段数レジスタ、１４３  接続段数レジスタ、１４４Ａ，１４４Ｂ，１４４Ｅ  応答時間算出モジュール、１４６  パケット解析モジュール、１４８  有効接続段数レジスタ、１５０  データ転送時間測定モジュール、１５２  測定値格納レジスタ、１２０１  マイクロプロセッサ、１２０２  バスインターフェイス回路、１２０３  バス通信回路、１２０４  ＲＡＭ、１２０５  フラッシュメモリ、１２０６  ファームウェア。
【図１】
2017111729.tif 000003
【図２】
2017111729.tif 000004
【図３】
2017111729.tif 000005
【図４】
2017111729.tif 000006
【図５】
2017111729.tif 000007
【図６】
2017111729.tif 000008
【図７】
2017111729.tif 000009
【図８】
2017111729.tif 000010
【図９】
2017111729.tif 000011
【図１０】
2017111729.tif 000012
【図１１】
2017111729.tif 000013
【図１２】
2017111729.tif 000014
【図１３】
2017111729.tif 000015
【図１４】
2017111729.tif 000016
【図１５】
2017111729.tif 000017
【図１６】
2017111729.tif 000018
【図１７】
2017111729.tif 000019
【図１８】
2017111729.tif 000020
【図１９】
2017111729.tif 000021
【図２０】
2017111729.tif 000022
【図２１】
2017111729.tif 000023
【図２２】
2017111729.tif 000024
【図２３】
2017111729.tif 000025
【図２４】
2017111729.tif 000026