3

Forgive me if the title is in the form of an XY Problem, but:

I have a Windows system with a lot of USB devices hanging off of it. (I'm an embedded developer with a bunch of clients, and as often as not, need to run longitudinal tests on a bunch of embedded devices.) I observe the following phenomenon:

My default set of USB devices looks like this:

enter image description here

However in this case, my OSBOT TinyCam device is unavailable. ("It looks like another app is using the camera already. Windows Camera app error code 0xA00F4243")

If I eject (or just unplug) ANY four of the EDBG CMSIS-DAP devices and/or Atmel-ICE CMSIS-DAP devices, the TinyCam performs normally.

Which leads me to the questions:

  • Is there a limit to the number of devices the system can manage on the USB bus?
  • Is there additional information I can collect to better diagnose the problem?

Also, I don't believe this is specific to the OSBOT TinyCam. For example, if I unplug all the CMSIS-DAP USB devices and plug in the OSBOT TinyCam and launch the Camera app, the camera works fine. But then if I plug in all the CMSIS-DAP devices AFTER plugging in the TinyCam, my Microchip IDE can no longer access all the CMSIS-DAP devices:

enter image description here

So in this case, it looks like "whoever gets there first" is the one that works, and others are excluded.

3
  • It sounds like your Power Supply is not able to provide enough power to power everything on your system, or you connect too many devices through usb hubs and the bus itself is saturated.
    – LPChip
    Jun 8 at 17:47
  • Are you connecting via an active powered hub or a passive one or straight to ports on the computer? I thought that the limit was quite high (and is borne out here) but it could be that you have a power issue where some ports provide enough power to the controller but the rest of the electronics brown out and the camera or other parts fail to work.
    – Mokubai
    Jun 8 at 18:11
  • All four of my 7-port hubs are individually powered with 3.3A supplies. Two hubs go directly to the computer, two of them are daisy chained from the first two. Jun 8 at 18:31

2 Answers 2

3

It might be that you are encountering the limitation of your USB root host controller as regarding endpoints. This is a hardware limitation that is not related to your operating system.

Each USB device can define up to 32 endpoints (16 inputs and 16 outputs though one must be a control endpoint), but most devices only define 2 or 3 endpoints (e.g. data in, data out, and a control endpoint). Hubs themselves also define at least a control endpoint. Every USB controller implementation may have its own layer or endpoint limitations.

In your case, some of your devices may require more endpoints than others. Your USB root host controller might also have its own limit on the number of endpoints it can support.

To increase the number of endpoints supported by your computer, you need more root USB host controllers. Chaining USB hubs does not add more endpoints, rather reducing the number, as the hubs themselves use up endpoints from the root controller.

Although the USB specification allows a huge theoretical number of devices on one root controller, the practical limitations inherent in the implementation of USB controllers further constrain the possible maximum to a much lower number.

A tool to examine the number of endpoints (and everything else) on your USB devices is the open-source USB Device Tree Viewer. It can show the endpoints used by a device, but doesn't show the limit for the root controller.

For example, here it is showing 3 endpoints for a connected USB disk:

enter image description here

Some sources about the subject :

3
  • Good answer. Is there a way (e.g. using device manager or some CLI tool) that I can list out the topology to see if I'm hitting that limit? Jun 8 at 18:33
  • 1
    I added the tool to my answer.
    – harrymc
    Jun 8 at 20:09
  • USB Device Tree Viewer is super helpful - I still have to stare at it for a while to fully understand what it's trying to tell me, but it appears my USB tree goes "too deep". Jun 8 at 20:57
2

The Solution: branch wide, not deep

@harrymc Correctly answered the question: the USB topology was "too deep" which limited the number of endpoints.

Previously, I had four 7-port USB expanders, "A" and "C" were connected directly to the PC, "B" and "D" were daisy chained from "A" and "C".

+-----+   +---------+   +---------+
|     |<=>|A        |<=>|B        |
|     |   +---------+   +---------+
|     |   +---------+   +---------+
| PC  |<=>|C        |<=>|D        |
+-----+   +---------+   +---------+

I reconfigured my setup so "A", "B", "C" and "D" all connected directly to the PC.

+-----+   +---------+
|     |<=>|A        |
|     |   +---------+
|     |   +---------+
|     |<=>|B        |
|     |   +---------+
|     |   +---------+
|     |<=>|C        |
|     |   +---------+
|     |   +---------+
| PC  |<=>|D        |
+-----+   +---------+

This reduced the depth of my USB device tree by a level, and I can now support all of the devices I need simultaneously.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.