none
Windows10でのUSBシリアルの挙動について RRS feed

  • 質問

  • お世話になります。

    開発しているデバイスとWindowsPCをUSBで接続、COMポートとして認識させてダイヤルアップ接続などを使用していました。Windows7では問題無かったのですが、Windows10のPCに接続したところ端末が異常状態になり、使えなくなりました。

    原因はデバイスをUSB接続した直後のPC側のUSBの動作が異なっていたことにありました。(Windows7:最終的にER-OFFを送出。USBのインタラプト転送のポーリングは継続。Windows10:最終的にER-OFFを送出。USBのポーリングは停止。)デバイス側はPCからのER-ON/OFFに対してDRをON/OFFを出していましたが、USBのポーリングが来なくなったため最後のER-OFFに対するDR-OFFのメッセージが送出されずにループにはまっているという状況でした。

    ドライバの構成はWindows7がusbser.sys+serenum.sys、Windows10もテストモードで同じ構成です。ちなみにWindows10の自動認識では「USBシリアル」扱いでドライバ構成はusbser.sysのみで、その場合信号線のエンドポイントへのポーリングはそもそも無しという動作でした。

    そこで質問ですが、Windows10のレジストリの設定などでWindows7と同様の動作にする方法はないでしょうか?usbser.sysのみで可能であればありがたいです。

    以上、よろしくお願いします。

    2018年4月9日 7:05

すべての返信

  • 問題のなかった Windows 7 環境の USB Host Controller は USB 3.0 だったのでしょうか?
    もし Windows 7/10 双方とも USB 3.0 Host Controller に接続してこの現象が発生しているなら、Host Controller Driver の差異に起因して発生している可能性もあると思います。
    (私の知る限り、マイクロソフトは Windows 7 用の USB 3.0 Host Controller Driver を提供していない。)
    usbser.sys や serenum.sys の問題を疑う前に、Windows 7/10 双方の USB Host Controller が同じであるのか (例えば USB 2.0 Host Controller 環境の PC に Windows 10 をインストールしてみるとか) 等、ハードウェア的な環境の差異をきちんと精査してみては?

    • 編集済み お馬鹿 2018年4月10日 0:07 誤記訂正
    2018年4月10日 0:03
  • まず、使っている略語についてですが、

    DR = DSR(データセットレディ)
    ER = DTR(データターミナルレディ)

    という事でよいでしょうか。
    この場合、これをハードウエアフロー制御といいます。
    さて、RS-232Cのハードウエアフロー制御が動かない問場合にまっさきに疑うべきなのはケーブルです。

    (1)良好環境と、不良環境で、同じケーブルでテストしてますでしょうか。

    2018年4月10日 1:51
  • 返答ありがとうございます。

    DR=DSR、ER=DTRでOKです。

    USBケーブルは同じものを使用しています。

    PCからのERはエンドポイント0のコントロール転送、デバイスからのDRはエンドポイント3のインタラプト転送です。

    Windows10でもPCからの最後のER-OFFの前まではエンドポイント3へのPCからのポーリングがされており、DR-OFF/ONが送出されていました。

    2018年4月10日 2:11
  • 返答ありがとうございます。

    Windows10の方は「Intel® USB 3.0 eXtensible Host Controller - 1.0(Microsoft)」、7の方は複数あって「インテル® USB 3.0 eXtensible ホスト・コントローラー」か「Intel® 7 Series/C216 Chipset Family USB Enhanced Host Controller」のようです。

    3.0は同じような名前ですが10の方はMicrosoft製、7の方はIntel製でした。

    手元の環境は好き勝手にOSレベルの構成を弄れる環境ではないので、別途環境を探して同一ハードでの比較を試みたいと思います。

    2018年4月10日 5:20
  • USB 2.0 Host Controller の Windows 10 環境は用意できますか?
    現状ではきちんと原因の切り分けができていないので、まずは Windows 10 環境の USB 2.0 ポートにその USB CDC デバイスを接続し、同じ問題が発生するか検証されることをお勧めします。
    USB クライアント デバイスがどの Host Controller (2.0 or 3.0) に接続されているかは、デバイス マネージャのメニューバーで <表示> → <デバイス (接続別)> を指定して接続別のツリー表示にすると、どの Host Controller に接続されているのか確認できます。
    ちなみに "USB Enhanced Host Controller" (ehci) は USB 2.0。
    (Windows 7 環境では、もしかしたら USB 2.0 のポートに接続していたのでは?)

    もし Windows 10 USB 2.0 Host Controller 環境でも問題が発生したとしても、これ以外にフィルタ ドライバの有無等、事前に確認しておくべきことがまだあると思います。
    例えば、デバイス マネージャで接続別のツリー表示をしたときに、USB Host Controller から CDC デバイスまでの各デバイス クラス (各ノード)に、3rd ベンダー製フィルタ ドライバが介在していないか、きちんと確認しておく必要があります。
    各ノードを構成しているドライバ群の一覧は、そのノードのプロパティの [ドライバー] タブ → [ドライバーの詳細] で確認できます。

    ところで。。。。
    その問題となっている USB CDC デバイスのドライバ インストール パッケージって、INF ファイルだけなんですよね?
    (要するに、Windows OS 標準の Inbox ドライバだけの構成なんですよね?)
    2018年4月10日 6:31