The interoperability, performance, and ease-of-use of USB has led to its overwhelming acceptance in the marketplace. It is the interface of choice for all but the highest performance and lowest cost applications. This near-ubiquity has led many companies to investigate adding USB to existing embedded designs, thus providing compatibility with a wide variety of devices with a minimum of development effort.

However, the ease-of-use of USB from a consumer standpoint belies the serious complexity of the software and hardware design. Making poor decisions before beginning a USB design can lead to long development times, poor system performance, and non-existent long-term maintainability.

This paper attempts to detail some of the thoughts that should go into adding USB to a design.