Is There an Actual USB Communication Protocol?

is-there-an-actual-usb-communication-protocol photo 1

Most of us never give much thought to our USB devices, we just plug them in and forget about them. But what if you are the curious type who wants to know more about how USB works? Today’s SuperUser Q&A post has the answers to a curious reader’s questions.

Today’s Question & Answer session comes to us courtesy of SuperUser—a subdivision of Stack Exchange, a community-driven grouping of Q&A web sites.

Photo courtesy of Evilelka Kowalski (Flickr).

The Question

SuperUser reader smeeb wants to know if there really is an actual USB Communication Protocol:

According to Wikipedia, USB:

  • Defines the cables, connectors, and communications protocols used in a bus for connection, communication, and power supply between computers and electronic devices.

But is there an actual USB Communication Protocol? My understanding is that:

  1. You connect a USB device to a machine (Ubuntu or any kind of Linux for example).
  2. Linux finds the device driver for that device somehow (bonus if you know!) and loads it.
  3. The device is now connected under /dev/theDevice.
  4. User space apps can now read and write to /dev/theDevice and the driver handles the low-level input and output to the underlying device/hardware.

As far as I can tell, a USB Communication Protocol does not appear anywhere in this flow. If my understanding is correct, the USB is just the cable and electrical connection between the PC and the device.

Am I wrong here? Does USB actually implement some kind of low-level protocol that underscores the flow above? If so, what is it and how does it work at a 30,000 foot view?

Is there an actual USB Communication Protocol?

The Answer

SuperUser contributors RedGrittyBrick and projectdp have the answer for us. First up, RedGrittyBrick:

Yes (see USB protocols).

As I understand it, the USB spec defines a complex set of layered protocols and device profiles.

For example, USB devices can conform to high-level templates like mass-storage, keyboard, human interface device, etc. and be managed by a generic device driver. Some USB devices can communicate at a lower level such that the operating system’s low level USB support can recognize that device-specific higher level drivers are needed.

Followed by the answer from projectdp:

Question

Is there a low-level USB communication protocol in action and what is it?

Answer

Yes, there is. The USB specification includes the USB protocol which defines the way the bus is used on a bit level. This would be the low-level protocol that underlies the higher level protocols (i.e. mass-storage, HID, etc.).

For specifics on how the USB protocol works, this OSDev wiki is helpful. Here is another interesting description using sequence diagrams to describe the various data transactions per the USB protocol.

Bonus Question

How does Linux find and load the device driver for that device?

Bonus Answer

On Linux when using a USB-enabled kernel, a working USB device will be detected via the hardware and kernel due to the USB specification. On the hardware side, the detection is done by the USB Host Controller. Then in the kernel the Host Controller Driver takes over and translates the low-level bits on the wire to USB protocol formatted information. This information then gets populated in the usbcore driver in the kernel.

I paraphrased from this excellent Opensourceforu article, which has much more detail and clarity about your question in the Linux context.

Make sure to check out the rest of the lively discussion via the thread link shared below!


Have something to add to the explanation? Sound off in the comments. Want to read more answers from other tech-savvy Stack Exchange users? Check out the full discussion thread here.

More stories

How to Tell Whether Your Windows PC is Using a Proxy Server

While researching for our article about what happens when you install crapware from a really lousy download site, we noticed that some of the crapware and spyware will actually try to install a proxy server to spy on you. So how do you know if your PC is using a proxy?

Should You Buy Extra RAM for an Old Computer?

Sometimes you have an older but still very useful computer and are faced with a dilemma, should you upgrade it or simply hold out until you can buy a new one? Today’s SuperUser Q&A post discusses the dilemma in order to help a reader make a decision.

Three Ways to Access the Windows 8 or 10 Boot Options Menu

The boot options have been consolidated in Windows 8 and 10 into a single menu, called the “boot options menu,” providing access to repair tools and options for changing Windows startup behavior, such as enabling debugging, booting into safe mode, and launching into a recovery environment.