質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.04%

特定のメーカーのOSでのみWinUSBの一部が動かない

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 2,131

tokiyam

score 13

アプリケーションから、あるUSBデバイスにWinUSBを使ってコマンドを送り、その応答を受信しています。しかし、あるメーカーのパソコンのみ、送ったものをデバイスは確実に受信しているのですが、デバイスが送っている応答を受信できません。
HP、NEC、自作パソコンなどでは問題なく動作しています。OSも、WinXP,WIN7-32bit,win7-64bit,win10-32bit,win10-64bitにおいて問題なく動作しているのですが、あるメーカーのパソコンのみ上記の状態になります。

もし、このようなご経験をお持ちの方がおられましたら、ぜひ情報をいただけないでしょうか?更に、具体的な解決法があれば、ご教授願えませんでしょうか。

ご参考のため、読み込みの部分の記述はVC#では・・・
[DllImport("winusb.dll", SetLastError = true)] internal static extern Boolean WinUsb_ReadPipe(IntPtr InterfaceHandle, Byte PipeID, Byte[] Buffer, UInt32 BufferLength, ref UInt32 LengthTransferred, IntPtr Overlapped);
・・・となっています。これは、VBでもVC++でも同等の記述になっています。この3言語のアプリでも上述の通りです。
以上、よろしくお願い申し上げます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • MasahikoHirata

    2016/11/16 14:47

    コントロールパネルからデバイスマネージャーで当該のUSBデバイスのデバイスドライバーは正常にインストールされているのは確認されていますか?

    キャンセル

  • tokiyam

    2016/11/16 15:50

    はい、正常にインストールされています。まったく他のパソコンと同じです。

    キャンセル

回答 4

checkベストアンサー

0

業務上で知りえた知識がほとんどなので詳細情報はあまり紹介できませんが、これだけUSBが普及した現在でも、USBホストコントローラーのバグ(エラッタ)やホストコントローラーとUSBデバイスの相性問題、USBコネクタやケーブルのちょっとした品質の違い(USB規格内であっても)や周辺回路の品質に起因して、USB通信異常が発生するという事は普通あります。(あとwindowsのUSBドライバの問題というのも)

特定の環境でのみ異常が発生する場合は、まずはUSBバスアナライザでPC側の問題の可能性が高いのか、USBデバイス側の問題の可能性が高いのかを切り分けるのが出発点ですね。

USBバスアナライザをお持ちでない場合、OSに組み込まれている USB Event Tracing for Windows の機能を使用すれば、少しは問題箇所部分の推定に役立ちますが、やはりUSBプロトコルレベルで詳細の異常タイミングがわかるバスアナライザでの調査は必須ですね。

デバイスが送っている応答を受信できません。 

という事なのですが、この辺はどこまで詳細に異常内容は把握できていますでしょうか?

コントロール転送やバルク転送を使用した上位の独自プロトコルレベルでの応答を受信できないという事しかわかっていないのであれば、残念なが問題個所がPC側なのかUSBデバイス側なのかは判断出来ませんね。
それらを判断するためには、USBプロトコルのACK,NAKレベルで異常発生内容の情報が必要です。
(さらに稀ですが、USBバスアナライザの情報だけでも不十分で、オシロスコープでのアナログレベル調査が必要な場合もあります)

また別の観点ですが、「どのようなUSBホストコントローラー(チップセット)」と「どのような形態で接続されていて」「同じホストコントローラーに接続さている他のUSBデバイスは何か」の情報も最初に正確に確認することも重要です。

例えば、

とあるように、チップセットが変わることにより、昔はUSB1.1とUSB2.0は別のホストコントローラーが処理していたのが、現在はUSB1.1とUSB2.0の通信を同じホストコントローラーが処理することになり、USBデバイス間の干渉(特定のUSBデバイスの問題が別のUSBデバイスの通信に影響)する事が発生しやすくなっています。

なので、USBデバイスの接続コネクタ位置を変えるだけで問題が発生したりしなかったりという事もあります。

さらに、ホストコントローラーのチップセットが特定出来たら、インテルなどのホームページでチップセットのエラッタ情報も確認することをお勧めします。
残念ながら、インテルの最新のチップセットであっても、未対応のUSB関連のエラッタは普通に存在します。
(さらに、インテルも認識出来ていないけど明らかにチップセットの問題という現象も見たことが有ります)

ただ、発生現象がエラッタに起因するものかどうかの判断するためにも、やはりUSBプロトコルレベルでの異常の詳細(USBバスアナライザの情報)が必要になってきますが・・・

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/17 12:12

    長文の詳細なるご指摘、誠にありがとうございます。
    「USBバスアナライザ」などは持っておりませんが、その他のツールの紹介や解析方法などをご指導いただき、感謝いたします。
    ただ、持ち込まれたPCを返却しなければならなかったため、現在は手元にないので、同種のパソコンを購入したものかどうか、思案中です。
    環境が整った時点から、ご指導いただきましたことをチェックしてまいりたいと思います。

    キャンセル

0

こんにちは。

特定のメーカのパソコンで動作しないと言うことは、特定のUSBホストコントローラーに対して、そのUSBデバイスが対応できていない可能性が考えられます。

そのデバイスは、Low SpeedかFull Speedデバイスでしょうか?
Low SpeedかFull Speedの場合、OHCIかUHCIが使われる筈ですが、この2つは結構プロトコルが異なります。
もし、そのようなデバイスならばどちらかのプロトコルに対応できていない可能性を疑ってみる価値はあると思います。

逆に、既にUSBコンプライアンス試験に合格しているようなデバイスなら、上記推測は成り立ちません。
その場合はお役に立てずすいません。
USBコンプライアンス試験に合格しているかどうかは、http://usb.orgで調べることができると思います。(少なくとも数年前は可能でした。今はちょっと分かりません。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/16 16:15

    ご回答、誠にありがとうございます。
    Full Speedデバイスです。
    記述していただいたことを、ぜひ参考にさせていただきます。

    キャンセル

0

「あるメーカーのパソコンのみ」とは、言い換えれば「特定の PC のみ」ということですよね?
ちなみに、問題の起きる環境と起きない環境では、同じ USB Hub を使用しているのでしょうか?
この手の問題は、USB Hub や USB Host Controller の影響も考えられるので、使用するデバイスは可能な限り同一のモノを使用されることをお勧めします。
(特に USB Hub なんかは、可能な限り使わない方が良いと思います。)

で、PC 以外のハードウェアが同一であるのに起きているのであれば。。。
もしかしたらその PC にだけ、USB デバイス関連に影響する何かのフィルタ ドライバがインストールされていて、その影響で問題が起きていいるのかも。
とりあえず、デバイス マネージャの <表示> → <デバイス (接続別)> を選択した状態でターゲット デバイスを表示させ、プロパティ ウィンド <ドライバー> タブの <ドライバーの詳細> でリストされるドライバ ファイルの中に、3rd ベンダー製のドライバが含まれていないか、確認されることをお勧めします。
なお、<ドライバーの詳細> でリストされるドライバ ファイルの確認は、ターゲット デバイスだけでなく、その親デバイス (ex.] USB Generic Hub, USB Root Hub, USB Host Contorller, etc.) に対しても行う必要があります。
あと、HID デバイス (Mouse/Keyboard) に関しても、3rd ベンダー製フィルタ ドライバが介在していないか、確認しておいた方がいいかも。

それでも違いが見つからなかったら。。。完全メモリ ダンプを採取して、さらに細かくチェック。
それでもだめたっら。。。カーネル デバッガを接続してライブ デバッグ。 (ユーザー モード デバッグだと WinUSB ドライバの挙動を確認出来ないので。)
ダンプ解析やカーネル デバッグを行う根性がないなら。。。Microsoftの有償サポートを使うとか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/16 16:01

    詳細なるご回答、誠にありがとうございます。
    Hubは使わず、PCに直接接続しています。
    持ち込まれたPCは、先方の都合で返却しなければならなかったので手元に無く、同等のPCをこちらで購入するしかないのですが、思案中でもあります。
    詳しく書いていただいたことを、環境が整備でき次第やれるだけやってみたいと思います。
    本当に、ありがとうございました。

    キャンセル

0

昔のことで記憶が曖昧なことと、明確な回答になってませんが。。

「USBを接続→用意していたドライバを手動インストール」から「USBを接続→ドライバを(ネット)自動にインストール」されるよう挙動が変わったことがあります。
自動でインストールされた場合、バージョンが上がっており、本来インストールしたいバージョンのドライバがインストールすることができませんでした。
「ネットから切断→ドライバを削除→本来のドライバをインストール」と作業で解決しました。

動作しているPCの「USBドライバの種類とバージョン」と動作していないPCの「USBドライバの種類とバージョン」は同じでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/16 21:29

    ご回答、ありがとうございます。
    こちらでは、常に「USBを接続→用意していたドライバを手動インストール」で実行しておりますので、ドライバが変わることはありません。ただ対象のドライバは、Microsoftが用意しているものなので、本来Windowsであれば問題ないはずで、色々なメーカーのPCでは事実動作しています。ただ、問題のメーカーのPCのみ動かないので悩んでおります。
    色々と、ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る