NOTICE: The Processors Wiki will End-of-Life in December of 2020. It is recommended to download any files or other content you may need that are hosted on The site is now set to read only.

Inventra HDRC USB Controller

From Texas Instruments Wiki
Jump to: navigation, search

The Inventra HDRC USB Controller (HDRC = Highspeed Dual Role Controller) is a member of an ASIC design family that is used by TI and several other vendors for implementing USB functionalities. Modes of the unit are master (host, A device; with high, full and low speed) and slave (gadget, B device; high and full speed). Some variants might only support 4 fully flexible endpoints in slave mode at the same time. In master mode some variants of this units might only drive one slave or endpoint at a time plus one hub in between. Due to the sufficiently smart switching ability between those modes the USB On-The-Go (OTG) standard is implemented by this unit.

TI semiconductors equipped with this unit

This unit is used in these TI devices:

  • DaVinci (DM355, DM365, DM644x, DM6467)
  • OMAP (OMAP 243x, OMAP 3; DA830/OMAP-L137)
  • TUSB 6010

Linux drivers

This unit is supported by the Linux kernel by the musb code and module. For using it it needs to be enabled whilst configuring the kernel included desired sub options and maybe the more general Linux USB OTG capability.

The TI data sheet for the OMAP35x (dated July 2008) lists this features:

  • Host mode driver
    • Mass Storage Class (MSC) Host
    • Hub Class.
    • Human Interface Devices (HID)
    • Isochronous Devices(ISO)
  • Slave mode driver
    • Mass Storage Class (MSC) Slave.
    • Communication Device Class (CDC) Slave support
    • Remote Network Driver Interface Specification (RNDIS) Slave support.

For that specific processor at that time OTG was mentioned as not-supported by the described version of the drivers.

The LSP 1.20 documentation (April 2008) for the DaVinci family states this:

The USB peripheral provides support for USB 2.0 including HID, HDD, CD and mass storage classes. [...] The USB driver is implemented as a communication driver. EDMA is used for both host and device operations. USB host and slave drivers are described in the following sections.

And later provides this more detailed listing on the drivers maturity state:

  • Supports data transfer in both PIO and DMA mode for all kernel preemption modes
  • Supports host and slave operations
  • Supports class driver for HID and Mass storage.
  • Supports USB ISO Class
  • Supports partial USB OTG for HNP and SRP. (HNP=Host Negotiation Protocol, SRP=Session Request Protocol)
    • USB OTG functionality has been tested on the DM355 devices by connecting two EVMs back to back using a mini-AB USB cable.
    • OTG functionality is currently operated/invoked by providing inputs to the proc entry.

With the publicly available preliminary documentation for LSP 2.10 dealing with the "DaVinci Linux Device Drivers" there comes a rich set of USB bandwidth benchmarks for a variety of processors and the following listing of featured USB drivers:

  • Data transfer in both PIO and DMA mode for all preemption modes
  • Internal CPPI DMA is used for both host and device operations.
  • Interrupt Endpoint scheduling feature to overcome the limitations of availability of number of Interrupt endpoints.
  • Provision to reserve bulk or Isochronous endpoints according to the necessity.
  • MSC Host and Slave support
  • USB HID Host support with hiddev and evdev interfaces
  • CDC Slave support (see e.g. this page at
  • RNDIS Slave support
  • USB-ISO Audio/Video Host support

The software driver stack is divided in at least two functional layers. The base is the musb_hdrc module that knows about and controls the ASIC unit. The upper layers are formed by a set of gadget drivers for the various functionalities. These will, depending on system configuration, load and then plug in to the musb_hdrc module. They will get activated after the USB connection has successfully completed its configuration cycle using the Session Request Protocol (SRP) and finished this in the matching mode (host/gadget). The driver further takes care for the right voltage detection state as provided by the hardware unit. The hardware unit provides voltage level indicators matching the A mode (AVALID) and B mode (general VALID indicator) requirements, thus correct external wiring of all related pins of the SOC is necessary for proper operation.

Other Family members

Another naming related to a variant of this unit in the Linux kernel driver source is:

Inventra (Multidrop) Highspeed Dual-Role Controllers: (M)HDRC

Other variants out there in the wild are known as:

Mentor Graphics Inventra USB Full-Speed Dual-Role Controller (MUSBFDRC)

Web Links

Technology Related Press Releases