USB interoperability is the ability of a USB device to operate, without side effects, in the presence of other USB devices.
Interoperability testing of USB is necessary because of the nature of the architecture. USB provides the opportunity for an end-user to add and remove devices to a system without ever opening up the system chassis or removing power from the system. There are few limitations of the architecture, and therefore the number of devices and the variation of device mix are virtually unpredictable.
This document is intended to provide a cookbook approach for performing interoperability testing for:
A USB device without other USB devices
A USB device with other USB devices
A USB hub-type device
There are some features of USB that add complexity to interoperability testing.
Device driver must be able to handle system power state change requests gracefully. While idle, a device driver must allow the system to enter a sleep state. However, while idle there are cases in which a device driver might be allowed to prevent the system from entering a sleep state. For more information on this topic, see the white paper, Understanding WDM Power Management, in the whitepapers section on USB-IF website at http://www.usb.org/developers/whitpapr.html.
Since USB has dynamic plug and play capability, the system hardware and operating system immediately detect a device attached to or removed from the system. This requires a device driver to be dynamically loaded and unloaded.
In addition, an end-user has the ability to add and remove devices to the system configuration or reboot the system at any time. This also provides opportunity to have a dynamic system topology, where the end-user can move devices from one place to another.
An end-user has the ability to expand the number of devices added to a system. Typically the system has two USB ports, and the end-user can add additional ports to the system by use of USB hubs, allowing up to 126 devices to be added behind a single USB host controller.
USB has limited bandwidth. This bandwidth is dynamic, meaning that bandwidth can be consumed as devices become active and also may not be available when a device attempts to activate. Device drivers must be aware of this and handle the situation gracefully.