Host controller interface (USB, Firewire)

From Wikipedia, the free encyclopedia
Jump to: navigation, search

A host controller interface (HCI) is a register-level interface that enables a host controller for USB or IEEE 1394 hardware to communicate with a host controller driver in software. The driver software is typically provided with an operating system of a personal computer, but may also be implemented by application-specific devices such as a microcontroller.

On the expansion card or motherboard controller, this involves much custom logic, with digital logic engines in the motherboard's controller chip, plus analog circuitry managing the high-speed differential signals. On the software side, it requires a device driver (called a Host Controller Driver, or HCD).

IEEE 1394[edit]

Open Host Controller Interface[edit]

Open Host Controller Interface (OHCI)[1] is an open standard.

When applied to a IEEE 1394 (also known as FireWire; i.LINK or Lynx) card, OHCI means that the card supports a standard interface to the PC and can be used by the OHCI IEEE 1394 drivers that come with all modern operating systems. Because the card has a standard OHCI interface, the OS does not need to know in advance exactly who makes the card or how it works; it can safely assume that the card understands the set of well-defined commands that are defined in the standard protocol.


Open Host Controller Interface[edit]

The OHCI standard for USB is similar to the OHCI standard for IEEE 1394, but supports USB 1.1 (full and low speeds) only; so as a result its register interface looks completely different. Compared with UHCI, it moves more intelligence into the controller, and thus is accordingly much more efficient; this was part of the motivation for defining it. If a computer provides non-x86 USB 1.1, or x86 USB 1.1 from a USB controller that is not part of an Intel or a VIA chipset, it probably uses OHCI (e.g. OHCI is common on add-in PCI Cards based on an NEC chipset). It has many fewer intellectual property restrictions than UHCI.[2] It only supports 32-bit memory addressing,[3] so it requires an IOMMU or a computationally expensive bounce buffer to work with a 64-bit operating system. OHCI interfaces to the rest of the computer only with memory-mapped I/O.[3]

Universal Host Controller Interface[edit]

Universal Host Controller Interface (UHCI) is a proprietary interface created by Intel for USB 1.x (full and low speeds). It requires a license from Intel. A USB controller using UHCI does little in hardware and requires a software UHCI driver to do much of the work of managing the USB bus.[2] It only supports 32-bit memory addressing,[4] so it requires an IOMMU or a computationally expensive bounce buffer to work with a 64-bit operating system. UHCI is configured with port-mapped I/O and memory-mapped I/O, and also requires memory-mapped I/O for status updates and for data buffers needed to hold data that needs to be sent or data that was received.[4]

Enhanced Host Controller Interface[edit]

The Enhanced Host Controller Interface (EHCI)[5] is a high-speed controller standard applicable to USB 2.0. UHCI- and OHCI-based systems, as existed previously, entailed greater complexity and costs than necessary. Consequently, the USB Implementers Forum (USB-IF) insisted[when?] on a public specification for EHCI. Intel hosted EHCI conformance-testing and this helped to prevent the incursion of proprietary features.

Originally a PC providing high-speed ports had two controllers, one handling low- and full-speed devices and the second handling high-speed devices. Typically such a system had EHCI and either OHCI or UHCI drivers. The UHCI driver provided low- and full-speed functions using an Intel or VIA chipset's USB host controllers on the motherboard. The OHCI driver provided low- and full-speed functions for USB ports of a PCI expansion card with any other chipset vendor's integrated USB host controllers or discrete controller chipsets attached to the computer's expansion bus, if present. The EHCI driver provided high-speed functions for USB ports on the motherboard or on the discrete USB controller. More recent hardware routes all ports through an internal "rate-matching" hub (RMH), and the EHCI controller indirectly provides full and low speed USB functions.

EHCI was designed[by whom?] to work with 32-bit or 64-bit operating systems, so it does not need a bounce buffer or IOMMU to work with a 64-bit operating system as long as a rate-matching hub is implemented to provide full-speed and low-speed connectivity instead of companion controllers.

Extensible Host Controller Interface[edit]

Extensible Host Controller Interface (xHCI) is the newest host controller standard that improves speed, power efficiency and virtualization over its predecessors. The goal was also to define a USB host controller to replace UHCI/OHCI/EHCI. It supports all USB device speeds (USB 3.1 SuperSpeed+, USB 3.0 SuperSpeed, USB 2.0 Low-, Full-, and High-speed, USB 1.1 Low- and Full-speed).

See also[edit]


  1. ^ [1][dead link]
  2. ^ a b "Linux USB FAQ". August 27, 2007. Retrieved April 13, 2014. 
  3. ^ a b [2][dead link]
  4. ^ a b "UHCI11D.DOC" (PDF). Retrieved 2017-01-10. 
  5. ^ "Enhanced Host Controller Interface Specification". Retrieved 2017-01-10. 

External links[edit]