Im Januar 1996 wurde die erste Spezifikation (1.0) bekanntgegeben. In den heutigen Rechnern finden man die im September 1998 eingeführte Version 1.1. Momentan wird an an der nächsten Generation einer Spezifikation gearbeitet. Es sind allerdings noch keine USB 2.0 Geräte verfügbar.
Der Universal Serial Bus ist strikt hirachisch, die gesamte Kontrolle geht von einem Host aus. Dies bedeutet, daß jegliche Kommunikation von dem Host gestartet werden muß und daß Geräte keine direkte Verbindung zu anderen angeschlossenen Geräten aufbauen können. In der vorliegenden Version erlaubt USB den gleichzeitigen Anschluß von 127 Geräten. Die maximale Bandbreite ist auf 12Mbit pro Sekunde beschränkt. Geräte, die geringe Bandbreite benötigen, wie Mäuse, Tastaturen, Joysticks, etc. kommunizieren mit einer Rate von 1.5MBit/s und nutzen die Fähigkeiten des Busses kaum. Geräte mit hoher Bandbreite wie beispielsweise Audio- und Video-Geräte nutzen etwas 90% des Busses, womit man auf eine tatsächliche Datenrate von 10MBit/s (incl. Protokoll-Overhead) kommt. Desweiteren kann der USB mit bis zu 500mA als Stromquelle den angeschlossenen Geräten zur Verfügung stellen.
Die heutigen Computer weisen an der Rückseite 2 (oder 4) USB Ports auf. An diese Ports können normale Geräte oder Hubs angeschlossen werden. Hubs sind USB-Geräte, die die Anzahl der Ports vergrößern. Die Anzahl der anschließbaren Geräte verringert sich um die Anzahl der angeschlossenen Hubs.
Normalerweise wird der physische Port der Host Controllers (Universal Host Controller (UCHI) von Intel oder Open Host Controller Interface (OHCI) von Compaq) als ein virtueller Root Hub behandelt, um die Bus Topologie zu vereinfachen. Daher kann jeder Port von dem Linux USB System in gleicher Weise behandelt werden.
Die Kommunikation auf dem Bus geschieht in 2 Richtungen auf vier verschiedene Arten:
SET_ADDRESS, GET_STATUS, GET_INTERFACE, SET_INTERFACE, GET_DESCRIPTOR, SET_DESCRIPTOR, SYNC_FRAME, SET_FEATURE, GET_CONFIGURATION, SET_CONFIGURATION, CLEAR_FEATURE. |
USB verwendet sogenannte Descriptoren, um auf unterschiedlichen Ebenen das Gerät, die Konfiguration, das Interface und die Endpunkte zu beschreiben. Die Descriptoren können abgerufen, und bei den Konfigurationen, Interfaces und Endpunkten können Einstellungen vorgenommen werden (vgl. B.2).