我如何知道连接到 Linux 计算机的 USB 3 设备是否实际使用了 SuperSpeed 通道?

我如何知道连接到 Linux 计算机的 USB 3 设备是否实际使用了 SuperSpeed 通道?

我有一个在 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”,则表示该端口有问题,要么信号完整性差,要么连接器的插头极性支持错误/损坏。

相关内容