USB

From LinuxReviews
Jump to navigationJump to search

Universal Serial Bus (USB) is a set of widely used industry standards for connecting electronic devices. It defines connectors, cables, protocols used for connections and communication and power delivery. There are four different specifications available: USB1.x, USB 2.0, USB 3.x and USB 4.

GNU/Linux Support

The Linux kernel supports USB 1.x-3.x. USB 4 support is merged into linux-next and will likely be available in Linux Kernle 5.6[1].

Most USB devices are supported by the kernel but there are exceptions. Some devices will simply not work at all. Quite a lot of the devices which do work have partial support. As an example, a mechanical USB keyboard with programmable RGB lights on it will work fine as a keyboard in 99% of all cases but the changes of the kernel having support for the RGB part is closer to 10%.

The command-line utility lsusb from usbutils will show what devices are connected to a Linux computer. Invoking it with it's -t option presents a tree view (best used with -v for verbose option as in lsusb -tv or lsusb -t -v).

Standards And Connectors

USB plugs and connectors are backwards-compatible but they are NOT forwards-compatible. There is simply no way to get anything above USB 2 speeds with a USB Type A to Mini B cable. USB 4 speeds can only be archived with a USB Type C to Type C cable.

Available speeds and connectors
Connectors USB 1.0
1996
USB 2.0
2001
USB 2.0
Revised
USB 3.0
2011
USB 3.1
2014
USB 3.2
2017
USB4
2019
Data rate 1.5 Mbit/s
(Low Speed)
1.5 Mbit/s

(Low Speed)

12 Mbit/s

(Full Speed)

480 Mbit/s
(High Speed)

5 Gbit/s
(SuperSpeed)
10 Gbit/s
(SuperSpeed+)
20 Gbit/s
(SuperSpeed+)
40 Gbit/s
(SuperSpeed+ and Thunderbolt 3)
12 Mbit/s
(Full Speed)
Standard Type A Type A SuperSpeed Deprecated
Type B Type B SuperSpeed Deprecated
N/A Type C
Mini N/A Mini A Deprecated
Mini B
N/A Mini AB
Micro N/A Micro A Deprecated
Micro B Micro B SuperSpeed Deprecated
Micro AB Deprecated
Connectors USB 1.0
1996
USB 2.0
2001
USB 2.0
Revised
USB 3.0
2011
USB 3.1
2014
USB 3.2
2017
USB4
2019

USB 4

The USB4 specification[2] was released on 29 August 2019. It is based on Intels Thunderbolt 3 standard. It supports 40 Gbit/s (5 GB/s) which is enough for 4-lane PCIe 3.0 or 2 lanes of DisplayPort 1.2. It is backwards compatible. All USB 4 hubs and controllers must support USB 2 and 3. USB 4 devices have to include USB 2 support but do not need to support USB 3. Only USB type C to type C cables are supported.

Standards Body

The USB standard is maintained by the Amreican "USB Implementers Forum" (USB-IF). It is a supposed "non-profit" organization with a revenue in the ball-park of five million USB. It is largely controlled by the American companies Intel and Apple with IBM and Microsoft, also American, being other notable members.

History

Development of the first USB standard began in 1994 as a joint venture between Compaq, IBM, DEC, Intel, Microsoft, NEC and Nortel. Ajay Bhat headed the research-team assigned to create a working standard. The USB 1.0 specification was published in 1996.

Troubleshooting

Lsusb-example-output.jpg
An example of lsusb -tv output.

The simple lsusb command-line utility from the usbutils package is a great go-to tool for basic troubleshooting of USB devices and specially USB connections.. It will by default present a fairly useless list of devices with bus ID, device ID, vendor, product and a human reable description. Invoking it's -v option will show a very long list of all connected devices with a whole lot of incriminating information about them.

lsusb -tv, which combines -t for tree view with -v for verbose, will display very useful of USB devices, their speeds and the HUB(s) they are conencted to.

If, as an example, a USB stick or HDD you know is capable of USB 3.0 is very slow and lsusb -t -v informs you that the device is seen as "Class=Mass Storage, Driver=usb-storage, 480M" then that's your issue; that's a "High Speed" USB 2.0 connection. A USB 3.0 device should say "Class=Mass Storage, Driver=usb-storage, 5000M".

If a device does not show up in lsusb at all then the kernel either doesn't support it or' it's not seen as connected. Check the cable and check if another USB device works on the same port.


Add your comment
LinuxReviews welcomes all comments. If you do not want to be anonymous, register or log in. It is free.