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; it can also be used
for other device-specific purposes, including control of other pipes on the
Control exchange takes place via a control pipe — 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
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 8.2.