すべてのUSBデバイスにはベンダーIDと製品IDがありますか?

すべてのUSBデバイスにはベンダーIDと製品IDがありますか?

dev統計、バッテリーなどをファイルシステムに報告できるようにドライバを開発したい任意のスピーカーがあります。ただし、ドライバと正しく接続するためにスピーカーのベンダーとデバイスIDを見つけるのに問題があります。

製造元が誰であるかもしれず、私のLinuxコンピュータはそれを検出しません(lsusbそして他のユーティリティ)。 T&Gには私と同じスピーカーがありますが、私のロゴは異なります(オレンジ色の花)。 T&Gではないそれらの一つ。

  • 各デバイスには、関連するベンダーと製品IDがありますか?

  • それでは、自分のデバイスも知らず、デバイスも認識できない場合はどうやって探しますか?

  • USBカードで使用する必要があると思われるスピーカーのUSBポートを介して、コンピュータにバッテリーやその他の統計情報を報告することは可能ですか?

答え1

USB経由で通信するすべてのデバイスには、VID(サプライヤーID)とPID(製品ID)があります。ベンダーIDはUSB Implementers Forum(USB.org)を介して取得され、これは一意性をある程度保証します。

USBデバイスを接続すると、dmesgそのデバイスがサポートされていなくても出力に表示されるはずです。まだこのように見えないUSBデバイスを見たことはありません。

別のオプションは、デバイスがUSB経由でまったく通信せず、充電用にUSBコネクタのみを使用することです。

答え2

各「USBデバイス」には、ベンダーIDと製品IDがあります。ただし、「USBデバイス」が何を意味するのか注意する必要があります。 USBポートを持つすべてのデバイスは「USBデバイス」ではありません。

まず、USBホストは「デバイス」とは見なされません。原則として、(現在USB Cは無視)ホストにはAコネクタが必要です。デバイスにはBコネクタが必要です。両方の役割を果たすことができるデバイスにはABコネクタが必要です。実際、これはしばしば見落とされます。

第二に、多くのものは単にUSBコネクタを充電用の電源ポートとして使用し、USBホストまたはデバイスとしてまったく機能しません。

lsusbに表示されない場合は、USBデバイスではないことはほぼ確実です。


USB Cは、ホスト、デバイス、および「デュアルロールデバイス」(ホストとデバイスの両方の役割を果たすことができるデバイス)に使用できるコネクタを使用して、状況をさらに混乱させます。

最も簡単なレベルでは、デバイスモードでのみ動作するCポートは、「CC」ピンの抵抗器を使用してこれを示すことができます。固定ホストポートは、もう一方の端にデバイスが接続されていない限り電源を入れないようにするため、もう少し複雑ですが、比較的簡単です。 IIRCデュアルロールポートは、ホストポートの役割とデバイスポートの役割をすばやく切り替える必要があります。

ただし、USB Cには「CC」ピンでアクティブネゴシエーションを使用するオプションもあります。これは、より高い電力レベルをネゴシエートし、データとは逆方向に電力伝送をネゴシエートし、USB以外のプロトコルの使用をネゴシエートするためにも使用できます。

答え3

各USBデバイスは、VIDフィールドとPIDフィールドに16ビット値を含むパケットを使用して自分自身を識別する必要があります。 USBデバイスを製造する企業が65,535を超える可能性があることを考慮すると、USBデバイスを生産するすべての企業がそれに関連する固有のVIDを持つ可能性はありません。

ほとんどの場合、USBコントローラチップベンダーはそのチップを使用するデバイスをベンダー固有の名前でプログラムしますが、製造元のデフォルトのVID / PIDの組み合わせを使用してレポートするようにデバイスを設定できます。これにより、ベンダーから提供されたドライバを変更せずにデバイスと一緒に使用できますが、ソフトウェアがデバイス名を調べて通信しようとするデバイスを決定する必要があります。

USBが開発された1990年代には、16ビットのVID / PIDを使用するのがほぼ合理的でした。ただし、サプライヤーと製品の数のため、現在は意図した用途には適していません。

答え4

dmesg他の人は、列挙が完了すると接続されたUSBデバイスのVID / PIDが報告されると述べました。

dmesgUSBデバイスを列挙できない場合は、エラーを報告することも可能です。

たとえば、Ubuntu 18.04でUSB 2デバイスを接続しようとしましたが、デバイスが表示されませんでした。確認後、次のエラーが検出lsusbされました。dmesg

[19852.532042] usb 3-6: new high-speed USB device number 6 using xhci_hcd
[19858.240057] usb 3-6: device descriptor read/64, error -110
[19874.656054] usb usb3-port6: Cannot enable. Maybe the USB cable is bad?
[19875.624047] usb usb3-port6: Cannot enable. Maybe the USB cable is bad?
[19875.624099] usb usb3-port6: attempt power cycle
[19876.668040] usb usb3-port6: Cannot enable. Maybe the USB cable is bad?
[19877.636052] usb usb3-port6: Cannot enable. Maybe the USB cable is bad?
[19877.636127] usb usb3-port6: unable to enumerate USB device

USBデバイスを取り外して再接続します。今回はデバイスが出力に表示され、lsusbVID dmesg/ PIDも報告されます。

[20158.004079] usb 3-6: new high-speed USB device number 18 using xhci_hcd
[20158.152321] usb 3-6: New USB device found, idVendor=03fd, idProduct=0008
[20158.152324] usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[20158.152327] usb 3-6: Product: XILINX    
[20158.152329] usb 3-6: Manufacturer: XILINX 

関連情報