Why does the HX3 connected to USB 2.0 port not have enough isochronous bandwidth for my second device?
Understanding HUB Transaction Translation Bandwidth Losses
High speed upstream port handling a low speed downstream device ends up with bandwidth losses. However, this issue will not apply to the (USB SuperSpeed (SS) data path. This higher or lower speed device has a separate dedicated data path (also electrically separated) and this will not interfere with the SS upstream port. So, considering the HUB translation bandwidth losses is not correct for SS transactions.
Understanding from Host Driver Perspective
- Host allocates ISO bandwidth on a first-come-first-serve basis.
- For handling bandwidth starvation, all ISOC devices are expected to provide multiple switchable bandwidth options including zero bandwidth option. The Host Client Driver is expected to select the right bandwidth based on the bandwidth availability in the system.
- For example, consider a USB 2.0 webcam device with the following interfaces:
Interface 0 (Default interface setting: No endpoints with non-zero isochronous bandwidth in the default setting)
Isochronous Endpoint 1: maximum packet size = 0 bytes
Isochronous Endpoint 2: maximum packet size = 0 bytes
Interface 0 Alt setting 1
Isochronous Endpoint 1: maximum packet size = 256 bytes
Isochronous Endpoint 2: maximum packet size = 256 bytes
Interface 0 Alt setting 2
Isochronous Endpoint 1: maximum packet size = 512 bytes
Isochronous Endpoint 2: maximum packet size = 512 bytes
- Most likely, the first incoming device to the host system will receive full bandwidth (Alt setting 2 in this example).
- Second device will show up with default zero bandwidth; so, the device will enumerate. Now, the Host Client Driver will try to switch the device for maximum bandwidth options (Alt setting 2). USB Host controller stack can accept or reject this request based on the system bandwidth availability. If USB Host controller stack rejects this request, then the Client driver will attempt for the next lower bandwidth option (Alt setting 1). USB Host controller stack will remove or fail the device enumeration if the device does not support the desired bandwidth.
Bandwidth throttle down comes from the Host Client Driver based on system USB stack acceptance. USB Host controller stack plays the major role in isochronous bandwidth management.
ISO bandwidth adjustment is beyond any user control. This is dynamically driven by OS USB software stack (root hub driver + Host Controller Driver).
- Windows 7 based system’s USB 2.x Host controller gets the standard Microsoft USB stack. However, USB 3.x Host controller gets a third-party USB stack. USB 2.0 path of USB 3.x host controller still receives a third-party USB stack. There is a definite difference in terms of software stack and its behavior.
- Windows 10 Microsoft stack has more scrutiny on isochronous bandwidth. Isochronous system bandwidth is also determined based on the processor, RAM, or other system hardware resources availability and bandwidth that are impacted by this high bandwidth device. This is an attempt to improve the end user experience by sacrificing the high bandwidth device functionality.
For more details, visit the Microsoft Website.