none
USBのエニュメレーションについて RRS feed

  • 質問

  • USBデバイス機器(ベンダ定義クラスデバイス)とWindows 10 home(バージョン1803)をUSB接続した時に
    PCに認識されて正常にデバイスマネージャに現れる場合と現れない場合があり原因が分からず困っております。
    見た目には不明なデバイスなどにも出てこず全く無反応な状況です。

    USBプロトコルアナライザでUSBデバイス接続時のエニュメレーション通信を確認したところ、PCに認識されない場合は
    ホストからのDevice_Qualifireに対してデバイスがStall応答した後、ホストからの次の通信がなく終わっていました。

    考えられる原因と対策方法をご教授願えないでしょうか?

    2018年8月23日 0:49

すべての返信

  • ベンダ定義クラスデバイスということは、独自にドライバも開発しているわけですよね?
    提示されている情報だけでは、ハードウェア側/ソフトウェア側双方の可能性が考えられるので、まずはきちんと切り分けるべきかと。
    さらに、特定の PC あるいは Windows OS でのみ発生しているのかなど、PC / OS 環境に依存してるのかも、きちんと調べるべきかと。

    2018年8月23日 1:59
  • 質問者です。

    その後色々と調べてみるとStringDescriptor(仕様はUNICODEの文字列)の応答データに0x0000応答が混ざっていて0x0000データのあるアドレス位置でPCによって問題が発生したりしなくなったりすることが確認出来ました。0x14(レングス)0x03のあとデータに0x30、0x00、0x31、0x00・・・(20バイト分のデータでこの中に0x00、0x00が混ざっている)

    これが原因の可能性が高いと考えています。

    ただ、すべてのPCやOSによって同じ0x0000の混ざったデータでもNGにならない場合があります。

    これはPC内のUSBのチップのプログラムがメーカーによって

    レングスとデータ数の一致を見たり見なかったり、もしくは0x0000がある場所によって

    異常判定したり異なる条件があるのではないかと考えています。

    PCやチップに詳しい方で、このあたりについて何か情報をお持ちの方回答いただけると幸いです。

    2018年9月10日 5:45
  • PCやチップについて特に詳しい訳ではないのですが、Windows接続時のOS Descriptor要求についてはご存知でしょうか?

    https://docs.microsoft.com/ja-jp/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors

    あるデバイスをWindowsに接続する場合は、デバイス側でIndex 0xEEのString Descriptor要求を無視するか、ちゃんと答えるかしないとおかしな事になると思います。そういう話を時々見ます。つまり古いデバイスとか動作がおかしいデバイスを接続すると、接続先のOSによって正しく動作しない場合があります。もしご存知で、関係ない話でしたら申し訳ありません。

    2018年9月13日 16:08
    モデレータ