The USB standard supports two kinds of data exchange between a host and a
device: functional data exchange and control exchange.
- Functional Data Exchange is
used to move data to and from the device. There are three types of USB data
transfers: Bulk, Interrupt and Isochronous
- Control Exchange is
used to determine device identification and configuration requirements and
to configure a device, and can also be used for other device-specific
purposes, including control of other pipes on the device.
Control exchange takes place via a control pipe, mainly the default
Pipe 0, which always exists. The control transfer
consists of a setup stage (in which a setup packet is
sent from the host to the device), an optional data
stage and a status stage.
Figure 3.2 below depicts a
USB device with one bi-directional control pipe (endpoint) and two functional
data transfer pipes (endpoints), as identified by WinDriver's DriverWizard utility
(discussed in Chapter 5).
More information on how to implement the control transfer by sending setup
packets can be found in section 9.2.