An Overview of USB 3.0, Type‑C, and OTG Technologies
The article reviews USB 3.0’s higher 5 Gbps (10 Gbps Gen 2) bandwidth, asynchronous transfers, burst and stream capabilities, explains the reversible Type‑C connector’s power‑delivery, dual‑lane data and DisplayPort alternate mode, and details USB 3.0 OTG role negotiation via CC pins together with Linux kernel and ConfigFS support.
This article continues the introduction to USB technology, focusing on three main topics: the new features of USB 3.0, the Type‑C connector, and USB 3.0 OTG.
USB 3.0
USB has become the most successful PC peripheral interconnect, with billions of devices shipped. New applications such as high‑definition video capture, large‑capacity storage, and high‑resolution photography demand higher bandwidth, which USB 3.0 provides by increasing the bus speed to 5 Gbps (10 Gbps in Gen 2) and introducing asynchronous transfer modes.
Key differences between USB 2.0 and USB 3.0 include:
USB 2.0 uses three‑part transactions (token, data, handshake); USB 3.0 embeds the token in the data packet for OUT transfers and replaces it with a handshake for IN transfers.
USB 2.0 does not support bursting; USB 3.0 supports continuous bursting.
USB 2.0 is a half‑duplex broadcast bus; USB 3.0 is a dual‑simplex unicast bus, allowing simultaneous IN and OUT transactions.
USB 2.0 uses a polling model; USB 3.0 uses asynchronous notifications.
USB 2.0 lacks streaming; USB 3.0 adds streaming capability for bulk endpoints.
The article describes the IN transaction flow, the conditions for completing an IN transfer, and the advantages of asynchronous, point‑to‑point communication, such as higher efficiency and lower power consumption for idle devices.
Burst Transactions
USB 3.0 allows a host to send or receive a series of packets without intermediate acknowledgments, as long as the endpoint’s maximum burst size is not exceeded. Each packet in a burst must be sized to the maximum packet size, except for the final packet, which may be shorter.
Stream Transfer
When a device’s configuration descriptor includes a MaxStreams field, the bulk endpoint can operate in stream mode, enabling many logical streams (up to 65 533) over a single physical endpoint. Streams are useful for high‑capacity devices that need out‑of‑order data delivery.
Companion Descriptor
USB 3.0 adds a companion descriptor to each endpoint descriptor, indicating support for burst transactions and stream transfers.
Summary of USB 3.0 New Features
Bus speed up to 5 Gbps (10 Gbps in Gen 2)
Asynchronous transfer mode
Burst transactions without waiting for acknowledgments
Stream transfer for massive parallel data flows
Type‑C Connector
Type‑C was introduced after USB 3.0 to provide reversible plug orientation, higher power delivery (up to 20 V 5 A), and the ability to carry DisplayPort signals. The connector adds a TX/RX pair, VCONN, and CC pins.
Key functions of the additional pins:
TX/RX pairs enable dual‑lane USB 3.1 data or can be repurposed for DisplayPort video.
VCONN powers active cables and enables E‑Mark identification of cable capabilities.
CC pins are used for role detection (host/device), Power Delivery negotiation, and mode switching.
Power Delivery (PD) 3.0 uses Biphase Mark Coding (BMC) and supports fixed voltage/current levels (PD 2.0) as well as programmable power supplies (PPS) with adjustable voltage (3 V–21 V) and current (0 A–6.3 A).
DisplayPort Alternate Mode
Type‑C’s four differential pairs can be re‑allocated to carry DisplayPort signals while the remaining pairs continue to support USB 3.1 data, enabling a single cable for video, data, and power.
USB 3.0 OTG
OTG functionality, originally based on the ID pin in USB 2.0 micro‑B connectors, is now handled by the CC pins in Type‑C. USB 3.0 OTG separates power roles, allowing a device to act as host while still receiving power.
The hardware components of USB 3.0 OTG include:
USB controller (xhci or dwc3) – handles data transfer, URB/TRB management.
USB PHY – converts serial USB signals to controller‑compatible format.
Type‑C PHY – processes CC‑pin signaling; can be implemented with dedicated chips such as fusb302.
Linux kernel support involves the EXTCON subsystem for state notifications, and the ConfigFS interface for dynamic gadget configuration. The article outlines the EXTCON driver usage (devm_extcon_register_notifier, devm_extcon_dev_register) and shows how Android’s UsbDeviceManager sets sys.usb.config to select gadget functions (e.g., mtp).
OTG enumeration follows a flowchart where the host and device exchange role‑determination messages via the CC pins, after which the appropriate gadget driver (e.g., function/f_mtp.c) is bound.
Finally, the ConfigFS subsystem replaces the older android.c/composite.c gadget configuration, providing a flexible way to expose multiple functions and manage stream IDs and burst parameters through the struct usb_request interface.
OPPO Kernel Craftsman
Sharing Linux kernel-related cutting-edge technology, technical articles, technical news, and curated tutorials
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.