我有一个带有USB接口的设备,我可以连接到我的Ubuntu 18.04机器和Windows 10机器。在 Windows 10 上,我必须安装 CP210x 驱动程序并手动将其连接到设备(否则 Windows 会尝试查找设备制造商的驱动程序 - 它是一个 CP210x 串行芯片(,在 Linux 中将供应商 ID 和产品 ID 写入 cp210x 驱动程序以允许它连接到 ttyUSB0。这工作正常。
Windows驱动程序来自SiliconLabs - 设备中UART-USB芯片的制造商。
所以在Windows上,它被附加到COM5和Linux到ttyUSB0(Ubuntu,Raspbian(。
使用Wireshark,我可以在两个操作系统上成功窥探USB总线。
USB设备定期通过USB总线发送数据,并且在Windows上使用Wireshark,我可以将此通信视为"URB_INTERRUPT"消息,最后几个字节实际上包含我需要的数据。
在Linux上,设备似乎可以连接,但这次使用Wireshark我只能看到URB_BULK数据包。使用 pyusb 检查端点时,我发现没有URB_Interrupt端点,只有URB_Bulk。
使用 Linux 上的 pyusb 库,似乎唯一可用的端点是 URB_BULK。
问题主要是我如何告诉Linux让设备通过中断传输机制发送,就像Windows似乎所做的那样。 我在 pyusb 的set_configuration中没有看到执行此操作的方法(因为没有出现中断传输端点(,并且在制造商的规格中没有找到任何内容。
当然,如果做不到这一点,我可以窥探 Windows 上的配置消息,但这里一定缺少一些东西?
忽略这一点,答案最终很简单:Windows正在将总线上的设备地址重新分配给其他设备。