Wishing you all a Happy and Prosperous New Year 2009


Nov 6, 2008

USB Device Classes and Choosing the right Device Class for your application

1. USB Device Classes

A USB Device Class is a groups of devices or interfaces with similar attributes or services. USB Class is mainly used to describe the manner in which an interface communicates with the host including both data and control mechanisms. The class information is used by the host to identify and load the required drivers for specific interfaces/devices, to manage interface connectivity, and to manage the capabilities provided by the interface.

A USB Class Specification defines the requiremenets of a USB Class. The Class Specification is used by both firmware developers and host software developers (device driver developers) to agree upon certain rules while developing a USB device. The device drivers that cover all features of a device class is known as Class Drivers. These drivers can be used by any kind of device that falls in a particular device class.

The Class Drivers are developed by Operating System or third party software vendors, as well as by manufacturers supporting multiple devices which fall in the same device class.

USB-IF is responsible for defining and maintaining Device Class Specifications.

2. OS Supplied Device Drivers

The Class Definition and Class Specification allows independent groups to work seperately on host software development and device development, but still allows the device and host software work without any interoperability issues. Most of the times the Operating Systems will implement default device drivers for most of the device classes introduced by USB-IF. The default device drivers reduce the burden on device manufacturers as they avoid spending time on development of device drivers. These device drives will be installed when the Operating System is installed on a host, and available for all devices that follow the class specifcation.

The other benifit of designing a device to follow a specific Device Class is, even if a Operating System does not support a device class in current version, there is a good chance that the class will be supported in next version.

To avoid Windows to show the Unknown Provider message, the vendor developed device drivers need to signed for Windows. If you are already using a Operating System supplied Class Driver then this activity can also be avoided.

So, overall apart form grouping devices which has common features, the device class also reduces the development time cycle by helping the Operating Systems also to do some work on device manufacturer's behalf.

3. List of USB Device Classes supported by Windows Operating System as of today.

The Base Class Code is a hexadecimal number which is used by the USB identify a device class. In the following lists it is provided in the parenthesis. Device Classes listed in Microsoft web-site:

1. Bluetooth class - (0xE0)
2. Chip/smart card interface devices (CCID) - (0x0B)
3. Hub class - (0x09)
4. Human interface device (HID) - (0x03)
5. Mass storage class (MSC) - (0x08)
6. Printing class - (0x07)
7. Scanning/imaging (PTP) - (0x06)
8. USB Audio class - (0x01)
9. Modem class (CDC) - (0x02)
10. Video class (UVC) - (0x0E)



Not all classes proposed by the USB-IF are implemented in the Operating Systems. Compare the following list with previous list. The numbers in the parenthesis will give th Base Class code. This should match in both the lists.

Device Classes listed in USB-IF web-site(www.usb.org):

1. Use class information in the Interface Descriptors - (0x00) - Special Case
2. Audio Class - (0x01)
3. Communications and CDC Control - (0x02)
4. HID (Human Interface Device) - (0x03)
5. Physical - (0x05)
6. Image (PTP) - (0x06)
7. Printer - (0x07)
8. Mass Storage (MSD) - (0x08)
9. Hub - (0x09)
10. CDC-Data - (0x0A)
11. Smart Card - (0x0B)
12. Content Security - (0x0D)
13. Video - (0x0E)
14. Diagnostic Device - (0xDC)
15. Wireless Controller - (0xE0)
16. Miscellaneous - (0xEF)
17. Application Specific - (0xFE)
18.
19. Vendor Specific - (0xFF)
20.



Each Device Class will have pre-defined format for the descriptors in use. So, when a particual device is implemented to use a particular device class, all the data structures need to be formatted as per the device class requirements.

Next Section on Standard USB Device Classes and Choosing the right Device Class for your application - (Part II) explains how Descriptors in USB is used to distinguish between Device Classes and how they need to be used for defining Device Classes.

No comments: