- •TABLE OF CONTENTS
- •1.1 Motivation
- •1.2 Design Goals
- •1.3 Objective of the Specification
- •1.4 Scope of the Document
- •1.5 USB Product Compliance
- •1.6 Document Organization
- •2.1 Terms
- •2.2 Conventions:
- •2.3 References
- •3.1 USB System Description
- •3.1.1 Topology
- •3.1.1.1 USB Host
- •3.1.1.2 Wireless USB Devices
- •3.2 Physical Interface
- •3.3 Power Management
- •3.4 Bus Protocol
- •3.5 Robustness
- •3.5.1 Error Handling
- •3.6 Security
- •3.7 System Configuration
- •3.7.1 Attachment of Wireless USB Devices
- •3.7.2 Removal of Wireless USB Devices
- •3.7.3 Bus Enumeration
- •3.8 Data Flow Types
- •3.9 Wireless USB Devices
- •3.9.1 Device Characterizations
- •3.9.2 Devices and MAC Layer
- •3.10 Wireless USB Host: Hardware and Software
- •4.1 Implementer Viewpoints
- •4.2 Communications Topology
- •4.2.1 Physical Topology
- •4.3 Wireless USB Communication Flows
- •4.3.1 Wireless USB Channel Time
- •4.3.2 MMC Transmission Accuracy
- •4.3.3 USB Time across Device Wire Adapters
- •4.3.5 Device Endpoints
- •4.3.6 Wireless USB Information Exchange Methods
- •4.3.7 Device Perspective
- •4.3.7.1 Self Beaconing Devices
- •4.3.7.2 Directed Beaconing Devices
- •4.3.7.3 Non Beaconing Devices
- •4.3.7.4 Selecting A Wireless USB Host
- •4.3.8 Host Perspective
- •4.3.8.1 MAC Layer Compliant Device
- •4.3.8.2 Wireless USB Host
- •4.3.8.3 Host System Management
- •4.3.8.5 Other Host Considerations
- •4.4 Data Transfers
- •4.4.1 Burst Mode Data Phase
- •4.5 Bulk Transfers
- •4.5.1 Bulk Transfer Packet Size and Signaling Rate Constraints
- •4.5.2 Bulk Transfer Channel Access Constraints
- •4.5.3 Bulk Transfer Data Sequences
- •4.6 Interrupt Transfers
- •4.6.1 Low Power Interrupt IN
- •4.6.2 Interrupt Transfer Packet Size and Signaling Rate Constraints
- •4.6.3 Interrupt Transfer Channel Access Constraints
- •4.6.4 Interrupt Transfer Data Sequences
- •4.7 Isochronous Transfers
- •4.7.1 Isochronous Transfer Packet Size and Signaling Rate Constraints
- •4.7.2 Isochronous Transfer Channel Access Constraints
- •4.7.3 Isochronous Transfer Data Sequences
- •4.7.4 Isochronous Endpoint Host System Admission Decisions
- •4.7.5 Isochronous Data Discards and Use of Isochronous Packet Discard IE
- •4.8 Control Transfers
- •4.8.1 Control Transfer Packet Size and Signaling Rate Constraints
- •4.8.2 Control Transfer Channel Access Constraints
- •4.8.3 Control Transfer Data Sequences
- •4.8.4 Data Loopback Commands
- •4.9 Device Notifications
- •4.10 Media Reliability Considerations
- •4.10.1 Transmit Power Control
- •4.10.2 Adjustments to Data Phase Packet Payload Sizes
- •4.10.3 Adjustments to Transmit Bit Rate
- •4.10.4 Changing PHY Channel
- •4.10.5 Host Schedule Control
- •4.10.6 Dynamic Bandwidth Interface Control
- •4.11 Special Considerations for Isochronous Transfers
- •4.11.1 Summary Of Key Features Of USB Wired Isochrony
- •4.11.1.1 Wireless Service Intervals
- •4.11.2 UWB Media Characteristics
- •4.11.2.1 Superframe Layout
- •4.11.2.2 Worst Case Superframe Layout – Service Interval Bounds.
- •4.11.2.3 Wireless Packet Error Rates
- •4.11.3 Wireless USB Isochronous Transfer Level Protocol
- •4.11.4 Wireless USB Isochronous IN Example
- •4.11.5 Wireless USB Isochronous OUT Example
- •4.11.6 Choosing an Isochronous IN or Isochronous OUT Endpoint Buffer Size
- •4.11.7 Isochronous OUT endpoint receiver implementation options
- •4.11.7.1 Presentation Time aware implementation
- •4.11.7.2 Presentation time aware implementation with “false” acknowledgement
- •4.11.7.3 Presentation time unaware implementations
- •4.11.8 Synchronization
- •4.11.8.1 Synchronizing a Stream Start Time
- •4.11.9 Error Handling Details
- •4.11.9.1 Reporting Data Discarded At the Transmitter
- •4.11.9.2 Discarding Data during A Burst
- •4.11.9.3 Application Handling of Discards
- •4.12 Device Reset
- •4.13 Connection Process
- •4.13.1 Reconnection Process
- •4.14 Disconnect
- •4.15 Security Mechanisms
- •4.15.1 Connection Lifetime
- •4.15.2 Host Security Considerations
- •4.15.2.1 CHID Selection
- •4.15.2.2 CDID Selection
- •4.16 Wireless USB Power Management
- •4.16.1 Device Power Management
- •4.16.1.1 Device Sleep
- •4.16.1.2 Device Wakeup
- •4.16.2 Host Power Management
- •4.16.2.1 Channel Stop
- •4.16.2.2 Remote Wakeup
- •4.16.2.3 Channel Start
- •4.17 Dual Role Devices (DRD)
- •4.17.2 Pairing P2P-DRD to establish reverse link
- •5.1 Packet Formats
- •5.2 Wireless USB Transaction Groups
- •5.2.1 Wireless USB Channel Time Allocation Information Elements
- •5.3 Transaction Group Timing Constraints
- •5.3.1 Streaming-Mode Inter-packet Constraints for the PHY
- •5.3.2 Protocol Synchronization
- •5.4 Data Burst Synchronization and Retry
- •5.5 Wireless USB Transactions
- •5.5.1 Isochronous Transactions
- •5.5.2 Control Transfers
- •5.5.3 Device Notifications
- •5.5.4 Flow Control
- •6.1 Introduction
- •6.1.1 Goal of USB Security
- •6.1.2 Security and USB
- •6.2 Overview
- •6.2.1 Base of Trust
- •6.2.2 Preserve the Nature of the USB Device Model
- •6.2.3 Implementation of Security Extensions
- •6.2.4 Encryption Methods
- •6.2.5 Message Format
- •6.2.6 Encryption Keys
- •6.2.6.1 Master Keys
- •6.2.6.2 Session Keys
- •6.2.7 Correct key determination
- •6.2.8 Replay Prevention
- •6.2.9 Secure Packet Reception
- •6.2.10 General Connection Model
- •6.2.10.1 Connection Context
- •6.2.10.2 Connection Lifetime
- •6.2.10.3 New Connection
- •6.2.10.4 Connection
- •6.2.10.5 Reconnection
- •6.2.10.6 Revocation
- •6.2.10.8 Diagnostic Support
- •6.2.10.9 Mutual Authentication
- •6.2.11 Key Management
- •6.2.11.1 PTK Management
- •6.2.11.2 GTK Management
- •6.3 Association and Authentication
- •6.3.1 Connection and Reconnection Requests
- •6.3.2 Authentication
- •6.3.2.1 Authentication Related Device Capabilities
- •6.3.2.2 Ceremonies
- •6.4.1 CCM nonce Construction
- •6.4.2 l(m) and l(a) Calculation
- •6.4.3 Counter-mode Bx Blocks
- •6.4.4 Encryption Ax Blocks
- •6.5.1 Key Derivation
- •6.5.2 Out-of-band MIC Generation
- •6.5.3 Example Random Number Generation
- •7.1 Wireless USB Device States
- •7.1.1 UnConnected
- •7.1.2 UnAuthenticated
- •7.1.3 Authenticated
- •7.1.4 Reconnecting
- •7.2 Generic Wireless USB Device Operations
- •7.3 Standard Wireless USB Device Requests
- •7.3.1 Wireless USB Extensions to Standard Requests
- •7.3.1.1 Clear Feature
- •7.3.1.2 Get Status
- •7.3.1.3 Set Address
- •7.3.1.4 Set Feature
- •7.3.1.5 Set Interface DS
- •7.3.1.6 Set WUSB Data
- •7.3.1.7 Data Loopback Write
- •7.3.1.8 DATA Loopback Read
- •7.3.2 Security-related Requests
- •7.3.2.1 Get Security Descriptor
- •7.3.2.2 Set Encryption
- •7.3.2.3 Get Encryption
- •7.3.2.4 Key Management
- •7.3.2.6 Set Security Data
- •7.3.2.7 Get Security Data
- •7.4 Standard Wireless USB Descriptors
- •7.4.1 Device Level Descriptors
- •7.4.1.1 Wireless USB Device Capabilities – UWB
- •7.4.2 Configuration
- •7.4.3 Endpoint
- •7.4.4 Wireless USB Endpoint Companion
- •7.4.5 Security-Related Descriptors
- •7.4.5.1 Security Descriptor
- •7.4.5.2 Key Descriptor
- •7.5 Wireless USB Channel Information Elements
- •7.5.1 Wireless USB Connect Acknowledge IE
- •7.5.2 Wireless USB Host Information IE
- •7.5.3 Wireless USB Channel Change Announcement IE
- •7.5.4 Wireless USB Device Disconnect IE
- •7.5.5 Wireless USB Host Disconnect IE
- •7.5.6 Wireless USB Release Channel IE
- •7.5.7 Wireless USB Work IE
- •7.5.8 Wireless USB Channel Stop IE
- •7.5.9 Wireless USB Device Keepalive IE
- •7.5.10 Wireless USB Isochronous Packet Discard IE
- •7.5.11 Wireless USB Reset Device IE
- •7.5.12 Wireless USB Transmit Packet Adjustment IE
- •7.6 Device Notifications
- •7.6.1 Device Connect (DN_Connect)
- •7.6.1.1 Connect Request
- •7.6.1.2 Reconnect Request
- •7.6.2 Device Disconnect (DN_Disconnect)
- •7.6.3 Device Endpoints Ready (DN_EPRdy)
- •7.6.4 Device MAS Availability Changed (DN_MASAvailChanged)
- •7.6.5 Device Sleep (DN_Sleep)
- •7.6.6 Remote Wakeup (DN_RemoteWakeup)
- •7.6.7 Device Alive (DN_Alive)
- •8.1 Operational Model
- •8.1.1 Functional Characteristics
- •8.1.2 Data Transfer Interface
- •8.1.3 Remote Pipe
- •8.1.4 Wire Adapter Functional Blocks
- •8.1.5 Downstream Port(s)
- •8.1.6 Upstream Port
- •8.1.7 Downstream Host Controller
- •8.1.8 Upstream Endpoint Controller
- •8.1.9 Remote Pipe Controller
- •8.1.9.1 RPipe Descriptor
- •8.1.9.2 Bulk OUT Overview
- •8.1.9.3 Bulk IN Overview
- •8.1.9.4 Control Transfer Overview
- •8.1.9.5 Interrupt Transfer Overview
- •8.1.9.6 Isochronous Transfer Overview
- •8.1.10 Suspend and Resume
- •8.1.10.1 DWA Suspend and Resume
- •8.1.10.2 HWA Suspend and Resume
- •8.1.11 Reset Behavior
- •8.1.12 Device Control
- •8.1.13 Buffer Configuration
- •8.2 Descriptors
- •8.3 Requests
- •8.3.1 Wire Adapter Class-Specific Requests
- •8.3.1.1 Abort RPipe
- •8.3.1.2 Clear RPipe Feature
- •8.3.1.3 Clear Wire Adapter Feature
- •8.3.1.4 Get RPipe Descriptor
- •8.3.1.5 Get RPipe Status
- •8.3.1.6 Get Wire Adapter Status
- •8.3.1.7 Set RPipe Descriptor
- •8.3.1.8 Set RPipe Feature
- •8.3.1.9 Set Wire Adapter Feature
- •8.3.1.10 Reset RPipe
- •8.3.2 Notification Information
- •8.3.3 Transfer Requests
- •8.3.3.1 Control Transfers
- •8.3.3.2 Bulk and Interrupt Transfers
- •8.3.3.3 Transfer Completion Notification
- •8.3.3.4 Transfer Result
- •8.3.3.5 Abort Transfer
- •8.4 DWA Interfaces, Descriptors and Control
- •8.4.1 DWA Isochronous Streaming Interface
- •8.4.2 DWA Isochronous Streaming Overview
- •8.4.3 DWA Descriptors
- •8.4.3.1 Device Descriptor
- •8.4.3.2 Binary Device Object (BOS) Descriptor
- •8.4.3.3 Configuration Descriptor
- •8.4.3.4 Security Descriptors
- •8.4.3.5 Interface Association Descriptor
- •8.4.3.6 Data Transfer Interface Descriptor
- •8.4.3.7 Wire Adapter Class Descriptor
- •8.4.3.8 Notification Endpoint Descriptor
- •8.4.3.9 Notification Endpoint Companion Descriptor
- •8.4.3.10 Data Transfer Write Endpoint Descriptor
- •8.4.3.11 Data Transfer Write Endpoint Companion Descriptor
- •8.4.3.12 Data Transfer Read Endpoint Descriptor
- •8.4.3.13 Data Transfer Read Endpoint Companion Descriptor
- •8.4.3.14 Isochronous Streaming Interface Descriptor
- •8.4.3.15 Isochronous Streaming OUT Endpoint Descriptor
- •8.4.3.16 Isochronous Streaming OUT Endpoint Companion Descriptor
- •8.4.3.17 Isochronous Streaming IN Endpoint Descriptor
- •8.4.3.18 Isochronous Streaming IN Endpoint Companion Descriptor
- •8.4.3.19 Wire Adapter RPipe Descriptor
- •8.4.4 DWA Specific Requests
- •8.4.4.1 Clear Port Feature
- •8.4.4.2 Get Port Status
- •8.4.4.3 Set Isochronous Endpoint Attributes
- •8.4.4.4 Set Port Feature
- •8.4.5 DWA Notification Information
- •8.4.5.1 Remote Wake
- •8.4.5.2 Port Status Change
- •8.4.6 DWA Isochronous Transfers
- •8.4.6.1 DWA Isochronous OUT Responsibilities
- •8.4.6.2 DWA Isochronous IN Responsibilities
- •8.5 HWA Interfaces, Descriptors and Control
- •8.5.1 HWA Isochronous Streaming Overview
- •8.5.2 HWA Descriptors
- •8.5.2.1 Device Descriptor
- •8.5.2.2 Device_Qualifier Descriptor
- •8.5.2.3 Configuration Descriptor
- •8.5.2.4 Other_Speed_Configuration Descriptor
- •8.5.2.5 Security Descriptors
- •8.5.2.6 Data Transfer Interface Descriptor
- •8.5.2.7 Wire Adapter Class Descriptor
- •8.5.2.8 Notification Endpoint Descriptor
- •8.5.2.9 Data Transfer Write Endpoint Descriptor
- •8.5.2.10 Data Transfer Read Endpoint Descriptor
- •8.5.2.11 Wire Adapter RPipe Descriptor
- •8.5.3 HWA Specific Requests
- •8.5.3.2 Get BPST Adjustment
- •8.5.3.3 Get BPST Time
- •8.5.3.4 Get WUSB Time
- •8.5.3.5 Remove MMC IE
- •8.5.3.6 Set Device Encryption
- •8.5.3.7 Set Device Info
- •8.5.3.8 Set Device Key
- •8.5.3.9 Set Group Key
- •8.5.3.10 Set Num DNTS Slots
- •8.5.3.11 Set WUSB Cluster ID
- •8.5.3.12 Set WUSB MAS
- •8.5.3.13 Set WUSB Stream Index
- •8.5.3.14 WUSB Channel Stop
- •8.5.4 HWA Notification Information
- •8.5.4.1 BPST Adjustment Change
- •8.5.4.2 DN Received Notification
- •8.5.5 HWA Isochronous Transfers
- •8.5.5.1 HWA Isochronous OUT Responsibilities
- •8.5.5.2 HWA Isochronous IN Responsibilities
- •8.5.5.3 HWA Isochronous Transfer Completion
- •8.6 Radio Control Interface
- •8.6.1 Radio Control Descriptors
- •8.6.1.1 Radio Control Interface Descriptor
- •8.6.1.2 Radio Control Interface Class Descriptor
- •8.6.1.3 Radio Control Interrupt Endpoint Descriptor
- •8.6.2 Radio Control Command
- •8.6.2.1 Channel Change
- •8.6.2.2 Device Address Management
- •8.6.2.4 Reset
- •8.6.2.5 Scan
- •8.6.2.6 Set Beacon Filter
- •8.6.2.9 Set Notification Filter
- •8.6.2.10 Set TX Power
- •8.6.2.11 Sleep
- •8.6.2.12 Start Beaconing
- •8.6.2.13 Stop Beaconing
- •8.6.3 Radio Control Notifications
- •8.6.3.1 Application-specific Probe IE Received Notification
- •8.6.3.2 Beacon Received Notification
- •8.6.3.3 Beacon Size Notification
- •8.6.3.4 BPOIE Change Notification
- •8.6.3.5 BP Slot Change Notification
- •8.6.3.6 BP Switch IE Received Notification
- •8.6.3.7 Device Address Conflict Notification
- •8.6.3.8 DRP Availability Changed Notification
- •8.6.3.9 DRP Notification
- •A.1 Key Derivation
- •A.2 Handshake MIC calculation
- •A.3 Secure MMC (EO = payload length)
- •A.4 Data IN from device (EO = 2)
- •B.1 Descriptors for DWA
- •B.2 Descriptors for HWA
Chapter 5 |
|
|
|
|
|
|
|
|
|
|
Protocol Layer |
|
|
|
|
|
|
Wireless Universal Serial Bus Specification, Revision 1.0 |
|||
9 |
0 |
1 |
9 |
0 |
1 |
|
|
9 |
0 |
1 |
|
|
|
|
|
||||||
Transmit 8 |
|
2 |
8 |
|
|
2 |
8 |
|
|
2 |
|
|
|
|
|
|
|
|
|||
Window |
|
3 |
7 |
|
|
3 |
7 |
|
|
3 |
7 |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|||
6 |
5 |
4 |
6 |
5 |
4 |
Data Packets w/ |
Burst |
6 |
5 |
4 |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
Seq. Numbers: |
acknowlegement |
|
|
|
9 |
0 1 |
9 |
0 1 |
D0, D7, D8 |
Bit Vector (0x001) 9 |
0 1 |
||||
Receive 8 |
|
2 |
8 |
|
|
2 |
8 |
|
|
2 |
Window |
|
3 |
7 |
|
|
3 |
7 |
|
|
3 |
7 |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|||
6 |
5 |
4 |
6 |
5 |
4 |
|
|
6 |
5 |
4 |
|
|
|
|
|
|
|
|
|||
|
|
|
9 |
0 |
1 |
|
|
9 |
0 |
1 |
|
|
|
|
|
|
|
||||
Transmit |
8 |
|
|
2 |
8 |
|
|
2 |
||
|
|
|
|
|
|
|||||
|
Window |
7 |
|
|
3 |
7 |
|
|
3 |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||
|
|
|
6 |
5 |
4 |
Data Packet w/ |
Burst |
6 |
5 |
4 |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
0 |
|
Seq. Number: |
acknowlegement |
|
0 |
|
|
|
|
9 |
1 |
D0 |
Bit Vector (0x207) 9 |
1 |
|||
|
|
|
|
|
||||||
|
Receive |
8 |
|
|
2 |
8 |
|
|
2 |
|
|
|
|
|
|
|
|
||||
|
Window |
7 |
|
|
3 |
7 |
|
|
3 |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||
|
|
|
6 |
5 |
4 |
|
|
6 |
5 |
4 |
|
|
|
|
|
|
|
|
|
||
|
|
|
9 |
0 |
1 |
|
|
9 |
0 |
1 |
|
|
|
|
|
|
|
||||
Transmit |
8 |
|
|
2 |
8 |
|
|
2 |
||
|
|
|
|
|
|
|||||
|
Window |
7 |
|
|
3 |
7 |
|
|
3 |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||
|
|
|
6 |
5 |
4 |
Data Packets w/ |
Burst |
6 |
5 |
4 |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
0 |
|
Seq. Numbers: |
acknowlegement |
|
0 |
|
|
|
|
9 |
1 |
D9, D0, D1, D2 |
Bit Vector (0x078) 9 |
1 |
|||
|
|
|
|
|
||||||
|
Receive |
8 |
|
|
2 |
8 |
|
|
2 |
|
|
|
|
|
|
|
|
||||
|
Window |
7 |
|
|
3 |
7 |
|
|
3 |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||
|
|
|
6 |
5 |
4 |
|
|
6 |
5 |
4 |
|
|
|
|
|
|
|
|
|
Figure 5-17. Example Recovery from Stuck-at Wrap Condition
In transaction 2, the Transmitter sends a data burst including D0, D7 and D8. Again, D0 is lost which results in the Receiver recording the correctly received packets, but cannot advance its window (again) due to the D0 being stuck. So the Receiver returns a handshake indicating it is (still) ready for D0 (001H). At this point the transmit and receive windows are only one packet wide. In transaction 3, the Transmitter sends the single data packet with sequence number 0, which is successfully received by the Receiver. The Receiver is able to consume the received data virtually immediately (making the packet buffer free for another packet) which allows the device to finally shrink the sequence distance to zero. This in turn, allows the Receiver to finally advance the receive window to the maximum burst size and return a handshake of (207H). Note, that this particular response is a best-case scenario. Many implementations would not consume data that quickly and free up the receive buffers that quickly (between the end of the data phase and getting ready to transmit the handshake phase). Therefore, a common response in this situation will be a burst acknowledgement of 200H. The transmitter observes that the Receiver has advanced the receive window and can now advance the transmit window accordingly and send all new data in Transaction 4, including re-using sequence value 0 in back-to- back transactions, with no ambiguity whether the data associated with 0 is old or new.
5.5Wireless USB Transactions
All transfer types in Wireless USB use the same basic transaction format. This format has all of the necessary components to provide for reliable delivery of data by providing means of error detection and retry. As noted in Section 4.4 Wireless USB transaction are split transactions mapped over a TDMA-based structure. Transactions are nominally three phase (Token, Data, Handshake); However under certain flow control and halt (stall) conditions; there may be only two phases to a transaction. MMC and Handshake packets must be transmitted at base rate. Data phase data packets may be transmitted at any supported bit transfer rate.
108
Chapter 5 |
|
Protocol Layer |
Wireless Universal Serial Bus Specification, Revision 1.0 |
MMC HDR
Smashed MMC
Data IN Phase Data Packets
MMC HDR
Idle
IN
WDTCTA
Direction = IN = 1
bvDINAck
PHY_TXRate
Data not Ready, or Internal Error
DATA |
HNDSK |
NAK or |
|
STALL |
|||
(Seq# N) |
|
||
|
|
DATA
(Seq# N+1)
...
DATA
(Seq# N+Y)
WDTCTA
bvDINAck
Idle
OUT
HDR
Smashed MMC
Data OUT Phase Data Packets
Device Host
WDRCTA WDTCTA
DATA
(Seq# N)
DATA
(Seq# N+1)
...
DATA
(Seq# N+Y)
Direction = OUT = 0
Number of packets in data phase depends on Transaction Burst Size or available data.
The Sequence number is always derived (N+1) modulo MaxSequence.
HNDSK |
|
ACK (bvAckCode) |
|
or NAK or STALL |
|
|
|
Idle
Figure 5-18. General Wireless USB Transaction Format
When a host is ready to receive data, it issues an MMC with a WDTCTA block describing the channel time protocol time slot for the data phase of the transaction. If the function endpoint successfully receives the MMC, updates its transmit window based on the value of bvDINAck bit vector field in the WDTCTA block and then responds, (beginning at the start of the assigned protocol time slot) by transmitting either a burst of data packets (one or more), or should it be unable to respond with data, it returns a Handshake packet encoded with a NAK or STALL handshake code. The function endpoint transmits the data packets at the bit transmission rate encoded in the WDTCTA block by the host. If the function endpoint detects an error in the MMC it will not respond to the host at the protocol time slot. During the data phase protocol time slot, the host listens for data packets from the function endpoint. It observes the sequence numbers of received data packets and advances it’s receive window accordingly. The acknowledgement of which data packets the host received without error is communicated to the function endpoint in the bvDINAck bit vector field in next WDTCTA block addressed to the function endpoint.
Binding the acknowledgement information into the next token for the function endpoint saves channel time and protocol overhead and works well while the pipe is streaming data. However, at the end of a transfer (from the host perspective, all buffers provided by the application are full) the function will not receive any acknowledgement until the application provides more buffering and the host resumes transactions. In some cases this may be a long time and is significantly different sequencing requirements from USB 2.0. In order to simplify function implementations, the host has additional operational requirement to get an acknowledgement to the function endpoint as quickly as possible. For a Bulk IN function endpoint, when the host detects that it has no more data buffer, it must schedule at least one blank WDTCTA for the function endpoint in subsequent transaction groups. For an Interrupt or Isochronous function endpoint, the host must schedule a blank WDTCTA as the last ‘transaction’ in the service period after it has successfully received packets in the previous transaction and advanced its receive window. A blank WDTCTA is one that allocates no channel time and serves only to acknowledge the packets received in the previous data phase.
When a host is ready to transmit data to a function endpoint, it transmits an MMC with two WXCTA blocks which describe the protocol time slots required to complete the data and handshake phases of the Data OUT transaction. The host uses a WDRCTA block to describe the protocol time slot for the data phase and a WDTCTA
109
Chapter 5 |
|
Protocol Layer |
Wireless Universal Serial Bus Specification, Revision 1.0 |
block (with the Direction field set to OUT (0), indicating the OUT function endpoint must respond with a handshake packet) to describe the protocol time slot for the handshake phase. The function endpoint ignores the value of the bvDINAck field when the Direction field is set to OUT (0). Note if there is insufficient time in the current reservation to complete both the data and handshake stages of the transaction, the host may transmit the handshake stage WDTCTA block in a later MMC. During the data phase protocol time slot, the host will transmit a burst of data packets, based on the state of the host’s transmit window (see Section 5.4). If the function endpoint detects an error in the MMC it will not respond to the host at the handshake protocol time slot. Otherwise, the function endpoint will transmit a handshake packet at the handshake phase protocol time slot (described by the WDTCTA block). The function endpoint will set the Handshake Code to one of the following values:
ACK is used to communicate the function endpoint’s receive window state to the host. The receive window state is encoded into the handshake packet’s bvAckCode field. See Section 5.4 for how ACK and the value of bvAckCode are interpreted by the host. Note that one or more (up to all) of the data packets transmitted during the data phase protocol time slot may be corrupted when received by the function endpoint. The function endpoint must respond with a handshake packet during the handshake protocol time slot to provide the host the current receive window state. This information allows the host to know which packets need to be retransmitted.
NAK indicates that the function endpoint did not accept any data transmitted by the host during the data stage protocol time slot. This is nominally a flow control response indicating that the function was in a temporary condition preventing it from accepting any of the data (e.g. buffer full). The host will resend the data to the function endpoint at a later time, which depends on the transfer type of the function endpoint, see Section 5.5.4.
STALL is used by Bulk and Interrupt function endpoints to indicate that the endpoint is halted and the host must not attempt to retry the transmission because there is an error condition on the function.
When the host does not successfully receive the Handshake packet, the host must retry the Handshake packet (only) before retrying the data phase of the transaction.
Note: a device must not respond to a WXCTA that has a valid device address, but invalid endpoint number. Examples of this include: transactions addressing endpoints before the device is configured and transactions addressing endpoints not defined in the current active configuration.
The host sends zero-length Data OUT transfers by including a blank WDRCTA in the MMC. A blank WDRCTA is a WDRCTA with no channel time allocation. The receiving device behaves as if an actual zero-length transfer has occurred. The host will schedule a subsequent WDTCTA for the device acknowledgement. No such optimization can be made for Data IN transfers. Devices must send a Data packet with a zero-length data payload.
110
Chapter 5 |
|
Protocol Layer |
Wireless Universal Serial Bus Specification, Revision 1.0 |
5.5.1 Isochronous Transactions
Wireless USB Isochronous transactions follow the same basic format and structure as described in Section 5.5, with a few extensions to support the Isochronous data streaming model described in detail in Section 4.11.
MMC HDR
Smashed MMC
Data IN Phase Data Packets
MMC HDR
Idle
IN
WDTCTA
Direction = IN = 1
bvDINAck
PHY_TXRate
Data not Ready, or Internal Error
IDATA |
HNDSK |
NAK |
(Seq# N) |
|
|
IsoHeader |
|
|
IDATA
(Seq# N+1)
IsoHeader...
IDATA
(Seq# N+Y)
IsoHeader
WDTCTA
bvDINAck
Idle
OUT
HDR
Smashed MMC
Data OUT Phase Data Packets
Device Host
WDRCTA WDTCTA
Direction = OUT = 0
IDATA
(Seq# N)
IsoHeader
IDATA
(Seq# N+1)
IsoHeader...
IDATA
(Seq# N+Y)
IsoHeader
HNDSK |
|
ACK (bvAckCode) |
|
or NAK |
|
|
|
Idle
Figure 5-19. Isochronous Wireless USB Transaction Format
There are two structural differences in the data phase between the general transaction format (Figure 5-18) and the Isochronous transaction format (Figure 5-19). Data packets transmitted during the data phase of an isochronous transaction must use the isochronous version of the Wireless USB Header. The PID field must have the value of IDATA and must include the additional isochronous data header fields shown in Table 5-2.
5.5.2 Control Transfers
Control transfers in USB 2.0 are comprised of two or three stages of transactions that begin with a SETUP transaction followed by an optional set of transactions for a data stage and the transfer completes with a transaction for a status stage. Wireless USB preserves the same three-stage concept and semantics for control transfers, but introduces some optimizations to make control transfers easier for devices to implement and more efficient within the micro-scheduling transaction format.
The optimization is that the SETUP stage is not a separate OUT transaction. Rather, the Setup command bytes are transmitted in an MMC and are associated with the WXCTA block that describes the transaction for the next stage of the control transfer. This is fully compatible with the USB 2.0 rule that a device must always accept a SETUP transaction (i.e. cannot NAK). This protocol is simpler because it has removed the opportunity to respond directly to a SETUP transaction. Another optimization is that the Status stage of the control transfer is always encoded as an IN transaction where the function control endpoint must respond with a handshake packet. The final optimization simplifies the data sequencing rules for transactions in the data stage. The start of a control transfer resets the data bursting state on the host and Function endpoint to the default initial state. For a control IN transfer, it means the hosts receive window is initialized to receive packets and this is communicated to the function endpoint in the data stage WDTCTA block via the bvDINAck field. For a control
111
Chapter 5 |
|
Protocol Layer |
Wireless Universal Serial Bus Specification, Revision 1.0 |
OUT transfer, the setup stage resets the function endpoint’s receive window to its initial condition which the host assumes in order to begin transmitting packets for the first transaction in the data stage.
Setup + first IN Data Stage |
Idle |
Setup + first OUT Data Stage |
Device |
Host |
transaction |
|
transaction |
|
|
|
|
|
HDR
MMC
Smashed MMC |
|
Data IN Phase Data Packet |
|
|
|
||
|
|
||
|
|
|
|
MMC |
|
HDR |
|
|
|
|
|
|
|
|
|
WDTCTA |
Setup Bytes |
Setup Flag = 1B ControlStatusFlag = 0B
Direction = IN = 1
PHY_TXRate bvDINAck = 001H
Data not Ready, or Bad Command
DATA |
HNDSK |
NAK or |
|
(Seq# 0) |
STALL |
||
|
WDTCTA
bvDINAck
Idle
MMC HDR
Smashed MMC |
|
|
Data OUT Phase Data Packet |
|
|
|
||
|
||
|
|
|
WDRCTA Setup Bytes WDTCTA
Setup Flag = 1B
Direction = OUT = 0
Direction = OUT = 0B
DATA (Seq# 0)
HNDSK |
|
ACK (bvAckCode) |
|
|
or NAK or STALL |
||
|
|
|
|
|
|
|
|
|
|
|
|
Idle |
|
|
Figure 5-20. Setup Transactions with Data Stage
To start a control read transfer, the host will transmit an MMC with a WDTCTA block describing the channel protocol time slot for the first IN transaction in the data phase of the transfer. The host sets the Setup Flag to a 1B in the WDTCTA block to indicate that the eight control request bytes are appended to the channel time description block. It also initializes the bvDINAck bit vector to the initial condition of its receive window. If the function control endpoint successfully receives the MMC, it resets its endpoint burst sequence numbers to zero and sets it’s transmit window based on the value of bvDINAck bit vector field in the WDTCTA block. If the function endpoint has the data requested in setup command ready when the data phase protocol time slot arrives then it will then respond with a data burst, as directed by the WDTCTA block, or should it be unable to respond with data, it returns a Handshake packet encoded with a NAK or STALL handshake code.
To start a control write transfer, the host will transmit an MMC with the same WXCTA blocks as required for any OUT transaction (see Section 5.5). The host sets the Setup Flag to a 1B in the WDRCTA block as above for the control IN transfer and appends the eight control request bytes to the WDRCTA block. During the protocol time slot, the host will transmit a burst of data packets. As with any OUT transaction, the function endpoint will transmit a handshake packet at the handshake phase protocol time slot. Section 5.5 describes the Handshake Codes and conditions for each handshake code for an OUT transaction.
In keeping with the USB 2.0 semantics, a STALL handshake has the same effect on Wireless USB Control endpoints. Notably, a function endpoint will return a STALL handshake code if it cannot decode the request setup data. The host will not halt the pipe in response to a STALL handshake.
112