The USB Host Controller is part of the chipset (or CPU). It appears to the system as a PCI device. USB 2.0 controllers usually use the companion controller architecture.

Companion Controller and Register Sets.png


PCI Configuration Addressing

PCI devices are identified using:

Example Mapping

Controller PCI Address
UHCI 0 B0:D29:F0
UHCI 1 B0:D29:F1
UHCI 2 B0:D29:F2
UHCI 3 B0:D29:F3
EHCI 0 B0:D29:F7

Key Idea


Register Types

Each USB host controller has two main types of registers:

1. PCI Configuration Registers

Key Config Register Offset Purpose
Vendor ID / Device ID 0x00–0x03 Identify the controller
Command 0x04 Enable I/O, memory, bus master
Status 0x06 Report error flags, capabilities
BAR (Base Address Register) 0x10+ Map controller registers into address space
Interrupt Line / Pin 0x3C–0x3D IRQ routing

2. Controller Register Blocks

EHCI Register Layout

Register Group Purpose
Capability Registers Read-only; describe controller version and structural parameters
Operational Registers Control run/stop, frame list base, async schedule, port status/control
Port Status/Control One register per port — detect connect, reset, enable, speed

UHCI Register Layout (I/O-mapped)

Register Purpose
USBCMD Command register (run/stop, host controller reset)
USBSTS Status register (interrupt, error, host system error)
USBINTR Interrupt enable register
FRNUM Frame number (current SOF frame count)
FLBASEADD Frame list base address (pointer to schedule in memory)
PORTSC Port status/control (one per port)

Functions Managed

Tip

For xHCI (USB 3.0) register architecture — including Capability, Operational, Runtime, and Doorbell registers — see xHCI Architecture Overview.