Skip to content

USB Port Speed & Version Detection (Linux)

Goal

Determine:

  • USB version (2.0 / 3.0 / 3.1 / 3.2)
  • Negotiated link speed
  • Active driver (UAS vs BOT)
  • Physical controller used

Identify Device

lsusb

Pick a usb device

lsusb -d 152d:0578
Bus 002 Device 003: ID 152d:0578 JMicron JMS578

View USB Topology & Speed

lsusb -t
/:  Bus 002.Port 001: Dev 001, Driver=xhci_hcd/10p, 5000M
    |__ Port 002: Dev 003, Driver=usb-storage, 5000M
Speed USB Version
12M USB 1.1
480M USB 2.0
5000M USB 3.0 / 3.1 Gen1
10000M USB 3.1 Gen2
20000M USB 3.2 Gen2x2

Check Exact Negotiated Speed (sysfs)

Determine device path

cat /sys/bus/usb/devices/2-2/speed
5000
  • Meaning: 5 Gbit/sUSB 3.0

Identify Controller Type

lspci | grep -i usb

Controller drivers:

Driver Meaning
xhci_hcd USB 3.x controller
ehci_hcd USB 2.0 controller
ohci_hcd USB 1.x

Check Storage Driver (UAS vs BOT)

From lsusb -t output might look as below:

Driver=usb-storage    BOT mode
Driver=uas            UAS mode

UAS is preferred (better performance, lower CPU).

Check kernel messages

dmesg | grep -i uas

Quick Checklist

lsusb -d <VID:PID>
lsusb -t
cat /sys/bus/usb/devices/<bus-port>/speed
lspci | grep -i usb
dmesg | grep -i uas

Example (JMS578 Case)

  • Device: 152d:0578
  • Controller: xhci_hcd
  • Speed: 5000
  • Mode: usb-storage
  • Result: USB 3.0 SuperSpeed (5 Gbit/s)

Notes

  • Marketing labels (3.1 / 3.2) are often ambiguous.
  • The negotiated speed is what matters.
  • A USB 3 port running at 480M = device or cable limitation.