Why does lsusb show USB2 devices connected to a USB3 port as being
attached to the USB 2 root?
Answer :
In USB 3.0, dual-bus architecture is used to allow both USB 2.0 (Full
Speed, Low Speed, or High Speed) and USB 3.0 (SuperSpeed) operations
to take place simultaneously, thus providing backward compatibility.
Source: https://en.wikipedia.org/wiki/USB_3.0
For instance, on a machine that contains two 2.0 USB ports and one USB 3.0 port, the output of the lsusb
command shows:
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 8087:8004 Intel Corp.
Bus 003 Device 001: ID 1d6b:0008 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 058f:6386 Alcor Micro Corp. Multi Flash Reader
Bus 002 Device 001: ID 1d6b:0007 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
The extra USB 2.0 root hub is part of the USB 3.0 root hub and is available there to provide backward compatibility with USB 2.0 standards. As a result of this, when you connect USB2 devices into USB3 port, they are shown connected to 2.0 root hub.
Is there a way to get the physical rather than logical mapping of USB
ports to hubs?
Answer:
Use lsusb -t
-t Tells lsusb to dump the physical USB device hierarchy as a tree.
Source: lsusb
man page
Coming back to my original reason for looking into this, is there a
way to tell what speed the internal SD card reader is capable of
before buying one?
This can be done by using the following steps. Here we are considering a laptop with a built-in card reader from Alcor Micro Corp.
Use lsusb
command
$ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 8087:8004 Intel Corp.
Bus 003 Device 001: ID 1d6b:0008 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 058f:6386 Alcor Micro Corp. Multi Flash Reader
Bus 002 Device 001: ID 1d6b:0007 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Find out the Bus number of the card reader. In this example it is 001
Use lsusb -t
$ lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
|__ Port 5: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M
At the end of each line, the negotiated communication speed for each device is shown in Mbits/s.
The 480Mbit/s is called "Hi-Speed" and is used with USB2.0.
For USB 3.0, the negotiated communication speed is 5000Mbit/s called "SuperSpeed" (5Gbit/s)
Source: https://en.wikipedia.org/wiki/USB
Result: the card reader from Alcor Micro Corp supports USB 2.0 standards and not USB 3.0 standards as 480M was mentioned in the output.