USB is ubiquitous with USB 3.0 (see USB 3.0: A Tale Of Two Buses) delivering the blistering speeds necessary to keep up with external flash drives. It is likely to be one of three interfaces left on a PC (see In The End, Will It Be PCI Express, USB, And Ethernet?).
Support for USB requires a stack on the host and a stack on the devices. Vendors of USB microcontrollers tend to have stacks for the latter that are provided to developers but there are alternatives like MCCI's TrueTask and DataPup USB stacks (Fig. 1).
The TrueTask USB platform targets the host and hub and MCCI DataPump handles the device side. Internally the stacks are modularized so a significant portion are identical regardless of the underlying hardware platform. This allows for better optimization and results in faster performance and smaller code size.
Figure 2 shows a more detailed dissection of MCCI's USB offering. It shows where the various MCCI and USB APIs are located and the underlying support or use of these interfaces.
MCCI handles USB 1.1. USB 2.0 and USB 3.0. It supports standard operating systems such as Microsoft Windows and Linux as well as embedded RTOS platforms like Nucleus, ThreadX, uITRON and MQX. Versions are also available for operation without an operating system on the range of supported platforms that includes ARC, Arm, PowerPC and SH chips. Local host stack emulations are supported for Windows and Linux. This feature allows the MCCI support to handle "in-box" class drivers associated with these operating systems.
On the device side, MCCI addresses all the standard USB protocols including UASP (USB Attached SCSI protocol) and BOT (bulk only transfer) (see What's the Difference Between USB UASP And BOT). Multiplexed USB devices are supported. MCCI also provides test and design support.
A standard USB stack like MCCI's offers developers a stable platform across operating system platforms and operating system versions. USB stacks delivered with an operating system are normally tied to the system making backporting bug fixes a challenge. Developers needing to support systems over a long period of time will appreciate the control over the USB stack.
Developers already employ third party Ethernet and WiFi stacks because they provide added benefits and controls. The same is true for USB.