web-dev-qa-db-ja.com

USBハブのトラブルシューティング/テスト/ベンチマークの方法(ハブはボトルネックとして機能しています...なぜですか??)

私はUbuntu14.04 LTSと、シリアルからUSBへのコンバーターを使用するいくつかの珍しいシリアルハードウェアを実行しています。

いくつかの遅いデバイス(RS232からUSB 2.0へのコンバーター、RS422からUSB 2.0へのコンバーター、および別のUSB 2.0デバイス)を3.0ハブに接続できません。着信メッセージがないため、アプリケーションがクラッシュしません。ただし、すべてのデバイスがPCに直接接続されている場合は、すべてが機能します。なぜこれが起こっているのか説明していただけますか?詳細はお読みください...

Orico製の3.0USBハブを購入しました。 4つのポートがあり、接続するUSB​​ポートから電力が供給されます。

2つのシリアルコンバーター(通信するデバイス付き)と1つのUSBデバイスを接続しました。詳細は次のとおりです。

  • RS422からUSB(2.0)-500,0008N1で/ dev/ttyUSB0として構成されています。
  • RS232からUSB(2.0)-1152008N1で/ dev/ttyUSB1として構成されます。
  • USB 2.0デバイス(汎用IOシステム...押されたボタンなどを収集する...)であるLabjack U3)。

ハブが問題であることに気付くまで、ターボ高ストレスの2つの14時間の費用がかかる非常に奇妙な動作を観察しました。

発見に時間がかかったUSBハブの「悪い」動作:

  • rS232からUSBのみが接続されている場合、通信先のシリアルデバイスは、PCが送信しているすべてのデータを受信して​​いましたが、デバイスからのすべての応答はハブによってドロップされていました(より正確には、ハブが使用されました)。
  • 2つのデバイス(Labjack USB2.0デバイス+ RS422からUSB2.0)が接続されている場合、すべてが機能していました(両方のデバイスからのメッセージが適切な速度でPCに到達していました)。他の2つのデバイスがすでに接続されているときにRS232からUSBへのコンバーターが接続された場合でも、すべてが正常であり、RS232ポートを構成できました。ただし、RS232に接続されたシリアルデバイスの電源を入れて「メッセージ」の送信を開始するとすぐに、PCで実行されているアプリケーションがクラッシュし、RS422デバイス(USB経由で到着するはずです)からのメッセージが不足していることを示すエラーが発生しました。ハブ)。これは、RS232からUSBへのコンバーターに接続されたシリアルデバイスをオン(オンラインにする)から5秒以内に発生します。

USBハブを取り外してすべてのデバイスをPCに直接接続するまで、しばらく困惑していました...その後、すべてが魅力のように機能し始めました。

なぜこれが起こっているのか説明していただけますか?また、USBネットワークの何が問題になっているのかを正確に特定するのに役立つツールや手順を提案していただけますか?

USBメッセージに変換されるすべてのシリアルデータをボトルネックなしでPCに伝送するハブが必要です。そして、RS232およびRS422デバイスのシリアル速度が非常に遅いことを考えると(USBと比較して...トラブルシューティングの速度ではありません...)、どのハブでもうまくいくと思います。この問題を発見したので、接続されているデバイスよりもはるかに高速なハブがボトルネックとして機能している理由に興味があります。

ハブには欠陥がない(欠陥がある可能性が高い)ことに注意してください...データは問題なく伝送されます。 2つのシリアルコンバーターとUSBデバイスが同時に接続されていることに遭遇するまで、その時点で速度(またはおそらく電圧)がロボットをクラッシュさせます。

電圧降下が問題の原因であると思われたので、電源付きの2.0 USB 7ポートハブを使用しましたが、結果は同じでした。 3つのデバイスすべてがメッセージの送信を開始するとすぐに、アプリケーションはメッセージに飢えます。

RS422デバイスをPCに直接接続し、RS232およびLabjack USBデバイスをUSBハブ(次にUSBハブをPC)に接続すると、LabjackU3がエラーで失敗します。

これは、USBハブが2つのシリアルデバイスと1つのUSBデバイスから渡されたデータを、メッセージが到着する速度で渡すことができないことを意味しますか?これは本当にオフに聞こえます。

さらに情報を提供できる場合は、お知らせください。前もって感謝します。

2
Mike

RS232デバイスは通常FSデバイスで、USBプロトコルは12Mbpsで実行されます。ハブ、USB2またはUSB3に接続すると、通信は「トランザクショントランスレータ」または「TT」と呼ばれる特別な通信プロセッサを経由します。 "、これはすべてのUSBハブに組み込まれています。ハブには2種類あり、すべてのポートでTT)が1つしかないハブと、個別のTTダウンストリームポートごとに。

複数のFSデバイスが単一のTTハブに接続されている場合、バッファリングリソースが不足し、FS帯域幅(12Mbps)が接続されている間で共有されます各ダウンストリーム接続でFS帯域幅をフルにするには、いわゆる「マルチTT」ハブが必要です。

また、FS TTを超えるトランザクションの処理には、「分割トランザクション」と呼ばれるホスト側での特別なアプローチが必要です。

最近のコンピューターはネイティブFS XHCI(USB 3.0)ホストコントローラーを介してサポートされているため、直接接続はXHCIドライバーによって自然に処理されます。古いコンピューターはFSそれらのハードウェア、および古いOHCIまたはUHCIコントローラーへのマルチプレックスポートであるため、FSトラフィックレートも直接サポートしています。

ただし、ハブが間にある場合、FSトラフィックは、ソフトウェアベースのみの分割トランザクション手法で処理する必要があります。分割ルールは非常に複雑で、約150ページでカバーされます。ロボットドライバの分割トランザクションのサポートが不十分(またはサポートなし)の場合、FSおよびLSデバイスは、特にこれらのデバイスが多数ある場合、ハブの背後で機能しません。

追加:Oricoハブは VL812コントローラーIC を使用します。これはHSでTTパス。(おそらくFS)422-USBデバイスが500,000ボーおよびその他のFSデバイス用に構成されている場合、帯域幅が残っていない可能性があり、ホストはトランザクションのスケジューリングと何かのバーフに問題があります。

2
Ale..chenski