12
12
Transfer Format
Data
Token
Handshake
Data
Token
Handshake
Data
Token
Handshake
Data
Token
Handshake
Data
Token
Handshake
Data
Token
Phases (Packets)
Guaranteed delivery time of packets for data streaming
No-retransmitting of data allowed
Periodic transfers on the time base conveyed during
enumeration
Host guarantees attention before this elapsed time
Non-critical data transfers
Bandwidth allocated to the host
Good for file transfer where time critical data is not required
Enables host to read configuration information, set addresses
and select configurations
Only transfer that is required to be supported by peripherals
Has both IN and OUT transfers to a single endpoint
Comments
Data (IN or
OUT)
Isochronous
Data (IN or
OUT)
Interrupt
Data (IN or
OUT)
Bulk
Status (IN or
OUT)
Data (IN or
OUT)
(optional)
Setup
Control
Stages
(Transactions)
Transfer Type
Now that we have discussed the hierarchy of the USB protocol lets take a look at the different
transfer types. Remember, that these transfers are made up of transaction which are made up of
packets. Each of the transfer types is listed in the table along with the associated transaction and
packet types supported. The control transfer is the only bidirectional transfer allowed by the USB. It
is the transfer type used to communicate all of the configuration information between the host and a
device. Our example we provide on the previous slides illustrated the control transfer. It had the
three transactions associated with it. All devices on the bus MUST support control transfers to
endpoint 0. This is the default endpoint after reset and is at address 0. For Control transfers the status
phase is a zero length packet in the opposite direction of the transfer. For example, let’s say the host
is going to request a device descriptor which is a table we have loaded in flash. The direction of the
transfer would be IN since the data flows to the host. The status phase in this example would be a
zero length packet with an OUT token to terminate the transfer. Control transfers are used for things
like setting the device address to a value other than 0 for subsequent accesses, getting configuration
information on how the device wants to communicate using the other transfer types like Bulk.
Remembering our original example, we can see here that there are three transactions (Setup, Data,
and Status) comprised of nine packets (Token, Data, Handshake – three times) that make up the
Control transfer. The Bulk transfer uses three packets for the single transaction.
The Bulk transfer is used for non-critical data meaning data that is not required to be transferred on
any time base. It provides the highest data throughput as well so it is useful for applications like
printers, scanners or even USB to UART bridges. Remember that the host is responsible for
managing the bandwidth of the USB. One aspect of the Bulk transfer is that the host schedules
bandwidth as it becomes available, hence the non-critical nature of this type of transfer.
The interrupt transfer is used for periodic transfers where a time period is requested by the device
and the host will guarantee that the data transfer will be scheduled within that time period. It does
not guarantee that the data is transferred on a consistent time basis all the time, just that it will
schedule the transfer prior to the time period expiration. The data throughput is lower for interrupt
transfers and is useful for applications like mice, keyboards where user input is continually needing
to be sent to the host.