我有一个在 ARM 处理器上运行 Linux 的嵌入式平台。
有一个 USB3 摄像头通过 USB3 HUB(永久嵌入在 PCB 上的集线器,而不是手动连接到 PC 的集线器)连接。
我的目标是确定:
a) 相机实际上使用的是 SuperSpeed
还是
b) 只是标准的 2.0 速度,即使它声称是 3.0。
我已经做的是:
ls -D
给了我这样的信息:
bcdUSB 3.10
bDeviceClass 239 Miscellaneous Device
...
bFunctionSubClass 5 USB3 Vision
iFunction 3 USB3 Vision Device
...
SuperSpeed USB Device Capability:
...
wSpeedsSupported 0x000e
Device can operate at Full Speed (12Mbps)
Device can operate at High Speed (480Mbps)
Device can operate at SuperSpeed (5Gbps)
bFunctionalitySupport 3
Lowest fully-functional device speed is SuperSpeed (5Gbps)
我使用wireshark 来观察主机和USB 3.0 摄像头之间发送的USB 数据包。我可以看到相机将图像作为 URB_BULK 数据包传输。但是,我在wireshark 中看不到USB2 或USB3 的任何细节。
参考:https : //www.wireshark.org/docs/dfref/u/usb.html 显示诸如 usb.speed 之类的符号,但我在 wireshark 中可视化的数据包中看不到这样的字段。另外,我不知道如何将它用作过滤器(usb.speed == 1 或 usb.speed == 0 不起作用)。
但是,我可以看到一些数据包被 Wireshark 视为 USB3 Vision 协议数据包。
那么,您将如何使用这些工具或任何 Linux/GNU 工具来了解您在系统中显示为 USB3.0 的设备是否实际使用 USB3.0 的电线?
或者,换句话说,我从操作系统获得的信息是否足以假设设备使用 USB3 通道,或者使用示波器是唯一的方法?
如果设备在系统句柄中显示为“USB3”,则它肯定使用 SS 通道,否则将显示为“USB2”。
此外,如果您使用简单的命令“lsusb -t”,它将显示整个 USB 设备树以及链接的相应数据速率,“LS 设备”为“1.5M”,FS 设备为“12M”,FS 设备为“480M” HS 设备,“5000M”用于 USB3 Gen1 设备连接,“10000M”用于 Gen2 连接。
如果设备是 USB3,但显示为“480M”已连接,则表示该端口有问题,信号完整性较差,或连接器的插头极性支持错误/损坏。