Universal Serial Bus (USB) is a connection protocol between a host controller (such as a personal computer) and a peripheral device. It was designed to replace a wide range of slow buses—the parallel port, serial port, and PS/2 connector—with a single bus that all devices could connect to (Corbet et al., 2005).
As described in the official USB documentation, available at http://www.usb.org/developers/, USB devices are hideously complex. Fortunately, FreeBSD provides a USB module to handle most of the complexity. This chapter describes the interactions between the USB module and drivers. But first, some background on USB devices is needed.
Communication between a USB host controller and a USB device occurs through a pipe (Orwick and Smith, 2007). A pipe connects the host controller to an endpoint on a device. USB devices can have up to 32 endpoints. Each endpoint performs a specific communication-related operation for a device, such as receiving commands or transferring data. An endpoint can be one of four types:
Control
Interrupt
Bulk
Isochronous
Control endpoints are used to send and receive information of a control nature (Oney, 2003). They are commonly used for configuring the device, issuing device commands, retrieving device information, and so on. Control transactions are guaranteed to succeed by the USB protocol. All USB devices have a control endpoint named endpoint 0.
Interrupt endpoints transfer small amounts of data at a fixed rate. See, USB devices cannot interrupt their host in the traditional sense—they don’t have an asynchronous interrupt. Instead, USB devices provide interrupt endpoints, which are polled periodically. These endpoints are the main transport method for USB keyboards and mice (Corbet et al., 2005). Interrupt transactions are guaranteed to succeed by the USB protocol.
Bulk endpoints transfer large amounts of data. Bulk transactions are lossless. However, they are not guaranteed by the USB protocol to complete in a specific amount of time. Bulk endpoints are common on printers, mass storage devices, and network devices.
Isochronous endpoints periodically transfer large amounts of data. Isochronous transactions can be lossy. As such, these endpoints are used in devices that can handle data loss but rely on keeping a constant stream of data flowing, such as audio and video devices (Corbet et al., 2005).
18.117.234.225