上記の質問に対するグーグルの答えとウィキペディアの答えを知っています。しかし、もっと具体的な質問があります。USBハブには、多くの受信ポートと1つの送信ポートがあります。これにより、n個のデバイスを一緒に使用できます。しかし、1つのUSBポートでn個のUSBポートを使用してデータ転送を行う方法を理解できません。
どのようにすれば同時にすべてのUSBポートに異なるデータを送信できますか?
*
この回路のシミュレーション – CircuitLabを使用して作成された回路図
*。
上記の質問に対するグーグルの答えとウィキペディアの答えを知っています。しかし、もっと具体的な質問があります。USBハブには、多くの受信ポートと1つの送信ポートがあります。これにより、n個のデバイスを一緒に使用できます。しかし、1つのUSBポートでn個のUSBポートを使用してデータ転送を行う方法を理解できません。
どのようにすれば同時にすべてのUSBポートに異なるデータを送信できますか?
*
この回路のシミュレーション – CircuitLabを使用して作成された回路図
*。
回答:
それはすべて仲裁に関係しています。複数のデバイスを接続する必要があるシステムでは、だれがいつ話すべきかを決定する何らかの方法が必要です。あなたがアプリケーションに応じて期待するように異なるスキームがあります。
一般的な例-ネットワーキングでは、多くのノードがすべて互いに通信しています。これはアドレス(IPアドレスなど)を持つ各ノードによって行われ、ノードが別のノードと通信したい場合、そのアドレスにパケットを送信します。次に、ルーターなどのデバイスを使用して、複数のポートに着信するパケットを取得し、それらを正しいポートに転送します。アービトレーションは、宛先ポートが解放されるまでパケットを格納するためにメモリを使用して行われます。
次にUSBに接続します。すべてのノードが同等になるわけではないため、これは実際にはネットワーキングよりもはるかに単純です。ホストとエンドポイントの2つの種類があります。ホストは1つだけですが、多くのエンドポイントになる可能性があります。この場合、ホストポートのみが自由に通信できるため、調停ははるかに簡単です。エンドポイントは、ホストから要求された場合にのみ会話を許可され、ホストは一度に1つのエンドポイントとのみ会話します。
host-> endpointパケットの場合、USBハブはホストからすべてのエンドポイントに要求を渡すだけです。すべてのエンドポイントにアドレスがあるため、要求の宛先となったエンドポイントだけがそれに対して何かを行い(応答など)、他のすべてのエンドポイントはパケットを無視します。
エンドポイント->ホストパケットの場合、ホストは最初にアドレスで特定のエンドポイントにパケットを送信し、「今すぐ話せる」と言ってから、そのエンドポイントはすぐに応答を送信する必要があります。常に1つのエンドポイントのみが通信を許可されているため、USBハブは、ホストからの要求に応答するポートからパケットをルーティングするだけです。
ホストがどのデバイスが接続されているか、およびエンドポイントがどのようにアドレスを取得するかに関しては、これは列挙によって実現されます。
すべてのホストおよびハブポートには、D +およびD-ラインにプルダウン抵抗(15kΩ)があります。これらは、デバイスが接続されていないときにポートのデータラインを既知の状態にします。この状態では、ポートはD + / D-ラインを介してデータをまったく送信しません。
デバイスが接続されると、1.5kΩ抵抗を使用してD +(フルスピード)またはD-(低速)データラインをVCCに接続することにより、デバイス自体が認識されます。これにより、列挙イベントがトリガーされます。次に、ポートはデバイスの構成とアドレスの割り当てのプロセスを開始します。2つのデバイスを同時に接続すると、一度に1つずつ列挙されます。
ハブがない場合、ホストは新しいデバイスと通信してセットアップするだけです。システムにハブがある場合、新しいデバイスが接続されたことを報告するのはハブです。ハブが新しいデバイスが接続されていると報告した場合、ホストは新しいデバイスをリセットして通信を開始するようにハブに指示します。リセット中、エンドポイントにはデフォルトアドレス0(*)が与えられます。その後、ホストはデフォルトアドレスを使用してエンドポイントと通信し、いつ通信しているのかを知ることができるようにする一意のゼロ以外のアドレスでエンドポイントを構成できます。
(*)一度に列挙されるデバイスは1つだけであるため、アドレス0は常に新しく接続されたデバイスに対して一意になります。
次に、「どうすれば、同時に複数のデバイスが同時に話せるようになるのか」と質問するかもしれません。マウス、キーボード、フラッシュドライブがすべて同じUSBハブに接続されているとします。マウスとキーボードを同時に使用しながら、フラッシュドライブとの間でファイルをコピーできることは誰もが知っていますが、一度に1つのデバイスしか通信できない場合、どうすればそれが可能になるのでしょうか。
まあ、それはすべて、あなたが脳がキーを押したことに気づき、画面が更新されることを期待するのに数百ミリ秒かかるという事実に帰着します。USB 2.0インターフェースは最大480Mbpsで実行できます(USB 3.1は最大10Gbpsで実行できます!)。つまり、ホストは常に1つのエンドポイントとしか通信していなくても、高速で切り替えられるため、それをやっていると言わないでください。
USBホスト:「ねえ、ポート1でマウスを動かしたかどうか教えてください。ポート2のキーボードで、レポートするキーを押しましたか?ポート3のフラッシュドライブにこのデータを保存してください。他に誰か話をする必要がありますか?いいえ、じゃあ、ポート1でマウスを動かしてください。
人間:「ああ、コンピューターは、マウスを動かし、キーボードのキーを押して、画像をフラッシュドライブにすべて同時にコピーしたことに気づきました。」
ホストデバイスは、使用されているエンドポイントアドレスを追跡し、順次または必要に応じて(つまり、OSが特定のデバイスへのアクセスを要求したときに)パケットをそれぞれに送信します。したがって、すべてが同時に発生しているわけではありませんが、仲裁は非常に高速であるため、人間のコンピューターは違いを見分けることができません。
より短い答え:ホストは、特定のデバイス(これは予備的な「列挙型」でした)にアドレス指定されたデータを、一度に1つのトランザクションで順次送信します。ハブはすべてのパケットをすべてのデバイスにブロードキャストします。デバイスは、自分宛てのトランザクションにのみ応答します。それはすべて、HSデバイスに当てはまります。
FSおよびLSデバイスの場合、プロセスはもう少し複雑です。いわゆる「スプリットトランザクション」をLSまたはFSトラフィックに変換する、すべてのポートのすべてのハブに組み込まれている「トランザクショントランスレータ」を使用します。