解決策: 深くではなく広く枝分かれする

解決策: 深くではなく広く枝分かれする

タイトルが XY 問題の形になっていることをお許しください。

私は、多数の USB デバイスが接続された Windows システムを持っています。(私は多数のクライアントを抱える組み込み開発者で、多くの場合、多数の組み込みデバイスに対して長期テストを実行する必要があります。) 次の現象が見られます。

私のデフォルトの USB デバイス セットは次のようになります。

ここに画像の説明を入力してください

ただし、この場合、OSBOT TinyCam デバイスは使用できません。(「別のアプリが既にカメラを使用しているようです。Windows カメラ アプリ エラー コード 0xA00F4243」)

EDBG CMSIS-DAP デバイスおよび/または Atmel-ICE CMSIS-DAP デバイスのいずれか 4 つを取り外す (または単に取り外す) と、TinyCam は正常に動作します。

そこで次のような疑問が湧いてきます。

  • システムが USB バス上で管理できるデバイスの数に制限はありますか?
  • 問題をより適切に診断するために収集できる追加情報はありますか?

また、これは OSBOT TinyCam に固有のものではないと思います。たとえば、すべての CMSIS-DAP USB デバイスを取り外し、OSBOT TinyCam を接続してカメラ アプリを起動すると、カメラは正常に動作します。しかし、TinyCam を接続した後ですべての CMSIS-DAP デバイスを接続すると、Microchip IDE はすべての CMSIS-DAP デバイスにアクセスできなくなります。

ここに画像の説明を入力してください

したがって、この場合は、「最初にそこに到着した人」が機能し、他の人は除外されるように見えます。

答え1

エンドポイントに関して、USB ルート ホスト コントローラの制限が発生している可能性があります。これは、オペレーティング システムとは関係のないハードウェアの制限です。

各 USB デバイスは最大 32 個のエンドポイント (16 個の入力と 16 個の出力、ただし 1 つは制御エンドポイント) を定義できますが、ほとんどのデバイスは 2 個または 3 個のエンドポイント (データ入力、データ出力、制御エンドポイントなど) のみを定義します。ハブ自体も少なくとも 1 つの制御エンドポイントを定義します。すべての USB コントローラー実装には、独自のレイヤーまたはエンドポイントの制限がある場合があります。

お使いのデバイスによっては、他のデバイスよりも多くのエンドポイントが必要になる場合があります。USB ルート ホスト コントローラーにも、サポートできるエンドポイントの数に制限がある場合があります。

コンピュータでサポートされるエンドポイントの数を増やすには、ルート USB ホスト コントローラを増やす必要があります。USB ハブをチェーン接続してもエンドポイントは追加されず、ハブ自体がルート コントローラのエンドポイントを使い果たすため、エンドポイントの数は減ります。

USB 仕様では、1 つのルート コントローラ上で理論上は膨大な数のデバイスが許可されていますが、USB コントローラの実装に固有の実際的な制限により、可能な最大数はさらに大幅に少ない数に制限されます。

USBデバイス上のエンドポイント(およびその他すべて)の数を調べるツールはオープンソースの USB デバイス ツリー ビューアーデバイスが使用するエンドポイントは表示できますが、ルート コントローラーの制限は表示されません。

たとえば、ここでは接続された USB ディスクの 3 つのエンドポイントが表示されています。

ここに画像の説明を入力してください

この主題に関するいくつかの情報源:

答え2

解決策: 深くではなく広く枝分かれする

@harrymc 質問に正しく回答しました: USB トポロジが「深すぎる」​​ため、エンドポイントの数が制限されていました。

以前は、7 ポート USB エクスパンダーを 4 つ持っていて、「A」と「C」は PC に直接接続され、「B」と「D」は「A」と「C」からデイジー チェーン接続されていました。

+-----+   +---------+   +---------+
|     |<=>|A        |<=>|B        |
|     |   +---------+   +---------+
|     |   +---------+   +---------+
| PC  |<=>|C        |<=>|D        |
+-----+   +---------+   +---------+

「A」、「B」、「C」、「D」がすべて PC に直接接続されるように設定を再構成しました。

+-----+   +---------+
|     |<=>|A        |
|     |   +---------+
|     |   +---------+
|     |<=>|B        |
|     |   +---------+
|     |   +---------+
|     |<=>|C        |
|     |   +---------+
|     |   +---------+
| PC  |<=>|D        |
+-----+   +---------+

これにより、USB デバイス ツリーの深さが 1 レベル減り、必要なすべてのデバイスを同時にサポートできるようになりました。

関連情報