[German]When connecting USB devices, some Windows 10 users experience an unpleasant surprise. Windows reports ‘Not enough USB controller resources’. Here are some hints about the background of this error.
A description of the error
I confess, I haven’t had this behavior on the radar before. Then I stumbled upon an English-language Tweet reporting that issue.
What does this mean? I’m plugging in a pair of USB-C headphones. I have zero other USB peripherals plugged in. This is a Surface Book 2. pic.twitter.com/dcbDH02YQF
— Zac Bowden (@zacbowden) September 4, 2019
But a search for the english error message brings more hits. The hit from the Microsoft Answers forum is from 2019 and describes the problem as follows:
Not Enough USB Controller Resources Windows 10 version 1809
Hello, and sorry for the long post.
I decided to upgrade my motherboard and processor after 4 years, and after installing the Aorus x470 and R7 2700x, I couldn’t get more than 3 USB 2.0 devices to work at the same time. After hours of frustration and phone calls to Gigabyte, AMD, and Microsoft support, the best advice was to reinstall Windows 10 Home and Pro, multiple times. Still, the problem persisted.
Concluding that the new hardware was malfunctioning, I decided to change back to my old hardware (Gigabyte GA-B150M and I5 6500), and reinstalled my copy of Windows 10 Pro. Note that this is the hardware and OS that I was running before, and never ran into this problem, even after using 4 USB 3.0 devices and 6 USB 2.0 devices. I also never updated my copy of Windows in the past, so I was probably running on a 17xx version, not 1803 or 1809. After reinstalling my old hardware, the problem persisted. I still cannot get more than 3 USB 2.0 devices working at the same time, which is frustrating and detrimental to my work.
I have tried all sorts of driver updates, BIOS updates and flashing, Windows power options, registry editing, etc, etc. I have not been able to find a solution. My problem seems to be fairly unique, as googling has not been super helpful. I am not sure how I still have this problem, even though the hardware is the same as I had 2 days ago. The only difference is the Windows version, and the associated drivers.
Is anyone else having the problem, and found a fix? Is it a problem with Windows, or something else?
The devices I am trying to connect are:
Flash Drives / External HDD
Any combination of 3 work, more than 3 causes static in the headphones, on/off cycling, etc.
You will find similar posts within the Internet in several forums – but in most time without a solution. They suggest updating chipset driver or use a hub, what doesn’t help.
The technical background
During my research I came across this reddit.com post, which provides a quite good explanation. A user, who probably also owns Oculus-Rift VR glasses, had dealt with several USB extension cables and hubs. He also came across the above error and started digging through the USB specifications. The error that not enough resources are available for the USB connection has nothing to do with the power supply, as is often assumed. Here are the explanations I have derived from his text.
- A USB port can communicate (via hub) with several devices. USB is a bus system to which up to 127 devices can theoretically be connected.
- The amount of USB devices and which devices a USB connection can handle is determined once by the power supply. But there are further criteria for communication
- A certain bandwidth must be reserved for each so-called endpoint (i.e. a connected device such as a USB mouse).
The author of the reddit post has found out that there are two situations for connecting the USB device to the USB socket.
- When a USB device establishes a connection, it creates a number of endpoints, i.e. channels that communicate to the device or back from the device to the controller. A flash drive can create 3 endpoints, an IN and OUT, and a control channel. The sensors of Oculus Rift VR glasses seem to use 7 and a USB headset at least 10 endpoints.
- The first problem is that USB 3.0 controllers have a limit of 96 endpoints per controller (is a hardware limit from Intel XHCI controllers, AMD controllers can have 254 endpoints, see 2nd post here). If the user connects enough devices, the above message appears that there are not enough USB resources available. Then USB devices will be disconnected if they are struggling for the limited number of endpoints.
- The second restriction is that each USB 3.0 port is limited to 2×16 endpoints (16 IN and 16 OUT each, see also, but almost all devices use the IN setting for the communication channels).
If a hub physically supports the connection of 2 to 4 rift sensors and each rift sensor uses 7 IN endpoints, at best 2 sensors can be connected to a USB 3.0 hub. Then the limit of 16 endpoints is exceeded for the third sensor. If a headset is connected to a hub, adding another USB device becomes a gamble. Depending on the device, the number of 16 endpoints has been exceeded.
The author of the reddit post sees it in such a way that in practice a maximum of 2 Ocolus-Rift USB-VR devices can be connected to a post. With other devices more or less devices can be operated per hub.
The whole thing is not really a bandwidth problem, since USB 3.0 has a much larger bandwidth than is required for the sensor data. It’s just that USB 3.0 allows half of the channels that are possible under USB 2, writes the author of the reddit article. So if you have too few USB ports, you may not get far with a USB hub, even if it has a power supply. This is stupid for devices that come with only one USB-C socket.
What can you do?
Unfortunately, there is no utility that can specify how many EndPoints a device uses. Utilities like Uwe Sieber’s USB Device Tree Viewer can show you how many controllers are available and which ports go where. The tool can also display EndPoint configurations. But a clean calculation of how many USB devices can be operated on the port is probably not possible.
Sometimes you read (like here) that you should turn off xHCI in the BIOS. Disabling xHCI in the BIOS forces all USB 3.0 ports into 2.0 mode. This does not solve the problem that only 15 endpoints are supported per USB port. This reddit.com post mentions a USB switcher tool that can be used to switch USB 2.0 posts to other controllers. This might help to reserve enough bandwidth.
Troubleshooters, as offered on some websites for automatic repair, should be avoided. You can use the wizards integrated in Windows for troubleshooting. But I am sceptical that they will solve the problem. The same applies to uninstalling and reinstalling USB drivers – if no new driver is available.
Maybe you can use USBDeView to remove the previously used USB devices and get rid of the error. This approach is also mentioned in this German forum thread. Maybe it will help – if someone knows another solution, he can leave a comment.