(57)【要約】【課題】  データ転送に時間のかかる通信路を用いた場合でも、ＳＥＴＵＰトランザクションを実行可能なＵＳＢシステムを提供する。【解決手段】  ホスト側コントローラ１１のホストＳＭ３２は、デバイス側コントローラ１２からホスト１０に向けて送信されるＡＣＫパケットを受信したときに、このパケットを受信ＦＩＦＯ２６に記憶する。その後、ホストＳＭ３２は、ホスト１０からＳＥＴＵＰパケットおよびＤＡＴＡパケットが再送されたときに、記憶していたＡＣＫパケットをホスト１０に送信する。従って、ホスト１０−デバイス１３間の通信に時間がかかり、デバイス側コントローラ１２から送信されたＡＣＫパケットをホスト１０に直接に受信させると最大ＴＡタイムを過ぎてしまう場合でも、ＳＥＴＵＰトランザクションを完了させられる。【選択図】  図１
2005129008.tif 000002
【特許請求の範囲】
【請求項１】
ＵＳＢシステムのホストに備えられ、ホストとデバイスとの間の通信を中継するホスト側コントローラにおいて、
ＳＥＴＵＰトランザクション時、
ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する一方、
デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットを記憶するとともに、
ホストからデバイスに向けて再送信されるＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信したときに、上記のＡＣＫパケットをホストに送信するホスト側制御部を備えていることを特徴とするホスト側コントローラ。
【請求項２】
上記ホスト側制御部は、
ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する際、
ＤＡＴＡパケットにおけるエラーの有無を判断し、エラーのある場合には、そのＤＡＴＡパケットの送信を回避するように設定されていることを特徴とする請求項１に記載のホスト側コントローラ。
【請求項３】
ホストと、
デバイスと、
請求項１に記載のホスト側コントローラと、
デバイスに備えられ、ホストとデバイスとの間の通信を中継するデバイス側コントローラとを備えたＵＳＢシステム。
【請求項４】
上記デバイス側コントローラが、
ホスト側コントローラから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイスに送信する一方、
デバイスから送信されるＡＣＫパケットをホスト側コントローラに送信するデバイス側制御部を備えていることを特徴とする請求項３に記載のＵＳＢシステム。
【請求項５】
上記デバイス側制御部は、
ホスト側コントローラからＤＡＴＡパケットを受信してデバイスに転送する際、ＤＡＴＡパケットの受信量が安定受信量を超えたときに、デバイスに対するＤＡＴＡパケットの転送を開始するように設定されていることを特徴とする請求項４に記載のＵＳＢシステム。
【請求項６】
上記デバイス側制御部は、
ホスト側コントローラから受信したＤＡＴＡパケットにエラーのある場合には、そのＤＡＴＡパケットをデバイスに転送することを回避するように設定されていることを特徴とする請求項４に記載のＵＳＢシステム。
【請求項７】
上記デバイス側制御部は、
デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを送信した後、所定時間以内にＡＣＫパケットを受信できなかったときには、
デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送するように設定されていることを特徴とする請求項４に記載のＵＳＢシステム。
【請求項８】
上記デバイス側制御部は、
デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送する前に、
ＤＡＴＡパケットにおけるエラーの有無を判断し、エラーのある場合には、上記の再送を回避するように設定されていることを特徴とする請求項７に記載のＵＳＢシステム。
【請求項９】
上記デバイス側制御部は、
ホスト側コントローラから受信したＤＡＴＡパケットにエラーがあると判断した場合、ホスト側コントローラに対してＤＡＴＡパケットの再送を要求し、
上記ホスト側制御部は、デバイス側制御部から受けた再送の要求に応じて、ＤＡＴＡパケットを再送するように設定されていることを特徴とする請求項４に記載のＵＳＢシステム。
【請求項１０】
上記ホスト側制御部は、エラーのないＤＡＴＡパケットを有している場合に限り、このＤＡＴＡパケットを再送することを特徴とする請求項９に記載のＵＳＢシステム。
【請求項１１】
上記ホスト側制御部は、
ホストから送信されるＤＡＴＡパケットを、受信した部分から順にデバイス側コントローラに送信するとともに、
ＤＡＴＡパケットを完全に受信したときに、このパケットにおけるエラーの有無を検出し、検出結果を示すフラグをＤＡＴＡパケットの末尾に添付してデバイス側コントローラに送信することを特徴とする請求項４に記載のＵＳＢシステム。
【請求項１２】
上記デバイス側制御部は、
ホスト側コントローラから受信したＤＡＴＡパケットにエラーがあると判断した場合であって、ＤＡＴＡパケットにエラーのないことを示すフラグが添付されている場合に、ホスト側コントローラに対してＤＡＴＡパケットの再送を要求し、
上記ホスト側制御部は、デバイス側制御部から受けた再送の要求に応じて、ＤＡＴＡパケットを再送するように設定されていることを特徴とする請求項１０に記載のＵＳＢシステム。
【請求項１３】
上記ホスト側コントローラおよびデバイス側コントローラは、
両コントローラ間の通信速度を設定する速度設定部を備えていることを特徴とする請求項４に記載のＵＳＢシステム。
【請求項１４】
上記の速度設定部により、コントローラ間の通信速度が所定値以上に設定された場合、
ホスト側制御部は、デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットをホスト側に転送することを特徴とする請求項１３に記載のＵＳＢシステム。
【請求項１５】
上記ホスト側制御部およびデバイス側制御部の少なくとも一方が、
両コントローラ間でのパケットの送受信におけるエラーレートを算出し、
このエラーレートが所定値以上となった場合に、上記速度設定部が、コントローラ間の通信速度を低下させることを特徴とする請求項１３に記載のＵＳＢシステム。
【請求項１６】
上記両コントローラ間の通信経路における通信方式が、全二重通信であることを特徴とする請求項４に記載のＵＳＢシステム。
【請求項１７】
上記両コントローラ間の通信経路が、光ケーブルによって形成されていることを特徴とする請求項４に記載のＵＳＢシステム。
【請求項１８】
上記両コントローラ間の通信が、光無線通信によってなされることを特徴とする請求項４に記載のＵＳＢシステム。
【請求項１９】
上記両コントローラ間の通信が、電波を用いた無線通信によってなされることを特徴とする請求項４に記載のＵＳＢシステム。
【請求項２０】
ホストとデバイスとの間の通信を中継するとともに、ホスト側のコントローラとしての機能とデバイス側のコントローラとしての機能とを備える通信コントローラであって、
ホスト側のコントローラとして機能する場合であって、かつ、ＳＥＴＵＰトランザクション時、
ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する一方、
デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットを記憶するとともに、
ホストからデバイスに向けて再送信されるＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信したときに、上記のＡＣＫパケットをホストに送信する制御部を備えていることを特徴とする通信コントローラ。
【請求項２１】
上記制御部は、
ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する際、
ＤＡＴＡパケットにおけるエラーの有無を判断し、エラーのある場合には、そのＤＡＴＡパケットの送信を回避するように設定されていることを特徴とする請求項２０記載の通信コントローラ。
【請求項２２】
上記制御部は、
ホストから送信されるＤＡＴＡパケットを、受信した部分から順にデバイス側へ送信するとともに、
ＤＡＴＡパケットを完全に受信したときに、このパケットにおけるエラーの有無を検出し、検出結果を示すフラグをＤＡＴＡパケットの末尾に添付してデバイス側へ送信することを特徴とする請求項２０記載の通信コントローラ。
【請求項２３】
デバイス側のコントローラとして機能する場合であって、かつ、ＳＥＴＵＰトランザクション時、
上記制御部は、
ホスト側から送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイスに送信する一方、
デバイスから送信されるＡＣＫパケットをホスト側に送信することを特徴とする請求項２０記載の通信コントローラ。
【請求項２４】
上記制御部は、
ホスト側からＤＡＴＡパケットを受信してデバイスに転送する際、ＤＡＴＡパケットの受信量が安定受信量を超えたときに、デバイスに対するＤＡＴＡパケットの転送を開始するように設定されていることを特徴とする請求項２３記載の通信コントローラ。
【請求項２５】
上記制御部は、
ホスト側から受信したＤＡＴＡパケットにエラーのある場合には、そのＤＡＴＡパケットをデバイスに転送することを回避するように設定されていることを特徴とする請求項２３記載の通信コントローラ。
【請求項２６】
上記制御部は、
デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを送信した後、所定時間以内にＡＣＫパケットを受信できなかったときには、
デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送するように設定されていることを特徴とする請求項２３記載の通信コントローラ。
【請求項２７】
上記制御部は、
デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送する前に、
ＤＡＴＡパケットにおけるエラーの有無を判断し、エラーのある場合には、上記の再送を回避するように設定されていることを特徴とする請求項２６記載の通信コントローラ。
【請求項２８】
ＵＳＢシステムにおけるホストとデバイスとの間でパケットを通信するパケット通信方法において、
ＳＥＴＵＰトランザクション時、
ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信するパケット送信工程と、
デバイス側からホストに向けて送信されるＡＣＫパケットをホスト側に転送することを回避する返信回避工程と、
ホストからデバイスに向けてＳＥＴＵＰパケットおよびＤＡＴＡパケットが再送されたときに、上記のＡＣＫパケットをホストに送信する返信工程とを含んでいることを特徴とするパケット通信方法。
【請求項２９】
ＵＳＢシステムのホストに備えられたコンピューターに、請求項２８に記載のパケット通信方法におけるパケット送信工程，返信回避工程，返信工程を実行させるためのパケット通信プログラム。
【請求項３０】
請求項２９に記載のパケット通信プログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホストコンピューター（ホスト）と、その周辺機器（デバイス）との間におけるＵＳＢ通信（ＵＳＢ規格に沿ったデータ通信）を実現するための通信システムである、ＵＳＢシステムに関するものである。
【背景技術】
【０００２】
ユニバーサルシリアルバス（Universal Serial Bus：以下ＵＳＢ）は、パーソナルコンピューター等のホストに接続して用いる周辺装置（デバイス）に関する、拡張性の自由度を高めるために開発されたインタフェース仕様である。そして、このＵＳＢは、ホストと様々なＵＳＢ対応デバイスとの通信を、共通のバスラインを用いて実施できるシリアルインタフェース規格である。
【０００３】
ＵＳＢでは、原理上、１つのシステムの中で、１台のホスト（ＵＳＢホスト）と、最大１２７台までのデバイスとを、同一バス上に接続できる。これらの接続は、物理的には、ツリー型のネットワーク構造をとっている。また、論理的には、ホスト（クライアントソフトウェア）とデバイス（ＵＳＢファンクション）とが、１対１で通信する接続形態であるといえる。
このような接続形態を維持するために、各デバイスは、時分割で（タイムシェアをして）、ホストと通信を行う。また、ホストは、時分割のスケジューリングを行う。
【０００４】
ＵＳＢ１.ｘでは、データ転送速度の異なる２つのモード、すなわち、１.５Ｍｂｐｓのロースピードモード（ＬＳ）、および、１２Ｍｂｐｓのフルスピードモード（ＦＳ）が規定されている。
【０００５】
しかし、近年、ハードディスク，ＤＶＤ（Digital Versatile Disc）などの高速データ転送の必要なデバイス（アプリケーション）にも、ＵＳＢを適用するようになってきている。このため、前記のような転送速度では不十分であった。
【０００６】
そこで、ＵＳＢ２.０という新しい規格が策定されている。このＵＳＢ２.０では、４８０Ｍｂｐｓの速度でデータ転送を行うハイスピードモード（ＨＳ）が追加されている。
【０００７】
ここで、ＵＳＢでのデータ通信（データ転送）の構造について簡単に説明する。ＵＳＢでのデータ転送は、ホストおよびデバイスにそれぞれ備えられているバッファ間で行われる。
【０００８】
デバイス側のバッファは、エンドポイントと呼ばれるＦＩＦＯ（First In First Out）バッファである。各デバイスは、最大で１６個のエンドポイントを持つことが可能である。また、各エンドポイントには、識別のための番号が付けられている。
【０００９】
そして、ホストは、データ転送の際に、デバイスのアドレスとエンドポイント番号とを用いて、所望のエンドポイントにアクセスするようになっている。
【００１０】
なお、エンドポイント０（番号が０のエンドポイント）は、デバイスをＵＳＢに接続した直後の状態（コンフィギュレーション前の状態）から設定され、ホストとの間のコントロール転送の通信（初期化のための通信など）のために使用される。
【００１１】
また、ホスト−デバイス間のデータ通信は、フレームと呼ばれる通信枠を用いて行われる。このフレームは、所定周期で、ホスト−デバイス間で繰り返し転送されている（ＬＳ，ＦＳモードでは１ｍｓ周期、またＨＳモードでは１２５ｕｓ周期）。そして、全てのデータが、このフレームの中でやり取りされている。
【００１２】
また、このフレームは、複数のトランザクションから成り立っており、トランザクションは、複数のパケットから構成されている。
【００１３】
パケットは、トランザクションを構成する最小の通信単位であり、実際に通信されるデータの基本単位である。また、パケットには、内容に応じて、トークンパケット、データパケット、ハンドシェイクパケットなど、いくつかの種類がある。そして、このパケットを複数含み、意味のあるデータ転送の単位となったものをトランザクションと呼ぶ。
【００１４】
すなわち、ＵＳＢでのデータ通信は、フレームの中でトランザクションごとに行われる。そして、１つのトランザクションでは、ホスト−デバイス間で複数のパケットが転送されるようになっている。
【００１５】
また、上記のトークンパケットには、各デバイスのアドレスおよびエンドポイント番号が含まれており、これによって、ホストが、データ通信の相手先を指定できるようになっている。
【００１６】
図１０は、ＵＳＢパケットの種別を示す説明図である。この図に示すように、パケットには、トークンパケット、データパケット（ＤＡＴＡパケット）、ハンドシェイクパケット、および特殊パケットがある。
【００１７】
また、トークンパケットには、ＩＮパケット、ＯＵＴパケット、ＳＥＴＵＰパケット、ＳＯＦパケットがある。それぞれのパケットは、図１０に示す目的で用いられる。データパケットには、ＤＡＴＡ０パケット、ＤＡＴＡ１パケットなどがある。ハンドシェイクパケットには、ＡＣＫパケット、ＮＡＫパケット、ＳＴＡＬＬパケット、ＮＹＥＴパケットがある。また、特殊パケットとして、ＰＩＮＧパケットなどがある。
【００１８】
また、図１１は、ＵＳＢのパケットフォーマットを示す説明図である。この図に示すＰＩＤは、パケットの識別子であり、８ビットで構成される。また、トークンパケットには、ＣＲＣ５、データパケットにはＣＲＣ１６がそれぞれ付加されている。これらのＣＲＣは、受信パケットにおける誤りの有無を判別するために用いられるものである。
また、トークンパケットの１つであるＳＯＦ（Start of Frame）パケットは、ホストの発行するフレームの始まりを示すパケットである。
【００１９】
ここで、ＵＳＢ通信におけるＳＥＴＵＰトランザクションについて説明する。
ＳＥＴＵＰトランザクションは、ＵＳＢ２.０規格において、ホストにデバイスを接続した際に、ホスト−デバイス間でのシステム的な接続確立する（コンフィギュレーションを完成させる）ために行われるものである。
なお、このトランザクションは、ホストが、デバイスのエンドポイント０に対してデータ転送を行うことで実行される。以下に、図１２を用いて、ＳＥＴＵＰトランザクションについて説明する。
【００２０】
ＳＥＴＵＰトランザクションでは、まず、Ｔ３０１において、ホストがデバイスにＳＥＴＵＰパケットを送信し、ＳＥＴＵＰトランザクションの開始を通知する。その後、ホストは、Ｔ３０２において、ＤＡＴＡパケットを送信する。デバイスは、受信したＳＥＴＵＰパケットおよびＤＡＴＡパケットのＣＲＣをチェックする。
【００２１】
そして、受信パケットに誤りがないと判別された場合、デバイスは、Ｔ３０３において、ＡＣＫパケットをホストに送信する。一方、デバイスは、受信したＳＥＴＵＰパケットおよびＤＡＴＡパケットに誤りがあると判断された場合には、ホストに何も返さない。
【００２２】
ホストは、ＡＣＫパケットを受信することで、デバイスにＳＥＴＵＰパケットおよびＤＡＴＡパケットを正しく転送できたことを認識し、ＳＥＴＵＰトランザクションを終了する。
【００２３】
なお、ＤＡＴＡパケットの送信から所定時間（最大ターンアラウンドタイム）以内にＡＣＫパケットを受信できない場合、ホストは、デバイスにＳＥＴＵＰパケットもしくはＤＡＴＡパケットを正常に転送できなかったこと、すなわち、ＳＥＴＵＰトランザクションが失敗に終わったことを認識する。
そして、ＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイスに向けて再送する。
このような方法により、ホスト・デバイス間でのＳＥＴＵＰトランザクションを行うことが可能となる。
【００２４】
なお、上記の最大ターンアラウンドタイム（最大ＴＡタイム）は、ＵＳＢ２.０規格における、データ信号の伝播時間に関する制約である。
すなわち、ターンアラウンドタイム（ＴＡタイム）は、ホストあるいはデバイスの一方が、他方に対してパケットを送信してから、返信パケットを受けるまで、の時間である。
そして、最大ＴＡタイムは、ＴＡタイムの上限であり、返信パケットを最大ＴＡタイム内に受信しない場合、ホストは、デバイスに対するパケット送信に失敗したと判断し、パケットを再送する。
【００２５】
なお、最大ＴＡタイムは、ＬＳおよびＦＳモードでは、１６ビットタイム(１３３３ｎｓ)となっている。また、ＨＳモードでは、７２１ビットタイム(１５０２ｎｓ)である。
【００２６】
例えば、ＳＥＴＵＰトランザクションでは、ホストは、ＤＡＴＡパケットの送信後、１３３３ｎｓ（ＬＳ，ＦＳ）あるいは１５０２ｎｓ（ＨＳ）経過してもデバイスからＡＣＫパケットを受信できない場合、ＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイスに再送することとなる。
【００２７】
ところで、近年、デジタルカメラ、ＰＤＡ（personal digital assistant）などのモバイル機器にも、ＵＳＢ端子が搭載され、ＵＳＢに対応可能になってきている。
【００２８】
これらのモバイル機器とホストとの接続には、クレイドル（cradle；ゆりかご）方式が多く用いられている。すなわち、ホストに接続されたクレイドルのＵＳＢコネクタと、モバイル機器のＵＳＢコネクタとを接続することで、ＵＳＢ伝送を可能としている。
【００２９】
これらのＵＳＢコネクタは、物理的な接点を持つ。このため、コネクタの抜き差しにより、コネクタの劣化が進み、品質の高いデータ転送を行えなくなる可能性がある。
【００３０】
上記のような物理的な接点をなくす方法として、ホストとモバイル機器との間で、光を用いた空間伝送を行う技術がある。このような技術は、例えば、特許文献１に記載されている。
【特許文献１】特開２０００−２８４８７２号公報（公開日；２０００年１０月１３日）
【発明の開示】
【発明が解決しようとする課題】
【００３１】
しかしながら、ＵＳＢ２.０のハイスピードモードに完全に対応するためには、４８０Ｍｂｐｓの転送速度を保ちながらデータを空間伝送する必要がある。従って、ホストおよびデバイスに備える光通信部（光学系および送受信部）として、高いＣＤＲ（Clock Data Recovery）性能をもつものが必要となるため、コスト増を招来する。
【００３２】
そこで、このようなコスト増を抑えるために、光通信の転送速度を低くしてＵＳＢ２.０のデータ転送を行うことが考えられる。
【００３３】
図１３は、ホストからホストの光通信部（ホスト光通信部）までの通信を４８０Ｍｂｐｓで、ホスト光通信部からデバイスの光通信部（デバイス光通信部）までの通信を１００Ｍｂｐｓで、さらに、デバイス光通信部からデバイスまでの通信を４８０Ｍｂｐｓで行う場合における、ＳＥＴＵＰトランザクションの様子を示すＴチャートである。
【００３４】
図１３に示すように、Ｔ４０１，Ｔ４０２において、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットは、ホスト光通信部により光信号に変換され、デバイス光通信部に対し、１００Ｍｂｐｓで送信される。
【００３５】
デバイス光通信部は、受信した光信号からＳＥＴＵＰパケットおよびＤＡＴＡパケットを抽出し、４８０Ｍｂｐｓでデバイスに送信する（Ｔ４０３）。なお、デバイス光通信部は、通信速度の差を考慮して、ＳＥＴＵＰパケットおよびＤＡＴＡパケットを完全に受信してから、これらをデバイスに送信するようになっている。
【００３６】
その後、デバイスは、ＳＥＴＵＰパケットおよびＤＡＴＡパケットを誤り無く受信し、かつ処理できた場合、Ｔ４０４において、ホストに向けてＡＣＫパケットを送信する。そして、このＡＣＫパケットは、デバイス光通信部を介して、１００Ｍｂｐｓでホスト光通信部に送信される。
【００３７】
ホスト光通信部は、受信した光信号からＡＣＫパケットを抽出し、４８０Ｍｂｐｓでホストに送信する（Ｔ４０５）。その後、ホストは、Ｔ４０６において、デバイスからのＡＣＫパケットを受信する。
【００３８】
しかしながら、このような構成では、光通信部間の転送速度が遅いため、Ｔ４０１からＴ４０６までの時間（ＴＡタイム）が長くなる。特に、ホストから送信されるＤＡＴＡパケットのサイズ（パケット長）が大きいときには、ＴＡタイムが規定値（最大ＴＡタイム）を超えてしまう可能性もある。従って、このような場合には、ホストは、デバイスに正常に受信されているＳＥＴＵＰパケットおよびＤＡＴＡパケットを、デバイスに向けて再送し続けることになり、ＳＥＴＵＰトランザクションを完了できないこととなる。
【００３９】
本発明は、上記のような従来の問題点に鑑みてなされたものである。そして、その目的は、データ転送に時間のかかる通信路を用いた場合でも、ＳＥＴＵＰトランザクションを実行可能なＵＳＢシステムを提供することにある。
【課題を解決するための手段】
【００４０】
本発明のホスト側コントローラ（本ホスト側コントローラ）は、ＵＳＢシステムのホストに備えられ、ホストとデバイスとの間の通信を中継する本ホスト側コントローラにおいて、ＳＥＴＵＰトランザクション時、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する一方、デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットを記憶するとともに、ホストからデバイスに向けて再送信されるＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信したときに、上記のＡＣＫパケットをホストに送信するホスト側制御部を備えていることを特徴としている。
【００４１】
また、ホスト側制御部は、デバイス側から受信したＡＣＫパケットを記憶した後、ＳＥＴＵＰパケットおよびＤＡＴＡパケットの再送を待たずに、ＡＣＫパケットをホストに転送してもよい。また、ホスト側制御部は、デバイス側から受信したＡＣＫパケットを記憶した後、ホストに対するＡＣＫパケットの送信を回避するように設定されていてもよい。
【００４２】
また、本ホスト側コントローラのホスト側制御部は、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する際、ＤＡＴＡパケットにおけるエラーの有無を判断することが好ましい。さらに、この場合、ホスト側制御部は、ＤＡＴＡパケットにエラーのある場合には、そのパケットの送信を回避するように設定されていることが好ましい。
【００４３】
また、本発明のＵＳＢシステム（本システム）は、ホストと、デバイスと、本ホスト側コントローラと、デバイスに備えられ、ホストとデバイスとの間の通信を中継するデバイス側コントローラとを備えたシステムである。
【００４４】
また、本システムでは、デバイス側コントローラが、デバイス側制御部を備えていることが好ましい。このデバイス側制御部は、ＳＥＴＵＰトランザクション時、本ホスト側コントローラから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイスに送信する一方、デバイスから送信されるＡＣＫパケットを本ホスト側コントローラに送信するものである。
【００４５】
また、このデバイス側制御部は、本ホスト側コントローラからＤＡＴＡパケットを受信してデバイスに転送する際、ＤＡＴＡパケットを完全に受信してから、転送を開始するように設定されていてもよい。
【００４６】
また、デバイス側制御部は、ＤＡＴＡパケットの受信量が安定受信量を超えたときに、デバイスに対するＤＡＴＡパケットの転送を開始するように設定されていてもよい。
【００４７】
また、本システムでは、デバイス側制御部は、本ホスト側コントローラから受信したＤＡＴＡパケットにエラーのある場合には、そのＤＡＴＡパケットをデバイスに転送することを回避することが好ましい。また、この構成では、デバイス側制御部は、受信したパケットにエラーのある場合、そのパケットを破棄することが好ましい。
【００４８】
また、デバイス側制御部は、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを送信した後、所定時間以内にＡＣＫパケットを受信できなかったときには、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送するように設定されていることが好ましい。
【００４９】
また、この場合、デバイス側制御部は、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送する前に、ＤＡＴＡパケットにおけるエラーの有無を判断することが好ましい。そして、ＤＡＴＡパケットにエラーのある場合には、ＤＡＴＡパケットの再送を回避するように設定されていることが好ましい。
【００５０】
また、デバイス側制御部は、本ホスト側コントローラから受信したＤＡＴＡパケットにエラーがあると判断した場合、本ホスト側コントローラに対してＤＡＴＡパケットの再送を要求するように設定されていることが好ましい。この場合、さらに、本ホスト側コントローラのホスト側制御部が、デバイス側制御部から受けた再送の要求に応じて、ＤＡＴＡパケットを再送するように設定されていることが好ましい。
【００５１】
また、この場合、ホスト側制御部は、エラーのないＤＡＴＡパケットを有している場合に限り、このＤＡＴＡパケットを再送するように設定されていることが好ましい。
【００５２】
また、このホスト側制御部は、ホストからＤＡＴＡパケットを受信してデバイス側コントローラに転送する際、ＤＡＴＡパケットを完全に受信してから、転送を開始するように設定されていてもよい。
【００５３】
また、ホスト側制御部は、ＤＡＴＡパケットの受信量が安定受信量を超えたときに、受信した部分から順に、デバイス側コントローラに対するＤＡＴＡパケットの転送を開始するように設定されていてもよい。
【００５４】
また、このような場合、ホスト側制御部は、ＤＡＴＡパケットを完全に受信し終えたときには、ＤＡＴＡパケットの一部を既に転送した状態にある。このとき、ホスト側制御部は、このパケットにおけるエラーの有無を検出し、検出結果を示すフラグをＤＡＴＡパケットの末尾に添付してデバイス側コントローラに送信することが好ましい。
【００５５】
また、この構成では、デバイス側制御部は、本ホスト側コントローラから受信したＤＡＴＡパケットにエラーがあると判断した場合であって、ＤＡＴＡパケットにノンエラーフラグが添付されている場合に、本ホスト側コントローラに対してＤＡＴＡパケットの再送を要求することが好ましい。そして、ホスト側制御部が、デバイス側制御部から受けた再送の要求に応じて、ＤＡＴＡパケットを再送するように設定されていることが好ましい。
【００５６】
また、本システムでは、ホスト側コントローラおよびデバイス側コントローラが、両コントローラ間の通信速度を設定する速度設定部を備えていることが好ましい。
【００５７】
また、この構成では、速度設定部により、コントローラ間の通信速度が所定値以上に設定された場合、ホスト側制御部は、デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットをホスト側に転送することが好ましい。
【００５８】
また、本システムでは、速度設定部による通信速度の設定後、ホスト側制御部およびデバイス側制御部の少なくとも一方（あるいは速度設定部）が、コントローラでのパケット送受信におけるエラーレートを算出することが好ましい。また、この場合、速度設定部は、エラーレートが所定値以上となった場合に、コントローラ間の通信速度を低下させることが好ましい。
【００５９】
また、本システムでは、両コントローラ間の通信経路における通信方式が、全二重通信であることが好ましい。また、本システムでは、両コントローラ間の通信経路を、光ケーブル（光ファイバー）によって形成してもよい。また、両コントローラ間の通信を、光無線通信、あるいは、電波を用いた無線通信によって行ってもよい。
【００６０】
本発明の通信コントローラは、上記の課題を解決するため、ホストとデバイスとの間の通信を中継するとともに、ホスト側のコントローラとしての機能とデバイス側のコントローラとしての機能とを備える通信コントローラであって、ホスト側のコントローラとして機能する場合であって、かつ、ＳＥＴＵＰトランザクション時、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する一方、デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットを記憶するとともに、ホストからデバイスに向けて再送信されるＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信したときに、上記のＡＣＫパケットをホストに送信する制御部を備えていることを特徴としている。
【００６１】
また、本発明の通信コントローラは、上記の通信コントローラにおいて、上記制御部は、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する際、ＤＡＴＡパケットにおけるエラーの有無を判断し、エラーのある場合には、そのＤＡＴＡパケットの送信を回避するように設定されていることが好ましい。
【００６２】
また、本発明に係る通信コンローラは、上記の通信コントローラにおいて、上記制御部は、ホストから送信されるＤＡＴＡパケットを、受信した部分から順にデバイス側へ送信するとともに、ＤＡＴＡパケットを完全に受信したときに、このパケットにおけるエラーの有無を検出し、検出結果を示すフラグをＤＡＴＡパケットの末尾に添付してデバイス側へ送信することが好ましい。
【００６３】
また、本発明の通信コントローラは、上記の通信コントローラにおいて、デバイス側のコントローラとして機能する場合であって、かつ、ＳＥＴＵＰトランザクション時、上記制御部は、ホスト側から送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイスに送信する一方、デバイスから送信されるＡＣＫパケットをホスト側に送信することが好ましい。
【００６４】
また、本発明の通信コントローラは、上記の通信コントローラにおいて、上記制御部は、ホスト側からＤＡＴＡパケットを受信してデバイスに転送する際、ＤＡＴＡパケットの受信量が安定受信量を超えたときに、デバイスに対するＤＡＴＡパケットの転送を開始するように設定されていることが好ましい。
【００６５】
また、本発明の通信コントローラは、上記の通信コントローラにおいて、上記制御部は、ホスト側から受信したＤＡＴＡパケットにエラーのある場合には、そのＤＡＴＡパケットをデバイスに転送することを回避するように設定されていることが好ましい。
【００６６】
また、本発明に係る通信コントローラは、上記の通信コントローラにおいて、上記制御部は、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを送信した後、所定時間以内にＡＣＫパケットを受信できなかったときには、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送するように設定されていることが好ましい。
【００６７】
また、本発明に係る通信コントローラは、上記の通信コントローラにおいて、上記制御部は、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送する前に、ＤＡＴＡパケットにおけるエラーの有無を判断し、エラーのある場合には、上記の再送を回避するように設定されていることが好ましい。
【００６８】
また、本発明のパケット通信方法（本通信方法）は、ＵＳＢシステムにおけるホストとデバイスとの間でパケットを通信するパケット通信方法において、ＳＥＴＵＰトランザクション時、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信するパケット送信工程と、デバイス側からホストに向けて送信されるＡＣＫパケットをホスト側に転送することを回避する返信回避工程と、ホストからデバイスに向けてＳＥＴＵＰパケットおよびＤＡＴＡパケットが再送されたときに、上記のＡＣＫパケットをホストに送信する返信工程とを含んでいることを特徴とする方法である。
【００６９】
また、本発明のパケット通信プログラムは、ＵＳＢシステムのホストに備えられたコンピューターに、本通信方法におけるパケット送信工程，返信回避工程，返信工程を実行させるためのパケット通信プログラムである。また、本発明の記録媒体は、上記のプログラムを記録した記録媒体である。
【発明の効果】
【００７０】
本発明のホスト側コントローラ（本ホスト側コントローラ）は、ＵＳＢシステムのホストに備えられ、ホストとデバイスとの間の通信を中継する本ホスト側コントローラにおいて、ＳＥＴＵＰトランザクション時、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する一方、デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットを記憶するとともに、ホストからデバイスに向けて再送信されるＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信したときに、上記のＡＣＫパケットをホストに送信するホスト側制御部を備えていることを特徴としている。
【００７１】
本ホスト側コントローラは、ＵＳＢシステムに適用されるものである。
ここで、ＵＳＢシステムとは、ホストコンピューター（ホスト）と、その周辺機器（デバイス；ＵＳＢファンクション）との間におけるＵＳＢ通信（ＵＳＢ規格に沿ったデータ通信）を実現するための通信システムである。
【００７２】
そして、本ホスト側コントローラは、ＵＳＢシステムのホストに備えられ、ホストとデバイスとの間の通信を中継するものである。すなわち、本ホスト側コントローラは、ホストから送信されるパケットを受け取ってデバイスに送信するとともに、ホストに向けて送信されたパケットを受信して、ホストに伝達するものである。ここで、パケットとは、ＵＳＢシステムで通信されるデータの基本単位である。
【００７３】
上記のように、本ホスト側コントローラは、ホスト側制御部を備えており、このホスト側制御部が、ＳＥＴＵＰトランザクション時、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットを、デバイス側に送信するようになっている。また、これらのパケットを正常に（適切に）受信したデバイスは、ホストに向けて、ＡＣＫパケットを送信する。
【００７４】
なお、このＡＣＫパケットは、ＳＥＴＵＰおよびＤＡＴＡパケットを正常に受信できたことを示す、デバイスからの返信パケットである。このＡＣＫパケットを最大ＴＡタイム内に受信できなかった場合に、ホストは、ＳＥＴＵＰトランザクションを正常に遂行できなかった（失敗した）と判断する。そして、ＳＥＴＵＰおよびＤＡＴＡパケットをデバイスに向けて再送する。
【００７５】
そして、特に、本ホスト側コントローラのホスト側制御部は、デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットを、自身の制御する記憶部に記憶する。その後、ホスト側制御部は、ホストからＳＥＴＵＰパケットおよびＤＡＴＡパケットが再送されたときに、記憶していたＡＣＫパケットを、ホストに送信するように設定されている。
【００７６】
このように、本ホスト側コントローラを用いたＵＳＢシステムでは、ホストがＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送した直後に、ＡＣＫパケットをホストに受信させられる。従って、ホスト−デバイス間の通信に時間がかかり、デバイス側から送信されたＡＣＫパケットをホストに直接に受信させるまでに最大ＴＡタイムを過ぎてしまうような場合でも、ＳＥＴＵＰトランザクションを完了させることが可能となる。
【００７７】
なお、上記のような、ホスト−デバイス間の通信（データ転送）に時間のかかる場合とは、この間の通信速度の遅い場合や、この間の通信経路の長い場合などである。従って、本ホスト側コントローラを用いれば、ホスト−デバイス間の通信経路の自由度を、著しく増大させられる。
【００７８】
また、ホスト側制御部は、デバイス側から受信したＡＣＫパケットを記憶した後、ＳＥＴＵＰパケットおよびＤＡＴＡパケットの再送を待たずに、ＡＣＫパケットをホストに転送してもよい。この場合、最大ＴＡタイム内にＡＣＫパケットをホストに受信させられた場合には、その時点で、ＳＥＴＵＰトランザクションが終了する。一方、ホストによるＡＣＫパケットの受信時が、最大ＴＡタイムを超えていた場合、ホストからＳＥＴＵＰパケット・ＡＣＫパケットが再送され、ホスト側制御部によって、ＡＣＫパケットがホストに送信される。
【００７９】
また、ホスト側制御部は、デバイス側から受信したＡＣＫパケットを記憶した後、ホストに対するＡＣＫパケットの送信を回避するように設定されていてもよい。この場合、ホスト側制御部は、ホストからのパケット再送を待って、ホストにＡＣＫパケットを送信する。
【００８０】
また、本ホスト側コントローラのホスト側制御部は、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する際、ＤＡＴＡパケットにおけるエラーの有無を判断することが好ましい。さらに、この場合、ホスト側制御部は、ＤＡＴＡパケットにエラーのある場合には、そのパケットの送信を回避するように設定されていることが好ましい。
【００８１】
これにより、デバイス側に対してエラーのあるパケットを送信してしまうことを回避できるため、無駄なパケット送信を防止できる。なお、上記のようなパケットのエラーは、例えば、パケットに添付されている誤り検出符号（ＣＲＣ）を解析することによって行える。
【００８２】
また、本発明のＵＳＢシステム（本システム）は、ホストと、デバイスと、本ホスト側コントローラと、デバイスに備えられ、ホストとデバイスとの間の通信を中継するデバイス側コントローラとを備えたシステムである。
【００８３】
また、本システムでは、デバイス側コントローラが、デバイス側制御部を備えていることが好ましい。このデバイス側制御部は、ＳＥＴＵＰトランザクション時、本ホスト側コントローラから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイスに送信する一方、デバイスから送信されるＡＣＫパケットを本ホスト側コントローラに送信するものである。
【００８４】
また、このデバイス側制御部は、本ホスト側コントローラからＤＡＴＡパケットを受信してデバイスに転送する際、ＤＡＴＡパケットを完全に受信してから、転送を開始するように設定されていてもよい。これは、コントローラ間の通信速度が、デバイス側コントローラとデバイスとの間の通信速度より遅い場合に、デバイスに対する送信に抜けが生じることを防止するためである。
【００８５】
また、デバイス側制御部は、ＤＡＴＡパケットの受信量が安定受信量を超えたときに、デバイスに対するＤＡＴＡパケットの転送を開始するように設定されていてもよい。ここで、安定受信量とは、デバイスに対してＤＡＴＡパケットの転送を開始しても、送信に抜けの生じることのないだけの受信量のことである。この構成でも、上記のような送信の抜けを防止できる。
【００８６】
また、本システムでは、デバイス側制御部は、本ホスト側コントローラから受信したＤＡＴＡパケットにエラーのある場合には、そのＤＡＴＡパケットをデバイスに転送することを回避することが好ましい。これにより、デバイスに対してエラーのあるパケットを送信してしまうことを回避できるため、無駄なパケット送信を防止できる。なお、上記したように、パケットのエラーは、パケットに添付されている誤り検出符号（ＣＲＣ）を解析することなどで行える。
【００８７】
また、この構成では、デバイス側制御部は、受信したパケットにエラーのある場合、そのパケットを破棄することが好ましい。デバイス側制御部は、受信したパケットを、デバイス側コントローラ内のメモリーに保存することとなるが、上記のようにエラーのあるパケットを破棄することで、メモリーの記憶領域を無駄に使用することを避けられる。
【００８８】
また、ＳＥＴＵＰトランザクションでは、ＳＥＴＵＰおよびＤＡＴＡパケットの受信を、デバイスが失敗することもある。これは、パケットのエラーや、送受信に関する不具合（トラブル）などに起因する。このような場合、デバイスは、パケットを正常に受信できたことを示すＡＣＫパケットを返信することはない。
【００８９】
このため、デバイス側制御部は、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを送信した後、所定時間以内にＡＣＫパケットを受信できなかったときには、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送するように設定されていることが好ましい。
【００９０】
これにより、ホストや本ホスト側コントローラによるパケットの再送を実行することなく、デバイス側コントローラだけの動作により、デバイスにパケットを再送できる。
【００９１】
また、この場合、デバイス側制御部は、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送する前に、ＤＡＴＡパケットにおけるエラーの有無を判断することが好ましい。そして、ＤＡＴＡパケットにエラーのある場合には、ＤＡＴＡパケットの再送を回避するように設定されていることが好ましい。これにより、無駄なパケット再送信を防止できる。
【００９２】
また、デバイス側制御部は、本ホスト側コントローラから受信したＤＡＴＡパケットにエラーがあると判断した場合、本ホスト側コントローラに対し、ＤＡＴＡパケットの再送を要求するように設定されていることが好ましい。この場合、さらに、本ホスト側コントローラのホスト側制御部が、デバイス側制御部から受けた再送の要求に応じて、ＤＡＴＡパケットを再送するように設定されていることが好ましい。これにより、ホストからの再送を待つことなく、エラーのない適切なＤＡＴＡパケットを取得できる。
【００９３】
また、この場合、ホスト側制御部は、エラーのないＤＡＴＡパケットを有している場合に限り、このＤＡＴＡパケットを再送するように設定されていることが好ましい。これにより、無駄なパケット再送を防止できる。
【００９４】
また、このホスト側制御部は、ホストからＤＡＴＡパケットを受信してデバイス側コントローラに転送する際、ＤＡＴＡパケットを完全に受信してから、転送を開始するように設定されていてもよい。これは、コントローラ間の通信速度が、ホストと本ホスト側コントローラとの間の通信速度より遅い場合に、デバイス側コントローラに対する送信に抜けが生じることを防止するためである。
【００９５】
また、ホスト側制御部は、ＤＡＴＡパケットの受信量が安定受信量を超えたときに、受信した部分から順に、デバイス側コントローラに対するＤＡＴＡパケットの転送を開始するように設定されていてもよい。ここで、安定受信量とは、デバイス側コントローラに対してＤＡＴＡパケットの転送を開始しても、送信に抜けの生じることのないだけの受信量のことである。この構成でも、上記のような送信の抜けを防止できる。
【００９６】
また、このような場合、ホスト側制御部は、ＤＡＴＡパケットを完全に受信し終えたときには、ＤＡＴＡパケットの一部を既に転送した状態にある。このとき、ホスト側制御部は、このパケットにおけるエラーの有無を検出し、検出結果を示すフラグをＤＡＴＡパケットの末尾に添付してデバイス側コントローラに送信することが好ましい。
【００９７】
この場合、デバイス側制御部は、エラーのあることを示すフラグ（エラーフラグ）の立っているパケットに関しては、ホストから本ホスト側コントローラに送信された段階で既にエラーが生じている、と判断できる。従って、デバイス側制御部は、このようなパケットに関してはデバイスに転送せず、エラーのないことを示すフラグ（ノンエラーフラグ）の立っているパケットだけをデバイスに転送することが好ましい。これにより、無駄なパケット送信を回避できる。
【００９８】
また、この構成では、デバイス側制御部は、本ホスト側コントローラから受信したＤＡＴＡパケットにエラーがあると判断した場合であって、ＤＡＴＡパケットにノンエラーフラグが添付されている場合に、本ホスト側コントローラに対してＤＡＴＡパケットの再送を要求することが好ましい。そして、ホスト側制御部が、デバイス側制御部から受けた再送の要求に応じて、ＤＡＴＡパケットを再送するように設定されていることが好ましい。
【００９９】
すなわち、ノンエラーフラグの立っているＤＡＴＡパケットにエラーがある場合、デバイス側制御部は、このパケットに関しては、ホストから本ホスト側コントローラに送信された段階ではエラーは生じていない、と判断できる。従って、本ホスト側コントローラにＤＡＴＡパケットを再送させることで、ホストからの再送を待つことなく、エラーのない適切なＤＡＴＡパケットを取得できる。
【０１００】
また、本システムでは、ホスト側コントローラおよびデバイス側コントローラが、両コントローラ間の通信速度を設定する速度設定部を備えていることが好ましい。
【０１０１】
また、この構成では、速度設定部により、コントローラ間の通信速度が所定値以上に設定された場合、ホスト側制御部は、デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットをホスト側に転送することが好ましい。
【０１０２】
ここで、上記の所定値とは、例えば、通常速度（ＵＳＢの規格に沿った通常の速度；例えばＨＦでの４８０Ｍｂｐｓ）程度の、デバイスからのＡＣＫパケットを最大ＴＡタイム内でホストに直接転送（リピート）可能な速度に応じた値である。
【０１０３】
すなわち、このような場合には、ホストによる再送を経なくても、最大ＴＡタイム内で、デバイス側コントローラから送信されたＡＣＫパケットをホストに直接転送できる可能性が高い。従って、ホスト側制御部は、デバイス側コントローラから受信したＡＣＫパケットをそのままホストに転送（リピート）しても、ＳＥＴＵＰトランザクションを完了させられる。
【０１０４】
また、本システムでは、速度設定部による通信速度の設定後、ホスト側制御部およびデバイス側制御部の少なくとも一方（あるいは速度設定部）が、コントローラでのパケット送受信におけるエラーレートを算出することが好ましい。ここで、エラーレートとは、エラーの発生回数を、送受信回数で割った値（エラー発生率）である。また、この場合、速度設定部は、エラーレートが所定値以上となった場合に、コントローラ間の通信速度を低下させることが好ましい。これにより、通信速度の高すぎることに起因するエラーレートを低下させられる。
【０１０５】
また、本システムでは、両コントローラ間の通信経路における通信方式が、全二重通信であることが好ましい。これにより、半二重通信において必要なプリアンブルをなくすことが可能となるため、コントローラ間の通信効率を向上させられる。
【０１０６】
また、本システムでは、両コントローラ間の通信経路を、光ケーブル（光ファイバー）によって形成してもよい。これにより、パケットの長距離伝送が可能となる。
【０１０７】
また、両コントローラ間の通信を、光無線通信、あるいは、電波を用いた無線通信によって行ってもよい。また、無線通信（空間通信）を用いる場合には、ケーブルレスのため、利便性（コントローラの配置自由度など）を向上させられる。
【０１０８】
本発明の通信コントローラは、ホストとデバイスとの間の通信を中継するとともに、ホスト側のコントローラとしての機能とデバイス側のコントローラとしての機能とを備える通信コントローラであって、ホスト側のコントローラとして機能する場合であって、かつ、ＳＥＴＵＰトランザクション時、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する一方、デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットを記憶するとともに、ホストからデバイスに向けて再送信されるＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信したときに、上記のＡＣＫパケットをホストに送信する制御部を備えていることを特徴としている。
【０１０９】
本通信コントローラは、ホストとデバイスとの間の通信を中継するものである。また、本通信コントローラは、ホスト側のコントローラとしての機能とデバイス側のコントローラとしての機能とを備えている。つまり、ホスト側のコントローラおよびデバイス側のコントローラの何れか一方のコントローラとして機能させることができる。
【０１１０】
さらに、本通信コントローラがホスト側のコントローラとして機能する場合には、本通信コントローラの制御部が、ＳＥＴＵＰトランザクション時、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットを、デバイス側に送信するようになっている。また、これらのパケットを正常に（適切に）受信したデバイスは、ホストに向けて、ＡＣＫパケットを送信する。
【０１１１】
なお、このＡＣＫパケットは、ＳＥＴＵＰおよびＤＡＴＡパケットを正常に受信できたことを示す、デバイスからの返信パケットである。このＡＣＫパケットを最大ＴＡタイム内に受信できなかった場合に、ホストは、ＳＥＴＵＰトランザクションを正常に遂行できなかった（失敗した）と判断する。そして、ＳＥＴＵＰおよびＤＡＴＡパケットをデバイスに向けて再送する。
【０１１２】
そして、特に、本通信コントローラの制御部は、デバイス側からホストに向けて送信されるＡＣＫパケットを受信したときに、このパケットを、自身の制御する記憶部に記憶する。その後、制御部は、ホストからＳＥＴＵＰパケットおよびＤＡＴＡパケットが再送されたときに、記憶していたＡＣＫパケットを、ホストに送信するように設定されている。
【０１１３】
このように、本通信コントローラを用いると、ホストがＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送した直後に、ＡＣＫパケットをホストに受信させられる。従って、ホスト−デバイス間の通信に時間がかかり、デバイス側から送信されたＡＣＫパケットをホストに直接に受信させるまでに最大ＴＡタイムを過ぎてしまうような場合でも、ＳＥＴＵＰトランザクションを完了させることが可能となる。
【０１１４】
なお、上記のような、ホスト−デバイス間の通信（データ転送）に時間のかかる場合とは、この間の通信速度の遅い場合や、この間の通信経路の長い場合などである。従って、本通信コントローラを用いれば、ホスト−デバイス間の通信経路の自由度を、著しく増大させられる。
【０１１５】
また、制御部は、デバイス側から受信したＡＣＫパケットを記憶した後、ＳＥＴＵＰパケットおよびＤＡＴＡパケットの再送を待たずに、ＡＣＫパケットをホストに転送してもよい。この場合、最大ＴＡタイム内にＡＣＫパケットをホストに受信させられた場合には、その時点で、ＳＥＴＵＰトランザクションが終了する。一方、ホストによるＡＣＫパケットの受信時が、最大ＴＡタイムを超えていた場合、ホストからＳＥＴＵＰパケット・ＡＣＫパケットが再送され、制御部によって、ＡＣＫパケットがホストに送信される。
【０１１６】
また、制御部は、デバイス側から受信したＡＣＫパケットを記憶した後、ホストに対するＡＣＫパケットの送信を回避するように設定されていてもよい。この場合、制御部は、ホストからのパケット再送を待って、ホストにＡＣＫパケットを送信する。
【０１１７】
また、通信コントローラが、ホスト側のコントローラの機能と、デバイス側のコントローラの機能とを備えることにより、通信コントローラを、ホスト側のコントローラとしても、デバイス側のコントローラとしても使用可能となる。したがって、ホストを必要とせず、デバイス同士で通信を可能とするＵＢＳ−ＯＴＧ（ＵＳＢ  Ｏｎ−Ｔｈｅ−Ｇｏ）の規格下で、本通信コントローラを用いることが可能となる。
【０１１８】
また、本通信コントローラの制御部は、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信する際、ＤＡＴＡパケットにおけるエラーの有無を判断することが好ましい。さらに、この場合、制御部は、ＤＡＴＡパケットにエラーのある場合には、そのパケットの送信を回避するように設定されていることが好ましい。
【０１１９】
これにより、デバイス側に対してエラーのあるパケットを送信してしまうことを回避できるため、無駄なパケット送信を防止できる。なお、上記のようなパケットのエラーは、例えば、パケットに添付されている誤り検出符号（ＣＲＣ）を解析することによって行える。
【０１２０】
また、この制御部は、ホストからＤＡＴＡパケットを受信してデバイス側に転送する際、ＤＡＴＡパケットを完全に受信してから、転送を開始するように設定されていてもよい。これは、コントローラ間の通信速度が、ホストと本通信コントローラとの間の通信速度より遅い場合に、デバイス側に対する送信に抜けが生じることを防止するためである。
【０１２１】
また、制御部は、ＤＡＴＡパケットの受信量が安定受信量を超えたときに、受信した部分から順に、デバイス側に対するＤＡＴＡパケットの転送を開始するように設定されていてもよい。ここで、安定受信量とは、デバイス側に対してＤＡＴＡパケットの転送を開始しても、送信に抜けの生じることのないだけの受信量のことである。この構成でも、上記のような送信の抜けを防止できる。
【０１２２】
また、このような場合、制御部は、ＤＡＴＡパケットを完全に受信し終えたときには、ＤＡＴＡパケットの一部を既に転送した状態にある。このとき、制御部は、このパケットにおけるエラーの有無を検出し、検出結果を示すフラグをＤＡＴＡパケットの末尾に添付してデバイス側に送信することが好ましい。
【０１２３】
この場合、デバイス側は、エラーのあることを示すフラグ（エラーフラグ）の立っているパケットに関しては、ホストから本通信コントローラに送信された段階で既にエラーが生じている、と判断できる。従って、デバイス側は、このようなパケットに関してはデバイスに転送せず、エラーのないことを示すフラグ（ノンエラーフラグ）の立っているパケットだけをデバイスに転送することが好ましい。これにより、無駄なパケット送信を回避できる。
【０１２４】
また、制御部は、本通信コントローラがデバイス側のコントローラとして機能する場合であって、ＳＥＴＵＰトランザクション時、ホスト側から送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイスに送信する一方、デバイスから送信されるＡＣＫパケットをホスト側に送信するものである。
【０１２５】
また、この制御部は、ホスト側からＤＡＴＡパケットを受信してデバイスに転送する際、ＤＡＴＡパケットを完全に受信してから、転送を開始するように設定されていてもよい。これは、本通信コントローラとホスト側コントローラとの間の通信速度が、本通信コントローラとデバイスとの間の通信速度より遅い場合に、デバイスに対する送信に抜けが生じることを防止するためである。
【０１２６】
また、制御部は、本通信コントローラがデバイス側のコントローラとして機能する場合であって、ＤＡＴＡパケットの受信量が安定受信量を超えたときに、デバイスに対するＤＡＴＡパケットの転送を開始するように設定されていてもよい。ここで、安定受信量とは、デバイスに対してＤＡＴＡパケットの転送を開始しても、送信に抜けの生じることのないだけの受信量のことである。この構成でも、上記のような送信の抜けを防止できる。
【０１２７】
また、制御部は、本通信コントローラがデバイス側のコントローラとして機能する場合であって、ホスト側から受信したＤＡＴＡパケットにエラーのある場合には、そのＤＡＴＡパケットをデバイスに転送することを回避することが好ましい。これにより、デバイスに対してエラーのあるパケットを送信してしまうことを回避できるため、無駄なパケット送信を防止できる。なお、上記したように、パケットのエラーは、パケットに添付されている誤り検出符号（ＣＲＣ）を解析することなどで行える。
【０１２８】
また、この構成では、制御部は、受信したパケットにエラーのある場合、そのパケットを破棄することが好ましい。制御部は、受信したパケットを、本通信コントローラ内のメモリーに保存することとなるが、上記のようにエラーのあるパケットを破棄することで、メモリーの記憶領域を無駄に使用することを避けられる。
【０１２９】
また、本通信コントローラがデバイス側のコントローラとして機能する場合、ＳＥＴＵＰトランザクションでは、ＳＥＴＵＰおよびＤＡＴＡパケットの受信を、デバイスが失敗することもある。これは、パケットのエラーや、送受信に関する不具合（トラブル）などに起因する。このような場合、デバイスは、パケットを正常に受信できたことを示すＡＣＫパケットを返信することはない。
【０１３０】
このため、制御部は、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを送信した後、所定時間以内にＡＣＫパケットを受信できなかったときには、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送するように設定されていることが好ましい。
【０１３１】
これにより、ホストやホスト側コントローラによるパケットの再送を実行することなく、本通信コントローラだけの動作により、デバイスにパケットを再送できる。
【０１３２】
また、この場合、制御部は、デバイスに対してＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送する前に、ＤＡＴＡパケットにおけるエラーの有無を判断することが好ましい。そして、ＤＡＴＡパケットにエラーのある場合には、ＤＡＴＡパケットの再送を回避するように設定されていることが好ましい。これにより、無駄なパケット再送信を防止できる。
【０１３３】
また、本発明のパケット通信方法（本通信方法）は、ＵＳＢシステムにおけるホストとデバイスとの間でパケットを通信するパケット通信方法において、ＳＥＴＵＰトランザクション時、ホストから送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側に送信するパケット送信工程と、デバイス側からホストに向けて送信されるＡＣＫパケットをホスト側に転送することを回避する返信回避工程と、ホストからデバイスに向けてＳＥＴＵＰパケットおよびＤＡＴＡパケットが再送されたときに、上記のＡＣＫパケットをホストに送信する返信工程とを含んでいることを特徴とする方法である。
【０１３４】
本通信方法は、上記した本ホスト側コントローラによって実現されている通信方法である。従って、本通信方法を用いれば、ホスト−デバイス間の通信に時間がかかり、デバイス側から送信されたＡＣＫパケットをホストに直接に受信させるまでに最大ＴＡタイムを過ぎてしまうような場合でも、ＳＥＴＵＰトランザクションを完了させることが可能となる。さらに、ホスト−デバイス間の通信経路の自由度を、著しく増大させられる。
【０１３５】
また、本発明のパケット通信プログラムは、ＵＳＢシステムのホストに備えられたコンピューターに、本通信方法におけるパケット送信工程，返信回避工程，返信工程を実行させるためのパケット通信プログラムである。
【０１３６】
上記のようなコンピューターにこのプログラムを読み込ませることで、本通信方法の各工程を、そのコンピューターによって実現することが可能となる。
また、このプログラムをコンピューターによって読取可能な記録媒体に記録させておくことで、プログラムの保存・流通を容易に行えるようになる。
【発明を実施するための最良の形態】
【０１３７】
本発明の一実施形態について説明する。本実施の形態にかかるＵＳＢシステムは、ホストコンピューター（ホスト）と、その周辺機器（デバイス）との間におけるＵＳＢ通信（ＵＳＢ２．０を用いたデータ通信）を実現するための通信システムである。
【０１３８】
図１は、本システムの構成を示すブロック図である。この図に示すように、本システムは、ホスト１０，ホスト側コントローラ１１，デバイス側コントローラ１２，デバイス１３を備えた構成である。
【０１３９】
ホスト（ＵＳＢホスト）１０は、本システムの親機となるパーソナルコンピューターであり、全てのＵＳＢ通信を制御するものである。
また、デバイス（ＵＳＢファンクション，ＵＳＢデバイス）１３は、ホスト１０と通信を行う子機（ノード）であり、プリンターやＤＶＤドライバーなど、ホストの周辺機器として機能するものである。
【０１４０】
ホスト側コントローラ１１は、ＵＳＢケーブルによってホスト１０と接続されており、ホスト１０と外部（デバイス１３）との間のＵＳＢ通信を中継するものである。すなわち、ホスト側コントローラ１１は、ホスト１０から送信されるパケットを受け取って外部に送信するとともに、ホスト１０に向けて送信されたパケットを受信して、ホスト１０に伝達するものである。
【０１４１】
デバイス側コントローラ１２は、ＵＳＢケーブルによってデバイス１３と接続されており、デバイス１３とホスト１０との間のＵＳＢ通信を中継するものである。すなわち、デバイス側コントローラ１２は、デバイス１３から送信されるパケットを受け取ってホスト１０に送信するとともに、デバイス１３に向けて送信されたパケットを受信して、デバイス１３に伝達するものである。
【０１４２】
また、本システムでは、コントローラ１１・１２間を、ＵＳＢ対応の光無線通信によって接続している。すなわち、本システムでは、ホスト１０とデバイス１３との間のＵＳＢ通信を、コントローラ１１・１２による光無線通信を介して実行するようになっている。
なお、コントローラ１１・１２間の光無線通信におけるデータ転送速度は、１００Ｍｂｐｓであり、ＵＳＢ２．０のハイスピードモード（ＨＳ）時におけるデータ転送速度（４８０Ｍｂｐｓ）よりも低速である。
【０１４３】
ここで、本システムの特徴的な構成である、コントローラ１１・１２の構成について説明する。図１に示すように、ホスト側コントローラ１１は、ＵＳＢ受信機２０，送信ＦＩＦＯ２１，変調回路２２，光送信機２３，光受信機２４，復調回路２５，受信ＦＩＦＯ２６，ＵＳＢ送信機２７，エラー検出回路２８，タイマー２９，スピードネゴシエーションステートマシン（ＳＮＳＭ）３０，ＣＲＣチェック回路３３およびホスト側ステートマシン（ホストＳＭ）３２を備えた構成である。
【０１４４】
一方、デバイス側コントローラ１２は、ホスト側コントローラ１１の構成において、ホストＳＭ３２に代えて、デバイス側ステートマシン（デバイスＳＭ）４２を備えた構成である。
【０１４５】
ＵＳＢ受信機２０は、ホスト１０あるいはデバイス１３とＵＳＢケーブルで接続されており、これらから送信されるＵＳＢ信号（パケットを含む信号）を受信する（受け取る）ものである。
【０１４６】
送信ＦＩＦＯ２１は、ＵＳＢ受信機２０の受信したパケットを一時的に保存するものである。すなわち、上記したように、コントローラ１１・１２間の通信速度（１００Ｍｂｐｓ）は、ＵＳＢケーブルでの最高通信速度（ＨＳ；４８０Ｍｂｐｓ）よりも低速である。このため、送信ＦＩＦＯ２１は、パケットを光通信によって転送（リピート）する際のタイミング調整に用いられる。
【０１４７】
変調回路２２は、光通信によって外部に送信できるよう、パケットを変調（光変調）するものである。変調回路２２の変調方法としては、例えば、８Ｂ１０Ｂを利用できる。
光送信機２３は、変調回路２２によって変調されたパケットを外部に送信するものであり、発光ダイオード装置やレーザー装置から構成される。
【０１４８】
光受信機２４は、外部から受信された、光変調されたパケットを受信するものであり、例えばフォトダイオードから構成される。なお、光受信機２４は、外部から何らかの光信号を受けると、シグナルディテクト信号をホストＳＭ３２（デバイスＳＭ４２）またはＳＮＳＭ３０に送信する。このシグナルディテクト信号は、受信信号の有無を判別するための信号である。復調回路２５は、光受信機２４によって受信されたパケットを、ＵＳＢケーブルで通信可能なように復調するものである。復調回路２５の復調方法としては、例えば、８Ｂ１０Ｂを利用できる。
【０１４９】
受信ＦＩＦＯ（記憶部）２６は、復調されたパケットを一時的に保存するものである。
また、受信ＦＩＦＯ２６は、送信ＦＩＦＯ２１と同様に、ＵＳＢケーブルでのデータ送信と、光通信でのデータ受信との速度差を補償するために、パケットをＵＳＢケーブルによって転送（リピート）する際のタイミング調整に用いられる。
【０１５０】
エラー検出回路２８は、復調回路２５によって復調されたパケット（あるいは他の信号）に、光変調あるいは復調によって生じたエラー（光エラー）があるか否かを判別する回路である。
【０１５１】
ＣＲＣチェック回路３３は、パケットにおける誤り検出符号（ＣＲＣ５あるいはＣＲＣ１６）を解析することにより、復調回路２５によって復調されたパケット（特にＤＡＴＡパケット）に、パケットエラー（ＵＳＢの規格に応じていない不適切な部分）があるか否かを調べるものである。
【０１５２】
ＵＳＢ送信機２７は、ホスト１０あるいはデバイス１３とＵＳＢケーブルで接続されており、これらに対し、受信ＦＩＦＯ２６に保存されたパケット（パケットを含むＵＳＢ信号）を送信するものである。タイマー２９は、ホストＳＭ３２あるいはデバイスＳＭ４２に使用されるタイマー（時間計測器）である。ＳＮＳＭ（速度設定部）３０は、後述するスピードネゴシエーションを行うための制御部である。
【０１５３】
ホストＳＭ（ホスト側制御部）３２は、ホスト側コントローラ１１の全処理を制御する、コントローラ１１の中枢部である。同様に、デバイス側コントローラ１２のデバイスＳＭ（デバイス側制御部）４２は、コントローラ１２の全処理を制御する中枢部として機能する。
【０１５４】
ここで、本システムのデータ通信動作について説明する。まず、デバイス１３の接続時の動作について説明する。コントローラ１１・１２を介してデバイス１３が本システムに接続されたとき、まず、ホスト１０は、デバイス１３の電源を検出する。これは、ＵＳＢケーブルの４本の信号線（Ｄ＋，Ｄ−，電源（ＶＢＵＳ）、ＧＮＤ）を流れる信号のうちの、ＶＢＵＳ信号を確認することでなされる。
【０１５５】
次に、ホスト１０は、デバイス１３のスピード（対応しているモード）を検出する。そしてフルスピードモード（ＦＳ）、あるいは、ハイスピードモード（ＨＳ）に対応している場合、ホスト１０は、Ｄ＋の信号をプルアップする。一方、ロースピードモード（ＬＳ）のみに対応の場合は、ホスト１０は、Ｄ−の信号をプルアップする。なお、以下では、デバイス１３は、ＨＳに対応しているとする。
【０１５６】
次に、ホスト１０は、Ｄ＋信号線およびＤ−信号線を、ともに１０ｍｓ以上、ローレベル（ＳＥ０状態）とし、デバイス１３のバスをリセットする。その後、デバイス１３は、ＨＳ特有の信号（ＣＨＩＲＰと呼ばれる）を、コントローラ１１・１２を介してホスト１０に送信する。また、ホスト１０も、コントローラ１１・１２を介して、デバイス１３に対してＨＳ特有の信号送信を行う。
【０１５７】
これにより、ホストＳＭ３２およびデバイスＳＭ４２は、ホスト１０およびデバイス１３の通信モードがＨＳであることを確認する。その後、ホストＳＭ３２およびデバイスＳＭ４２は、ＳＮＳＭ３０を制御して、コントローラ１１・１２間のスピードネゴシエーション（後述）を行う。これにより、ホスト１０とデバイス１３との接続（バス）が確立される（完了する）。
【０１５８】
デバイス１３が本システムに接続された後、ホスト１０・デバイス１３間では、コントローラ１１・１２を介したデータ転送が実施される。以下に、本システムでの特徴的な動作である、ＳＥＴＵＰトランザクションについて説明する。
【０１５９】
このトランザクションでは、ホスト１０は、ホスト側コントローラ１１に対し、ＳＥＴＵＰパケットおよびＤＡＴＡパケットを含むＵＳＢ信号を送信する。ホスト側コントローラ１１では、この信号を、ホスト側コントローラ１１のＵＳＢ受信機２０によって受信する。
【０１６０】
これを受けて、ホストＳＭ３２が、ＣＲＣチェック回路３３を制御して、受信したＵＳＢ信号に含まれるＳＥＴＵＰパケットおよびＤＡＴＡパケットにパケットエラーがないか否かを判別させる。そして、パケットエラーがあると判断した場合、ホストＳＭ３２は、受信したパケットを破棄する。一方、パケットエラーのない場合、ホストＳＭ３２は、受信したＳＥＴＵＰパケットおよびＤＡＴＡパケットを、送信ＦＩＦＯ２１に保存する。
【０１６１】
その後、ホストＳＭ３２は、変調回路２２を制御して、送信ＦＩＦＯ２１に保存しているＳＥＴＵＰパケットおよびＤＡＴＡパケットを含む、光信号を生成させる（光変調させる）。そして、ホストＳＭ３２は、光送信機２３を制御して、生成させた光信号をデバイス側コントローラ１２に対して送信させる。
【０１６２】
ホスト側コントローラ１１から送信された光信号は、デバイス側コントローラ１２の光受信機２４によって受信される。これを受けてデバイスＳＭ４２は、復調回路２５を制御して、光信号内のＳＥＴＵＰパケットおよびＤＡＴＡを復調させて、受信ＦＩＦＯ２６に蓄積する。
【０１６３】
そして、受信したパケットの全体を復調して受信ＦＩＦＯ２６に蓄積した後、デバイスＳＭ４２は、エラー検出回路２８を制御して、ＳＥＴＵＰパケットおよびＤＡＴＡパケットに光エラーがあるか否かを判断させる。なお、デバイスＳＭ４２は、受信したパケットに光エラーがあると判断した場合、そのパケットを受信ＦＩＦＯ２６から削除（破棄）する。また、デバイスＳＭ４２は、ＣＲＣチェック回路３３を制御して、受信ＦＩＦＯ２６に蓄積したＳＥＴＵＰパケットおよびＤＡＴＡパケットにおけるパケットエラーの有無を判断する。そして、パケットエラーのない場合には、ＵＳＢ送信機２７を制御して、これらのパケットを含むＵＳＢ信号を、所定のタイミングでデバイス１３に送信する。
【０１６４】
ＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信したデバイス１３は、ＤＡＴＡパケットにおけるパケットエラーの有無を判断する。そして、誤りがないと判断した場合、デバイス１３は、デバイス側コントローラ１２にＡＣＫパケット（このパケットを含むＵＳＢ信号）を送信する。一方、誤りのある場合には、デバイス１３は何も送信しない。
【０１６５】
デバイス側コントローラ１２に送信されたＡＣＫパケットは、ＵＳＢ受信機２０によって受信される。これを受けて、デバイスＳＭ４２は、受信したパケットの内容（ＡＣＫパケットであること）を把握し、このパケットを送信ＦＩＦＯ２１に蓄積する。
【０１６６】
その後、デバイスＳＭ４２は、変調回路２２を制御して、送信ＦＩＦＯ２１に保存しているＡＣＫパケットを含む、光信号を生成させる（光変調させる）。
そして、デバイスＳＭ４２は、光送信機２３を制御して、生成させた光信号をホスト側コントローラ１１に対して送信させる。
【０１６７】
デバイス側コントローラ１２から送信された光信号は、ホスト側コントローラ１１の光受信機２４によって受信される。これを受けてホストＳＭ３２は、復調回路２５を制御して、光信号のパケットを復調させ、受信ＦＩＦＯ２６に蓄積させる。
そして、受信したパケットの全体を復調した後、ホストＳＭ３２は、エラー検出回路２８を制御して、復調して得られたパケットに光エラーがあるか否かを判断させ、光エラーのあるパケットを受信ＦＩＦＯ２６から破棄する。
【０１６８】
その後、ホストＳＭ３２は、受信ＦＩＦＯ２６に保存したパケットがＡＣＫパケットであることを認識した場合、このパケットをホスト１０に送信することを回避する。
【０１６９】
また、ホスト１０では、デバイス１３に向けてＳＥＴＵＰパケット・ＤＡＴＡパケットを送信したものの、最大ＴＡタイムを過ぎても、ＡＣＫパケットを受信できない。従って、ＳＥＴＵＰトランザクションが失敗であったと判断し、ＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送する。
【０１７０】
ホスト側コントローラ１１のホストＳＭ３２は、再送にかかるＳＥＴＵＰパケットおよびＤＡＴＡパケットをホスト１０から受信した場合、これらのパケットを送信ＦＩＦＯ２１に保存せずに破棄する。そして、受信ＦＩＦＯ２６に蓄積されていたＡＣＫパケットを、ホスト１０に向けて送信する。
【０１７１】
また、図２は、ＳＥＴＵＰトランザクションにおけるホストＳＭ３２の動作を示すフローチャートである。この図に示すように、ホストＳＭ３２は、ホスト１０からＳＥＴＵＰパケットを受信した場合（Ｓ１１）、そのパケットをデバイス側コントローラ１２に送信する（Ｓ１２）。なお、ホストＳＭ３２は、他のパケットを受信した場合には、ＳＥＴＵＰトランザクションではないため、ＵＳＢのルールに応じた別の処理を行う。
【０１７２】
その後、ホストＳＭ３２は、ＳＥＴＵＰパケットに続けて、ホスト１０からＤＡＴＡパケットを受信したか否かを判断する（Ｓ１３）。そして、他のパケットを受信した場合には、ホストＳＭ３２は、ＳＥＴＵＰトランザクションに誤りがあると判断し、処理をＳ１１に戻す。一方、Ｓ１３においてＤＡＴＡパケットを受信した場合、ホストＳＭ３２は、このパケットをデバイス側コントローラ１２に送信する（Ｓ１４）。
【０１７３】
その後、ホストＳＭ３２は、デバイス側コントローラ１２からのＡＣＫパケットの送信を待機する（Ｓ１５）。そして、待機時間が所定時間を超えた場合（タイマー２９を用いて判断する）、ホストＳＭ３２は、デバイス１３に対してＳＥＴＵＰパケット・ＤＡＴＡパケットを適切に送信できなかったと判断し、処理をＳ１１に戻す。
【０１７４】
一方、所定時間内にＡＣＫパケットを受信した場合、ホストＳＭ３２は、ホスト１０から、ＳＥＴＵＰパケットおよびＤＡＴＡパケットの再送を待機する（Ｓ１６）。そして、待機時間が所定時間を超えた場合（タイマー２９を用いて判断する）、ホストＳＭ３２は、ＳＥＴＵＰトランザクションに誤り（トラブル）が発生したと判断し、処理をＳ１１に戻す。
【０１７５】
また、ホストＳＭ３２は、所定時間内にＳＥＴＵＰパケットおよびＤＡＴＡパケットをホスト１０から受信した場合、受信ＦＩＦＯ２６に保存していたＡＣＫパケットをホスト１０に送信し（Ｓ１７）、処理を終了する。
【０１７６】
また、図３は、ＳＥＴＵＰトランザクションにおけるデバイスＳＭ４２の動作を示すフローチャートである。この図に示すように、デバイスＳＭ４２は、ホスト側コントローラ１１からＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信した場合（Ｓ１２）、これらのパケットをデバイス１３に送信する（Ｓ２２）。なお、デバイスＳＭ４２は、他のパケットを受信した場合には、ＳＥＴＵＰトランザクションではないため、ＵＳＢのルールに応じた別の処理を行う。
【０１７７】
その後、デバイスＳＭ４２は、タイマー２９をスタートさせるとともに、デバイス１３からのＡＣＫパケットの送信を待機する（Ｓ２３）。そして、待機時間が所定時間を超えた場合（タイマー２９を用いて判断する）、デバイスＳＭ４２は、デバイス１３に対してＳＥＴＵＰパケット・ＤＡＴＡパケットを適切に送信できなかった（デバイス側コントローラ１２・デバイス１３間での通信に不備があった）と判断し、処理をＳ２１に戻す（タイムアウト）。
【０１７８】
一方、所定時間内にＡＣＫパケットを受信できた場合、デバイスＳＭ４２は、このＡＣＫパケットをホスト側コントローラ１１に送信し（Ｓ２４）、処理を終了する。
【０１７９】
以上のように、ホスト側コントローラ１１のホストＳＭ３２は、デバイス側コントローラ１２からホスト１０に向けて送信されるＡＣＫパケットを受信したときに、このパケットを、自身の制御する受信ＦＩＦＯ２６に記憶する。その後、ホストＳＭ３２は、ホスト１０からＳＥＴＵＰパケットおよびＤＡＴＡパケットが再送されたときに、記憶していたＡＣＫパケットを、ホスト１０に送信するように設定されている。
【０１８０】
このように、ホスト側コントローラ１１を用いたＵＳＢシステムでは、ホスト１０がＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送した直後に、ＡＣＫパケットをホスト１０に受信させられる。従って、ホスト１０−デバイス１３間の通信に時間がかかり、デバイス側コントローラ１２から送信されたＡＣＫパケットをホスト１０に直接に受信させると最大ＴＡタイムを過ぎてしまうような場合でも、ＳＥＴＵＰトランザクションを完了させることが可能となる。
【０１８１】
なお、上記のような、ホスト１０−デバイス１３間の通信に時間のかかる場合とは、コントローラ１１・１２間の通信速度の遅い場合や、この間の通信経路の長い場合などである。従って、ホスト側コントローラ１１を用いれば、ホスト１０−デバイス１３間の通信経路の自由度を、著しく増大させられる。
【０１８２】
また、ホスト側コントローラ１１のホストＳＭ３２は、ホスト１０から送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側コントローラ１２に送信する際、ＤＡＴＡパケットにおけるエラーの有無を判断するように設定されている。そして、ホストＳＭ３２は、ＤＡＴＡパケットにエラーのある場合には、そのパケットの送信を回避している。
【０１８３】
これにより、デバイス側コントローラ１２に対してエラー（光エラー，パケットエラー）のあるパケットを送信してしまうことを回避できるため、無駄なパケット送信を防止できる。
【０１８４】
また、本システムでは、デバイスＳＭ４２は、ホスト側コントローラ１１から受信したＤＡＴＡパケットにエラー（光エラー，パケットエラー）のある場合には、そのＤＡＴＡパケットをデバイス１３に転送することを回避するようになっている。
これにより、デバイス１３に対してエラーのあるパケットを送信してしまうことを回避できるため、無駄なパケット送信を防止できる。
【０１８５】
上記のように、ホストＳＭ３２，デバイスＳＭ４２は、エラーのあるパケットをデバイス側に送信しないようになっている。従って、送信コスト（電力など）を抑えられるとともに、エラーのあるパケットをデバイス１３に送信することで生じる、デバイス１３の予期できない異常動作の発生を防止することが可能となる。
【０１８６】
また、ホストＳＭ３２，デバイスＳＭ４２は、受信したパケットにエラーのある場合、そのパケットを破棄するようになっている。
すなわち、ホストＳＭ３２，デバイスＳＭ４２は、受信したパケットを受信ＦＩＦＯ２６に保存するが、上記のようにエラーのあるパケットを破棄することで、受信ＦＩＦＯ２６の記憶領域を無駄に使用することを避けられる。
【０１８７】
次に、上記したスピードネゴシエーションについて説明する。このスピードネゴシエーションは、コントローラ１１・１２間における、光無線通信のデータ転送速度を決定するための処理である。図４は、この処理の例を示すタイミングチャートである。
【０１８８】
図５は、この処理におけるホスト側コントローラ１１のＳＮＳＭ３０の動作を示す説明図である。また、図６は、この処理におけるデバイス側コントローラ１２のＳＮＳＭ３０の動作を示す説明図である。
【０１８９】
ホスト側コントローラ１１のＳＮＳＭ３０は、Ｔ１２０１において、光送信機２３を制御して、所定の転送速度Ａで、ｋｅｅｐ＿ｓｐｅｅｄ信号の送信を開始し、タイマー２９をリスタートさせる（リセット後すぐにスタートさせる）。
なお、ｋｅｅｐ＿ｓｐｅｅｄ信号は、転送速度を決めるための送信コード（リクエスト信号）の１つであり、送信先（デバイス側コントローラ１２）に、現在の転送速度を維持することを求める信号である。
【０１９０】
一方、デバイス側コントローラ１２では、このｋｅｅｐ＿ｓｐｅｅｄ信号を受信した光受信機２４が、まず、シグナルディテクト信号をＳＮＳＭ３０に伝達する。これを受けて、ＳＮＳＭ３０が、タイマー２９をリスタートさせるとともに、光送信機２３を制御して、ホスト側コントローラ１１に対するｋｅｅｐ＿ｓｐｅｅｄ信号の送信を開始する。
また、ＳＮＳＭ３０は、復調回路２５，エラー検出回路２８を制御して、受信したｋｅｅｐ＿ｓｐｅｅｄ信号におけるエラーの有無を判断する。
【０１９１】
そして、図４に示すように、Ｔ１２０３においてホスト側コントローラ１１から送信されたｋｅｅｐ＿ｓｐｅｅｄ信号が、光無線通信路においてピット化けし、デバイス側コントローラが正常に受信できなかった場合、デバイス側コントローラ１２のＳＮＳＭ３０は、Ｔ１２０４において、ｋｅｅｐ＿ｓｐｅｅｄ信号に代えて、ｌｏｗｅｒ＿ｓｐｅｅｄ信号をホスト側コントローラ１１に送信する。
【０１９２】
このｌｏｗｅｒ＿ｓｐｅｅｄ信号は、転送速度を決めるためのリクエスト信号の１つであり、送信先（ホスト側コントローラ１１）に、転送速度を下げるよう求める信号である。ｌｏｗｅｒ＿ｓｐｅｅｄ信号を受信したデバイス側コントローラ１２では、ＳＮＳＭ３０が、現在の転送速度Ａではデバイス転送を正常に行えないとを認識する。そして、デバイス側コントローラ１２に対し、ｌｏｗｅｒ＿ｓｐｅｅｄ信号を送信する（送信コードをｌｏｗｅｒ＿ｓｐｅｅｄに切り替える）。
【０１９３】
デバイス側コントローラ１２のＳＮＳＭ３０は、ホスト側コントローラ１１からｌｏｗｅｒ＿ｓｐｅｅｄ信号を受信することで、自身の送信したｌｏｗｅｒ＿ｓｐｅｅｄ信号がホスト側コントローラ１１に認識されたと判断する。
【０１９４】
そして、所定時間Ｔａの経過後、コントローラ１１・１２のＳＮＳＭ３０は、その時点で送受信されている信号がｌｏｗｅｒ＿ｓｐｅｅｄ信号であるため、転送速度を、例えば半分（Ａ／２）に低下させる。すなわち、ホスト側コントローラ１１のＳＮＳＭ３０が、Ｔ１２０７において、転送速度Ａ／２で、ｋｅｅｐ＿ｓｐｅｅｄ信号の送信を開始するとともに、タイマー２９をリスタートさせる。
【０１９５】
一方、デバイス側コントローラ１２のＳＮＳＭ３０も、光受信機２４からのシグナルディテクト信号に応じて、ｋｅｅｐ＿ｓｐｅｅｄ信号の送信を開始するとともに、タイマー２９をリスタートさせる。
【０１９６】
そして、コントローラ１１・１２の双方でエラーが検出されずに所定時間Ｔａが経過すると、コントローラ１１・１２のＳＮＳＭ３０は、スピードネゴシエーションの終了信号（終了リクエスト）であるＥｎｄ＿Ｎｅｇｏ信号の送受信を開始する。そして、ＳＮＳＭ３０は、相手機器からのＥｎｄ＿Ｎｅｇｏ信号を受信したときに、スピードネゴシエーションを終了し、アクティブ状態へと遷移する。
【０１９７】
ここで、図５を用いて、ホスト側コントローラ１１におけるＳＮＳＭ３０の動作を説明する。
【０１９８】
ステートＳＴ０は、スピードネゴシエーションの開始ステートである。ここでは、ホスト側コントローラ１１のＳＮＳＭ３０は、送信コードをｋｅｅｐ＿ｓｐｅｅｄ信号とし、タイマー２９をリスタートした後、ステートＳＴ１に状態を遷移する。
【０１９９】
ステートＳＴｌは、スピードネゴシエーションを行うステートである。ホスト側コントローラ１１のＳＮＳＭ３０は、受信コードにエラーがあるか、相手機器（デバイス側コントローラ１２）からのｌｏｗｅｒ＿ｓｐｅｅｄ信号を受信した場合は、送信コードをｌｏｗｅｒ＿ｓｐｅｅｄに切り替える。
【０２００】
また、ホスト側コントローラ１１のＳＮＳＭ３０は、所定時間Ｔａの経過した後、送信コードがｌｏｗｅｒ＿ｓｐｅｅｄ信号であった場合は、ステートＳＴ０へ、また送信コードがｋｅｅｐ＿ｓｐｅｅｄであった場合はステートＳＴ２に状態を遷移する。
【０２０１】
ここで、ステートＳＴ０に遷移する場合は、転送速度を現在の転送速度に対して、例えば半分にする（転送速度の低下の幅（度合い）は、ユーザーの所望の値に設定可能である。また、この幅は、あらかじめＳＮＳＭ３０に記憶されている）。一方、ステートＳＴ２に遷移する場合は、送信コードをＥｎｄ＿Ｎｅｇｏ信号へと切り替える。このステートＳＴ２は、スピードネゴシエーションの終了を確認するステートである。相手機器（デバイス側コントローラ１２）からＥｎｄ＿Ｎｅｇｏ信号を受信すると、スピードネゴシエーションを終了し、アクティブ状態へと遷移する。
【０２０２】
次に、図６を用いて、デバイス側コントローラ１２におけるＳＮＳＭ３０の動作について説明する。ステートＳＴ０，ＳＴ１，ＳＴ２の各ステートにおける動作は、ホスト側コントローラ１１のＳＮＳＭ３０と同一である。
【０２０３】
ステートＳＴ０の前の状態であるステートＳＴ４は、ホスト側コントローラ１１からリクエスト信号を受信したか否かを判別するステートである。
光受信機２４（あるいは他の受信信号検出回路）からシグナルディテクト信号を受けた場合、ＳＮＳＭ３０は、ステートＳＴ０に状態を遷移する。
【０２０４】
なお、上記したｋｅｅｐ＿ｓｐｅｅｄ信号，ｌｏｗｅｒ＿ｓｐｅｅｄ信号，Ｅｎｄ＿Ｎｅｇｏ信号は、パケット（特定のフォーマットを持ったキャラクタ列）であっても、また、特定のキャラクタから構成されていてもよい。
【０２０５】
また、上記では、ホスト１０とデバイス１３との間における通信モード（速度）の確認後に、スピードネゴシエーションを行うとしている。しかしながら、スピードネゴシエーションについては、ホスト１０・デバイス１３間の通信開始前であれば、とのタイミングで行ってもよい。
【０２０６】
また、上記では、ホスト１０とホスト側コントローラ１１との間、および、デバイス側コントローラ１２とデバイス１３との間がＵＳＢケーブルで接続されている状態で、スピードネゴシエーションを行うとしている。しかしながら、これに限らず、スピードネゴシエーションは、コントローラ１１・１２間が通信可能な状態であれば、コントローラ１１・１２とホスト１０・デバイス１３とのＵＳＢケーブルによる接続前でも実施可能である。
【０２０７】
なお、本実施の形態では、ホストＳＭ３２が、デバイス側コントローラ１２から受信したＡＣＫパケットをホスト１０に送信することを回避し、さらに、ホスト１０からＳＥＴＵＰパケットおよびＤＡＴＡパケットの再送を受けたときに、ＡＣＫパケットをホスト１０に送信するとしている。
【０２０８】
しかしながら、ホストＳＭ３２は、デバイス側コントローラ１２からＡＣＫパケットを受信したときに、このＡＣＫパケットを最大ＴＡタイム内にホスト１０に転送可能か否かを判断するように設定されていてもよい。
【０２０９】
この場合、ホストＳＭ３２は、最大ＴＡタイム内にＡＣＫパケットを転送できないと判断した場合には、上記のように、ホスト１０に対するＡＣＫパケットの転送を回避してＳＥＴＵＰパケット・ＤＡＴＡパケットの再送を待つ。一方、最大ＴＡタイム内にＡＣＫパケットを転送できると判断した場合には、ホスト１０からのＳＥＴＵＰパケット・ＤＡＴＡパケットの再送を待たずに、ＡＣＫパケットをホスト１０に転送することとなる。
【０２１０】
また、ホストＳＭ３２は、デバイス側コントローラ１２からＡＣＫパケットを受信したときに、このＡＣＫパケットを、そのままホスト１０に転送するように設定されていてもよい。この場合、ＡＣＫパケットがホスト１０に受信されたとき、最大ＴＡタイムの経過前であれば、ＳＥＴＵＰトランザクションはそのまま終了する。一方、最大ＴＡタイムの経過後であれば、ホスト１０は、ＳＥＴＵＰパケット・ＤＡＴＡパケットを再送する。そして、ホストＳＭ３２が、この再送に応じて、受信ＦＩＦＯ２６に保持しているＡＣＫパケットをホスト１０に送信することとなる。
【０２１１】
また、ホストＳＭ３２は、上記のスピードネゴシエーションにおいて、コントローラ１１・１２間の光無線通信の速度を、ＵＳＢケーブルと同等の速度（４８０Ｍｂｐｓ）に設定できた場合、上記のようなＡＣＫパケットの転送回避を行わなくともよい。
【０２１２】
すなわち、このような場合には、最大ＴＡタイム内でＡＣＫパケットをホスト１０に転送できる可能性が高い。従って、ホストＳＭ３２は、デバイス側コントローラ１２から受信したＡＣＫパケットをそのままホスト１０に転送（リピート）しても、ＳＥＴＵＰトランザクションを完了させられる。しかしながら、もちろん、この場合でも、ホストＳＭ３２は、デバイス側コントローラ１２から受信したＡＣＫパケットをホスト１０に送信することを回避し、さらに、ホスト１０からＳＥＴＵＰパケットおよびＤＡＴＡパケットの再送を受けたときに、ＡＣＫパケットをホスト１０に送信してもよい。
【０２１３】
また、上記のようなスピードネゴシエーション後、ホストＳＭ３２，デバイスＳＭ４２の少なくとも一方が、エラー検出回路２８（あるいはＣＲＣチェック回路３３）を用いて、コントローラ１１・１２間でのパケット送受信におけるエラーレートを算出することが好ましい。ここで、エラーレートとは、エラーの発生回数を、送受信回数で割った値（エラー発生率）である。
【０２１４】
そして、ホストＳＭ３２，デバイスＳＭ４２は、このエラーレートが所定値以上となった場合に、ＳＮＳＭ３０を制御して、コントローラ１１・１２間の通信速度を低下させることが好ましい。これにより、通信速度の高すぎることに起因するエラーレートを低下させられる。
【０２１５】
なお、本実施の形態では、ホストＳＭ３２が、ＣＲＣチェック回路３３を制御して、ＵＳＢ信号に含まれるＳＥＴＵＰパケットおよびＤＡＴＡパケットに誤りがないか否かを判別させるとしている。
【０２１６】
しかしながら、これに限らず、ホストＳＭ３２は、ＣＲＣチェック回路３３に、ＤＡＴＡパケットの誤りだけを判別させるようにしてもよい。この場合、ＤＡＴＡパケットにパケットエラーのある場合に限り、ＳＥＴＵＰパケットおよびＤＡＴＡパケットを破棄することとなる。ＳＥＴＵＰパケットは、ＤＡＴＡパケットに比べて短いものであり、パケットエラーの生じる確率は非常に低い。従って、ＤＡＴＡパケットのパケットエラーを調べるだけでも、適切な通信を行える。
【０２１７】
また、本実施の形態では、デバイスＳＭ４２が、ホスト側コントローラ１１からＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信したときに、エラー検出回路２８を制御して光エラーの有無を判断した後、ＣＲＣチェック回路３３を制御して、パケットエラーの有無を判断するとしている。
【０２１８】
しかしながら、このときに、エラー検出回路２８による光エラーのチェックを省略してもよい。すなわち、通常、パケットを光変調する際にエラーの発生した場合、パケットは、ＵＳＢの規定に沿わないものとなる。従って、このようなエラーも、ＣＲＣチェック回路３３によって、パケットエラーとして捉えることが可能である。
また、デバイスＳＭ４２は、上記したホストＳＭ３２の場合と同様に、ＣＲＣチェック回路３３によるパケットエラーのチェックを、ＤＡＴＡパケットのみに行うようにしてもよい。
【０２１９】
また、本実施の形態では、ホスト側コントローラ１１のホストＳＭ３２が、ＣＲＣチェック回路３３を制御して、ホスト１０から送信されたＵＳＢ信号に含まれるＳＥＴＵＰパケットおよびＤＡＴＡパケットに誤りがないか否かを判別させた後、パケットをデバイス側コントローラ１２に送信するとしている。
【０２２０】
しかしながら、これに限らず、ホストＳＭ３２は、ホスト１０から送信されたＳＥＴＵＰパケットおよびＤＡＴＡパケットを、パケットエラーのチェックの前に、受信された部分から順次的に、デバイス側コントローラ１２に送信するように設定されていてもよい。
【０２２１】
また、この場合、ホストＳＭ３２は、エラー検出回路２８・ＣＲＣチェック回路３３を制御して、デバイス側コントローラ１２に対するパケットの送信中にパケットのエラー有無を判別させてもよい。そして、ホストＳＭ３２は、エラーを発見した場合、直ちに送信を中断することが好ましい。これにより、コントローラ１１・１２間での無駄なパケット転送を抑えられるので、低速通信路であるコントローラ１１・１２間の転送効率の悪化を抑制できる。
【０２２２】
また、ホスト１０から受信中のパケットを順次的にデバイス側コントローラ１２に送信する場合、ホストＳＭ３２は、パケットを完全に受信し終えたときに（既に一部を送信してしまっているときに）、ＣＲＣチェック回路３３を制御して、パケットエラーの有無を判断し、判断結果を、送信するパケットの末尾に添付するように設定されていてもよい。
【０２２３】
図７（ａ）は、通常のＤＡＴＡパケットを示す説明図であり、図７（ｂ）は、上記のような場合に、デバイス側コントローラ１２に対して送信されるＤＡＴＡパケット（低速用パケット）を示す説明図である。この図に示すように、この構成では、ホストＳＭ３２が、パケットエラーの有無に関する情報を、パケットの末尾（ＣＲＣ１６の後のフィールド）に添付するようになっている。すなわち、パケットエラーのない場合、ホストＳＭ３２は、図７（ｂ）に示すように、『ＣＲＣ＿ＯＫ』というフラグ（ノンエラーフラグ）を立てる（添付する）。一方、パケットエラーのある場合、ホストＳＭ３２は、ＤＡＴＡパケットの末尾に、『ＣＲＣ＿ＮＧ』というフラグ（エラーフラグ）を立てる。
【０２２４】
これにより、デバイス側コントローラ１２のデバイスＳＭ４２は、受信したパケットには、パケットエラーのあることを認識できる。さらに、デバイスＳＭ４２は、そのパケットエラーが、ホスト側コントローラ１１にパケットのある段階で既に生じていることも把握できる。
【０２２５】
また、本システムでは、デバイス側コントローラ１２のデバイスＳＭ４２が、ホスト側コントローラ１１から送信されたパケットにパケットエラーがあると判断した場合、ホスト側コントローラ１１に対して、パケットを再送するよう要求できるように設定されていることが好ましい。
【０２２６】
この構成では、このような再送要求を受けたホスト側コントローラ１１のホストＳＭ３２は、送信ＦＩＦＯ２１に保存しているパケットを、デバイス側コントローラ１２に再送することとなる。これにより、ホスト１０の再送を待つことなく、ＤＡＴＡパケットをデバイス側に送信できる。
【０２２７】
なお、この構成では、ホストＳＭ３２は、ホスト側コントローラ１１に送信するパケットに、図７（ｂ）を用いて説明したフラグ（ノンエラーフラグ，エラーフラグ）を立てることが好ましい。すなわち、この場合、デバイスＳＭ４２は、エラーフラグの立っているパケットに関しては、ホスト１０からホスト側コントローラ１１に送信された段階で既にパケットエラーが生じている、と判断できる。従って、デバイスＳＭ４２は、このようなパケットに関しては再送要求を行わず、ノンエラーフラグの立っているパケットだけに関し、再送要求を行うことが好ましい。これにより、無駄なパケット送信を抑制できる。
【０２２８】
また、図３に示した処理では、デバイスＳＭ４２は、所定時間内にデバイス１３からＡＣＫパケットを受信できなかった場合（Ｓ２３）、デバイス１３に対してＳＥＴＵＰパケット・ＤＡＴＡパケットを適切に送信できなかった（デバイス側コントローラ１２・デバイス１３間での通信に不備があった）と判断し、タイムアウトとして処理をＳ２１に戻すとしている。しかしながら、これに限らず、この場合、デバイスＳＭ４２は、デバイス１３にＳＥＴＵＰパケットおよびＤＡＴＡパケットを再送するようにしてもよい。
【０２２９】
この構成では、デバイスＳＭ４２は、ホスト側コントローラ１１からＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信して受信ＦＩＦＯ２６に蓄積したときに、これらのパケットの受信ＦＩＦＯ２６での位置（リードポインタ値）を記憶しておく（記憶する部位は、受信ＦＩＦＯ２６でも、図示しない他のメモリーでもよい）。
【０２３０】
そして、デバイスＳＭ４２は、ＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス１３に送信した後、所定時間内にデバイス１３からＡＣＫパケットを受信できなかった場合には、これらのパケットにおける受信ＦＩＦＯ２６での保存位置（リードポインタ値）に、受信ＦＩＦＯ２６のリードポインタ（図示せず）を合わせる。そして、デバイスＳＭ４２は、この位置からＳＥＴＵＰパケットおよびＤＡＴＡパケットを読み出して、デバイス１３に再送する。
【０２３１】
これにより、デバイス側コントローラ１２・デバイス１３間での通信に不備があった場合でも、ホスト１０，ホスト側コントローラ１１を動作させることなく、ＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス１３に再送することが可能となる。
【０２３２】
なお、上記では、受信ＦＩＦＯ２６のリードポインタを制御することにより、再送を実現している。しかしながら、これに限らず、デバイスＳＭ４２は、受信ＦＩＦＯ２６でのパケットの保存位置（開始アドレス）を、デバイス側コントローラ１２に備えられている他の記憶装置（ＲＡＭなど）に保持し、これを用いてパケットを読み出し、再送を実行してもよい。
【０２３３】
また、本実施の形態では、デバイスＳＭ４２は、ＣＲＣチェック回路３３によって、ホスト側コントローラ１１から受信したパケットにおけるパケットエラーの有無を判断し、エラーのないパケットのみをデバイス１３に送信するとしている。しかしながら、これに限らず、デバイスＳＭ４２は、このようなパケットエラーのチェックを行わずに、受信ＦＩＦＯ２６に保存した全てのパケットをデバイス１３に送信してもよい。この場合でも、エラーのあるパケットを受信したデバイス１３は、ＡＣＫパケットをデバイス側コントローラ１２に返信しないことになる。
【０２３４】
また、この構成において、上記したデバイス側コントローラ１２・デバイス１３間におけるパケットの再送を行ってもよい。この場合、デバイスＳＭ４２は、ＣＲＣチェック回路３３を用いて、受信ＦＩＦＯ２６から読み出したパケットに関し、再送前に、パケットエラーの有無を調べさせることが好ましい。そして、デバイスＳＭ４２は、パケットエラーのある場合には、パケットの再送を回避することが好ましい。
【０２３５】
また、本実施の形態では、デバイス側コントローラ１２のデバイスＳＭ４２が、ホスト側コントローラ１１から受信したパケットの全体を復調した後、デバイス１３に送信するとしている。これは、低速通信路（コントローラ１１・１２間；１００Ｍｂｐｓ）を送信されてくるパケットを、受信した部分からデバイス１３に高速（４８０Ｍｂｐｓ）で転送してしまうと、受信速度よりも送信速度が速いため、送信に抜けが生じてしまう（受信ＦＩＦＯ２６が空（ｅｍｐｔｙ）になってしまう）可能性のあることが一因である。
【０２３６】
そこで、デバイスＳＭ４２が、受信されるパケットのサイズに基づいて、『デバイス１３に対してパケット転送を高速で開始しても、送信に抜けの生じることのないだけの受信量；安定受信量』を算出することが好ましい。そして、受信パケットの受信量が安定受信量に達したときに、デバイス１３への転送を開始することが好ましい。
【０２３７】
なお、ＵＳＢ２.０においては、図８に示すように、各種の転送モード，転送スピードに関し、パケットの最大長が定められている。しかしながら、ＳＥＴＵＰトランザクションでデバイス側コントローラ１２に受信されるＳＥＴＵＰパケットについては、サイズがあらかじめ決められている。また、ＳＥＴＵＰパケットに続いて受信されるＤＡＴＡパケットについても、そのサイズは８バイトに決められている。従って、デバイスＳＭ４２は、ＳＥＴＵＰトランザクションについては、上記のような安定受信量を算出することが可能である。
【０２３８】
図９は、このような安定受信量を用いてデバイス１３にパケットを送信可能なデバイス側コントローラ１２の構成を示す説明図である。この図に示すように、このデバイス側コントローラ１２は、図１に示したデバイス側コントローラ１２の構成において、カウンター３４を備えた構成である。
【０２３９】
この構成では、デバイスＳＭ４２は、まず、ＳＥＴＵＰトランザクションに関する安定受信量を算出する。その後、ホスト側コントローラ１１から受信したパケット（特にＤＡＴＡパケット）を受信ＦＩＦＯ２６に蓄積する（書き込む）際に、蓄積したデータ量に応じてカウンター３４の値を増やす。そして、デバイスＳＭ４２は、カウンター３４が、上記の安定受信量に応じた値となった場合に、デバイス１３に対し、パケットの送信を開始する。
【０２４０】
従って、この構成では、ＳＥＴＵＰトランザクションにおいて、デバイスＳＭ４２は、ホスト側コントローラ１１からパケットの全体を受信するまで待機することなく、デバイス１３へのパケット転送を開始できる。これにより、ＳＥＴＵＰトランザクション全体の処理速度を速められる。
【０２４１】
また、上記したように、ＳＥＴＵＰトランザクションでは、ＤＡＴＡパケットのサイズは８バイトである。従って、安定受信量を低く設定できるので、他のトランザクションに比して、転送速度を速められる。なお、この場合、デバイスＳＭ４２は、ＤＡＴＡパケットをデバイス１３に送信している途中で、ＤＡＴＡパケットのエラーを発見した場合、ＤＡＴＡパケットの転送を中止することが好ましい。これにより、無駄なパケット送信を省ける。
【０２４２】
また、本実施の形態では、コントローラ１１・１２間の光無線通信におけるデータ転送速度を１００Ｍｂｐｓとしている。しかしながら、これに限らず、コントローラ１１・１２間の転送速度は、どのような値でもよい（ＵＳＢケーブルを用いた転送速度と同一でも、あるいはより速くてもよい）。
【０２４３】
コントローラ１１・１２間の転送速度が、ホスト１０・ホスト側コントローラ１１間およびデバイス側コントローラ１２・デバイス１３間の転送速度（ＵＳＢケーブルでの転送速度）以上の場合でも、ホスト１０からデバイス１３までの通信経路の長い場合（例えば、コントローラ１１・１２間の通信経路として、数百ｍの光ケーブルを用いるなど）には、最大ＴＡタイム内にＡＣＫパケットをホスト１０に転送できないこともある。
【０２４４】
この場合も、本システムのように、ホスト１０からのＳＥＴＵＰパケット・ＤＡＴＡパケットの再送に応じて、ホストＳＭ３２がＡＣＫパケットをホスト１０に転送することで、ＳＥＴＵＰトランザクションを正常に完了させられる。なお、ＵＳＢ規格では、ＵＳＢハブの段数（最大６段）のリピート時間とＵＳＢのケーブル長（最大５ｍ）によって、最大ＴＡタイムが定められている。
【０２４５】
また、コントローラ１１・１２間の転送速度が、ホスト１０・ホスト側コントローラ１１間の転送速度以上の場合には、ホストＳＭ３２は、ホスト１０から受信したパケット（特にＤＡＴＡパケット）を完全に受信した後、デバイス側コントローラ１２に対する転送を開始することが好ましい。これにより、デバイス側コントローラ１２へのパケットの送信中に、送信すべきデータが途切れる（送信に抜けが生じる）ことを防止できる。
【０２４６】
また、この場合、ホストＳＭ３２は、ホスト１０から受信されるＤＡＴＡパケットのサイズに基づいて、『ホスト側コントローラ１１に対してパケット転送を高速で開始しても、送信に抜けの生じることのないだけの受信量；安定受信量』を算出してもよい。
そして、受信パケットの受信量が安定受信量に達したときに、ホスト側コントローラ１１への転送を開始するように設定されていてもよい。
【０２４７】
また、本実施の形態では、コントローラ１１・１２間を、光無線通信によって接続するとしている。しかしながら、これに限らず、コントローラ１１・１２間を、光ケーブルで通信するようにしてもよい。なお、光ケーブルを用いた場合は、パケットの長距離伝送が可能となる。また、光無線通信（空間通信）を用いる場合には、ケーブルレスのため、利便性を向上させられる。
【０２４８】
また、コントローラ１１・１２間の通信方式としては、半二重通信と全二重通信とのいずれを採用してもよい。ここで、全二重通信とは、ホストからデバイスへの送信と、デバイスからホストへの送信とを、並行して実行できる通信方式である。全二重通信を選択すると、発光ダイオードやレーザーダイオードからなる光送信機２３を常に発光させておくこととなる。このため、パケットにプリアンブルを付加する必要がなく、通信路の通信効率（使用効率）を向上させられる。
【０２４９】
ここで、全二重通信で光送信機２３を常に発光させておく理由は、ホスト１０あるいはデバイス１３からＵＳＢ受信機２０に対して受信されるパケットを、直ちにリピートするためである。
【０２５０】
また、光送信機２３を常に発光させておくことにより、コントローラ１１・１２間の接続・切断を容易に行える。すなわち、半二重通信の場合、光受信機２４が一定時間以上光を受けない場合に、コントローラ１１・１２間の接続が切断されたと判断される。一方、全二重通信では、接続状態で常に光送信機２３を発光させ、相手先コントローラの光受信機２４に常に受光状態としておく。そして、接続を切断する際には、光送信機２３の発光を停止する。これにより、光受信機２４が光を受けなくなった段階で、接続が切れたと判断することが可能となる。これにより、半二重通信に比して、切断に要する時間を短縮できる。
【０２５１】
また、コントローラ１１・１２間を、光ではなく、通常の電波による無線通信で接続するようにしてもよい。この場合、変調回路２２，復調回路２５の変調・復調方式を、適切に設定することが好ましい。また、光受信機２４は、電波を受信する受信アンテナとなる。
【０２５２】
また、上記のプリアンブルは、パケットの受信側において、クロックデータリカバリ回路（図示せず）により、クロックの同期をとるために必要な信号である。通常は、“１０１０”パターンの連続が使用される。プリアンブルの時間は、ＤＡＴＡパケットを送信できない時間である。このため、プリアンブルにより、無駄な時間が生じる。全二重通信の場合、ホスト側コントローラおよびデバイス側コントローラが常に信号を送信しているため、パケットごとにクロック同期を取る必要がない。つまり、プリアンブルが必要ないといえる。このため、全二重通信では、転送効率を高められる。
【０２５３】
また、本実施の形態では、コントローラ１１・１２を、ホスト１０あるいはデバイス１３とＵＳＢケーブルで接続するとしている。しかしながら、これに限らず、ホスト側コントローラ１１を、ホスト１０に接続されたＵＳＢハブのダウンストリームのポートに接続するようにしてもよい。また、ホスト側コントローラ１１を、ホスト１０あるいはＵＳＢハブの一部として構成してもよい。また、デバイス側コントローラ１２を、ＵＳＢハブのアップストリームのポートとＵＳＢケーブルで接続してもよい。また、デバイスやＵＳＢハブの一部として構成してもよい。
【０２５４】
また、本システムでは、ホストＳＭ３２とデバイスＳＭ４２とは、実際には同様の部材であり、ホスト側コントローラ１１とデバイス側コントローラ１２とは、実質的に同一の構成である。従って、本システムは、１種類のコントローラをホスト１０とデバイス１３とにそれぞれ備えるだけで構築可能なシステムである。
【０２５５】
また、本実施の形態では、コントローラ１１・１２に、エラー検出回路２８，ＣＲＣチェック回路３３を備えるとしている。しかしながら、送信されたパケットのエラーを検出しない構成では、エラー検出回路２８・ＣＲＣチェック回路３３を備える必要はない。また、ホストＳＭ３２・デバイスＳＭ４２によって、エラーを検出するようにしてもよい。
【０２５６】
また、本実施の形態では、コントローラ１１・１２にタイマー２９を備えるとしている。しかしながら、これに限らず、ホストＳＭ３２・デバイスＳＭ４２がタイマー２９を用いない場合であれば、コントローラ１１・１２にタイマー２９を備える必要はない。
このような場合とは、例えば、図２に示したＳ１５，Ｓ１６において、パケットの受信に関するホストＳＭ３２の待機時間の上限を設定しない場合、また、図３に示したＳ２３において、ＡＣＫパケットの受信に関するデバイスＳＭ４２の待機時間の上限を設定しない場合（タイムアウトのない場合）、などである。
【０２５７】
また、本実施の形態では、コントローラ１１・１２にＳＮＳＭ３０を備えるとしている。しかしながら、これに限らず、上記したようなスピードネゴシエーションを行わず、コントローラ１１・１２間での通信速度を一定とする構成では、コントローラ１１・１２にＳＮＳＭ３０を備える必要はない。
【０２５８】
また、本実施の形態では、ホスト１０をパーソナルコンピューターであるとしている。しかしながら、これに限らず、ホスト１０としては、デバイス１３を使用可能で、ＵＳＢの親機となれる機器であれば、どのような機器でもよい。
【０２５９】
また、本実施の形態では、コントローラ１１・１２にＳＮＳＭ３０を備えるとしている。しかしながら、これに限らず、上記したようなスピードネゴシエーションを行わず、コントローラ１１・１２間での通信速度を一定とする構成では、コントローラ１１・１２にＳＮＳＭ３０を備える必要はない。
【０２６０】
また、本実施の形態では、デバイス側コントローラ１２のデバイスＳＭ４２が、ホスト１０とデバイス１３との接続が確立された後、ＳＯＦパケットをデバイス１３に送信するとしている。また、ホスト側コントローラ１１のホストＳＭ３２が、ホスト１０からデバイス１３に向けて送信されるＳＯＦパケットを受信した場合に、このパケットをデバイス側コントローラ１２に送信することを回避するとしている。
【０２６１】
しかしながら、これに限らず、本システムを、通常のＵＳＢシステムと同様に、ホスト１０から送信されたＳＯＦパケットを、ホスト側コントローラ１１のホストＳＭ３２がデバイス側コントローラ１２にリピートし、デバイス側コントローラ１２のデバイスＳＭ４２がホスト１０にリピートするように設定してもよい。
【０２６２】
すなわち、本システムは、ホスト１０・ホスト側コントローラ１１間、および、デバイス側コントローラ１２・デバイス１３間の通信を、ＵＳＢネイティブの最高速度であるハイスピードモード（ＨＳ；４８０Ｍｂｐｓ）で行う。そして、コントローラ１１・１２間を、これよりも遅い，１００Ｍｂｐｓの光通信（光無線，あるいは光ケーブルによる通信）によって行うように設定されている。
【０２６３】
ここで、コントローラ１１・１２間における光通信のデータ転送速度を４８０Ｍｂｐｓとする場合、例えば８Ｂ１０Ｂの変調方式を用いると、
４８０×１０／８＝６００Ｍｂｐｓ
の帯域を持った光送信機および光受信機（光トランシーバー）が必要である。そして、このような光送信機を得るためには、ＬＤ（レーザーダイオード）を用いる必要がある。
【０２６４】
一方、コントローラ１１・１２間の光通信におけるデータ転送速度を１００Ｍｂｐｓとする場合、光送信機２３を、ＬＥＤ（発光ダイオード）を用いて構成できる。そして、ＬＤとＬＥＤを比較すると、圧倒的にＬＥＤの方が安価である。従って、コントローラ１１・１２間の光通信の速度を遅くすることで、コントローラ１１・１２（光送信機２３）を低コストで構成できる。また、光通信を用いることで、ＵＳＢケーブルを用いることによる制限（ケーブル長など）を回避できる。
【０２６５】
また、コントローラ１１・１２間でのデータ通信を行う部材を光送信機２３，光受信機２４のみとし、そのためのポート（通信端子）を、光送信機２３，光受信機２４の光ポートのみにする（メタルポートを用いない）ことが好ましい。また、コントローラ１１・１２を、ホスト１０あるいはデバイス１３と一体化することも好ましい。
このように構成すれば、コントローラ１１・１２の必要とする帯域が、６００Ｍｂｐｓから１００Ｍｂｐｓへと著しく低くなる。これにより、安価な製造プロセスにより、コントローラ１１・１２を作成することが可能となる。
【０２６６】
なお、デバイス１３として、データ転送速度の遅いもの（例えばフラッシュメモリ；５０Ｍｂｐｓ程度）を用いる場合、トランザクションの完了に要する時間は、デバイス１３の転送速度に大きく依存する。従って、コントローラ１１・１２間のデータ転送速度については、デバイス１３の速度より速くすれば、トランザクションの完了時間に大きな影響を与えることはないといえる。
【０２６７】
従って、本発明のＵＳＢシステムを、ホストと、デバイスと、ホストに備えられ、ホストとデバイスとの間の通信を中継するホスト側コントローラと、デバイスに備えられ、ホストとデバイスとの間の通信を中継するデバイス側コントローラとを含むＵＳＢシステムにおいて、コントローラ間のデータ転送を光通信で行うように設定されており、さらに、この光通信のデータ転送速度が、ＵＳＢ２．０におけるハイスピードモードでのデータ転送速度より遅くなっていることを特徴とするＵＳＢシステム、と表現することもできる。      
【０２６８】
また、コントローラ１１・１２間を、光を用いない他の通信経路（電波による無線通信など）としても、転送速度を遅くすることで、コントローラ１１・１２のコストを削減できる。従って、本発明のＵＳＢシステムを、ホストと、デバイスと、ホストに備えられ、ホストとデバイスとの間の通信を中継するホスト側コントローラと、デバイスに備えられ、ホストとデバイスとの間の通信を中継するデバイス側コントローラとを含むＵＳＢシステムにおいて、コントローラ間のデータ転送速度が、ＵＳＢ２．０におけるハイスピードモードでのデータ転送速度より遅くなっていることを特徴とするＵＳＢシステム、と表現することもできる。
【０２６９】
また、上記実施の形態の説明においては、ＵＳＢ２．０規格を想定しているが、ＵＳＢ２．０規格ではホスト側とデバイス側との機能がそれぞれ固定している。すなわち、ＵＳＢ２．０規格の下でのデータのやり取りは、ＰＣをＵＳＢホストとして、該ＰＣにＵＳＢデバイスとなるデバイス（デジタルカメラやプリンタ等）を接続して行っていた。
【０２７０】
しかしながら、近年、ＵＳＢ−ＯＴＧ（ＵＳＢ−Ｏｎ−Ｔｈｅ−Ｇｏ）という規格が制定され、通常ＵＳＢシステムで必要であったＰＣ（ＵＳＢホスト）が必要でなくなっている。すなわち、ＵＳＢ−ＯＴＧ規格では、ＰＣ（ＵＳＢホスト）なしにＵＳＢ機器同士でデータの送受信が可能であるため、利便性の向上が図られている。ＵＳＢ−ＯＴＧにおいては、繋がれたケーブルのコネクタの種類により、ＵＳＢホストとしても、ＵＳＢデバイスとしても動作可能となる。
【０２７１】
ＵＳＢ−ＯＴＧでは、ＵＳＢ２．０と同様に、ＬＳ（１．５Ｍｂｐｓ），ＦＳ（１２Ｍｂｐｓ），ＨＳ（４８０Ｍｂｐｓ）の転送速度をサポートしている。また、ＵＳＢ−ＯＴＧ対応機器は、ＵＳＢホストとしても、またＵＳＢデバイスとしても動作可能である。また、ＵＳＢ−ＯＴＧ規格においては、ｍｉｎｉＡＢという新しいコネクタの種類が追加された。このｍｉｎｉＡＢは、ｍｉｎｉＡ，ｍｉｎｉＢの両方のプラグを持ったケーブルを接続することが可能であり、接続されるケーブルのプラグの形状により、ｍｉｎｉＡが接続された場合は、ＵＳＢホストとして動作し、またｍｉｎｉＢが接続された場合は、ＵＳＢデバイスとして動作する。また、ＨＮＰ（Host Negotiation Protocol）という新しいプロトコルにより、ケーブルを接続した状態で、動的にホストとデバイスの機能を交代するといった機構を追加されている。つまり、ＵＳＢ−ＯＴＧでは、接続される機器がＵＳＢホストとなるかＵＳＢデバイスとなるかは、ケーブルのコネクタの種類、もしくはＵＳＢ−ＯＴＧで定められたＨＮＰ（Host Negotiation Protocol）で決定する。
【０２７２】
すなわち、本発明をこのＵＳＢ−ＯＴＧに応用する場合、ＵＳＢホストおよびＵＳＢデバイスはその役割が固定されているものではなく、伝送されるデータの方向によってその役割が入れ替わることもありうる。同様に、ホスト側コントローラおよびデバイス側コントローラもその役割が固定されているものではなく、伝送されるデータの方向によってその役割が入れ替わることも可能であるため、例えば図１４に示すとおり、一つの通信コントローラ１４がホスト側コントローラ１１とファンクション側コントローラ１２との両方の機能を持っていることが好ましい。このためには、各コントローラのステートマシンにおいて、ホスト側コントローラおよびデバイス側コントローラの両方の機能として動作可能なプログラムが組み込まれていれば良い。
【０２７３】
また、本実施の形態では、デバイス側コントローラ１２における全ての処理を、デバイスＳＭ４２の制御により行うとしている。しかしながら、これに限らず、これらの処理を行うためのプログラムを記録媒体に記録し、このプログラムを読み出すことのできる情報処理装置（デバイス１３の一部でもよい）を、デバイスＳＭ４２に代えて用いるようにしてもよい。
【０２７４】
また、同様に、ホスト側コントローラ１１における全ての処理をホストＳＭ３２によって行うとしているが、これらの処理を行うためのプログラムを記録媒体に記録し、このプログラムを読み出すことのできる情報処理装置（ホスト１０の一部でもよい）を、ホストＳＭ３２に代えて用いるようにしてもよい。
【０２７５】
この構成では、情報処理装置の演算装置（ＣＰＵやＭＰＵ）が、記録媒体に記録されているプログラムを読み出して処理を実行する。従って、このプログラム自体が処理を実現するといえる。
【０２７６】
ここで、上記の情報処理装置としては、一般的なコンピューター（ワークステーションやパソコン）の他に、コンピューターに装着される、機能拡張ボードや機能拡張ユニットを用いることができる。
【０２７７】
また、上記のプログラムとは、処理を実現するソフトウェアのプログラムコード（実行形式プログラム，中間コードプログラム，ソースプログラム等）のことである。このプログラムは、単体で使用されるものでも、他のプログラム（ＯＳ等）と組み合わせて用いられるものでもよい。また、このプログラムは、記録媒体から読み出された後、装置内のメモリー（ＲＡＭ等）にいったん記憶され、その後再び読み出されて実行されるようなものでもよい。
【０２７８】
また、プログラムを記録させる記録媒体は、情報処理装置と容易に分離できるものでもよいし、装置に固定（装着）されるものでもよい。さらに、外部記憶機器として装置に接続するものでもよい。
【０２７９】
このような記録媒体としては、ビデオテープやカセットテープ等の磁気テープ、フロッピー（登録商標）ディスクやハードディスク等の磁気ディスク、ＣＤ−ＲＯＭ，ＭＯ，ＭＤ，ＤＶＤ，ＣＤ−Ｒ等の光ディスク（光磁気ディスク）、ＩＣカード，光カード等のメモリカード、マスクＲＯＭ，ＥＰＲＯＭ，ＥＥＰＲＯＭ，フラッシュＲＯＭ等の半導体メモリーなどを適用できる。また、ネットワーク（イントラネット・インターネット等）を介して情報処理装置と接続されている記録媒体を用いてもよい。この場合、情報処理装置は、ネットワークを介するダウンロードによりプログラムを取得する。すなわち、上記のプログラムを、ネットワーク（有線回線あるいは無線回線に接続されたもの）等の伝送媒体（流動的にプログラムを保持する媒体）を介して取得するようにしてもよい。なお、ダウンロードを行うためのプログラムは、装置内（あるいは送信側装置・受信側装置内）にあらかじめ記憶されていることが好ましい。
【０２８０】
また、本発明は、ＵＳＢ伝送におけるＳＥＴＵＰトランザクションにおいて、ＵＳＢ２．０のネイティブ速度と比べて転送速度が低い通信路を用いた場合（従来の方法では、ＵＳＢの時間的制約により正常に終了できないような場合）に、ＵＳＢ２．０のＳＥＴＵＰトランザクションによるデータ転送を問題なく行う技術であるといえる。従って、本発明の技術を、ホスト側コントローラがＵＳＢホストからＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信した時点でデバイス側コントローラからＡＣＫパケットを受信していなければ、その後でデバイス側コントローラから送信されてくるＡＣＫパケットを記憶手段（ＦＩＦＯ）に格納して、ＡＣＫパケットを受信した後、再度ＵＳＢホストからＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信すると、記憶手段に格納しているＡＣＫパケットをＵＳＢホストに送信するものである、と表現することもできる。
【０２８１】
従来のＵＳＢ伝送におけるＳＥＴＵＰトランザクションでは、ＵＳＢホストからのＳＥＴＵＰパケットおよびＤＡＴＡパケットの送信後、所定の制約時間（最大ＴＡタイム）以内にＵＳＢデバイスからの返答パケット（ＡＣＫパケット）をＵＳＢホストにて受信する必要があり、ホスト−デバイス間の通信路における通信速度がＵＳＢのネイティブ速度と比べて低い場合、上記制約時間以内に返答パケットを受け取れず、ＳＥＴＵＰトランザクションが正常に終了しないという問題があった。
【０２８２】
また、従来では、ホスト側コントローラは、ＳＥＴＵＰパケットを受信するたびに、ＵＳＢデバイスにこれを転送し返答パケットの受信を待って処理を行っているため、ホスト−デバイス間の通信速度の問題によって上記制約時間以内に処理が終了できない場合は、ＵＳＢホストがＳＥＴＵＰパケットの送信を繰り返し行っても、ＳＥＴＵＰトランザクションを正常に終了できなかった。
【０２８３】
これに対し、上記の構成では、ホスト側コントローラは、最初に送信したＳＥＴＵＰパケットに対する返答としてのＡＣＫパケットを記憶手段にて格納し、ＵＳＢホストからＳＥＴＵＰパケットが再送されてきた時に、記憶手段にて格納されているＡＣＫパケットをＵＳＢホストに送信することで、ＴＡタイム（ターンアラウンドタイム）を意識することなく、ＳＥＴＵＰトランザクションを正常に行うことが可能となる。
【０２８４】
また、本発明は、ＵＳＢ規格におけるＵＳＢ信号の伝送方法および伝送装置に関するものであるともいえる。また、ＵＳＢでは、接続形態を維持するために、最下層のプロトコルは時分割で通信し、ホストがスケジューリングを行うといえる。また、ＵＳＢ上のデータ通信は、トランザクションと呼ばれる単位で行われる。このトランザクションは、トークンパケット、データパケット、そしてハンドシェイクパケットと呼ばれるパケットで構成されている。ホストがトランザクション開始時に発行するトークンパケットで必ず始まり、トークンパケットに含まれるアドレスおよびエンドポイントにより、対応するデバイスが応答する。
【０２８５】
エンドポイントとは、転送データを格納するためのＦＩＦＯバッファのことであり、ＵＳＢホストとＵＳＢデバイスのデータのやりとりは、かならずエンドポイントを介して実行される。ＵＳＢデバイスは、最大１６個のエンドポイントを持つことができ、複数のエンドポイントを認識するために、エンドポイントには番号がつけられる。ＵＳＢホストはデータ転送の際にＵＳＢデバイスのＵＳＢアドレスとエンドポイントによりアクセスを行う。エンドポイントの中で０番のものは、エンドポイント０と呼ばれ、ＵＳＢデバイスに必ず１つ存在しなければならない。このエンドポイント０は、コントロール転送時にＳＥＴＵＰパケットによって行われる初期化時に用いられる。また、図５において、デバイスの送信開始がＴ４０３であるのは、デバイスに対しては、ＵＳＢネイティブの４８０Ｍｂｐｓで送信する必要があるためであるといえる。
【０２８６】
また、本発明においては、ＵＳＢホスト側に接続されるホスト側コントローラとＵＳＢデバイス側に接続されるデバイス側コントローラから構成されてもよい。ホスト側コントローラは、ＵＳＢホストからの信号を受信してＵＳＢデバイスに送信し、デバイス側コントローラからの信号をＵＳＢホストに向かって送信するが、ＵＳＢホストとＵＳＢケーブルで接続する以外にＵＳＢハブのダウンストリームのポートとＵＳＢケーブルで接続されても構わない。また、ＵＳＢホストやＵＳＢハブの一部として、構成されても構わない。デバイス側コントローラは、ホスト側コントローラからの信号をＵＳＢデバイスに送信し、ＵＳＢデバイスからの信号をホスト側コントローラに向かって送信するが、ＵＳＢデバイスとＵＳＢケーブルで接続する以外にＵＳＢハブのアップストリームのポートとＵＳＢケーブルで接続されても構わない。また、ＵＳＢデバイスやＵＳＢハブの一部として構成されも構わない。
【０２８７】
また、送信ＦＩＦＯ２１は、ホスト側コントローラとデバイス側コントローラ間の通信路がＵＳＢの通信路と比べて同一もしくは低速である場合、前記同一または低速の通信路にパケットをリピートする際のタイミング調整を行ってもよい。また、本システムでは、ホストＳＭ３２は、ＩＮトランザクション、ＯＵＴトランザクション、ＳＥＴＵＰトランザクションの各トランザクションにおいて、予め定められたルールにより、ＵＳＢホストおよびデバイス側コントローラとパケットのやりとりを行う。
【０２８８】
また、本システムでは、ホストＳＭ３２は、ホスト１０から受信したＳＥＴＵＰパケットおよびＤＡＴＡパケットをデバイス側コントローラ１２に送信したときには、デバイス側コントローラ１２から、ＡＣＫパケットを受信していない。このため、ホスト１０に何も返さない。こうすることで、ホスト１０に対しては、デバイス１３がＳＥＴＵＰパケットおよびＤＡＴＡパケットを正常に受信することができなかったと認識させることが可能となり、ＳＥＴＵＰトランザクションの終了を行わせないことができるといえる。
【０２８９】
また、デバイス側コントローラ１２においては、ＯＵＴパケットおよびＤＡＴＡパケットを受信した際に、ホスト側コントローラからＤＡＴＡパケットを完全に受信していた場合のみ、ＵＳＢデバイスに対してＤＡＴＡパケットを送信する。これは、ＤＡＴＡパケットのパケットフォーマット中にパケットの長さを意味するフィールドが存在しないことが原因であり、低速通信路からの受信データをＵＳＢの高速通信路にリピートする際にＤＡＴＡの抜けなくリピートを確実に行うためである。ＵＳＢ２.０においては、図８に示すように各転送モードにおいて、パケットの最大長が定められている。しかし、ＳＥＴＵＰトランザクションにおけるＳＥＴＵＰパケットの直後のＤＡＴＡパケットの長さが８バイトと定められており、パケットの解析により、ＳＥＴＵＰパケットの直後のＤＡＴＡパケットに関しては、ＤＡＴＡパケットの受信終了を待たずして、ＵＳＢデバイスへとＤＡＴＡパケットの送信開始を行うことが可能であると考えられる。
【０２９０】
また、図９に示したカウンター３４は、ホスト側コントローラ１１から受信したＤＡＴＡパケットがデバイス側コントローラ１２の受信ＦＩＦＯ２６に書き込まれる際に、書き込まれたＤＡＴＡの分だけ値が増えていくカウンターであるといえる。カウンター３４の値が、図８中で示されているアイソクロナス転送時の最大パケット長の３０７２バイトに相当する値まで達していなくても、ＵＳＢ２.０の通信路に送信開始したとしても、受信ＦＩＦＯ２６がＥＭＰＴＹになることのない値以上であるならば、ＤＡＴＡパケットの受信終了を待たずにＵＳＢ通信路に対して送信しても構わない。上記のようなカウンター３４の値を計算し、カウンター３４の値がその値以上であるならば、ＤＡＴＡパケットの受信終了を待たずに送信開始することで、ＤＡＴＡパケットの送信タイミングを早くすることが可能となり、全体としての転送速度の向上を図ることが可能となる。また、前述のとおり、ＳＥＴＵＰパケットの直後のＤＡＴＡパケットは８バイトと固定であるため、ＳＥＴＵＰパケット直後のＤＡＴＡパケットに関しては、上記カウンター３４の設定値を低くすることが可能となり、より全体としての転送速度の向上を図ることが可能となるといえる。
【０２９１】
また、図７（ａ）は、ＵＳＢデータパケットのパケットフォーマットであり、図７（ｂ）は、低速通信路用に変換されたパケットフォーマットであり、ホスト側コントローラがＤＡＴＡパケットを受信した際に、デバイス側コントローラに向けて送信するパケットフォーマットであるといえる。また、本システムでは、図７（ｂ）に示すように、ＵＳＢパケットのＣＲＣ１６の後に、ＣＲＣ_ＯＫというフィールドが設けてある。デバイス側コントローラが保有しているＤＡＴＡパケットに誤りがない場合は、上記ＣＲＣ_ＯＫのフィールドにその旨を示す値を入れ、また保有しているＤＡＴＡパケットに誤りがある場合は、その旨を同じく入れることで、ホスト側コントローラの保有しているＤＡＴＡパケットが再送できるパケットかどうかという情報をデバイス側コントローラに通知することが可能となり、デバイス側コントローラにおいては、上記ＣＲＣ_ＯＫフィールドを監視することにより、仮に受信ＤＡＴＡパケットに誤りがあると判断された場合に、ホスト側コントローラに対して、再送要求を行うかどうかの制御を行うことが可能となるといえる。
【０２９２】
また、デバイス側コントローラ１２のＣＲＣチェック回路３３は、ホスト側コントローラ１１から受信したＤＡＴＡパケット中のＣＲＣ１６を計算し、受信ＤＡＴＡパケットに誤りがあるかどうかを判別することが可能である。ＣＲＣチェック回路３３により、誤りがあると判断されたＤＡＴＡパケットは破棄し、ＵＳＢパケットとして、送信しないことで、送信にかかる電力を低減するとともに、ＵＳＢデバイスが前記誤りのあるパケットを受信することで生じる予期せぬ異常動作の抑制を行うことが可能となる。また、ホスト側コントローラ１１のＣＲＣチェック回路３３は、ホスト１０から受信したＤＡＴＡパケット中のＣＲＣ１６を計算し、受信ＤＡＴＡパケットに誤りがないかどうかを判別することが可能である。誤りがあると判断された場合の低速通信路へのＤＡＴＡパケットのリピートは、無駄なものである。よって、誤りがあると判断された場合は、リピートの途中でもパケットの送信をやめることで、低速通信路の転送効率の悪化を抑制することが可能となる。
【０２９３】
また、デバイス側コントローラ１２を、以下のように設定してもよい。すなわち、デバイスＳＭ４２は、ホスト側コントローラ１１からＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信すると、ＳＥＴＵＰパケットおよびＤＡＴＡパケットを受信ＦＩＦＯ２６に書き込む。この受信ＦＩＦＯ２６は、ＳＥＴＵＰパケットおよびＤＡＴＡパケット送信時に、あらかじめリードポインタの値を保持しておく。デバイスＳＭ４２は、ＳＥＴＵＰパケットおよびＤＡＴＡパケットをＵＳＢデバイスに送信後、あらかじめ定められた一定時間の間にＡＣＫパケットを受信しない場合は、デバイス１３とデバイス側コントローラ１２との間の通信路において、データ誤りが発生したものと判断し、前述のリードポインタの値にリードポインタを設定し、予め定められた一定時間経過後、再び同じＳＥＴＵＰパケットおよびＤＡＴＡパケットを送信する。この場合、受信ＦＩＦＯ２６のリードポインタの制御により、再送を実現しているが、ＲＡＭなどで開始アドレスを保持することにより、再送を実現しても問題ない。また、ＣＲＣチェック回路３３により、受信ＤＡＴＡパケットが正しいかどうかを判別することが可能であるため、受信ＤＡＴＡパケットが正しいと判別される場合のみ、上記再送処理を行うといった制御を行うことが可能となる。
【０２９４】
また、本実施形態に示した方法により、ＵＳＢのネイティブの速度よりも遅い通信速度がＵＳＢホストとＵＳＢデバイスの間に存在したとしても、正常にＳＥＴＵＰトランザクションを行うことが可能となるといえる。また、ＦＩＦＯ内のデータ量の監視により、適切なＤＡＴＡパケットの送信タイミングを制御することが可能となり、同一速度または低速の通信路の使用効率を向上させることが可能となる。また、ホスト側コントローラ、デバイス側コントローラ内にＣＲＣチェック回路を設けることにより、エラー検出が可能となり、再送処理などにより、より安定度の高いデータ通信を行うことが可能となる。
【０２９５】
また、スピードネゴシエーション回路を設けることにより、最も適した転送速度において、データ通信が可能となる。また、全二重通信を行うことにより、通信路の使用効率を向上させることが可能となる。また、低速通信路として、光ファイバーを用いることにより、同一または低速の通信路の距離を長くとることが可能となり、応用範囲が広がる。また、低速通信路として、電波を用いた無線を用いることにより、コネクタ劣化を防ぐことが可能となり、またケーブルレスとなるため、使い勝手が良くなる。また、低速通信路として、光を用いた空間伝送を用いることにより、コネクタ劣化を防ぐことが可能となり、高速な空間伝送を行うことが可能となる。
【０２９６】
また、本発明の目的を、ＵＳＢ２.０のネイティブ速度と比べて転送速度が低い通信路（例えば１００Ｍｂｐｓの光通信路）を用いた場合でも、問題なくＵＳＢ２.０のＳＥＴＵＰトランザクションによるデータ転送を行うことにあるともいえる。このような目的を達成するための本発明の構成を、以下の第１〜１８送受信回路および第１送受信方法として表現することもできる。
【０２９７】
すなわち、第１送受信回路は、ＵＳＢ規格に定められた転送速度と同一もしくはそれ以下の転送速度で転送可能なインタフェースを持った送受信回路であって、ＵＳＢホストもしくはＵＳＢハブのダウンストリーム側のポートに接続されるか、ＵＳＢホストもしくはＵＳＢハブの一部として構成されるホスト側コントローラと、ＵＳＢデバイスもしくはＵＳＢハブのアップストリーム側のポートに接続されるか、ＵＳＢデバイスもしくはＵＳＢハブの一部として構成されるデバイス側コントローラによって構成され、両コントローラは、ＦＩＦＯ、ステートマシンを有し、ホスト側コントローラにおいては、ＳＥＴＵＰパケットを受信したら直ちにデバイス側コントローラにＳＥＴＵＰパケットをリピートし、ＤＡＴＡパケットを受信したら直ちにデバイス側コントローラにＤＡＴＡパケットをリピートし、デバイス側コントローラから、ＡＣＫパケットを受信していたら、ＵＳＢホストにＡＣＫパケットを送信することを特徴とし、デバイス側コントローラにおいては、ホスト側コントローラから送られてきたＳＥＴＵＰパケットおよびＤＡＴＡパケットをＵＳＢデバイスにリピートし、ＵＳＢデバイスから受信したパケットは、ホスト側コントローラにリピートすることを特徴とする。こうすることで、ＵＳＢホストとＵＳＢデバイスの間にＵＳＢ２.０規格よりも遅い転送速度の通信路を挟んだとしても、ターンアラウンドタイムを意識することなく、ＳＥＴＵＰトランザクションを正常に行うことが可能となる。
【０２９８】
また、第２送受信回路は、前述の第１送受信回路であって、デバイス側コントローラにおいて、ホスト側コントローラからの受信ＦＩＦＯの受信データ量が予め定められた値よりも多ければ、データ受信完了を待たずにＵＳＢデバイスにＤＡＴＡパケットを送信し始めることを特徴とする。こうすることで、ＤＡＴＡパケットの受信完了までの待ち時間を減らすことが可能となり、バスの転送効率を上げることが可能となる。また、第３送受信回路は、前述の第１送受信回路であって、デバイス側コントローラにおいて、ホスト側コントローラから受信したパケットが誤り検出符号の解析により、誤っていると判断される場合、パケットを破棄することを特徴とする。こうすることで、デバイス側コントローラは、ＵＳＢデバイスに対して、誤ったパケットの送信を抑制することが可能となり、低消費電力につながるとともに、予期せぬＵＳＢデバイスの異常動作を低減することが可能となる。
【０２９９】
また、第４送受信回路は、前述の第１送受信回路であって、ホスト側コントローラにおいて、ＵＳＢホストから受信したパケットが誤り検出符号の解析により、誤っていると判断される場合、直ちにデバイス側コントローラへのパケットの送信をやめることを特徴とする。こうすることで、誤ったパケットの送受信によるバスの低効率化を抑制することが可能となる。また、第５送受信回路は、前述の第１送受信回路であって、デバイス側コントローラにおいて、ＵＳＢデバイスに送信したＤＡＴＡパケットに対してＡＣＫパケットが返ってこなかった場合、予め定められた一定時間経過後、再びＳＥＴＵＰパケットおよびＤＡＴＡパケットをＵＳＢデバイスに再送することを特徴とする。こうすることで、ＵＳＢデバイスとデバイス側コントローラ間の通信路におけるパケットエラーに対する処理時間の短縮が可能となる。
【０３００】
また、第６送受信回路は、前述の第５送受信回路であって、特に前記ＤＡＴＡパケットに誤りがない場合のみ、ＳＥＴＵＰパケットおよびＤＡＴＡパケットの再送を行うことを特徴とする。こうすることで、誤ったパケットをＵＳＢホストに対して再送してしまうことによるバスの使用効率の低下を抑制することが可能となる。また、第７送受信回路は、前述の第１送受信回路であって、デバイス側コントローラにおいて、ホスト側コントローラから受信したＤＡＴＡパケットが誤っていると判断される場合、ホスト側コントローラに再送要求をすることを特徴とする。こうすることで、ホスト側コントローラとデバイス側コントローラ間の通信路において、パケットにエラーが発生した場合に、ホスト側コントローラに対して、その旨を通知することが可能となる。
【０３０１】
また、第８送受信回路は、前述の第７送受信回路であって、ホスト側コントローラにおいて、前記再送要求を受信した場合、ＤＡＴＡパケットを再送することを特徴とする。こうすることで、ホスト側コントローラとデバイス側コントローラ間の通信路において発生したパケットエラーに対する再送処理を行うことが可能となる。また、第９送受信回路は、前述の第７送受信回路であって、前記再送処理は、誤りのないＤＡＴＡパケットを保有している場合のみであることを特徴とする。
【０３０２】
こうすることで、ＵＳＢホストとホスト側コントローラ間で発生したエラーパケットについては、再送処理を行わないことになり、通信路の使用効率の低下を軽減することが可能となる。また、第１０送受信回路は、前述の第７送受信回路であって、前記同一または低速通信路のパケットフォーマット中にデバイス側コントローラが保有しているパケットは誤りがないことを示すフラグを設けることを特徴とする。こうすることで、デバイス側コントローラはホスト側コントローラに対して、誤りのないデータを保有していることを通知することが可能となる。
【０３０３】
また、第１１送受信回路は、前述の第１０送受信回路であって、デバイス側コントローラがホスト側コントローラから受信したパケットが誤っていると判断される場合、前記フラグにより、ホスト側コントローラが誤りのないＤＡＴＡパケットを保有していることが確認された場合のみ再送要求をすることを特徴とする。こうすることで、誤りのあるパケットの転送による通信路の使用効率の低下を抑制することが可能となる。
【０３０４】
また、第１２送受信回路は、前述の第１送受信回路であって、複数の転送速度が可能な送受信回路およびトランシーバを有し、相手ノードとのスピードネゴシエーションを行うことを特徴とする。こうすることで、複数の転送速度で転送が可能なホスト側コントローラとデバイス側コントローラにおいて、同一の転送速度でパケット転送が可能となる。また、第１３送受信回路は、前述の第１２送受信回路であって、前記スピードネゴシエーションにより、予め定められた転送速度以上で通信が可能であると判断される場合は、前記ステートマシンによるパケットの制御およびＵＳＢホストおよびデバイスへのパケット送信タイミングを行わずに、変復調のみを行ってパケットのリピートを行うことを特徴とする。こうすることで、通信路の転送速度が前述の最大ターンアラウンドを満足する程、十分であると判断される場合は、データ転送速度の低下をおこすことなく、ＵＳＢ２.０のデータ転送を行うことが可能となる。
【０３０５】
また、第１４送受信回路は、前述の第１２送受信回路であって、前記同一または低速の通信路のエラーレートを解析し、予め定められたエラーレートよりも悪いと判断される場合、転送速度を落として通信を行うことを特徴とする。こうすることで、仮に通信路の品質が悪いと判断される場合は、転送速度を落とすことにより、品質の良い通信路において、データ転送が可能となる。また、第１５送受信回路は、前述の第１送受信回路から第１４送受信回路のいずれかに当てはまる送受信回路であって、全二重通信であることを特徴とする。こうすることで、半二重通信において必要なプリアンブルをなくすことが可能となり、通信路の使用効率を向上することが可能となる。
【０３０６】
また、第１６送受信回路は、前述の第１送受信回路から第１５送受信回路のいずれかに当てはまる送受信回路であって、光ファイバを用いた長距離通信であることを特徴とする。こうすることで、ＵＳＢホストとＵＳＢデバイスの距離を長くすることが可能となり、応用範囲が広がる。また、第１７送受信回路は、前述の第１送受信回路から第１４送受信回路のいずれかにあてはまる送受信回路であって、ホスト側コントローラとデバイス側コントローラ間が電波を用いた無線通信であることを特徴とする。こうすることで、ケーブルレスとなり、コネクタの劣化などが防げる。
【０３０７】
また、第１８送受信回路は、前述の第１送受信回路から第１５送受信回路のいずれかにあてはまる送受信回路であって、ホスト側コントローラとデバイス側コントローラ間が光を用いた空間伝送であることを特徴とする。こうすることで、ケーブルレスとなり、コネクタの劣化などが防げるとともに、高速な空間伝送を行うことが可能となる。また、第１送受信方法は、前述の第１送受信回路から第１８送受信回路を実現するための送受信方法であることを特徴とする。
【産業上の利用可能性】
【０３０８】
本発明は、ホストコンピューター（ホスト）と、その周辺機器（デバイス）との間におけるＵＳＢ通信（ＵＳＢ規格に沿ったデータ通信）を実現するための通信システムであるＵＳＢシステム、および、ＵＳＢシステムにおけるホスト，デバイスに備える通信コントローラ（ホスト側コントローラ，デバイス側コントローラ）に利用されるものである。
【図面の簡単な説明】
【０３０９】
【図１】本発明の一実施形態にかかるＵＳＢシステムの構成を示すブロック図である。
【図２】図１に示したＵＳＢシステムのホスト側コントローラにおけるホストＳＭの、ＳＥＴＵＰトランザクションにおける動作の流れを示すフローチャートである。
【図３】図１に示したＵＳＢシステムのデバイス側コントローラにおけるデータＳＭの、ＳＥＴＵＰトランザクションにおける動作の流れを示すフローチャートである。
【図４】図１に示したＵＳＢシステムにおける、スピードネゴシエーションの例を示すタイミングチャートである。
【図５】スピードネゴシエーションにおけるホスト側コントローラのＳＮＳＭの動作を示す説明図である。
【図６】スピードネゴシエーションにおけるデバイス側コントローラのＳＮＳＭの動作を示す説明図である。
【図７】図７は、図１に示したＵＳＢシステムにおいて転送されるＤＡＴＡパケットの構成を示す説明図である。
【図８】ＤＡＴＡパケットのサイズを示す説明図である。
【図９】図１に示したＵＳＢシステムのデバイス側コントローラにおける、他の構成を示すブロック図である。
【図１０】ＵＳＢパケットの種別を示す説明図である。
【図１１】ＵＳＢのパケットフォーマットを示す説明図である。
【図１２】ＳＥＴＵＰトランザクションの例を示すタイミングチャートである。
【図１３】従来のＵＳＢシステムにおける、ＳＥＴＵＰトランザクションを示すタイミングチャートである。
【図１４】ホスト側コントローラの機能とデバイス側コントローラの機能とを備える通信コントローラを示した図である。
【符号の説明】
【０３１０】
１０  ホスト
１１  ホスト側コントローラ
１２  デバイス側コントローラ
１３  デバイス
１４  通信コントローラ
２０  ＵＳＢ受信機
２１  送信ＦＩＦＯ
２２  変調回路
２３  光送信機
２４  光受信機
２５  復調回路
２６  受信ＦＩＦＯ
２７  ＵＳＢ送信機
２８  エラー検出回路
２９  タイマー
３０  スピードネゴシエーションステートマシン（ＳＮＳＭ；速度設定部）
３２  ホスト側ステートマシン（ホストＳＭ；ホスト側制御部）
３３  ＣＲＣチェック回路
３４  カウンター
４２  デバイス側ステートマシン（ホストＳＭ；デバイス側制御部）
Ｔａ  所定時間
【図１】
2005129008.tif 000003
【図２】
2005129008.tif 000004
【図３】
2005129008.tif 000005
【図４】
2005129008.tif 000006
【図５】
2005129008.tif 000007
【図６】
2005129008.tif 000008
【図７】
2005129008.tif 000009
【図８】
2005129008.tif 000010
【図９】
2005129008.tif 000011
【図１０】
2005129008.tif 000012
【図１１】
2005129008.tif 000013
【図１２】
2005129008.tif 000014
【図１３】
2005129008.tif 000015
【図１４】
2005129008.tif 000016