每个 USB 设备都有供应商 ID 和产品 ID 吗?

vme*_*map 9 linux drivers linux-kernel usb-device

我有一个随机扬声器,我想为其开发一个驱动程序,以便我可以向dev文件系统报告统计数据、电池等。但是,我很难找到扬声器的供应商和设备 ID 以便将其与驱动程序正确关联。

我什至不知道制造商是谁,我的 Linux 机器没有检测到它(lsusb和其他实用程序),T&G 有一个扬声器,看起来和我的一模一样,但我的有一个不同的徽标(橙色花),而不是T&G 就是其中之一。

  • 每个设备都有与其关联的供应商和产品 ID 吗?

  • 如果是这样,如果您不知道您的设备并且您的机器无法识别它,您如何找到它?

  • 是否甚至可以通过扬声器的 USB 端口向我的机器报告电池和其他统计数据,我相信该端口应该与 USB 卡一起使用?

Ljm*_*art 13

每个通过 USB 通信的设备都有一个 VID(供应商 ID)和 PID(产品 ID)。供应商 ID 是通过 USB 实施者论坛 (USB.org) 获得的,这或多或少保证了其唯一性。

当您插入 USB 设备时,dmesg即使该设备不受支持,您也应该在 的输出中看到它。我还没有见过不以这种方式显示的 USB 设备。

另一种选择是,该设备根本不通过 USB 进行通信,而仅使用 USB 连接器进行充电。

  • @Roi USB 有许多标准化的、预定义的设备类(键盘、大容量存储设备等)。系统上的通用 USB 驱动程序通常支持实现这些预定义设备类之一的任何设备。当您没有实现这些标准类之一,或者您拥有超出标准定义的额外功能时,您将需要专门的驱动程序。 (3认同)
  • @Roi 这就是我所说的“超出标准”所指的那种事情。该标准仅涵盖核心功能(按钮、大写锁定 LED 等)。您可能仍然可以使用标准驱动程序并忽略这些附加功能,但为了使特定于供应商的功能正常工作,您需要自定义驱动程序。 (2认同)

plu*_*ash 5

每个“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 之外的协议。