- •Chapter 1
- •1.1 Motivation
- •1.2 Objective of the Specification
- •1.3 Scope of the Document
- •1.4 Document Organization
- •Chapter 2
- •Chapter 3
- •3.1 Goals for the Universal Serial Bus
- •3.2 Taxonomy of Application Space
- •3.3 Feature List
- •Chapter 4
- •4.1 USB System Description
- •4.1.1 Bus Topology
- •4.2 Physical Interface
- •4.2.1 Electrical
- •4.2.2 Mechanical
- •4.3 Power
- •4.3.1 Power Distribution
- •4.3.2 Power Management
- •4.4 Bus Protocol
- •4.5 Robustness
- •4.5.1 Error Detection
- •4.5.2 Error Handling
- •4.6 System Configuration
- •4.6.1 Attachment of USB Devices
- •4.6.2 Removal of USB Devices
- •4.6.3 Bus Enumeration
- •4.7 Data Flow Types
- •4.7.1 Control Transfers
- •4.7.2 Bulk Transfers
- •4.7.3 Interrupt Transfers
- •4.7.4 Isochronous Transfers
- •4.7.5 Allocating USB Bandwidth
- •4.8 USB Devices
- •4.8.1 Device Characterizations
- •4.8.2 Device Descriptions
- •4.9 USB Host: Hardware and Software
- •4.10 Architectural Extensions
- •Chapter 5
- •5.1 Implementer Viewpoints
- •5.2 Bus Topology
- •5.2.1 USB Host
- •5.2.2 USB Devices
- •5.2.3 Physical Bus Topology
- •5.2.4 Logical Bus Topology
- •5.2.5 Client Software-to-function Relationship
- •5.3 USB Communication Flow
- •5.3.1 Device Endpoints
- •5.3.2 Pipes
- •5.4 Transfer Types
- •5.5 Control Transfers
- •5.5.1 Control Transfer Data Format
- •5.5.2 Control Transfer Direction
- •5.5.3 Control Transfer Packet Size Constraints
- •5.5.4 Control Transfer Bus Access Constraints
- •5.5.5 Control Transfer Data Sequences
- •5.6 Isochronous Transfers
- •5.6.1 Isochronous Transfer Data Format
- •5.6.2 Isochronous Transfer Direction
- •5.6.3 Isochronous Transfer Packet Size Constraints
- •5.6.4 Isochronous Transfer Bus Access Constraints
- •5.6.5 Isochronous Transfer Data Sequences
- •5.7 Interrupt Transfers
- •5.7.1 Interrupt Transfer Data Format
- •5.7.2 Interrupt Transfer Direction
- •5.7.3 Interrupt Transfer Packet Size Constraints
- •5.7.4 Interrupt Transfer Bus Access Constraints
- •5.7.5 Interrupt Transfer Data Sequences
- •5.8 Bulk Transfers
- •5.8.1 Bulk Transfer Data Format
- •5.8.2 Bulk Transfer Direction
- •5.8.3 Bulk Transfer Packet Size Constraints
- •5.8.4 Bulk Transfer Bus Access Constraints
- •5.8.5 Bulk Transfer Data Sequences
- •5.9 Bus Access for Transfers
- •5.9.1 Transfer Management
- •5.9.2 Transaction Tracking
- •5.9.3 Calculating Bus Transaction Times
- •5.9.4 Calculating Buffer Sizes in Functions and Software
- •5.9.5 Bus Bandwidth Reclamation
- •5.10 Special Considerations for Isochronous Transfers
- •5.10.1 Example Non-USB Isochronous Application
- •5.10.2 USB Clock Model
- •5.10.3 Clock Synchronization
- •5.10.4 Isochronous Devices
- •5.10.5 Data Prebuffering
- •5.10.6 SOF Tracking
- •5.10.7 Error Handling
- •5.10.8 Buffering for Rate Matching
- •Chapter 6
- •6.1 Architectural Overview
- •6.3 Cable
- •6.4 Cable Assembly
- •6.4.1 Detachable Cable Assemblies
- •6.4.3 Low-speed Captive Cable Assemblies
- •6.4.4 Prohibited Cable Assemblies
- •6.5.1 USB Icon Location
- •6.5.2 USB Connector Termination Data
- •6.5.3 Series “A” and Series “B” Receptacles
- •6.5.4 Series “A” and Series “B” Plugs
- •6.6.1 Description
- •6.6.2 Construction
- •6.6.3 Electrical Characteristics
- •6.6.4 Cable Environmental Characteristics
- •6.6.5 Listing
- •6.7 Electrical, Mechanical and Environmental Compliance Standards
- •6.7.1 Applicable Documents
- •6.8 USB Grounding
- •Chapter 7
- •7.1 Signaling
- •7.1.1 USB Driver Characteristics
- •7.1.2 Data Signal Rise and Fall
- •7.1.3 Cable Skew
- •7.1.4 Receiver Characteristics
- •7.1.5 Device Speed Identification
- •7.1.6 Input Characteristics
- •7.1.7 Signaling Levels
- •7.1.8 Data Encoding/Decoding
- •7.1.9 Bit Stuffing
- •7.1.10 Sync Pattern
- •7.1.11 Data Signaling Rate
- •7.1.12 Frame Interval and Frame Interval Adjustment
- •7.1.13 Data Source Signaling
- •7.1.14 Hub Signaling Timings
- •7.1.15 Receiver Data Jitter
- •7.1.16 Cable Delay
- •7.1.17 Cable Attenuation
- •7.1.18 Bus Turn-around Time and Inter-packet Delay
- •7.1.19 Maximum End-to-end Signal Delay
- •7.2 Power Distribution
- •7.2.1 Classes of Devices
- •7.2.2 Voltage Drop Budget
- •7.2.3 Power Control During Suspend/Resume
- •7.2.4 Dynamic Attach and Detach
- •7.3 Physical Layer
- •7.3.1 Regulatory Requirements
- •7.3.2 Bus Timing/Electrical Characteristics
- •7.3.3 Timing Waveforms
- •Chapter 8
- •8.1 Bit Ordering
- •8.2 SYNC Field
- •8.3 Packet Field Formats
- •8.3.1 Packet Identifier Field
- •8.3.2 Address Fields
- •8.3.3 Frame Number Field
- •8.3.4 Data Field
- •8.3.5 Cyclic Redundancy Checks
- •8.4 Packet Formats
- •8.4.1 Token Packets
- •8.4.2 Start-of-Frame Packets
- •8.4.3 Data Packets
- •8.4.4 Handshake Packets
- •8.4.5 Handshake Responses
- •8.5 Transaction Formats
- •8.5.1 Bulk Transactions
- •8.5.2 Control Transfers
- •8.5.3 Interrupt Transactions
- •8.5.4 Isochronous Transactions
- •8.6 Data Toggle Synchronization and Retry
- •8.6.1 Initialization via SETUP Token
- •8.6.2 Successful Data Transactions
- •8.6.3 Data Corrupted or Not Accepted
- •8.6.4 Corrupted ACK Handshake
- •8.6.5 Low-speed Transactions
- •8.7 Error Detection and Recovery
- •8.7.1 Packet Error Categories
- •8.7.2 Bus Turn-around Timing
- •8.7.3 False EOPs
- •8.7.4 Babble and Loss of Activity Recovery
- •Chapter 9
- •9.1 USB Device States
- •9.1.1 Visible Device States
- •9.1.2 Bus Enumeration
- •9.2 Generic USB Device Operations
- •9.2.1 Dynamic Attachment and Removal
- •9.2.2 Address Assignment
- •9.2.3 Configuration
- •9.2.4 Data Transfer
- •9.2.5 Power Management
- •9.2.6 Request Processing
- •9.2.7 Request Error
- •9.3 USB Device Requests
- •9.3.1 bmRequestType
- •9.3.2 bRequest
- •9.3.3 wValue
- •9.3.4 wIndex
- •9.3.5 wLength
- •9.4 Standard Device Requests
- •9.4.1 Clear Feature
- •9.4.2 Get Configuration
- •9.4.3 Get Descriptor
- •9.4.4 Get Interface
- •9.4.5 Get Status
- •9.4.6 Set Address
- •9.4.7 Set Configuration
- •9.4.8 Set Descriptor
- •9.4.9 Set Feature
- •9.4.10 Set Interface
- •9.4.11 Synch Frame
- •9.5 Descriptors
- •9.6 Standard USB Descriptor Definitions
- •9.6.1 Device
- •9.6.2 Configuration
- •9.6.3 Interface
- •9.6.4 Endpoint
- •9.6.5 String
- •9.7 Device Class Definitions
- •9.7.1 Descriptors
- •9.7.2 Interface(s) and Endpoint Usage
- •9.7.3 Requests
- •Chapter 10
- •10.1 Overview of the USB Host
- •10.1.1 Overview
- •10.1.2 Control Mechanisms
- •10.1.3 Data Flow
- •10.1.4 Collecting Status and Activity Statistics
- •10.1.5 Electrical Interface Considerations
- •10.2 Host Controller Requirements
- •10.2.1 State Handling
- •10.2.2 Serializer/Deserializer
- •10.2.3 Frame Generation
- •10.2.4 Data Processing
- •10.2.5 Protocol Engine
- •10.2.6 Transmission Error Handling
- •10.2.7 Remote Wakeup
- •10.2.8 Root Hub
- •10.2.9 Host System Interface
- •10.3 Overview of Software Mechanisms
- •10.3.1 Device Configuration
- •10.3.2 Resource Management
- •10.3.3 Data Transfers
- •10.3.4 Common Data Definitions
- •10.4 Host Controller Driver
- •10.5 Universal Serial Bus Driver
- •10.5.1 USBD Overview
- •10.5.2 USBD Command Mechanism Requirements
- •10.5.3 USBD Pipe Mechanisms
- •10.5.4 Managing the USB via the USBD Mechanisms
- •10.5.5 Passing USB Preboot Control to the Operating System
- •10.6 Operating System Environment Guides
- •Chapter 11
- •11.1 Overview
- •11.1.1 Hub Architecture
- •11.1.2 Hub Connectivity
- •11.2 Hub Frame Timer
- •11.2.1 Frame Timer Synchronization
- •11.2.2 EOF1 and EOF2 Timing Points
- •11.3 Host Behavior at End-of-Frame
- •11.3.1 Latest Host Packet
- •11.3.2 Packet Nullification
- •11.3.3 Transaction Completion Prediction
- •11.4 Internal Port
- •11.4.1 Inactive
- •11.4.2 Suspend Delay
- •11.4.3 Full Suspend (Fsus)
- •11.4.4 Generate Resume (GResume)
- •11.5 Downstream Ports
- •11.5.1 Downstream Port State Descriptions
- •11.6 Upstream Port
- •11.6.1 Receiver
- •11.6.2 Transmitter
- •11.7 Hub Repeater
- •11.7.1 Wait for Start of Packet from Upstream Port (WFSOPFU)
- •11.7.2 Wait for End of Packet from Upstream Port (WFEOPFU)
- •11.7.3 Wait for Start of Packet (WFSOP)
- •11.7.4 Wait for End of Packet (WFEOP)
- •11.8 Bus State Evaluation
- •11.8.1 Port Error
- •11.8.2 Speed Detection
- •11.8.3 Collision
- •11.9 Suspend and Resume
- •11.10 Hub Reset Behavior
- •11.10.1 Hub Receiving Reset on Upstream Port
- •11.11 Hub Port Power Control
- •11.11.1 Multiple Gangs
- •11.12 Hub I/O Buffer Requirements
- •11.12.1 Pull-up and Pull-down Resistors
- •11.12.2 Edge Rate Control
- •11.13 Hub Controller
- •11.13.1 Endpoint Organization
- •11.13.2 Hub Information Architecture and Operation
- •11.13.3 Port Change Information Processing
- •11.13.4 Hub and Port Status Change Bitmap
- •11.13.5 Over-current Reporting and Recovery
- •11.14 Hub Configuration
- •11.15 Descriptors
- •11.15.1 Standard Descriptors
- •11.15.2 Class-specific Descriptors
- •11.16 Requests
- •11.16.1 Standard Requests
- •11.16.2 Class-specific Requests
- •Index
Universal Serial Bus Specification Revision 1.1
9.6.3 Interface
This descriptor describes a specific interface within a configuration. A configuration provides one or more interfaces, each with zero or more endpoint descriptors describing a unique set of endpoints within the configuration. When a configuration supports more than one interface, the endpoints for a particular interface follow the interface descriptor in the data returned by the GetConfiguration() request. An interface descriptor is always returned as part of a configuration descriptor. Interface descriptors cannot be directly accessed with a GetDescriptor() or SetDescriptor() request.
An interface may include alternate settings that allow the endpoints and/or their characteristics to be varied after the device has been configured. The default setting for an interface is always alternate setting zero. The SetInterface() request is used to select an alternate setting or to return to the default setting. The GetInterface() request returns the selected alternate setting.
Alternate settings allow a portion of the device configuration to be varied while other interfaces remain in operation. If a configuration has alternate settings for one or more of its interfaces, a separate interface descriptor and its associated endpoints are included for each setting.
If a device configuration supported a single interface with two alternate settings, the configuration descriptor would be followed by an interface descriptor with the bInterfaceNumber and bAlternateSetting fields set to zero and then the endpoint descriptors for that setting, followed by another interface descriptor and its associated endpoint descriptors. The second interface descriptor’s bInterfaceNumber field would also be set to zero, but the bAlternateSetting field of the second interface descriptor would be set to one.
If an interface uses only endpoint zero, no endpoint descriptors follow the interface descriptor and the interface identifies a request interface that uses the default pipe attached to endpoint zero. In this case, the bNumEndpoints field shall be set to zero.
An interface descriptor never includes endpoint zero in the number of endpoints. Table 9-9 shows the standard interface descriptor.
201
Universal Serial Bus Specification Revision 1.1
Table 9-9. Standard Interface Descriptor
Offset |
Field |
Size |
Value |
Description |
|
|
|
|
|
0 |
bLength |
1 |
Number |
Size of this descriptor in bytes |
|
|
|
|
|
1 |
bDescriptorType |
1 |
Constant |
INTERFACE Descriptor Type |
|
|
|
|
|
2 |
bInterfaceNumber |
1 |
Number |
Number of interface. Zero-based value |
|
|
|
|
identifying the index in the array of |
|
|
|
|
concurrent interfaces supported by this |
|
|
|
|
configuration. |
|
|
|
|
|
3 |
bAlternateSetting |
1 |
Number |
Value used to select alternate setting for |
|
|
|
|
the interface identified in the prior field |
|
|
|
|
|
4 |
bNumEndpoints |
1 |
Number |
Number of endpoints used by this |
|
|
|
|
interface (excluding endpoint zero). If this |
|
|
|
|
value is zero, this interface only uses the |
|
|
|
|
Default Control Pipe. |
|
|
|
|
|
5 |
bInterfaceClass |
1 |
Class |
Class code (assigned by the USB). |
|
|
|
|
A value of zero is reserved for future |
|
|
|
|
standardization. |
|
|
|
|
If this field is set to FFH, the interface |
|
|
|
|
class is vendor-specific. |
|
|
|
|
All other values are reserved for |
|
|
|
|
assignment by the USB. |
|
|
|
|
|
6 |
bInterfaceSubClass |
1 |
SubClass |
Subclass code (assigned by the USB). |
|
|
|
|
These codes are qualified by the value of |
|
|
|
|
the bInterfaceClass field. |
|
|
|
|
If the bInterfaceClass field is reset to |
|
|
|
|
zero, this field must also be reset to zero. |
|
|
|
|
If the bInterfaceClass field is not set to |
|
|
|
|
FFH, all values are reserved for |
|
|
|
|
assignment by the USB. |
|
|
|
|
|
202
Universal Serial Bus Specification Revision 1.1
Table 9-9. Standard Interface Descriptor (Continued)
Offset |
Field |
Size |
Value |
Description |
|
|
|
|
|
7 |
bInterfaceProtocol |
1 |
Protocol |
Protocol code (assigned by the USB). |
|
|
|
|
These codes are qualified by the value of |
|
|
|
|
the bInterfaceClass and the |
|
|
|
|
bInterfaceSubClass fields. If an interface |
|
|
|
|
supports class-specific requests, this |
|
|
|
|
code identifies the protocols that the |
|
|
|
|
device uses as defined by the |
|
|
|
|
specification of the device class. |
|
|
|
|
If this field is reset to zero, the device |
|
|
|
|
does not use a class-specific protocol on |
|
|
|
|
this interface. |
|
|
|
|
If this field is set to FFH, the device uses |
|
|
|
|
a vendor-specific protocol for this |
|
|
|
|
interface. |
|
|
|
|
|
8 |
iInterface |
1 |
Index |
Index of string descriptor describing this |
|
|
|
|
interface |
|
|
|
|
|
9.6.4 Endpoint
Each endpoint used for an interface has its own descriptor. This descriptor contains the information required by the host to determine the bandwidth requirements of each endpoint. An endpoint descriptor is always returned as part of the configuration information returned by a GetDescriptor(Configuration) request. An endpoint descriptor cannot be directly accessed with a GetDescriptor() or SetDescriptor() request. There is never an endpoint descriptor for endpoint zero. Table 9-10 shows the standard endpoint descriptor.
Table 9-10. Standard Endpoint Descriptor
Offset |
Field |
Size |
Value |
|
Description |
|
|
|
|
|
|
0 |
bLength |
1 |
Number |
Size of this descriptor in bytes |
|
|
|
|
|
|
|
1 |
bDescriptorType |
1 |
Constant |
ENDPOINT Descriptor Type |
|
|
|
|
|
|
|
2 |
bEndpointAddress |
1 |
Endpoint |
The address of the endpoint on the USB |
|
|
|
|
|
device described by this descriptor. The |
|
|
|
|
|
address is encoded as follows: |
|
|
|
|
|
Bit 3...0: The endpoint number |
|
|
|
|
|
Bit 6...4: Reserved, reset to zero |
|
|
|
|
|
Bit 7: |
Direction, ignored for |
|
|
|
|
|
control endpoints |
|
|
|
|
|
0 = OUT endpoint |
|
|
|
|
|
1 = IN endpoint |
|
|
|
|
|
|
203
Universal Serial Bus Specification Revision 1.1
Table 9-10. Standard Endpoint Descriptor (Continued)
Offset |
Field |
Size |
Value |
Description |
|
|
|
|
|
3 |
bmAttributes |
1 |
Bitmap |
This field describes the endpoint’s |
|
|
|
|
attributes when it is configured using the |
|
|
|
|
bConfigurationValue. |
|
|
|
|
Bit 1..0: Transfer Type |
|
|
|
|
00 = Control |
|
|
|
|
01 = Isochronous |
|
|
|
|
10 = Bulk |
|
|
|
|
11 = Interrupt |
|
|
|
|
All other bits are reserved. |
4 |
wMaxPacketSize |
2 |
Number |
Maximum packet size this endpoint is |
|
|
|
|
capable of sending or receiving when this |
|
|
|
|
configuration is selected. |
|
|
|
|
For isochronous endpoints, this value is |
|
|
|
|
used to reserve the bus time in the |
|
|
|
|
schedule, required for the per-frame data |
|
|
|
|
payloads. The pipe may, on an ongoing |
|
|
|
|
basis, actually use less bandwidth than |
|
|
|
|
that reserved. The device reports, if |
|
|
|
|
necessary, the actual bandwidth used via |
|
|
|
|
its normal, non-USB defined mechanisms. |
|
|
|
|
For interrupt, bulk, and control endpoints, |
|
|
|
|
smaller data payloads may be sent, but |
|
|
|
|
will terminate the transfer and may or may |
|
|
|
|
not require intervention to restart. Refer |
|
|
|
|
to Chapter 5 for more information. |
|
|
|
|
|
6 |
bInterval |
1 |
Number |
Interval for polling endpoint for data |
|
|
|
|
transfers. Expressed in milliseconds. |
|
|
|
|
This field is ignored for bulk and control |
|
|
|
|
endpoints. For isochronous endpoints |
|
|
|
|
this field must be set to 1. For interrupt |
|
|
|
|
endpoints, this field may range from 1 to |
|
|
|
|
255. |
|
|
|
|
|
9.6.5 String
String descriptors are optional. As noted previously, if a device does not support string descriptors, all references to string descriptors within device, configuration, and interface descriptors must be reset to zero.
String descriptors use UNICODE encodings as defined by The Unicode Standard, Worldwide Character Encoding, Version 1.0, Volumes 1 and 2, The Unicode Consortium, Addison-Wesley Publishing Company, Reading, Massachusetts. The strings in a USB device may support multiple languages. When requesting a string descriptor, the requester specifies the desired language using a sixteen-bit language ID (LANGID) defined by Microsoft for Windows as described in Developing International Software for Windows 95 and Windows NT, Nadine Kano, Microsoft Press, Redmond, Washington. String index zero for all languages returns a string descriptor that contains an array of two-byte LANGID codes supported by the device. Table 9-11 shows the LANGID code array. A USB device may omit all string descriptors. USB devices that omit all string descriptors shall not return an array of LANGID codes.
204