Universal Serial Bus
Der Universal Serial Bus (USB) ist ein Bussystem zur Verbindung eines Computers mit externen USB-Peripheriegeräten zum Austausch von Daten. Durch die relativ hohen möglichen Datenraten und die automatische Erkennung von Geräten und deren Eigenschaften ist der USB zum Anschluss fast aller Gerätearten von Maus und Tastatur bis zu Lautsprechern, Festplatten und Foto-Kameras vorgesehen. Lediglich für Monitore, digitale Videokameras u.ä. reicht die Datenrate von USB üblicherweise nicht aus, weshalb dafür weiterhin andere Anschlusstypen verwendet werden. Die Anzahl der USB-Anschlüsse eines Computers kann mit USB-Hubs vergrößert werden.
Überblick
USB ist ein serieller Bus. Das bedeutet, die Datenkommunikation erfolgt auf lediglich einer differenziellen Datenleitung (zwei Leitungen, eine überträgt invertierte Daten, dadurch reduziert sich die Abstrahlung und erhöht sich die Übertragungssicherheit). Dabei werden die einzelnen Bits des Datenpaketes nacheinander übertragen. Durch Verwendung von nur einer Datenleitung können die Kabel dünner und preiswerter als bei parallelen Schnittstellen ausgeführt werden, und die hohe Datenrate ist mit relativ geringem Aufwand zu erreichen, da nicht mehrere Signale mit identischem elektrischem und zeitlichem Verhalten übertragen werden müssen.
Der Bus erlaubt es, bis zu 127 verschiedene Geräte an einem Hostcontroller anzuschließen. Durch Verwendung mehrerer Hostcontroller können auch noch mehr Geräte angeschlossen werden, jedoch ist dies abhängig vom verwendeten Betriebssystem, Windows beispielsweise wird lange vor Erreichen der 127 Geräte instabil. USB zeichnet sich dadurch aus, dass die Installation der Geräte verhältnismäßig einfach ist und die Datenkabel der Geräte im laufenden Betrieb ein- und ausgesteckt werden können.
Gegenüber den bisherigen externen Schnittstellen am PC bietet USB deutlich höhere Datenübertragungsraten. USB stellt aus all diesen Gründen eine gute Weiterentwicklung zu den bisher verwendeten Schnittstellen (parallel/Centronics, seriell/RS232, Gameport sowie Tastatur- und Maus-Anschlüsse) dar. Für einige zeitkritische Anwendungen sind allerdings die konventionellen Schnittstellen besser geeignet, da auf diesen nicht mit Paketen gearbeitet wird, welche entweder die Übertragungsrate senken (bei nur mit wenigen Bytes belegten Paketen) oder die Übertragung verzögern (beim Sammeln von Bytes zum Füllen eines Pakets).
Die aktuelle Version der USB-Spezifikation ist 2.0. Mit dem Schritt von Version 1.1 zu 2.0 wurde es ermöglicht, Geräte mit einer deutlich höheren Datenrate zu bauen.
Bus-Struktur
Bei einem "klassischen" Datenbus werden mehrere Geräte parallel an eine Leitung angeschlossen. Bei USB bezieht sich "Bus" nur auf die logische Vernetzung, die tatsächliche elektrische Ausführung erfolgt nur mit Punkt-zu-Punkt-Verbindungen. An einen Host können mehrere Devices angeschlossen werden, jedoch grundsätzlich mittels Hubs. An einem Port ist immer nur ein einzelnes USB-Device angeschlossen. Durch den Einsatz von Hubs entstehen Baumstrukturen, die alle in einem Host-Controller enden.
USB-Kabel
-
USB-Stecker von links nach rechts: Typ A, Typ B, Typ Mini-B
-
USB-Typ-A-Stecker
In einem USB-Kabel werden nur vier Adern benötigt: zwei für die Spannungsversorgung von 5V (bei maximal 500mA, sprich 2,5W) und zwei für die Datenübertragung. Die Kabel müssen je nach Geschwindigkeit unterschiedlich geschirmt werden. Nur Kabel, die der Spezifikation für Full Speed entsprechen, dürfen mit A- und B-Stecker versehen sein. Low-Speed-Kabel müssen generell als "captive cable", also fest angeschlossenes Kabel ausgeführt sein (die Verwendung eines eigenen Steckers auf Geräteseite ist möglich, es darf nur kein USB-Stecker sein), da durch die geringe Abschirmung Probleme auftreten würden, wenn dieses Kabel mit einem Full-Speed-Gerät benutzt würde. Ein High-Speed-Kabel gibt es nicht, die Full-Speed-Kabel der USB-1.0- und -1.1-Spezifikation waren technisch bereits völlig ausreichend, um die 480 MBit/sec des High-Speed-USB zu erlauben. Kabel, die im Handel als "USB-2.0-Kabel" verkauft werden, sind daher als Aufschneiderei anzusehen. Die Länge eines Kabels vom Hub zum Device ist auf fünf Meter begrenzt (Low-Speed-Kabel werden von der Spezifikation auf 3 m beschränkt, dies ist technisch jedoch unbegründet und wird voraussichtlich in einer zukünftigen Fassung der Spezifikation entfallen). Die Spezifikation schließt Verlängerungen aus. Sind sie notwendig, müssen USB-Hubs dazwischengeschaltet werden. Diese und andere Geräte mit geringem Stromverbrauch können über den Bus mitversorgt werden. Einer der Vorteile geringer Adernzahl sind kleine Stecker, die zudem verpolungssicher ausgeführt sind.
Trotz des Ausschlusses von Verlängerungen laut Standard (oft "meldet" sich ein "langes" Kabel alleine als eigenes Gerät -P&P- an ) sind im Handel auch so genannte "Aktive USB-Verlängerungskabel" erhältlich, typischerweise mit der maximalen Kabellänge von 5m. Diese Kabel entsprechen in ihren Funktionen einem Bus-Powered-Hub mit einem einzigen Downstream Port und einem fest angeschlossenen 5 m Kabel am Upstream Port. Diese Geräte benötigen wie ein Bus-Powered-Hub einen Teil der Stromversorgung des Busses, so dass sich maximal 4 dieser Kabel hintereinander betreiben lassen, wenn man noch ein Bus-Powered Gerät daran betreiben möchte (4 x 100mA (Aktives Kabel) + 1 x 100mA (Gerät) = 500mA (max. Busstrom)) oder 5, wenn das angeschlossene Gerät eine eigene Stromversorgung besitzt. Somit lässt sich die maximale Entfernung eines Endgerätes vom USB-Controller bzw. Root-Hub auf 30m vergrößern (5 x 5m Aktive Verlängerung + 5m Kabel zum Endgerät). In der Regel geben sich diese Kabel nicht als eigenes Gerät am Bus zu erkennen. Da die elektrischen Auswirkungen dieser Kabel im USB-Bus denen eines Bus-Powered USB-Hubs mit 5m Kabel entsprechen, sollten bei der Verwendung dieser Kabel zusätzlich die Beschränkungen beim Verschachteln von USB Hubs beachtet werden.
USB-Hubs
Der USB-Hub ist eine spezielle Art von USB-Gerät, die das USB-Signal an zusätzliche Ports zum Anschluss von mehreren weiteren Geräten weiterleitet. Handelsüblich sind USB-Hubs mit bis zu sieben Downstream-Ports (d.h. vom Host weggerichteten Ports). Zwei wichtige Unterscheidungskriterien bei USB-Hubs sind die unterstützte USB-Version und die Stromversorgung. Hubs nach dem USB-1.x-Standard können an USB-2.0-Hosts verwendet werden, jedoch ist es nicht möglich, an einem Downstream-Port von einem solchen Hub die High-Speed-Datenrate zu nutzen, das ist nur mit USB-2.0-Hubs möglich (siehe "Begriff USB 2.0"). Bei der Stromversorgung gibt es die Möglichkeit, dass der Hub seinen Strom vom Bus bezieht (Bus Powered) oder über eine eigene Stromversorgung verfügt (Self Powered, z. B. über Steckernetzteil oder bei Hubs in Monitoren über deren Stromversorgung). Daraus ergibt sich der maximal an den Downstream-Ports des Hubs verfügbare Strom für angeschlossene Geräte. Da über den USB maximal 500 mA pro Gerät zur Verfügung stehen und der Hub selbst auch Strom benötigt, kann ein Bus-Powered-Hub maximal 4 x 100 mA weitergeben. Ein Self-Powered-Hub dagegen muss über eine ausreichende Stromversorgung verfügen, um an jedem seiner Ports 500 mA zur Verfügung stellen zu können. Dadurch ist es z. B. nicht möglich, an den USB-Ports in einer Tastatur Geräte anzuschließen, die mehr als 100 mA benötigen, wer will schon ein Steckernetzteil an seiner Tastatur haben? Auf dem Markt sind leider teilweise Hubs verfügbar, die sich als Self Powered ausgeben, obwohl sie über kein externes Netzteil verfügen. Teilweise werden solche Geräte damit beworben, dass man an diesem Hub ohne externe Versorgung z. B. ein Floppylaufwerk betreiben könne. Von der Verwendung derartig windiger Produkte ist dringend abzuraten, im günstigsten Fall bekommt man nur Zuverlässigkeitsprobleme mit den USB-Geräten, da durch die zu hohe Belastung die Versorgungsspannung einbricht, im ungüstigsten Fall kann man den USB-Port, an dem der Hub angeschlossen ist, beschädigen. Es kursieren für USB-Hubs auch die Begriffe "passiv" und "aktiv", gemeint sind damit eigentlich Bus Powered und Self Powered. Da ein Hub in jedem Fall ein komplettes USB-Gerät ist, könnte ein passiver Hub eigentlich nur ein defekter Hub sein.
Verschachtelung von Hubs
Die Grenzen beim Verschalten von USB-Hubs liegen bei der Verwendung von Self-Powered Hubs in der max. Anzahl der Geräte pro USB-Bus (jedes Hub ist ein Gerät, also max. 127 Hubs pro USB-Bus) und in der Signallaufzeit durch die Hubs und die Verbindungskabel zwischen den Hubs. Aus diesem Grund ist die Verschachtelungstiefe auf maximal 5 (Hub-)Ebenen unterhalb des USB-Controllers bzw. des Root-Hubs begrenzt. Darüberhinaus ist eine zuverlässige Kommunikation nicht mehr gewährleistet. Der längste Zweig in einem solchen verschachtelten USB-Bus könnte wie folgt aussehen:
RootHub <--5m--> Hub1 <--5m--> Hub2 <--5m--> Hub3 <--5m--> Hub4 <--5m--> Hub5 <--5m--> Endgerät
Die maximale Entfernung eines Endgerätes vom Controller kann bei einer Verlängerung über Self-Powered Hubs demnach 30m betragen. Bei der Verwendung von Bus-Powered Hubs ist zusätzlich darauf zu achten, dass der maximale Busstrom von 500 mA bis zum nächsten Self-Powered Hub oder bis zum USB-Controller bzw. zum Root-Hub nicht überschritten wird. Die gleichen Einschränkungen gelten auch für die so genannten "Aktiven USB-Verlängerungskabel". Eine Verlängerung unter Zuhilfenahme dieser Kabel mag zunächst "Hub-los" erscheinen. Aber durch die Kabellänge und die verbaute Elektronik haben Sie im Bus die gleichen elektrischen Auswirkungen wie ein Bus-Powered Hub. Jedes dieser Kabel vertieft die Verschachtelung somit um eine Ebene. So lassen sich z.B. unterhalb eines Self-Powered Hubs auf Ebene 2 nur noch 3 "Aktive USB-Verlängerungskabel" innerhalb der Grenzen des USB Standards betreiben. Ein solcher Bus könnte wie folgt aussehen:
RootHub <--5m--> Hub1 <--5m--> Hub2 <--5m Verl.--> <--5m Verl.--> <--5m Verl.--> <--5m--> Endgerät
Auch hier kann die maximale Entfernung des Endgerätes vom Controller nicht mehr als 30m betragen.
Geschwindigkeiten, Datenraten
USB erlaubt es einem Gerät, mit 1,5 MBit/s (Low Speed), 12 MBit/s (Full Speed) oder mit 480 MBit/s (High Speed, ab USB 2.0 verfügbar) Daten zu übertragen. Diese Raten basieren auf dem Systemtakt der jeweiligen USB-Geschwindigkeit und stellen die physikalische Bitrate dar. Die Datenrate für Low Speed Geräte ist auf 800 Byte/s begrenzt. Mit Full Speed Geräten können Datenraten bis zu 1 MByte/s erreicht werden. Die Datenrate der High Speed Geräte wird momentan durch die Hostcontroller im PC begrenzt und liegt über 30 MByte/s.
Auch wenn die maximale Datenrate von USB 2.0 eine Überlegenheit zu IEEE 1394a/FireWire (USB 2.0 bis zu 480 Mbit/s, IEEE 1394a bis zu 400 Mbit/s) erwarten lässt, gelten für USB technische Einschränkungen, die im praktischen Einsatz deutliche Nachteile gegenüber FireWire bringen. Dies ist zum Beispiel darin begründet, dass alle Kommunikation vom Host (in der Regel der Desktop-PC) gesteuert werden muss. Ein USB-Device hat keine Möglichkeit, mit einem anderen USB-Device zu kommunizieren, ohne dass sämtliche Daten zuerst in den Host gelesen und von dort wieder herausgeschrieben werden. FireWire bietet hier die Möglichkeit der Peer-To-Peer-Kommunikation auf Request-Ebene, d. h. ein Device kann die Kommunikation mit einem anderen Device aufbauen, ohne dass die Steuerung durch einen Host erforderlich ist. Über Firewire ist beispielsweise auch der Aufbau eines Netzwerkes möglich.
Begriff "USB 2.0"
Wird die Schnittstelle eines Geräts mit "USB 2.0" angegeben, führt dies manchmal zu Verwechslungen mit High Speed. Demzufolge wird erwartet, dass ein als USB-2.0-kompatibel bezeichnetes Gerät auch eine High-Speed-Datenrate von 480 MBit/s anbietet. Korrekt ist jedoch, dass ein USB-2.0-kompatibles Gerät grundsätzlich jede der drei Geschwindigkeiten benutzen kann und die 2.0-Kompatibilität in erster Linie bedeutet, dass die neueste Fassung der Spezifikation eingehalten wird. Lediglich bei Hubs und bei Computern bzw. USB-Karten bedeutet "USB 2.0" auch High Speed. Bei allen anderen Geräten muss darauf geachtet werden, dass sie über das Logo "USB 2.0 Hi-Speed" verfügen, wenn man ein Gerät mit bis zu 480 MBit/s erwartet. Low-, Full- und High-Speed-Geräte lassen sich an einem USB-2.0-Host fast beliebig mischen, ohne dass Geschwindigkeitsnachteile entstehen. Lediglich bei den Hubs muss man aufpassen, ein USB-1.1-Hub kann natürlich kein High-Speed-Gerät mit High Speed versorgen, hinter diesem Hub stehen dann nur noch Full und Low Speed zur Verfügung. Ebenfalls empfindlich die Datenrate einschränken können USB-2.0-Hubs, die nur über einen einzigen so genannten "Transaction Translator" verfügen. Bis zu einem USB-2.0-Hub läuft die Kommunikation an einem USB-2.0-Host immer mit High Speed, auch wenn an dem Hub Low- oder Full-Speed-Geräte angeschlossen sind. Implementierte Transaction Translators sind dann dafür zuständig, die Kommunikation mit den langsamen Geräten zwischen den Geschwindigkeiten umzusetzen. Hat der Hub mehrere TTs, werden schnellere Geräte nicht durch die langsamen ausgebremst. Hat er hingegen nur einen einzigen TT, so kann die Kommunikation mit mehreren Low- und Full-Speed-Geräten an diesem Hub auf Geschwindigkeiten deutlich unter die eines USB-1.1-Hosts zusammenbrechen.
Begriff "USB On-the-go"
Durch USB On-the-go (OTG) können entsprechend ausgerüstete Geräte direkt miteinander kommunizieren. Bisher benötigte es bei USB immer einen Computer, der die Host-Funktion übernahm. Durch USB OTG kann jedoch eine direkte Kommunikation zwischen zwei Geräten stattfinden, eines der beiden Endgeräte übernimmt eine eingeschränkte Host-Funktionalität. Mögliche Einsätze sind beispielsweise, Fotos direkt von der Digitalkamera am Drucker auszudrucken oder Musikdateien zwischen zwei MP3-Playern auszutauschen. Gekennzeichnet werden USB-OTG-Produkte durch das USB-Logo mit zusätzlichem grünen Pfeil auf der Unterseite und weißem "On-The-Go"-Schriftzug. Die USB-OTG-Spezifikation wurde am 18. Dezember 2001 verabschiedet, inzwischen finden sich immer mehr Produkte, welche USB OTG unterstützen. So kann man inzwischen z.B. bei einigen Festplatten-MP3-Playern auch Fotos von Digitalkameras speichern, ohne dafür einen PC zu benötigen. Dafür muss die Kamera aber dem Standard entsprechen, dass sie auch von modernen Betriebsystemen auch ohne spezielle Treiber als externer Datenträger erkannt werden kann. Etwas unklar ist derzeit noch, ob wirklich alle USB-OTG-Geräte miteinander oder anderen USB-Geräten kommunizieren können oder ob das Zusammenspiel sehr beschränkt ist (z. B. nur Produkte des gleichen Herstellers). Bei neuen Geräten ist die Wahrscheinlichkeit dafür sehr groß.
Begriff "WirelessUSB"
Momentan besetzen zwei Initiativen den Begriff "WirelessUSB". Die ältere der beiden wurde von der Firma Cypress initiiert, mittlerweile ist die Firma Atmel als zweiter Chiphersteller auf den Zug aufgesprungen. Das Cypress WirelessUSB ist eigentlich kein drahtloses USB, sondern eine Technik um drahtlose Endgeräte zu bauen, die dann über einen am USB angeschlossenen Empfänger/Sender (Transceiver) mit dem Computer verbunden sind. Dazu wird eine Übertragungstechnik im lizenzfreien 2,4-GHz-Band benutzt, die Datenrate beträgt bis zu 62,5 kbit/s und ist damit für Eingabegeräte völlig ausreichend, für andere Anwendungen aber oft zu knapp bemessen. Das zweite WirelessUSB Projekt ist wesentlich anspruchsvoller, das dazugehörige Konsortium wird von Intel angeführt. Ziel ist es, eine Technik zu schaffen, mit der die vollen 480 MBit/s des High-Speed-Übertragungsmodus drahtlos übertragen werden kann. Dabei ist eine kurze Reichweite unter 10 m vorgesehen; die Übertragung soll auf einer Ultra-Wideband Technik basieren. Erste Demonstrationen dieser Technik sind jedoch nicht vor der zweiten Hälfte 2005 zu erwarten, wann dann Produkte kommen werden, ist noch unklar.
Die verschiedenen Host-Controller
Die USB-Controller-Chips in den PCs halten sich an einen von drei etablierten Standards. Diese unterscheiden sich jeweils in ihrer Leistungsfähigkeit und der Implementierung von bestimmten Funktionalitäten (entweder erledigt sie der Chip von selbst, "in Hardware", oder der Treiber muss softwareseitig dafür sorgen). Für ein USB-Gerät sind die verwendeten Controller (fast) vollständig transparent, allerdings ist es für den Benutzer des PC mitunter wichtig, feststellen zu können, welche Art Chip der Rechner verwendet, um den korrekten Treiber auswählen zu können.
Universal Host Controller Interface (UHCI)
UHCI wurde im November 1995 von Intel spezifiziert. Die aktuelle Version des Dokuments trägt die Revisionsnummer 1.1, daher nennen sich auch alle gegenwärtigen USB-Geräte USB-1.1-kompatibel. UHCI-Chips bieten Unterstützung für USB-Geräte mit 1,5 oder 12 MBit/s Bandbreite. Sie werden ausschließlich von den Herstellern Intel und VIA Technologies verbaut.
Open Host Controller Interface (OHCI)
OHCI ist eine Spezifikation, die gemeinsam von Compaq, Microsoft und National Semiconductor entwickelt wurde. Version 1.0 des Standards wurde im Dezember 1995 veröffentlicht, die aktuelle Fassung trägt die Versionsnummer 1.0a und stammt von September 1999. Ein OHCI-Controller hat prinzipiell die gleichen Fähigkeiten wie seine UHCI-Pendants, erledigt aber mehr Aufgaben in Hardware und ist dadurch marginal schneller als ein UHCI-Controller (der Unterschied bewegt sich meistens in Bereichen, die gerade noch messbar sind, daher kann man dies in der Benutzung vernachlässigen, für Geräteentwickler können sich hier aber gemeine Fallen auftun...). Bei den USB-Controllern auf Hauptplatinen, die nicht von Intel oder VIA stammen handelt es sich mit großer Wahrscheinlichkeit um OHCI.
Enhanced Host Controller Interface (EHCI)
Der Enhanced Host Controller ist der Chip, der bei USB 2.0 verwendet wird. Er wickelt dabei nur die Übertragungen im Hi-Speed-Modus (480 MBit/s) ab. Wenn man USB-1.1-Geräte an einen Port mit EHCI-Chip steckt, reicht der EHCI-Controller den Datenverkehr an einen hinter ihm liegenden UHCI- oder OHCI-Controller weiter (diese Controller sind typischerweise auf dem gleichen Chip). Wenn kein EHCI-Treiber verfügbar ist, werden die High Speed Geräte ebenfalls an den USB 1.1-Controller durchgereicht und arbeiten dann sofern möglich mit langsamerer Geschwindigkeit.
USB auf dem Low-Level
Endpunkte
Generell gilt beim USB, dass ein Gerät nur dann Daten senden darf, wenn es vom Host-Controller abgefragt wird. Dies führt dazu, dass der Controller sich bei zeitkritischen Datenströmen (klassischer Anwendungsfall sind Mausbewegungen) häufig genug beim Gerät erkundigen muss, ob es Daten senden will, um Stockungen zu vermeiden. USB Geräte verfügen über eine Anzahl von "Endpunkten", gewissermaßen Unteradressen des Gerätes. Die Endpunkte sind in den Geräten hardwareseitig vorhanden und werden von der USB SIE (Serial Interface Engine) bedient. Über diese Endpunkte können voneinander unabhängige Datenströme laufen. Geräte mit mehreren getrennten Funktionen (z. B. Webcams, die Video und Audio übertragen) benutzen mehrere Endpunkte. Die Übertragungen von bzw. zu den Endpunkten erfolgen meist unidirektional, d. h. für bidirektionale Übertragungen ist ein IN- und ein OUT-Endpunkt erforderlich (IN und OUT beziehen sich jeweils auf die Sicht des Host-Controllers). Einzige Ausnahme sind Endpunkte, die den sogenannten Control Transfer Modus verwenden. Dies ist z. B. generell der Endpunkt 0, der immer vorhanden sein muss, da über ihn die Erkennung und Konfiguration des Gerätes läuft. Zusätzlich können auch noch andere Funktionen über den Endpunkt 0 ablaufen. Maximal möglich sind 31 Endpunkte pro Gerät, das ist der eine Control Endpunkt (der eigentlich zwei Endpunkte zusammenfasst) und je 15 In- und 15 Out-Endpunkte. Low-Speed--Geräte sind auf Endpunkt 0 plus maximal zwei weitere Endpunkte im Interrupt Transfer Modus mit maximal 8 Bytes pro Transfer beschränkt.
Übertragungsmodi
Der USB bietet den angeschlossenen Geräten verschiedene Übertragungsmodi, die diese für jeden einzelnen Endpunkt festlegen können.
Isochroner Transfer
Der isochrone Transfer ist für Daten geeignet, die eine garantierte Bandbreite benötigen. Diese Transferart steht für Full-Speed und High-Speed Geräte zur Verfügung. Bei der Aktivierung eines Alternate Settings eines Interfaces mit Isochronen Endpunkten reserviert der Host Controller Treiber die erforderliche Bandbreite. Steht diese Bandbreite nicht zur Verfügung, so schlägt die Aktivierung des Alternate Settings fehl und es kann mit diesem Gerät keine isochrone Kommunikation aufgebaut werden. Die erforderliche Bandbreite ergibt sich aus dem Produkt des Abfrageintervalls und der FIFO Größe. Full-Speed Geräte können jede ms bis zu 1023 Bytes übertragen (1023 kByte/s), High-Speed Geräte können bis zu 3 Übertragungen je Micro-Frame (125 µs) mit bis zu 1024 Bytes ausführen (24 MByte/s). Die Übertragung ist mit einer CRC16 gesichert, wird aber bei einem Übertragungsfehler durch die Hardware nicht wiederholt. Der Empfänger kann erkennen, ob die Daten korrekt übertragen wurden. Isochrone Übertragungen werden z.B. von der USB Audio Class benutzt, die von externen USB Soundkarten benutzt wird.
Interrupt-Transfer
Interrupt-Transfers dienen zur Übertragung von kleinen Datenmengen, die zu nicht genau bestimmbaren Zeitpunkten verfügbar sind. Im Endpoint Descriptor teilt das Gerät mit, in welchen maximalen Zeitabständen es nach neuen Daten gefragt werden möchte. Das kleinstmögliche Abfrageintervall beträgt bei Low-Speed 10 ms, bei Full-Speed 1 ms und bei High-Speed bis zu 3 Abfragen in 125 µs. Bei Low-Speed können pro Abfrage bis zu 8 Byte, bei Full-Speed bis zu 64 Byte und bei High-Speed bis zu 1024 Byte übertragen werden. Daraus ergeben sich maximale Datenraten von 800 Bytes/s bei Low-Speed, 64kBytes/s bei Full-Speed und bis zu 24 MBytes/s bei High-Speed. Die Daten sind mit einer CRC16 gesichert und werden bei Übertragungsfehlern bis zu 3 mal durch die Hardware wiederholt. Die HID Klasse (Human Interface Device zu der Geräte wie die Tastatur, Maus und der Joystick gehören, übertragen die Daten über den Interrupt Transfer.
Bulk-Transfer
Bulk-Transfers sind für große Datenmengen gedacht, die jedoch nicht zeitkritisch sind. Diese Transfers sind niedrig priorisiert und werden vom Controller durchgeführt, wenn alle isochronen und Interrupt-Transfers abgeschlossen sind und noch Bandbreite übrig ist. Bulk-Transfers sind durch eine CRC16 gesichert und werden durch die Hardware bis zu drei mal wiederholt. Low Speed Geräte können diese Transferart nicht benutzen. Full-Speed Geräte benutzen FIFO-Größen von 8, 16, 32 oder 64 Bytes. High Speed Geräte verwenden immer eine 512 Byte größe FIFO.
Control-Transfer
Control-Transfers sind eine besondere Art von Datentransfers die einen Endpunkt erfordern, der sowohl In- als auch Out-Operationen durchführen kann. Control-Transfers werden generell in beide Richtungen bestätigt, so dass Sender und Empfänger immer sicher sein können, dass die Daten auch angekommen sind. Daher wird der Endpunkt 0 im Control-Transfer-Modus verwendet.
Konfigurationen, Interfaces und Alternate Settings
Intern adressiert der USB-Controller die angeschlossenen Geräte mit einer sieben Bit langen Kennung, wodurch sich die 127 maximal anschließbaren Geräte ergeben. Die Adresse 0 wird automatisch von Geräten belegt, die ein Reset Signal erhalten. Wenn an einem oder mehreren Ports neue Geräte detektiert werden, so schaltet der Host-Controller einen dieser Ports ein, sendet dem dort angeschlossenen Gerät einen Reset und versucht dann das Gerät zu identifizieren. Danach teilt er dem Gerät eine eindeutige Adresse mit. Da immer nur ein Port mit noch nicht konfiguriertem Gerät aktiviert wird, kommt es zu keinen Adresskollisionen. Der Host-Controller fragt meist zuerst nach einem Device-Deskriptor, der z. B. die Hersteller- und Produkt-ID enthält. Mit weiteren Deskriptoren teilt das Gerät mit, welche alternativen Konfigurationen es besitzt, in die es von seinem Gerätetreiber geschaltet werden kann. Bei einer Webcam könnten diese Alternativen z. B. darin bestehen, ob die Kamera eingeschaltet ist oder ob nur das Mikrofon läuft. Für den Controller ist dabei relevant, dass die unterschiedlichen Konfigurationen auch einen unterschiedlichen Stromverbrauch mit sich bringen. Ohne besondere Freigabe durch das Betriebssystem darf ein Gerät nicht mehr als 100 mA Strom verbrauchen. Innerhalb einer Konfiguration kann das Gerät verschiedene Interfaces definieren, die jeweils über einen oder mehrere Endpunkte verfügen. Unterschiedlicher Bedarf an reservierter Bandbreite wird über so genannte Alternate Settings signalisiert. Praktisches Beispiel ist wieder die Webcam, die z. B. in zwei verschiedenen Auflösungen Bilder senden kann. Das Alternate Setting 0 wird aktiviert, wenn ein Gerät keine Daten übertragen möchte und somit pausiert.
Geräteklassen
Um nicht für jedes Gerät eigene Treiber zu erfordern, definiert der USB-Standard verschiedene Geräteklassen, die sich durch generische Treiber steuern lassen. Auf diese Weise sind USB-Tastaturen, Mäuse, USB-Massenspeicher und andere Geräte mit ihren grundlegenden Funktionen sofort startklar, ohne dass erst ein Treiber von CD installiert werden müsste. Herstellerspezifische Erweiterungen (die dann einen eigenen Treiber erfordern) sind möglich. Die Information, zu welchen Geräteklassen sich ein Gerät zählt, kann im Device-Deskriptor (wenn das Gerät nur einer Klasse angehört) oder in einem Interface-Deskriptor (bei Geräten, die zu mehreren Klassen gehören) untergebracht werden.
Weblinks
Geschichte und Entwicklung
Die Idee eines Universalbusses für Peripheriegeräte geht unter anderem auf eine Entwicklung von Apple zurück: Der Apple Desktop Bus (ADB) wurde in den Computern der Apple Macintosh-Modellreihe bereits in den 80er Jahren eingeführt, allerdings mit einer Datenrate von nur 10.000 Bit/s. Bereits der ADB verfolgte das Ziel, das Kabelgewirr auf, um und unter dem Schreibtisch zu reduzieren und verband dazu beispielsweise einfach die Maus mit der Tastatur und diese mit dem Computer; separate Datenleitungen wurden so eingespart.
Den heutigen universellen seriellen Bus (USB 1.0) entwickelte Intel im Jahr 1996, die ersten marktreifen USB-Geräte wurden um 1997 mit den Intel-Chipsätzen 430HX und 430VX eingeführt, der Industriestandard setzte sich jedoch erst etwa ein Jahr später durch, als sowohl Hauptplatinen mit integrierter USB-Unterstützung als auch native Peripherigeräte am Markt erschienen. Wesentlicher Faktor für die Marktakzeptanz von USB war 1998 die Einführung des iMac von Apple, der nur noch den USB als externe Schnittstelle hatte (neben Modem und Ethernet), dadurch bildete sich in kurzer Zeit eine installierte Basis, die auf den USB angewiesen war. Von Anfang an war die USB-Spezifikation nicht nur auf Tastatur und Maus begrenzt, sondern schloss auch andere Peripheriegeräte wie Drucker und Scanner ein.
Ab Ende 1998 folgte die überarbeitete Spezifikation USB 1.1, die in erster Linie Fehler und Unklarheiten in der 1.0 Spezifikation behob und den Interrupt Out Transfer hinzufügte, jedoch weiterhin auf eine Bitrate von 12 MBit/s bzw. 1,5MBit/s begrenzt war. Geschwindigkeitsmäßig stellte USB 1.x bis dahin keine Konkurrenz zu Apples bereits seit 1986 entwickelten alternativen Firewire-Standard (IEEE 1394) dar, der von Anfang an eine Datenrate von 100 MBit/s bot und rasch auf 400, 800 und schließlich 1.600 MBit/s (IEEE 1394b, ab April 2002) beschleunigt wurde.
Im Jahr 2000 folgte die Spezifikation für USB 2.0, die vor allem die Datenrate auf bis zu 480 MBit/s erweiterte und so den sinnvollen Anschluss von Festplatten oder Videogeräten ermöglichte. Produkte dafür erschienen jedoch erst ab 2002 am Markt. Der Linux-Kernel kann seit Version 2.4.19 mit USB 2.0 umgehen, Microsoft liefert einen Standardtreiber für Windows XP seit Service Pack 1 aus und Mac OS X unterstützt USB 2.0 ab 10.2.8.
Unterstützung in den Betriebssystemen
Mac OS unterstützt USB 1.1 ab Mac OS 8.1, der Umfang der Geräte die mit Klassentreibern unterstützt werden ist in den nachfolgenden Systemversionen deutlich erweitert worden, ab etwa Mac OS 8.5 ist ein wirklich brauchbarer Umfang der Unterstützung erreicht worden. Mac OS X in allen Versionen unterstützt USB 1.1 und ab 10.2.8 auch USB 2.0.
Windows 95 hat nur eine rudimentäre Unterstützung von USB 1.0, die jedoch als fehleranfällig gilt. Windows 98 unterstützt USB 1.0, ab SE auch USB 1.1. Windows NT hat keinerlei USB Unterstützung, von Drittherstellern sind jedoch Systemerweiterungen dafür erhältlich (auch diese gelten als für den praktischen Einsatz nicht tauglich, da kein Geräterhersteller damit testet oder bei Problemen weiterhilft). Windows 2000 (SP1) und XP unterstützen USB 2.0.
Amiga OS3.x unterstützt von Haus aus kein USB. Lediglich mit Software und Hardware von Drittanbietern ist eine Anbindung von USB 1.1 Geräten möglich. Erst ab Amiga OS4 wird, je nach Hardware, USB 1.1 und 2.0 unterstützt.
Linux unterstützt in den Kernel-Versionen 2.2, 2.4 und 2.6 USB-Controller. Im 2.4er und 2.6er Kernel sind Treiber für UHCI, OHCI, und EHCI (USB 2.0) - Controller integriert, sowie Unterstützung für gängige USB-Endgeräte (Eingabegeräte, Speichermedien, usw.).
Siehe auch
Weblinks
- USB Implementers Forum - Normgebendes Industriekonsortium, die kompletten USB Spezifikationen sind dort zu finden
- Zitate von CiteSeer
- USB und seine Kabel