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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

4回答

3848閲覧

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

tokiyam

総合スコア13

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2016/11/16 05:08

アプリケーションから、ある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言語のアプリでも上述の通りです。
以上、よろしくお願い申し上げます。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasahikoHirata

2016/11/16 05:47

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

2016/11/16 06:50

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

回答4

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/16 15:19

KenjiToriumi

総合スコア344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokiyam

2016/11/17 03:12

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

0

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

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

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

投稿2016/11/16 08:04

mosapride

総合スコア1480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokiyam

2016/11/16 12:29

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

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 06:23

編集2016/11/16 06:26
Bego

総合スコア69

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokiyam

2016/11/16 07:01

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

0

こんにちは。

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

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

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

投稿2016/11/16 05:57

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokiyam

2016/11/16 07:15

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問