(57)【特許請求の範囲】
【請求項１】
ホストコンピュータと複数のデバイスとを接続し、前記ホストコンピュータから各デバイスに並行してデータを転送できるように所定の時間枠で区切られたフレーム内に各デバイス向けデータを割り当てて生成された転送データを、前記ホストコンピュータから受信し、当該転送データから自己のデバイス向けデータを取り出して当該データを所定の受信サイズで受信バッファに格納するデータ受信装置において、
前記ホストコンピュータから、転送データのフレーム内のデータサイズを各フレームで等しくなるように転送するアイソクロナス転送を用いた転送データを受信すると、前記受信バッファに格納すべきデータの１回あたりの受信サイズをフレーム内のデータサイズに設定し、前記ホストコンピュータから、転送するデータ量及びフレーム内の空き時間によってフレーム内のデータサイズが変化するバルク転送を用いた転送データを受信すると、前記受信バッファに格納すべきデータの１回あたりの受信サイズを該受信バッファに格納されているデータのデータ量に応じて設定する受信サイズ設定手段を備えたことを特徴とするデータ受信装置。
【請求項２】
前記受信サイズ設定手段は、前記ホストコンピュータからバルク転送を用いて転送データが転送されたとき、受信バッファへのデータ転送が終了したときに発生する割り込み信号及び受信バッファに格納されたデータの処理が完了したときに発生するデータ要求のうち、いずれが先に発生するか否かを判断して前記受信サイズを設定するように構成されたことを特徴とする請求項１に記載のデータ受信装置。
【請求項３】
前記ホストコンピュータから、データ転送に使用する転送方法を示すコマンドを受信し、当該コマンドに従ってアイソクロナス転送なのかバルク転送なのかを判断する転送方法判断手段を備えたことを特徴とする請求項１又は請求項２に記載のデータ受信装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ホストコンピュータと複数のデバイスとの間では、ＵＳＢ（Universal Serial Bus）インタフェース（Interface）、あるいはＩＥＥＥ１３９４に従ってデータを受信し、各デバイスでは、受信バッファにＤＭＡ（Direct
Memory Access）回路等を用いてデータを格納するような構成において、データの受信、送信を行うデータ受信装置に関する。
【０００２】
【従来の技術】
パソコン本体にＵＳＢコネクタを１つ備えるだけで、マウス、キーボード、プリンタ等、複数のデバイスをスター状に複数接続できるように設計されたＵＳＢインタフェースが注目されている。
【０００３】
このＵＳＢインタフェースによれば、データを１つあるいはいくつかのパケットに割り当て、１ｍｓで区切られたフレームの中に各デバイスのパケットを割り当てて、データが送信される。
【０００４】
このフレームは、フレームナンバと呼ばれるシリアル番号の情報を有するＳＯＦ（Start Of Flame）パケットにより開始し、まず優先順位の高いアイソクロナス（Isochronous）転送、インタラプト（Interrupt）転送が実行され、フレームの終了まで、余った時間に優先度が低いコントロール（Control）転送やバルク（Bulk）転送が実行される。
【０００５】
このうち、アイソクロナス転送は、フレーム内のパケット数を各フレームで等しくして転送する方法であり、バルク転送は、転送すべきデータがあれば、フレーム内の空いているスペースに挿入していく転送方法である。従って、バルク転送では、フレーム毎にパケット数が異なる場合がある。
また、インタラプト転送は、キーボードやマウスなどのファンクションからホストコンピュータへの転送に用いる転送方法、コントロール転送は、主にコンフィグレーション時、デバイス情報の転送に用いる転送方法である。
尚、ＩＥＥＥ１３９４では、アイソクロナス転送のみが採用されている。
【０００６】
各デバイスには、受信バッファが備えられ、ホストコンピュータから受信したデータはＤＭＡ転送によりこの受信バッファに転送され、その後、印刷等の処理が行われる。
この受信バッファにＤＭＡ転送するときのデータは、内部管理用のヘッダ情報部と有効データ部とによって構成され、ヘッダ情報部は、F／W（プログラム）によって受信バッファに格納され、有効データ部は、ＤＭＡ（ハード）によって受信バッファに格納される。ヘッダ情報部のサイズは、常に一定であり、有効データ部のサイズは、データ量に応じて変化する。
【０００７】
例えば、転送されるデータの内容として、アプリケーションからの印刷データをプリンタで印刷する場合、使用するアプリケーション、作成したファイルの内容によりプリンタに転送されるデータサイズは大きく異なり、また、１ページのファイルを作成する場合、テキストのみのデータでは、そのファイルサイズは数１０Ｋ程度となるが、ドロー系のアプリケーションを使用して作成したデータでは、そのファイルサイズが数１００Ｋ〜１Ｍ程度のファイルサイズになる。
従来の装置では、受信バッファのサイズが変わらなければ、受信するデータ量が変化しても、ヘッダ情報及び有効データ部の受信サイズは一定である。
【０００８】
【発明が解決しようとする課題】
ところで、このような装置では、種々の不都合が生じる。
まず、転送方法が異なれば単位時間内で転送されるデータ量が異なってくる。特に、バルク転送の場合、前述のように、フレームに応じてフレーム内のパケット数が変化する場合がある。この単位時間内で転送されるデータ量が変われば、データ転送速度（転送すべき全データの平均転送速度）が変わり、このデータ転送速度とＵＳＢデバイス内部のデータ処理速度との間に速度差が生じる場合がある。
【０００９】
受信バッファの受信サイズが一定の場合、このデータ転送速度がデータ処理速度よりも遅いと、受信バッファに空きができてしまい、受信バッファを有効に利用することができない。
このデータ転送速度は、転送方法だけでなく、ホストコンピュータにアクセスするデバイス数、フレーム内のパケット数、パケットサイズ、転送されるデータの内容にもよっても異なってくる。
【００１０】
また、デバイスの性能は、デバイス毎に異なり、例えば、性能の低いデバイスに多くのデータを転送すれば、インタフェースの処理を行う頻度が高くなってしまい、バス上の占有率が高くなって他のデバイスへも影響し、システム全体の効率が低下する。
【００１１】
従って、これらの不都合を解消することによって、デバイス内の受信バッファの受信効率は向上するし、処理時間の短縮を図ることができ、システム全体の効率も向上する。
【００１２】
【課題を解決するための手段】
本発明は、前述の課題を解決するため次の構成を採用する。
〈構成１〉
請求項１の発明に係るデータ受信装置は、ホストコンピュータと複数のデバイスとを接続し、前記ホストコンピュータから各デバイスに並行してデータを転送できるように所定の時間枠で区切られたフレーム内に各デバイス向けデータを割り当てて生成された転送データを、前記ホストコンピュータから受信し、当該転送データから自己のデバイス向けデータを取り出して当該データを所定の受信サイズで受信バッファに格納するデータ受信装置において、前記ホストコンピュータから、転送データのフレーム内のデータサイズを各フレームで等しくなるように転送するアイソクロナス転送を用いた転送データを受信すると、前記受信バッファに格納すべきデータの１回あたりの受信サイズをフレーム内のデータサイズに設定し、前記ホストコンピュータから、転送するデータ量及びフレーム内の空き時間によってフレーム内のデータサイズが変化するバルク転送を用いた転送データを受信すると、前記受信バッファに格納すべきデータの１回あたりの受信サイズを該受信バッファに格納されているデータのデータ量に応じて設定する受信サイズ設定手段を備えることを特徴とする。
【００１４】
〈構成２〉
請求項２の発明に係るデータ受信装置では、前記受信サイズ設定手段は、前記ホストコンピュータからバルク転送を用いて転送データが転送されたとき、受信バッファへのデータ転送が終了したときに発生する割り込み信号及び受信バッファに格納されたデータの処理が完了したときに発生するデータ要求のうち、いずれが先に発生するか否かを判断して前記受信サイズを設定するように構成されている。
【００１５】
〈構成３〉
請求項３の発明に係るデータ受信装置では、前記ホストコンピュータから、データ転送に使用する転送方法を示すコマンドを受信し、当該コマンドに従ってアイソクロナス転送なのかバルク転送なのかを判断する転送方法判断手段を備えている。
【００２０】
【発明の実施の形態】
以下、本発明の実施の形態を具体例を用いて説明する。
〈具体例１〉
具体例１は、転送方法を判別し、転送方法に応じて受信バッファにＤＭＡ転送されるときのデータの受信サイズを最適化するようにしたものである。
【００２１】
図１は、具体例１のパーソナルコンピュータ及びプリンタの構成を示すブロック図である。
パーソナルコンピュータ（以後、「ＰＣ」と記す。）１は、ホストコンピュータであり、印刷を実行するプリンタ２がＵＳＢ３を介して接続されている。
尚、ＵＳＢインタフェースによれば、ＰＣ１には、ＵＳＢ３を介して最大で１２７台のデバイスの接続が可能となる。
【００２２】
ＰＣ１には、アプリケーション（以後、「ＡＰ」と記す。）１１、オペレーティングシステム（以後、「ＯＳ」と記す。）１２、プリンタドライバ１３、ポートドライバ１４及びＵＳＢ入出力部１５が含まれている。
【００２３】
ＡＰ１１は、データを作成するソフトウェアである。
ＯＳ１２は、ＰＣ１に与えられた仕事を効率良く処理するためにユーザのプログラムはデータ、ハードウェアなどを管理する基本ソフトウェアである。
【００２４】
プリンタドライバ１３は、受け取ったデータをプリンタが認識できるコマンドに変換するものである。
ポートドライバ１４は、ＵＳＢインタフェースの仕様に従ってＵＳＢ入出力部１５を制御するドライバであり、ＵＳＢ入出力部１５は、この仕様に従ってデータを出力するものである。
【００２５】
プリンタ２は、データ受信処理部２１と、受信バッファ２２と、データ解析部２３と、印刷部２４と、を備えている。
【００２６】
データ受信処理部２１は、ＵＳＢインタフェースを介してデータを受信し、そのデータを処理するブロックであり、この構成については後述する。
受信バッファ２２は、受信したデータを一時的に格納するものである。
【００２７】
データ解析部２３は、受信バッファ２２に格納されたデータを解析し、印刷可能なデータに変換するものである。
印刷部２４は、データ解析部２３によって解析されたデータを用紙に印刷するものである。
【００２８】
図２は具体例１のプリンタ２に備えられたデータ受信処理部２１の構成を示すブロック図である。
データ受信処理部２１は、図２に示すように、受信部２１−１と、Ｉ／Ｏコントローラ２１−２と、ＤＭＡ回路２１−３と、ＤＭＡコントローラ２１−４と、ＤＭＡ受信サイズ格納部２１−５と、転送方法判断部２１−６と、を備えて構成されている。
【００２９】
受信部２１−１は、ＵＳＢ３を経由してＰＣ１から出力されたデータを受信するものである。
Ｉ／Ｏコントローラ２１−２は、データ受信処理部２１全体のデータの入出力を管理するブロックである。
【００３０】
ＤＭＡ回路２１−３は、受信バッファ２２にデータを転送するためのハード回路である。
ＤＭＡコントローラ２１−４は、ＤＭＡ回路２１−３を制御するものである。
【００３１】
ＤＭＡ受信サイズ格納部２１−５は、ＤＭＡ処理の受信サイズを格納するものである。
転送方法判断部２１−６は、アイソクロナス転送、バルク転送等の転送方法を判断する転送方法判断手段である。
【００３２】
〈動作〉
次に具体例１の動作を説明する。
図３は、ＵＳＢインタフェースを使用して転送されるデータの説明図であり、図４はアイソクロナス転送の説明図、図５はバルク転送の説明図である。
【００３３】
ＵＳＢインタフェースでは、フレームは、シリアル番号の情報を有するＳＯＦ（Start Of Flame）パケットによって開始し、まず優先順位の高いアイソクロナス転送が実行され、余った時間に優先度が低いバルク転送が実行される。尚、この他に、インタラプト転送、コントロール転送もあるが、これらの転送方法は、アイソクロナス転送、バルク転送よりもかなり少ないデータを扱う転送方法であるので、アイソクロナス転送及びバルク転送についてだけ処理すればよい。
【００３４】
図３に示すように、データ１〜１００によって構成されているデバイス向けデータをＵＳＢインタフェースを使用して転送する場合、アイソクロナス転送とバルク転送において、大きく異なる点は、アイソクロナス転送では、各フレーム内のデータのサイズは常に一定であるが、バルク転送では、各フレームで変化する。従って転送方法に応じて単位時間内で転送されるデータ数が異なってくる。
【００３５】
図６は、具体例１の受信バッファ２２内の状態を示す説明図である。
図６に示すように、１回あたりのＤＭＡ転送は、スタートアドレスによって始まり、ストップアドレスによって終了する。このスタートアドレス、ストップアドレスは、プリンタ２内で生成される。このスタートアドレスからストップアドレスまでが、ＤＭＡの受信サイズとなる。
【００３６】
ＰＣ１とプリンタ２との間では、ＵＳＢインタフェースを使用してデータの転送が行われ、プリンタ２内の受信バッファ２２には、ＤＭＡによるデータ転送が行われる。
【００３７】
このＵＳＢインタフェースを介してプリンタ２がＰＣ１からデータを受信する受信速度と、プリンタ２内のデータ処理速度との間には、速度差が生じる場合がある。
【００３８】
図６（ａ）に示すように、データ転送速度がデータ処理速度よりも速い場合は、受信バッファ２２には、まったく無駄がない状態でデータが格納される。しかし、図６（ｂ）のようにデータ転送速度がデータ処理速度より遅いのに、（ａ）と同じようにＤＭＡを設定した場合、設定したストップアドレスにデータが届く前に上位のデータ解析部２３からのデータ要求が発生することになる。
【００３９】
ＤＭＡを強制的にストップしてそれまでに受信したデータをデータ解析部２３に送った場合、受信バッファ２２の受信データを格納する領域に空きができてしまう。このように空きができると効率的にデータを処理することができない。
【００４０】
具体例１では、この様に転送方法により転送されるデータ数が変化した場合でも、もっとも効率よくデータを受信できるように制御する。
まず、印刷を実行するには、ＰＣ１において、ＡＰ１１上で作成されたデータが、ＯＳ１２を経由してプリンタドライバ１３に渡される。このデータは、プリンタドライバ１３によってプリンタ２が認識できるコマンドに変換され、ポートドライバ１４により、ＵＳＢインタフェースの仕様に対応したデータに変換される。
【００４１】
そして、ＵＳＢ入出力部１５が制御され、ＵＳＢ３を経由してプリンタ２にデータが転送される。そして、プリンタ２では、このデータがデータ受信処理部２１によって受信される。
データ受信処理部２１では、まず、ＰＣ１とプリンタ２間での受信サイズの設定が行われる。
【００４２】
図７はその動作を示すフローチャートである。
ステップ（図中、ステップを「Ｓ」と記す。）１では、ＰＣ１が、プリンタ２のディスクリプタ（descriptor）情報を取得し、インタフェースの設定を行うためのコマンドSet lnterface リクエストを使用してディスクリプタ情報のある１つの構成をプリンタ２にセットする。
【００４３】
このディスクリプタ情報は、転送方法、データ量等、ＵＳＢデバイスの属性を報告するために定義された情報である。
ステップ２では、プリンタ２が、ＰＣ１により設定された構成をチェックし、転送方法判断部２１−６は、その構成によってサポートされている転送方法がアイソクロナス転送なのか、バルク転送なのかを判断する。
【００４４】
図３に示すように、デバイス向けデータがデータ１〜１００によって構成されている場合、アイソクロナス転送では、図４に示すように各フレーム１〜２０には、それぞれ５つのデータが割り当てられる。
【００４５】
このように、アイソクロナス転送では、単位時間あたりのデータ量が常に一定であるため、ＤＭＡ転送時の受信サイズは常に一定である。
転送方法がアイソクロナス転送であるときは、ステップ４に進む。
ステップ３では、Ｉ／Ｏコントローラ２１−２が、再度セットされたディスクリプタ情報をチェックし、アイソクロナス転送で使用するパケットのサイズを調べる。
【００４６】
ステップ４では、Ｉ／Ｏコントローラ２１−２が、パケットサイズに合わせてＤＭＡ回路２１−３の受信サイズを決定する。
図８はアイソクロナス転送時の受信サイズを示す説明図である。
アイソクロナス転送では、パケットサイズがそのままデータ転送速度に対応するため、この図８に対応させて受信サイズが決定される。
【００４７】
また、ステップ２において、転送方法がバルク転送であると判断したときは、ステップ５に進む。
ステップ５では、ＤＭＡコントローラ２１−４が、バルク転送時のＤＭＡ回路２１−３の受信サイズとして１ＫByteをセットする。
この値をデフォルトとしてデータ受信時に受信サイズの変更を行っていく。
【００４８】
次に、プリンタ２のデータ受信処理について説明する。
図９は、データ受信処理の動作を示すフローチャートである。
ステップ１１では、転送方法判断部２１−６が、転送方法を判断する。
アイソクロナス転送のときは、ステップ１２に進む。
【００４９】
ステップ１２では、ＤＭＡコントローラ２１−４が、受信サイズを示すRcvSizeの値をＤＭＡ回路２１−３の受信サイズとして設定し、ＤＭＡ回路２１−３に対して処理を起動する。
【００５０】
ステップ１３では、Ｉ／Ｏコントローラ２１−２が、ＤＭＡ処理の終了割り込みがあるまで、あるいはデータ解析部２３からのデータ要求が発生するまで待機する。
【００５１】
この間に、データ解析部２３は、受信バッファ２２に格納されているデータを解析し、印刷部２４により、解析されたデータに基づいて印刷が実行される。
受信バッファ２２がＤＭＡの受信サイズ分のデータを受信したときは、ＤＭＡの終了割り込みがあり、また、受信データに基づいて印刷が実行されたときは、データ解析部２３から次のデータの要求が行われる。
【００５２】
ＤＭＡの終了割り込みがあったとき、あるいはデータ要求があったときは、ステップ１４に進む。
ステップ１４では、Ｉ／Ｏコントローラ２１−２が、ＰＣ１からのデータ転送が終了したのか否かを判定する。
【００５３】
引き続きＰＣ１からデータが転送されたときは、データの転送が終了していないので、ステップ１２〜１４の処理を繰り返す。
このようにして、すべてのデータを受信したときは、このルーチンを終了する。
【００５４】
次に、ステップ１１において、転送方法がバルク転送であると判断したときは、ステップ１５へ進む。
ステップ１５では、Ｉ／Ｏコントローラ２１−２が、バルク転送時の受信サイズを決定するカウンタ（RcvCount）に０をセットする。
【００５５】
ステップ１６では、ＤＭＡコントローラ２１−４が、受信サイズを計算し、この受信サイズをＤＭＡ回路２１−３にセットする。
受信サイズは、次式によって算出される。
受信サイズ＝RcvSize（１ＫByte）×2RcvCount
【００５６】
ステップ１７では、Ｉ／Ｏコントローラ２１−２が、ＤＭＡ終了割り込みと上位からのからのデータ要求のどちらが早く発生したかをチェックする。
ＤＭＡ回路２１−３からのＤＭＡの終了割り込みが、データ解析部２３からのデータ要求よりも遅く発生しているときは、データの処理速度よりもデータの転送速度の方が遅いことになる。このときは、この図６（ｂ）に示すように、受信バッファ２２に空きが発生してしまうので、現在設定している受信サイズよりも小さいサイズでデータを受信する必要がある。このため、ステップ１８に進み、RcvCountの値を１つ減少させる。
【００５７】
また、データ解析部２３からのデータ要求の方が、ＤＭＡ回路２１−３からのＤＭＡ処理の終了割り込みよりも遅く発生しているときは、データの処理速度よりもデータの受信速度の方が速いことになる。このため、図６（ａ）に示すように受信バッファ２２内には空きがないので、現在設定している受信サイズよりも大きなサイズのデータ受信が可能であるため、ステップ１９に進み、RcvCount値を１つ増加させる。
【００５８】
このようにして、転送方法により転送されるデータ数が変化しても、受信バッファ２２は有効に利用されることになる。
尚、ステップ１２〜２０が受信サイズ設定手段に相当する。
【００５９】
〈具体例１の効果〉
以上、説明したように具体例１によれば、データの転送方法を判別し、アイソクロナス転送のときは、ＤＭＡの受信サイズを１フレームのパケットサイズに応じて設定し、バルク転送のときは、受信バッファ２２内の受信データの量に応じて可変するようにしたので、転送方法により転送されるデータ数が変化した場合でも、効率良くデータを受信することができ、受信サイズを自動的に最適化することができる。
【００６０】
尚、具体例１では、１フレームに各デバイスのパケットを割り当ててデータを転送するインタフェースとして、ＵＳＢインタフェースを用いて説明したが、例えば、ＩＥＥＥ１３９４の規格を用いても具体例１を同様に適用できる。但し、ＩＥＥＥ１３９４の場合は、アイソクロナス転送が採用されているだけである。また、具体例１では、ＵＳＢデバイスとしてプリンタを用いて説明したが、ＵＳＢデバイスはプリンタに限られるものではない。
【００６１】
〈具体例２〉
具体例２は、同時に動作するＵＳＢデバイスの数に応じてデータ転送速度を計算し、このデータ転送速度に応じてＤＭＡ転送の受信サイズを設定するし、ようにしたものである。
【００６２】
図１０は具体例２のシステム構成の一例を示す説明図である。
ＰＣ１には、複数のデバイスとして、ハブ４を介してレーザプリンタ等のプリンタ２−１〜２−４、スキャナ５、ファックス６、電話７、キーボード８、マウス９が接続されている。
【００６３】
この図１０に示すように、ＵＳＢインタフェースによれば、１つのＰＣ１に対して複数のＵＳＢデバイスを接続してデータを並列的に転送することが可能となる。
【００６４】
しかし、バルク転送をサポートした２台以上のデバイスが同じタイミングでデータの送受信を行った場合、データを転送するデバイスが増えるに従ってデータ転送速度は低下する。そして、自分以外のデバイスがデータ転送を終了すると逆にそのデータが使用していたバス領域が使用可能になるためデータ転送速度は速くなる。
具体例２では、このようにデータの転送中に転送速度が増減が発生した場合でも、最適なパフォーマンスを実現できるように構成する。
【００６５】
図１１は、具体例２のデータ受信処理部２１（プリンタ２）の構成を示すブロック図である。
具体例２のデータ受信処理部２１は、受信部２１−１と、Ｉ／Ｏコントローラ２１−２と、ＤＭＡ回路２１−３と、ＤＭＡコントローラ２１−４と、デバイスアドレス登録部２１−７と、を備えて構成されている。
【００６６】
デバイスアドレス登録部２１−７は、デバイスアドレスを登録するブロックである。
尚、具体例１と同一要素については同一符号を付して説明を省略する。
【００６７】
〈動作〉
次に具体例２の動作を説明する。
具体例２では、まず、デバイスチェックが行われる。
【００６８】
図１２は、その動作を示すフローチャートである。
ステップ３１では、Ｉ／Ｏコントローラ２１−２が、データDeviceChkに０を格納する。
このデータDeviceChkは、デバイスのカウント中であるか否かを表すためのデータであり、その値が「０」のときは、デバイスのカウント中であることを表している。
【００６９】
ステップ３２では、受信部２１−１が、ｎ番目のフレーム開始パケットの受信を認識する。
尚、デバイスの数は、前述したように最大で１２７であり、初期値はｎ＝１となる。
【００７０】
ステップ３３では、受信部２１−１が、ＵＳＢ３上を流れるデータのデバイスアドレスをチェックし、さらに１フレーム内のパケット数をチェックする。そして、チェックしたデバイスアドレスとそのパケット数をデバイスアドレス登録部２１−７に登録する。
【００７１】
ステップ３４では、受信部２１−１が、ｎ＋１番目のフレーム開始パケットを受信したか否かを判断する。
フレーム開始パケットではないと判定したときは、ステップ３１に戻る。
フレーム開始パケットと判定したときは、ステップ３５に進む。
【００７２】
ステップ３５では、動作しているデバイスのカウントが終了したことを示すため、受信部２１−１が、DeviceChkに1を格納する。
この処理をすべてのデバイスアドレスについて行うことにより、動作しているすべてのデバイスがチェックされる。
【００７３】
ＵＳＢインタフェースでは、例えば、同じタイミングでデータの送受信を行うデバイスが２つあるときは、フレーム内には、２つのデバイスのデータが格納される。このようにＵＳＢインタフェースでは、あるフレームの中に、転送すべきすべてのデバイスに対するデータが格納されているので、このデバイス数をチェックし、さらに１フレーム内のパケット数をチェックすることにより、現在の動作状態を把握できる。
【００７４】
この動作状態の情報をデバイスアドレス登録部２１−７に登録する。
図１３は、このようにしてデバイスアドレス登録部２１−７に登録された情報の説明図である。
この例では、同時に動作しているデバイスはデバイスアドレス２〜４を有するデバイスであり、１つのフレーム内に、それぞれ１０，５，４個のパケットがカウントされている。
デバイスチェックが終了したときは、次に、ＤＭＡの受信サイズを設定する。
【００７５】
図１４は、その動作を示すフローチャートである。
ステップ４１では、DeviceChkの値が１であるか否かを確認する。
DeviceChkの値が０のときは、動作中のデバイスのカウントがまだ終了していないので、ＤＭＡの受信バイト数を設定せずに、このルーチンを終了させる。
また、DeviceChkの値が１のときは、動作中のデバイスのカウントが終了しているので、ステップ４２に進む。
【００７６】
ステップ４２では、Ｉ／Ｏコントローラ２１−２が、デバイスアドレス登録部２１−７から情報を取り出す。
ステップ４３では、Ｉ／Ｏコントローラ２１−２が、１フレーム内で呼び出されたパケットの総数を計算する。
【００７７】
図１３に示す例では、パケットはデバイスアドレス２、３、４にのみ発生している。従って、パケットの総数は、次式によって算出される。
パケットの総数＝１０＋５＋４
＝１９（パケット）
【００７８】
ステップ４４では、転送されたパケット数と、デバイスアドレス登録部２１−７から取り出した情報とに基づいて、転送されたデータの転送速度を計算する。図１３に示す例では、デバイスアドレス２を有するデバイスのデータ転送速度の比率は次式によって算出される。
転送速度の比率＝(10/19)×100
＝53（％）
【００７９】
また、ＵＳＢ３の高速モードの転送速度は、１．４ＭByte/sであるので、このデバイスのデータ転送速度は次式によって算出される。
転送速度＝1.4×0.53＝0.743（Mbyte/s）
【００８０】
ステップ４４では、算出されたデータ転送速度に基づいてＤＭＡ回路２１−３の受信サイズを決定する。
尚、この処理は、まずデータ受信の開始時に行われ、その後、所定時間毎に実行される。
尚、ステップ３１〜３５がデバイス数検出手段に、ステップ４１〜４４が具体例２の受信サイズ設定手段に相当する。
【００８１】
〈具体例２の効果〉
以上、説明したように具体例２によれば、同時に動作しているＵＳＢ上のＵＳＢデバイスの数をカウントし、カウント数に応じてデータ転送速度を計算し、このデータ転送速度に応じてＤＭＡの受信サイズを設定するようにしたので、受信サイズを自動的に最適化することができ、最適なパフォーマンスを実現することができる。
【００８２】
また、この処理をデータ転送中に行うことにより、データの受信開始時だけでなく、データの受信中にも最適化を行うことが可能となる。
【００８３】
〈具体例３〉
具体例３は、フレーム内のパケットサイズを調べ、パケットサイズに応じてＤＭＡの受信サイズを設定するようにしたものである。
【００８４】
図１５は、具体例３のデータ受信処理部２１（プリンタ２）の構成を示すブロック図である。
具体例３のデータ受信処理部２１は、受信部２１−１と、Ｉ／Ｏコントローラ２１−２と、ＤＭＡ回路２１−３と、ＤＭＡコントローラ２１−４と、ＤＭＡ受信サイズ格納部２１−５と、ＵＳＢデバイスリクエスト解析部２１−８と、を備えて構成されている。
【００８５】
ＵＳＢデバイスリクエスト解析部２１−８は、ＰＣ１から転送されたＵＳＢリクエストを解析し、このＵＳＢリクエストに基づいてプリンタ２のデータ受信処理部２１のパケットサイズをＤＭＡ受信サイズ格納部２１−５に格納するものである。
尚、具体例１と同一要素については同一符号を付して説明を省略する。
【００８６】
〈動作〉
次に具体例３の動作を説明する。
図１６は、具体例３のバルク転送時の動作説明図である。
ＵＳＢインタフェースでは、図１６（ａ）に示すように、パケットサイズが８バイトの場合、１フレーム内の最大データ数は５６８バイトに設定され、１フレーム内の最大パケット数は７１に設定される。
また、図１６（ｂ）に示すように、パケットサイズが６４バイトの場合、１フレーム内の最大データ数は１２１６バイトに設定され、１フレーム内の最大パケット数は１９に設定される。
【００８７】
このように、パケットサイズが変化すると１フレーム（１ms）内で転送されるデータ数も変化する。
従って、パケットサイズに応じてＤＭＡ転送時の受信サイズを設定することにより、システム全体の性能を上げることができる。
【００８８】
図１７は、その受信サイズの設定動作を示すフローチャートである。
ステップ５１では、ＵＳＢデバイスリクエスト解析部２１−８が、ＰＣ１から転送されてきたＵＳＢ Requestを解析し、デバイス構成を設定するためのコマンドSetConfiguration Requestが転送されたか否かを確認する。
SetConfiguration Requestが転送されたときは、ステップ５２に進む。
【００８９】
ステップ５２では、ＵＳＢデバイスリクエスト解析部２１−８が、デフォルト値としてパケットサイズ（bPacketSize）を６４Byteにセットする。
ＰＣ１は、プリンタ２が複数のインタフェース設定をサポートしていた場合、インタフェースを決定するため、コマンドSet lnteface Requestを転送する。
【００９０】
ステップ５３では、ＵＳＢデバイスリクエスト解析部２１−８が、ＰＣ１からこのコマンドSet lnteface Requestが転送されたか否かを確認する。
Set lnterface Requestが転送されなかったときは、処理を終了し、Set lnterface Requestが転送されたときは、ステップ５４に進む。
【００９１】
ステップ５４では、ＵＳＢデバイスリクエスト解析部２１−８が、Set Interface RequestのInterface Numberで設定されたディスクリプタ情報から、プリンタ２側のデータ受信処理部２１を指定するEndpointのパケットサイズを取り出してＤＭＡ受信サイズ格納部２１−５に格納する。
【００９２】
ステップ５５では、ＤＭＡ受信サイズ格納部２１−５が、セットされたパケットサイズ（bPacketSlze）に基づいてＤＭＡの受信サイズを計算し、これをＤＭＡRcvSizeにセットする。
このＤＭＡの受信サイズがセットされてＤＭＡ転送が行われる。
尚、ステップ５２がパケットサイズ送信手段に相当し、ステップ５４，５５が具体例３の受信サイズ設定手段に相当する。
【００９３】
図１８は、具体例３のＤＭＡ転送の処理を示すフローチャートである。
ステップ６１では、受信部２１−１が、ＰＣ１からのデータを１バイト受信した時点でＩ／Ｏコントローラ２１−２に対してデータを受信したことを通知する。
【００９４】
ステップ６２では、Ｉ／Ｏコントローラ２１−２が、ＤＭＡコントローラ２１−４に対してＤＭＡ回路２１−３の起動を通知する。
ステップ６３では、ＤＭＡコントローラ２１−４が、ＤＭＡ受信サイズ格納部２１−５からＤＭＡ転送時の受信サイズ（DMARcvSize）を読み出す。
【００９５】
ステップ６４では、ＤＭＡコントローラ２１−４が、DMARcvSizeを受信サイズとしてＤＭＡ回路２１−３にセットし、ＤＭＡ回路２１−３を起動する。
ステップ６５では、Ｉ／Ｏコントローラ２１−２が、ＤＭＡ処理の終了割り込みが発生したか否かを判断する。
このＤＭＡの終了割り込みは、ＤＭＡ回路２１−３にセットされた受信サイズ分のデータを受信したときに発生する。
ＤＭＡの割り込みが発生したときは、ステップ６６に進む。
【００９６】
ステップ６６では、Ｉ／Ｏコントローラ２１−２が、ＰＣ１からのデータの受信が終了したか否かを確認する。
まだ、受信すべきデータが残っているときは、ステップ６４に戻り、再度、ＤＭＡ回路２１−３を起動する。そして、すべてのデータの受信が終了したときは、このルーチンを終了させる。
【００９７】
〈具体例３の効果〉
以上、説明したように具体例３によれば、パケットサイズに応じてＤＭＡの受信サイズを設定するようにしたので、ＤＭＡ転送時の受信効率が向上し、システム全体の性能を上げることができる。
【００９８】
〈具体例４〉
具体例４は、データの転送先デバイスの性能に応じて、ＰＣから転送するデータのデータ転送速度を設定するようにしたものである。
【００９９】
図１９は、具体例４のポートドライバ１４（ＰＣ１）の構成を示すブロック図である。
ポートドライバ１４は、コマンド受信部１４−１と、コマンド解析部１４−２と、データ送受信部１４−３と、性能解析部１４−４と、速度調整部１４−５とを備えて構成されている。
【０１００】
コマンド受信部１４−１は、プリンタドライバ１３からのコマンドを受信するものである。
コマンド解析部１４−２は、コマンド受信部１４−１によって受信されたコマンドが性能情報の受信を要求するための性能情報要求コマンドか否かを解析するものである。
【０１０１】
データ送受信部１４−３は、性能情報要求コマンドを送受信するものである。
性能解析部１４−４は、プリンタ２から受信した性能情報に基づいてプリンタ２が処理できるデータ量を解析する性能解析手段である。
速度調整部１４−５は、性能解析部１４−４による解析結果に基づいて転送速度を設定するデータ転送速度設定手段である。
【０１０２】
図２０は具体例４のデータ受信処理部２１（プリンタ２）の構成を示すブロック図である。
具体例４のデータ受信処理部２１は、送受信部２１−１１と、コマンド判定部２１−１２と、性能情報格納部２１−１３とを備えて構成されている。
【０１０３】
送受信部２１−１１は、性能情報を要求する性能受信コマンドをＰＣ１から受信してＰＣ１に性能情報を送信するものである。
コマンド判定部２１−１２は、ＰＣ１から受信したデータが性能情報要求コマンドか否かを判定するものである。
性能情報格納部２１−１３は、プリンタ２の性能情報を格納するものである。
尚、具体例１と同一要素については同一符号を付して説明を省略する。
【０１０４】
〈動作〉
次に具体例４の動作を説明する。
まず、基本的な考え方について説明する。
ＵＳＢインタフェースにおける最大データ転送速度は、バルク転送の1,216ＫByte/sである。インタフェースだけで考えると、この転送速度で連続してデータを転送した場合、1,216ＫByte/sで１分間データを転送した場合のデータ転送量は、次式によって算出される。
データ転送量＝1,216（KByte）×60（s）
＝74,711,040（Byte）
【０１０５】
また、解像度が600dpi、ファイルサイズがLetter（8.5×11 inch）のデータ量は、次式によって算出される。
データ量＝8.5×600×11×11/8
＝4,207,500（Byte）
となる。
【０１０６】
従って、データ転送量をこのデータ量で割ることにより、解像度６００dpi、ファイルサイズLetterのデータでは、１分間に約１７枚転送できることが分かる。このデータ転送速度でデータを転送した場合、１分間に約１７枚の印刷を実行できるプリンタは高速プリンタになる。
【０１０７】
しかし、印刷速度が８ppm程度の低速プリンタに対して、ＵＳＢインタフェースを介して、この転送速度のままでデータを転送するとインタフェースの処理を行う頻度が高くなってしまい、他のＵＳＢデバイスの処理が滞ってしまう。このため低速機に対してＵＳＢを使用してデータを転送する場合は、データの転送速度を調整する必要がある。
【０１０８】
Centronicsインタフェースで転送速度を調整するために使用していた方法をＵＳＢインタフェースに適用した場合、Centronicsインタフェースと同様の効果は得られない。それは、Centronicsインタフェースでは、データが１バイト単位で転送されるが、ＵＳＢインタフェースでは、パケット単位でデータが転送されるためである。
【０１０９】
その理由を詳しく説明する。
図２１、図２２は、ともにCentronics インタフェースにおける転送速度の調整方法を示す説明図であり、図２３は、ＵＳＢインタフェースでの受信データの流れを示す説明図であり、図２４は、ＵＳＢインタフェースでの１バイト受信の動作を示す説明図であり、図２５は、パケット送信での遅延を示す説明図である。
【０１１０】
図２１に示す例では、データの受信完了を意味するBusy信号をLowにセットするタイミングを遅らせることにより、１バイトのデータの転送時間を遅らせて全体の転送速度を調整している。
【０１１１】
この方法をＵＳＢインタフェースに組み込んだ場合を考えると、ＵＳＢインタフェースでは、図２３に示すように、ＰＣ１から転送されたデータがＵＳＢチップ２５を介して受信バッファ２６に格納されることから、このような転送速度の調整は、ＰＣ１とＵＳＢチップ２５との間で行うことになる。
【０１１２】
図２４に示すように、ＵＳＢインタフェースもCentronicsインタフェースのnStrobeとBusyの同様にDREQとCSを使用してデータを受信するが、前述したようにＵＳＢインタフェースでは、パケット単位でデータを受信するため、このようにすると、データ受信のタイミングが図２５に示すようになってしまう。
【０１１３】
これは、ＰＣ１とＵＳＢチップ２５との間で速度調整を行うと、この間でＵＳＢチップ２５のＦＩＦＯバッファが空にならないと次のパケットを受信できないからであり、ＵＳＢチップ２５と受信バッファ２６との間で受信速度を１バイト遅くすると、図２５に示すように結果としてＵＳＢチップ２５のＦＩＦＯが空になるタイミングが遅れることになり、パケットを受信するタイミングが遅れることになる。転送時間を１バイト遅らせることが、結果として１パケットの受信時間を遅らせることになるため、Centronicsインタフェースで行っていた速度調整を行うことができない。
【０１１４】
また、図２２に示す例では、データ送信開始を意味するnStrobe信号をLowにセットするタイミングを遅らせることにより、１バイトのデータの転送時間を遅らせて全体の転送速度を調整する調整している。
【０１１５】
この方法をＵＳＢインタフェースに組み込む場合も同様に、受信速度を１バイト変更してしまうとＵＳＢチップ２５がＰＣ１からのデータを受信するタイミングが変化することになるため、速度調整を行うことはできない。図２２に示す方法を変更して、ＰＣ１からＵＳＢチップ２５に対して転送するデータのタイミングを変更することができれば、ＵＳＢチップ２５のＦＩＦＯバッファが空になった時にデータを転送するように調整できれば速度調整が可能になるが、パケットを転送させるタイミングはＯＳが決定し、常に一定のタイミングで変更するために実現はできない。
【０１１６】
従って、具体例４では、ＵＳＢインタフェースにおいてデータを送信するデバイスの性能（印刷速度、ＣＰＵ）に対応してパケットサイズを調整して転送速度を調整することによりインタフェース処理がプリンタ全体に与える影響を必要最低限のレベルに落としデバイスの性能を低下させることなく動作させるようにする。
【０１１７】
図２６は、具体例４のプリンタの性能情報の送受信処理を示すフローチャートである。
ステップ７１では、プリンタドライバ１３が、速度調整を実行するコマンドをポートドライバ１４に転送する。
【０１１８】
ステップ７２では、ポートドライバ１４のコマンド受信部１４−１が、プリンタドライバ１３からのコマンドを受信し、受け取ったコマンドをコマンド解析部１４−２に渡す。
【０１１９】
ステップ７３では、受け取ったコマンドが性能情報要求コマンドか否かをコマンド解析部１４−２が判断する。
受け取ったコマンドが性能情報要求コマンドではないとき、処理を終了し、性能情報要求コマンドであるときは、ステップ７４に進む。
【０１２０】
ステップ７４では、コマンド解析部１４−２が、データ送受信部１４−３を制御して性能情報要求コマンドをプリンタ２に送信させる。
ステップ７５では、ＵＳＢ入出力部１５が、このコマンドをＵＳＢ３を経由してプリンタ２に送信する。
【０１２１】
ステップ７６では、送受信部２１−１１（プリンタ２のデータ受信処理部２１）が、ＵＳＢ３を経由して転送されたデータを受信する。
ステップ７７では、送受信部２１−１１が、受信したデータをコマンド判定部２１−１２に転送する。
そして、コマンド判定部２１−１２がこのデータの解析を行う。
【０１２２】
ステップ７８では、コマンド判定部２１−１２が解析した結果、受信したデータが性能情報要求コマンドであるか否かを判断する。
受信したデータが性能情報要求コマンドではないときは、処理を終了し、受信したデータが性能情報要求コマンドであるときは、ステップ７９に進む。
【０１２３】
ステップ７９では、コマンド判定部２１−１２が、プリンタ２の性能情報を性能情報格納部２１−１３から取り出し、送受信部２１−１１に渡す。
ステップ８０では、送受信部２１−１１が、プリンタ２の性能情報をＵＳＢ３を経由してＰＣ１に送信する。
【０１２４】
ステップ８１では、ポートドライバ１４のデータ送受信部１４−３が、プリンタ８から送信された性能情報を、ＵＳＢ３、ＵＳＢ入出力部１５を経由して受信する。
ステップ８２では、データ送受信部１４−３が、受信したデータを性能解析部１４−４に転送する。
【０１２５】
性能解析部１４−４では、後述フローチャートに従い、受信したデータに基づいて性能の解析が行われる。
ステップ８３では、性能解析部１４−４が、解析結果に基づいて速度調整部１４−５を制御し、転送速度に対応したパケットサイズを設定し、ＵＳＢ入出力部１５に送る。
ＵＳＢ入出力部１５では、ＵＳＢインタフェースの設定が行われる。
【０１２６】
次に、性能解析部１４−４の性能解析動作について説明する。
図２７は、具体例４の性能解析部１４−４の動作を示すフローチャートである。
ステップ９１では、受信した性能情報からプリンタ２がサポートしている最大解像度（inf_dpi）を取り出す。
【０１２７】
ステップ９２では、受信した性能情報からプリンタ２の印刷速度（inf_speed）を取り出す。
ステップ９３では、受信した性能情報からプリンタ２がサポートしている圧縮方法の最低圧縮率（inf_comp）を取り出す。
【０１２８】
ステップ９４では、受信した性能情報からプリンタ２のデフォルトの用紙サイズ（inf_paper）を取り出す。
ステップ９５では、このプリンタ２で必要なデータ転送速度（Trans_speed）を計算する。
【０１２９】
例として最大解像度を１２００dpi、印刷速度を８ppm、テキストのみのデータとして圧縮率を１０％とし、用紙サイズをLetterとすると、データ転送速度は、次式によって算出される。
8.5(inch)×1200(dpi)×11(inch)×1200(dpi)×8(ppm)×0.1÷８÷60＝219.1
【０１３０】
そして、算出されたデータ転送速度に基づいてパケットサイズを設定する。
図２８（Ａ）は、バルク転送時における具体例４の転送速度とパケットサイズの関係を示す説明図であり、図２８（Ｂ）は、バルク転送時における具体例４の転送速度とパケットサイズの関係を示す説明図である。
バルク転送、アイソクロナス転送では、それぞれ図２８（Ａ）、（Ｂ）の関係に基づいて転送速度に対応した値をパケットサイズにセットする。
【０１３１】
〈具体例４の効果〉
以上、説明したように具体例４によれば、プリンタ２の性能にあわせてデータ転送速度を設定するようにしたので、インタフェース処理が他の処理に与える影響を軽減することが可能となる。
【０１３２】
また、各処理の動作効率が上がるため、プリンタ２全体のパフォーマンスを向上させることができる。
また、データ送信先のプリンタが低速機の場合、パケットサイズが自動的に小さくなるため、ＵＳＢ３上の占有率を下げることができる。
【０１３３】
〈具体例５〉
具体例５は、データ送信先デバイスとしてのプリンタの性能及びＰＣから転送するデータのジョブサイズに応じてデータ転送速度を設定するようにしたものである。
【０１３４】
図２９は、具体例５のポートドライバ１４（ＰＣ１）の構成を示すブロック図である。
具体例５のポートドライバ１４は、コマンド受信部１４−１と、Ｉ／Ｏコントローラ１４−６と、速度調整部１４−５と、メモリ１４−７と、データ送受信部１４−８と、を備えて構成されている。
尚、具体例１と同一要素については同一符号を付して説明を省略する。
【０１３５】
〈動作〉
次に具体例５の動作を説明する。
図３０は、具体例５の動作を示すフローチャートである。
ステップ１０１では、ポートドライバ１４が、ジョブ開始（ページ開始）コマンドを受信した時点で印字データのサイズを示すDataSizeを０にセットする。
【０１３６】
ステップ１０２では、ポートドライバ１４が、プリンタドライバ１３から受け取った印字データのサイズをDataSizeに加え、受け取ったデータをメモリ１４−７にコピーする。
【０１３７】
ステップ１０３では、ポートドライバ１４が、プリンタドライバ１３からジョブ終了（ページ終了）コマンドが転送されたことを確認する。
コマンドを認識できないときは、ステップ１０２を繰り返し、実行する。
【０１３８】
ステップ１０４では、ポートドライバ１４が、データサイズのチェックをジョブ単位で行ったか、ページ単位で行ったかを確認する。
データサイズのチェックをページ単位で行ったときは、ステップ１０５へ進み、ページ情報としてPrintPageに１を格納する。
【０１３９】
また、ジョブ単位で行ったときは、ステップ１０６へ進み、チェックしたジョブが何ページ分のデータかになるかをチェックして、そのページ数をPrintPageに格納する。
【０１４０】
ステップ１０７では、ポートドライバ１４が、プリンタ２の印刷速度に基づいてデータを転送するために必要な時間（PrintTime）を計算する。
例えば、プリンタ２の速度が８ppm、データサイズをチェックしたページ枚数が４枚のときは、１分間に８枚印刷できるので、４枚のファイルの印刷に必要な時間は３０ｓとなる。
【０１４１】
ステップ１０８では、ポートドライバ１４が、DataSizeとPrintTimeとに基づいてデータ転送に必要な転送速度を計算する。
例えば、上の例では、データサイズが１ＭByteのとき、転送速度は次式によって算出される。
転送速度＝1（MByte）÷30（s）
＝500（KByte/s）
即ち、500KByte/sの転送速度であれば、プリンタ２はこのデータを効率良く処理できる。
【０１４２】
ステップ１０９では、ポートドライバ１４が、この転送速度に基づいてパケットサイズを調べ、転送時に使用するパケットサイズを設定する。
尚、このパケットサイズを設定するには、図２８の例を用いる。
【０１４３】
バルク転送時またはアイソクロナス転送では、パケットサイズに設定した値が転送速度になるため、転送速度に対応した値をパケットサイズにセットする。
例えば、２００を入力したときは、転送速度は２００Ｋbyte/sにセットされる。
【０１４４】
〈具体例５の効果〉
以上、説明したように具体例５によれば、プリンタ２の性能及びジョブにあわせてデータ転送速度を設定するようにしたので、具体例４と同様にインタフェース処理が他の処理に与える影響を軽減することができる。
【０１４５】
特に、テキストのようなプリンタにあまり負荷のかからないデータ等を転送するときは、ＵＳＢ３のデータ占有率を下げることができ、他のＵＳＢデバイスが動作するための領域を確保することができる。
【０１４６】
また、アプリケーションに応じて転送速度を設定することができるため、複数のプリンタに対して異なったアプリケーションからデータが転送された場合でも処理に時間のかかるアプリケーションのパフォーマンスを下げることなく印刷が可能となる。
【図面の簡単な説明】
【図１】具体例１のＰＣ及びプリンタの構成を示すブロック図である。
【図２】具体例１のデータ受信処理部（プリンタ）の構成を示すブロック図である。
【図３】ＵＳＢインタフェースを使用して転送されるデータの説明図である。
【図４】アイソクロナス転送の説明図である。
【図５】バルク転送の説明図である。
【図６】具体例１の受信バッファ内の状態を示す説明図である。
【図７】具体例１のＰＣとプリンタ間で行われる受信サイズの設定動作を示すフローチャートである。
【図８】具体例１のアイソクロナス転送時の受信サイズを示す説明図である。
【図９】具体例１のデータ受信処理の動作を示すフローチャートである。
【図１０】具体例２のシステム構成の一例を示す説明図である。
【図１１】具体例２のデータ受信処理部の構成を示すブロック図である。
【図１２】具体例２のデバイスチェックの動作を示すフローチャートである。
【図１３】具体例２のデバイスアドレス登録部に登録された情報の説明図である。
【図１４】具体例２のＤＭＡ受信サイズの設定動作を示すフローチャートである。
【図１５】具体例３のデータ受信処理部（プリンタ）の構成を示すブロック図である。
【図１６】具体例３のバルク転送時の動作説明図である。
【図１７】具体例３のＤＭＡの受信サイズの設定動作を示すフローチャートである。
【図１８】具体例３のＤＭＡ転送の処理を示すフローチャートである。
【図１９】具体例４のポートドライバ（ＰＣ）の構成を示すブロック図である。
【図２０】具体例４のデータ受信処理部（プリンタ）の構成を示すブロック図である。
【図２１】  Centronicsインタフェースにおける転送速度の調整方法（１）を示す説明図である。
【図２２】  Centronicsインタフェースにおける転送速度の調整方法（２）を示す説明図である。
【図２３】ＵＳＢインタフェースにおける受信データの流れを示す説明図である。
【図２４】ＵＳＢインタフェースでの１バイト受信の動作を示す説明図である。
【図２５】パケット送信での遅延を示す説明図である。
【図２６】具体例４のプリンタの性能情報の送受信処理を示すフローチャートである。
【図２７】具体例４の性能解析部の動作を示すフローチャートである。
【図２８】バルク転送時、アイソクロナス転送時における具体例４の転送速度とパケットサイズの関係を示す説明図である。
【図２９】具体例５のポートドライバ（ＰＣ）の構成を示すブロック図である。
【図３０】具体例５の動作を示すフローチャートである。
【符号の説明】
１  パーソナルコンピュータ（ＰＣ）
２  プリンタ
３  ＵＳＢ
１４  ポートドライバ
２１  データ受信処理部
２２  受信バッファ
【図１】
0004323656.tif 000002
【図２】
0004323656.tif 000003
【図３】
0004323656.tif 000004
【図４】
0004323656.tif 000005
【図５】
0004323656.tif 000006
【図６】
0004323656.tif 000007
【図７】
0004323656.tif 000008
【図８】
0004323656.tif 000009
【図９】
0004323656.tif 000010
【図１０】
0004323656.tif 000011
【図１１】
0004323656.tif 000012
【図１２】
0004323656.tif 000013
【図１３】
0004323656.tif 000014
【図１４】
0004323656.tif 000015
【図１５】
0004323656.tif 000016
【図１６】
0004323656.tif 000017
【図１７】
0004323656.tif 000018
【図１８】
0004323656.tif 000019
【図１９】
0004323656.tif 000020
【図２０】
0004323656.tif 000021
【図２１】
0004323656.tif 000022
【図２２】
0004323656.tif 000023
【図２３】
0004323656.tif 000024
【図２４】
0004323656.tif 000025
【図２５】
0004323656.tif 000026
【図２６】
0004323656.tif 000027
【図２７】
0004323656.tif 000028
【図２８】
0004323656.tif 000029
【図２９】
0004323656.tif 000030
【図３０】
0004323656.tif 000031