如何确定我已将设备插入 USB 3 端口?

Tho*_*son 20 linux usb usb-3

我的计算机上有多个 USB 端口,一些 USB 2 和一些 USB 3。我想将设备插入 USB 3 端口。不幸的是,它们都是黑色的,所以我不能使用通常的“USB 3.0 端口是蓝色”的经验法则。

这是一个 Linux 机器,所以有什么方法可以知道我是否已将设备插入 USB 3 端口,也许使用一些命令行实用程序或检查一些内核消息?

Sam*_*son 23

您可以通过运行来确定 USB 版本 lsusb

  • 12M = 12MBit/s = USB1
  • 480M = 480MBit/s = USB2
  • 5000M = 5000MBit/s = USB3.0 又名 USB3.1 gen。1
  • 10000M = 10000MBit/s = USB3.1 代。2

尝试使用类似的东西:

lsusb -D /dev/bus/usb/002/005
Run Code Online (Sandbox Code Playgroud)

USB 2.00/3.00 对应 USB 2.0/3.0

也许甚至尝试使用 lsusb -t

第一个转换表将帮助您确定 USB 版本。

查看链接以获取更多示例。

  • 这个答案实际上是***错误***。正如另一个答案中所述,这仅报告*设备*是否支持 USB 3,而不是报告它是否插入 USB 3 *端口*。 (5认同)

Ala*_*oni 13

正如 @MarkHu 和 @Matthew 指出的,当前接受的答案 (lsusb -D) 可能会产生误导,因为它列出了设备支持的速度,而不是实际速度。或者,至少我无法使用它的输出来查找当前的设备速度。

如果它不协商 USB 3 速度,它是否是 USB 3 端口还有关系吗?

查看 Linux 机器上的实际速度有点麻烦;目前 lsusb 似乎没有提供开箱即用的解决方案。这就是我发现的工作。首先,列出所有连接的设备和集线器以识别您的设备:

> lsusb
Bus 002 Device 003: ID 0424:2660 Microchip Technology, Inc. (formerly SMSC) Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 1058:25ee Western Digital Technologies, Inc.
Bus 001 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Run Code Online (Sandbox Code Playgroud)

就我而言,我正在查看外部 WD MyBook 磁盘的速度。因此有趣的一行是:

Bus 001 Device 004: ID 1058:25ee Western Digital Technologies, Inc.
Run Code Online (Sandbox Code Playgroud)

但是,“Bus 001 Device 004”部分对于我们查找当前设备速度似乎没有用。相反,我们需要两个用冒号分隔的数字 1058:25ee,即此类设备的供应商 ID 和产品 ID。

您现在应该检查/sys/devices目录中的文件内容idVendor,从上面查找供应商 ID(将 1058 替换为您自己的供应商 ID)

> find /sys/devices/ -name idVendor -print -exec cat {} \; | grep -B 1 1058
./pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/idVendor
1058
Run Code Online (Sandbox Code Playgroud)

现在将上面的输出路径替换为idVendorspeed查看其内容:

> cat ./pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/speed
480
Run Code Online (Sandbox Code Playgroud)

这样您就会发现 480Mbps USB 2.0 连接。

如果您有多个连接的设备,您idProduct也可以检查内容。如果您有多个相同的serial设备,也请查找其中的内容。


Mar*_*kHu 8

我的经验是,lsusb -D如果该命令报告您的设备所插入的插孔类型当前未启用的“功能”,则该命令可能会产生误导。请参阅下面的过滤输出示例(整个输出有sudo lsusb -D ${USB_DEVICE_PATH}80 多行)。在这个例子中,我推断bcdUSB 3.00应该暗示Device can operate at SuperSpeed (5Gbps)——尽管当我将驱动器插入 USB 2 插孔进行比较时,该线仍然存在。

$ lsusb -D /dev/bus/usb/007/003 | egrep -i 'usb|speed|version|Mbps|gbps|id|speed'

Device: ID 174c:1153 ASMedia Technology Inc. ASM2115 SATA 6Gb/s bridge
  bcdUSB               3.00
  idVendor           0x174c ASMedia Technology Inc.
  idProduct          0x1153 ASM2115 SATA 6Gb/s bridge

  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)
      Lowest fully-functional device speed is Full Speed (12Mbps)
Run Code Online (Sandbox Code Playgroud)

另请注意,该idProduct行包含一些建议/营销文本,6Gb/s不应将其解释为可达到的速度。

可能更有用的替代短命令:

$ sudo lsusb -t | egrep -i "storage" -B1

/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
    |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
Run Code Online (Sandbox Code Playgroud)