我有一个在 ARM 处理器上运行 Linux 的嵌入式平台。
有一个通过 USB3 HUB(永久嵌入在 PCB 上的 Hub,而不是手动连接到 PC 的 Hub)连接的 USB3 摄像头。
我的目标是查明:
a) 相机是否真正使用了 SuperSpeed
或
b) 尽管它声称是 3.0,但实际上只是标准的 2.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 通道,或者使用示波器是找出答案的唯一方法?
答案1
知道您在系统中显示为USB3.0的设备是否实际使用了USB3.0的线?
如果设备在系统句柄中显示为“USB3”,则它肯定使用 SS 通道,否则它将显示为“USB2”。
另外,如果您使用一个简单的命令“lsusb -t”,它将向您显示整个 USB 设备树及其相应的链接数据速率,LS 设备为“1.5M”,FS 设备为“12M”,HS 设备为“480M”,USB3 Gen1 设备连接为“5000M”,Gen2 连接为“10000M”。
如果设备是 USB3 但显示连接在“480M”,则表示该端口有问题,要么信号完整性差,要么连接器的插头极性支持错误/损坏。