Why can't I connect more USB 3.0 devices to my system?

2017 August 7

Some customers who have been using multiple Acroname USBHub3+ hubs have shared with us that they cannot add more than two USBHub3+ hubs to their system or that they are running out of USB resources. As it happens, this is not a limitation of USBHub3+ itself, but rather a limitation of the host USB controller silicon and the host machine's implementation of the USB controller.

The USB specification defines two different connectivity types in the USB tree topology: number of layers or tiers and number of endpoints or functions. Layers are commonly thought of as hubs, where each hub is, in fact, its own USB device as well as the start of a new layer of USB devices. Here is a good illustration of a USB tree showing a host USB controller, which is always at the root level, with 4 tiers of USB hubs below and a total of 7 devices or functions:

Though the USB specification is limited to maximum 7 layers and/or 255 endpoints, each USB controller model may have its own layer or endpoint limitations. Most host systems have just one USB controller that is integrated in the host system chipset.

Here, you can see a diagram of a typical PC architecture. We have expanded the diagram to expand on the USB section, showing the USB Type A connectors:


What is not commonly known is that many host machines use hub chips internally to expand the number of available USB connectors. So, it is possible that the USB connector on your host machine is already one or even two tiers deep in the overall USB tree:



Each individual USB device consumes 3 USB endpoints: one endpoint for bulk transfers, one for isochronous transfers and one for control.

Many modern USB 3.0 hosts use Intel XHCI USB controllers, which impose their own limit on the total number of endpoints to 96. This means that the maximum number of devices able to be attached to an Intel XHCI host controller - or an XHCI-based host system - is actually 96 endpoints / 3 endpoints per device = 32 devices. This is a known limitation of Intel-based XHCI controllers:

Architecturally, 8-port USB hubs implement their 8-port configuration by internally cascading USB hub chips. Each individual hub chip contains both a USB 2.0 device as well as a USB 3.0 device. USBHub3+ is no different and we can see this architecture clearly in the USBHub3+ datasheet:

You can now see that each USBHub3+ unit is actually comprised of three hub chips in two internal hub layers: Hub A on one layer and Hub1/Hub2 on a second layer. Remember that each hub chip itself contains a USB 2.0 and a USB 3.0 device which will be added to  the system USB tree. Given these 3 internal hub chips, each USBHub3+ adds 2 layers to the USB tree and represents 6 devices (3 hub chips * 2 devices per hub chip).

Going back to example of the commonly available Intel XHCI-based host system, the integrated controller supports a maximum of 32 available USB devices. If we use 8-port USB 3.0 hubs to connect devices to our host machine, this means that you could attach 18 total devices:

HUB #1 (1 hubs * 6 devices / hub) + 8 attached devices = 14 devices +
HUB #2 (1 hubs * 6 devices / hub) + 8 attached devices = 14 devices +
HUB #3 (1 hubs * 6 devices / hub) + 2 attached devices = 8 devices
= 32 total devices for XHCI

What also begins to become clear is that if the USBHub3+ adds 2 layers to the USB tree, you quickly get to the maximum USB layer count in your system by daisy-chaining 3 USBHub3+ units. This number can be further impacted by a host machine where the USB connectors are already expanded by internal hubs. In practice, the Acroname support team has seen most host machines are able to support daisy-chain configurations of up to 2 USBHub3+ hubs. Some hosts which do not use internal hubs can support up to 3 USBHub3+ hubs.



Those are the limitations… so what are the solutions?

Force your system to use EHCI instead of XHCI (Linux)
Thanks to Marc Merlins for pointing out the magic to force your system to use EHCI instead of XHCI.
More information on the limitations of Intel's XHCI
More information on Linux driver

Use a USB 2.0 cable from your host to USBHub3+:
If you need to add more than 18 total devices to your XHCI system and you do not need USB 3.0 performance, the simplest solution is to use a USB 2.0 host cable to connect your host to USBHub3+. Since the USBHub3+ is now connected only with USB 2.0, there will not be any enumeration of USB 3.0 devices, including the USB 3.0 hub chips internal to USBHub3+. This will effectively reduce the USBHub3+ footprint in your USB tree from 6 devices to 3 devices.

Add a discrete USB controller to your host:
If you need to add substantially more USB devices to your host, the main limitation is likely the integrated Intel XHCI USB host controller. Discrete USB host controllers do not typically have this limitation. Adding a discrete USB host controller in a PCIe expansion slot is a great way to expand the total tree and number of devices available.