USB 2.0 host controller implementations typically include a companion controller architecture to support devices operating at different speeds.


Companion Controller Architecture

Info

The xHCI controller introduced with USB 3.0 eliminates the need for companion controllers entirely — see USB 3.0 Host Controllers.


Example: Eight-Port Companion Controller

Eight-Port Companion Controller Built into Chipset.png


Port Routing Logic

Routing Behavior

Device Speed Routed To
High-speed Remains on the EHCI controller
Full-speed Routed to the appropriate UHCI/OHCI companion
Low-speed Routed to the appropriate UHCI/OHCI companion

Routing Process

  1. A device is attached to a root port
  2. EHCI detects the connection and performs a port reset
  3. During reset, the device's speed is determined via electrical signaling:
    • High-speed devices complete the high-speed handshake (chirp protocol)
    • Full/low-speed devices do not respond to the chirp
  4. If the device is not high-speed, EHCI releases the port ownership to the companion controller
  5. The companion controller then manages the port and communicates with the device
Note

Port routing is transparent to the USB device — the device is unaware of which controller is managing it.


Why Companion Controllers Exist

The EHCI specification was designed to only handle high-speed transactions natively. LS/FS transactions have different timing and signaling requirements that EHCI hardware does not directly support at the root port level.

This is in contrast to how EHCI handles LS/FS devices behind downstream high-speed hubs, where the hub's Transaction Translator bridges the speed gap.