USB – real speed
I recently wrote about the USB standards and how, with each generation, increased speed has become available. This provoked some discussion about the actual data throughput, which is quite a complex topic. The “U” in “USB” stands for “universal” and the interface was designed to accommodate a very wide range of different peripheral devices, with very divergent needs in terms of data transfer – speed, volume and transfer reliability are all issues.
To accommodate this wide range of requirements, USB facilitates a number of specific data transfer modes …
There are actually four modes available, which accommodate different volumes of data and offer varying services in terms of guaranteed delivery etc. They are called: Control, Interrupt, Bulk and Isochronous.
Control mode is used to configure and enumerate a peripheral, allowing the host software to interrogate the device to determine what it is and how it can be used. Every peripheral needs to support this mode.
Interrupt mode is rather confusingly named, as conventional execution diverting interrupts are not really used. This mode is used for the periodic transfer of small volumes of data, where the timing and integrity of the transfer are guaranteed. This mode is typically used for quite simple devices like keyboards, mice and game controllers.
Bulk mode offers reliable data transport that guarantees sequential reception of data, with retransmits used if required. The throughput depends upon the current level of bus utilization. Bulk mode is normally used with external storage devices, like hard drives and USB sticks, and with printers and scanners.
Isochronous mode guarantees bandwidth, but does not guarantee reception of the data. During enumeration and configuration, the host determines whether a configuration setting has enough bandwidth to communicate with a certain peripheral. If insufficient bandwidth is available, it rejects the configuration selection in favor of lower bandwidth consumption. This mode is typically used for audio or video data.
There will be more on USB …
Posted September 13th, 2010, by Colin Walls
- malloc() – just say no
- What size drink would you like?
- Using an embedded Web server
- Row 13 – unlucky for some?
- Brillo – a brilliant OS or a scouring pad?
- How Mac and I are getting along – an interim report
- IPv6 – some guidance to the uninitiated
- Power outlets when traveling – and USB again
- Spotting the difference – subtleties of C code
- Shutting the Windows – moving to a Mac?