Dienstag, 4. Oktober 2011

Ein Ausflug zu USB

USB-Interface


Einleitung

Das USB-Interface wurde vor Jahren von Intel entworfen, um viele bisher am PC verwendeten Interfaces (RS232, Parallelport, PS2) durch eine einheitliche moderne Schnittstelle abzulösen. Obwohl USB vor allem am Anfang der Firewire-Konkurenz (Apple) hoffnungslos unterlegen war, hat es sich im PC-Sektor durch die Marktdominanz von Intel durchgesetzt.
Es ist in diesem Rahmen weder nötig noch möglich, USB im erschöpfend im Detail zu behandeln. HUBs wrden ignoriert, statt dessen tun wir so, als ob der USB-Controller 127 Anschlussbuchsen für USB-Geräte hat. Für den Bastler/Anwender sind HUBs nur wenig mehr als "Verteilerdosen" mit zwei Ausnahmen: Jeder Hub benötigt eine eigene Adresse, und sie haben einen gewissen Einfluss auf die Stromversorgung der USB-Geräte.

Der Universal Serial Bus feierte gerade sein 15-jähriges Jubiläum: USB 1.0 wurde erstmalig im Januar 1996 der Öffentlichkeit präsentiert. Er sollte eine kostengünstige und schnelle Alternative zu den damals sehr beliebten seriellen und parallelen Transfer-Protokollen bieten. Ein kleines Update auf USB 1.1 erfolgte wenige Zeit danach im September 1998. Etwa zwei Jahre später, im April 2000, gab es dann mit USB 2.0 den ersten großen Versionssprung vor dem Komma. USB 2.0 war viele Jahre der unangefochtene, aber auch unveränderte, Standard in der Anbindung von Computer-Peripherie. Dem massiv wachsenden Bedarf schnellerer Datenübertragung wird erst die jüngste Weiterentwicklung des USB-Standards gerecht, die im November 2008 in Form des USB 3.0 Standards vorgestellt wurde.
Im Zuge der USB-Updates wurden immer wieder neue Marketing-Bezeichnungen für die Leistungsfähigkeiten von USB-Geräten eingeführt. Kunden wurden – und werden noch heute – mit den Begriffen Low-Speed, Full-Speed, High-Speed und SuperSpeed konfrontiert, die aber zu einiger Verwirrung führen können. Die folgende Tabelle zeigt, welche Geschwindigkeiten der jeweilige USB Standard beherrschen sollte.



Nach und nach sind die beliebten Bastler-Schnittstellen (RS232 und Parallelport) aus den PCs verschwunden. Die meisten Laptops haben schon keine 'Legacy'-Interfaces mehr. Darum wird der Druck immer größer, sich nach einer Alternative umzusehen. Eine Möglichkeit ist der Umstieg auf USB.


Grundlagen






 USB ist ein sternförmiges Netz von Geräten (Device), die alle von einem Controller (im PC) verwaltet werden. (Auch wenn die Verkabelung baumförmig vorgenommen werden kann, ist der logische Aufbau doch sternförmig.) Der Controller hat allein das Recht, die Kommunikation zwischen ihm und dem Device zu steuern. Er kann Daten in einen Pufferspeicher des Device schreiben, und er kann Daten aus einem Pufferspeicher im Device auslesen. Das Device kann dagegen nicht selbständig dem Controller melden, dass es Daten haben will oder dass es Daten für den Controller hat. Es gibt auch keinen Interupt, den das Device auslösen könnte (auch wenn es eine Betriebsart mit diesem Namen gibt). Wie ist unter diesen Bedingungen ein Datenfluss vom Device zum Controller möglich?



Beim Reset des USB-Busses (oder beim Anstecken an den Bus), meldet sich jedes Device beim Controller mit der fiktiven Adresse 0 an. Der Controller gibt dem Device eine richtige Adresse (1..127) und liest die Konfiguration aus dem Device aus. In dieser Konfiguration gibt das Device an, wieviele Pufferspeicher  (genannt Endpunkte) es besitzt, wie groß diese Puffer sind (max. 64 Byte) und ob das für den Controller Lesepuffer (In) oder Schreibpuffer (Out) sind. Außerdem wird dem Controller gesagt, wie häufig er prüfen soll, ob im Lesepuffer Daten für ihn bereitliegen. Der Controller muss also alle Lesepuffer pollen (immer wieder abfragen)! Für Geräte, die vom PC eine schnelle Reaktion erfordern (z.B. die Maus), muss dieses Abfragen (Pollen) mehrere 100 mal pro Sekunde erfolgen.
Die Konfiguration enthält noch viele andere Informationen (z.B. über den Strombedarf).




Interfaces
Die meisten USB-Geräte (Device) haben nur eine Funktion. So ist ein Memorystick z.B. nur ein Massenspeichergerät und nichts anderes. Ein USB-Lautsprecher ist nur ein USB-Audiogerät.
Einige Device haben aber auch mehrere ganz unterschiedliche Funktionen. Ein via USB angeschlossener externer CD-Brenner ist sowohl eine Massenspeichergerät (zum Lesen und Schreiben von Dateien), wie auch ein Audiogerät (beim Abspielen von Musik-CDs) als auch ein Video-Gerät (beim Abspeilen von Video-CDs).
Für jede seiner Funktionen hat ein Device genau ein Interface. Der Memorystick hat also (wie die meisten Devices) ein Interface, ein USB-CD-Brenner z.B. drei Interfaces.





Endpunkte
Jedes Interface hat einen oder mehrere Endpunkte (Endpoint). Das sind Pufferspeicher, in die der USB-Controller Daten hineinschreiben kann (out-Endpoint) oder herauslesen kann (in-Endpoint).
 

Damit der Controller die Configuration auslesen kann, besitzt jedes Interface einen Lesepuffer Nr. 0 (Endpunkt 0), der für die Konfiguration zuständig ist. Dieser ist der einzige Endpunkt, der sowohl ausgelesen wie auch beschrieben werden kann, alle anderen Endpunkte beherrschen nur eine Datenrichtung.
Der Endpunkt 0 kann auch für den Datentransfer mitbenutzt werden, er bietet aber nur eine geringe Datenrate von 800 Byte/s. Besser ist es zusätzliche Endpunkte zu benutzen. 
Jeder Endpunkt ist im Device natürlich in Hardware realisiert, und so ist die maximale Anzahl der verfügbaren Endpunkte von der im Device vorhandenen Hardware abhängig. Low-Speed-Devices haben maximal 4 Endpunkte, USB2.0 Devices können bis zu 32 Endpunkte haben.
Begriffe:
  • Device-Treiber
    das ist der USB-Treiber im PC
  • Device-Controller
    das ist die Firmware im USB-Gerät (z.B. im PIC)
  • Controller
    das ist das USB-Interface im PC
  • Device
    das ist das USB-Gerät, das an den PC angesteckt wird

Ein Endpunkt ist eigentlich nur ein Pufferspeicher, auf den sowohl der USB-Controller, wie auch das USB-Device (also der Device-Controller) Zugriff haben. Das möchte ich am Beispiel eines Chipkartenlesegerätes verdeutlichen.


Beispiel:
Das Chipkartenlesegeräte wird an den Bus angesteckt. Da eine der USB-Datenleitungen einen Pull-Up-Widerstand besitzt, erkennt der Controller (eigentlich der Hub) das, und spricht das Gerät mit der Device-Adresse 0 an. Aus dem Endpunkt 0 liest der Controller die Konfiguration des Device aus. In dieser Konfiguration steht, dass das Device zusätzlich einen Endpunkt 1 (out) und einen Endpunkt 2 (in) besitzt, wie oft die in-Endpunkte (0 und 2) auf neue Daten geprüft werden sollen, wie groß die Pufferspeicher in den Endpunkten sind und (indirekt) welcher Treiber im PC für dieses Device benutzt werden soll. Der Controller weist dem Gerät eine echte Adresse zu, und prüft, ob der Treiber installiert ist. Falls nicht, dann fordert es den Benutzerer zur Treiberinstallation auf.
Der Benutzer startet irgentwann später auf dem PC das Programm für den Kartenleser, und will Daten aus der Karte auslesen. Einen entsprechenden Befehl sendet das Programm an den Device-Treiber. Dieser schreibt nun durch den Controller einen entsprechenden Befehl in den Endpunkt 1 des Device.
Das Schreiben in den Endpunkt 1 löst im Device-Controller einen Interupt aus. Der Device-Controller liest den Endpunkt 1 aus, und findet darin den Befehl zum Auslesen der Chipkarte. Er liest die Chipkarte aus, und schreibt soviel  Kartendaten in den Pufferspeicher des Endpunkt 2 wie hinein passen.
Der USB-Controller fragt regelmäßig alle Endpunkte ab. Als er nun routinemäßig auch den Endpunkt 2 des Kartenlesers abfragt, findet er darin neue Daten vor, die er aus dem Endpunk 2 ausliest, und dem Devicetreiber übergibt. Dieser liefert die Daten beim PC-Programm ab. Das Auslesen des Endpunkt kann im Device-Controller einen Interrupt auslösen, damit der Device-Controller weitere Daten in den Endpunkt 2 schreiben kann...
 

Endpunkte-Betriebsarten

Endpunkte sind wie schon gesagt Pufferspeicher im USB-Device, die dem Datentransfer zwischen dem USB-Bus und dem Device-Controller dienen. Da aber eine USB-Tastatur, eine USB-Festplatte oder ein USB-Lautsprecher ganz unterschiedliche Ansprüche an Datenrate und Echtzeitverhalten stellen, gibt es 4 verschiedene Betriebsarten. Jeder Endpunkt unterstützt genau eine Betriebsart.
 

Control

Wird vor allem für Steuerungszwecke benutzt. Hat höchste Priorität und Fehlerschutz (verlorene Daten werden wiederholt, bis sie empfangen wurden).
Wird vor allem für die Initialisierung benutzt, kann aber auch allgemein verwendet werden, um kleine Datenmengen zu übertragen.
Alle USB-Geräte müssen diesen Mode beherrschen.
 

Interrupt

Wird vor allem für Geräte mit kleinem Datenaufkommen benutzt (z.B. Tastatur), die wenige Daten schnell und regelmäßig zum PC übertragen müssen.
 

Isochronous (nur USB 2.0)

Wird vor allem benutzt, wenn kontinuierlich große Datenmengen einer konstanten Datenrate übermittelt werden müssen. Es gibt keinen Schutz for Datenverlust.
Eine typische Anwendung wäre z.B. USB-Lautsprecher.
 

Bulk (nur USB 2.0)

Eine vor allem für Massenspeicher geeignete Betriebsart. Sie erlaubt ein hohes Datenaufkommen, und die fehlerfreie Übertragung ist garantiert. Allerdings kann es etwas dauern, bis die Daten ankommen.
 



Transfer Type
Control
Interrupt
Isochronous
Bulk
USB 1.1
X
X
-
-
USB2.0
X
X
X
X
Datenbytes/Millisekunde pro Transfer, maximum possible per pipe (full speed)
832, in dreizehn 64-Byte Transfers
64
1023
1216, in neunzehn 64-Byte Transfers
Datenbytes/Millisekunde pro Transfer, maximum possible per pipe (low speed)
24, in drei 8-Byte Transfers
0.8, 8 Bytes in 10 ms
verboten
verboten
Für diesen Typ insgesamt reservierte Bandbreite, max %
10%
90%
Int & Iso zusammen
90%
Int & Iso zusammen
keine
Fehlerkorrektur?
ja
ja
nein
ja
Garantierte Datenrate?
nein
ja
ja
nein
garantierte Latezzeit?
(max. Zeit zwischen Transfers)
nein
ja
ja
nein

 

Stromversorgung

Ein großer Vorteil von USB gegenüber RS232 ist die Möglichkeit, ein Device über das USB-Kabel auch mit Strom zu versorgen. Maximal steht einem Device 0,5A zur Verfügung, das sind bei der Versorgungsspannung von 5V immerhin 2,5 W.
Um für bis zu 127 Devices genug Reserven zu haben, müsste der PC über 60A in Bereitschaft halten, das wäre natürlich absurd. Um mit den begrenzten Stromrecourcen zu wirtschaften, legt der Controller fest, wieviel Strom ein Device wirklich bekommen kann, und er kann ein Device auch vollständig von der Stromversorgung abschneiden, wenn nicht genügend Strom zur Verfügung steht.
Einem Device, das sich gerade am Bus anmeldet, stehen pauschal 100 mA zur Verfügung. Das Device muss also eine Betriebsart (eine Konfiguration) beherrschen, in der es nicht mehr als 100mA verbraucht. Ob es in dieser Betriebsart seine eigentliche Funktion als Kartenleser, Festplatte oder was auch immer erfüllen kann, steht auf einem anderen Blatt.
Ist für den regulären Betrieb ein höherer Stromverbrauch nötig, dann muss das Device dafür eine andere Konfiguration kennen, darf diese aber nicht selbständig einnehmen.
Nachdem sich das Device am Bus angemeldet hat, (und dabei höchstens 100mA verbraucht) kann der Device-Treiber im PC versuchen, das Device in die alternative Konfiguration umzuschalten, in der es seine Funktion erfüllen kann, aber auch mehr Strom verbraucht. Der Controller (mit den HUBs) entscheidet, ob genug Strom zur Verfügung steht. Wenn ja, dann schaltet er das Device in die alternative Konfiguration um, wenn nicht, dann verweigert er das. Das Device funktioniert dann zwar nicht, aber es wird auch eine Überlastung der Stromversorgung vermieden.
Verbraucht ein Device unerlaubt mehr Strom, als ihm zusteht, dann wird es (lt. Spezifikation) vom Controller 'zur Strafe' abgeschaltet.
 

Konfigurationen

Ein Device besteht aus einem oder mehreren Interfaces mit jeweils wieder einem oder mehreren Endpunkten. Jeder Endpunkt hat eine bestimmte Betriebsart, Puffergröße u.s.w.
Die Summe dieser Einstellungen ist die Konfiguration des Device.
Ein Device kann aber auch unterschiedliche Konfigurationen haben, zwischen denen der Device-Treiber umschalten kann.
Beispiel:
Ein Microdrive (Minifestplatte) sei in einem externen Gehäuse mit USB-Anschluss eingebaut, um als externe Festplatte zu dienen. Die Speisung des Microdrives soll über den USB-Bus erfolgen. Mit nur 100 mA kann man aber das Microdrive nicht 'hochdrehen'. Zuerst muss ein höherer Strom vom Controller genehmigt werden.
Diese externe Festplatte sollte zwei unterschiedliche Konfigurationen beherrschen:
Konfiguration 1:
  • max. 100mA Strombedarf
  • 1 Interface mit 1 Endpunkt
  • nur der Endpunkt 0

Konfiguration 2:
  • max. 250mA Strombedarf
  • 1 Interface mit 3 Endpunkten
  • Endpunkt 0 zur Steuerung
  • Endpunkt 1 als IN-Endpunkt zum Lesen vom Microdrive
  • Endpunkt 2 als OUT-Endpunkt zum Schreiben auf das Microdrive
Nach dem Anstecken des Microdrive an den USB-Bus, geht das Device zunächst in die Konfiguration 1 und nimmt die Adresse 0 an. Die Festplatte bleibt abgeschaltet, um den Stromverbrauch im Limit zu halten. Damit sind auch keine extra-Endpunkte für den Datentransfer zur oder von der Festplatte nötig.
Der Controller erkennt, das ein neues Device angesteckt wurde, und liest dessen Konfiguration aus. Daher weiss er, welcher Treiber für das Device zuständig ist. Der Controller ruft den Treiber, und dieser muss nun versuchen, die Festplatte in Betrieb zu nehmen. Dazu ist das Umschalten in die Konfiguration 2 nötig. Der Treiber 'beantragt' also beim Controller das Umschalten in die 2. Konfiguration. Der Controller prüft, ob am Bus ausreichend Stromreserven bestehen. Wenn ja, dann schaltet er das Device in die Konfiguration 2 um.
Nun darf das Device 250 mA verbrauchen, und startet die Festplatte. Außerdem werden die Endpunkte 1 und 2  zum Datenaustausch eingerichtet.
Die gesamte Struktur des USB-Devices wird mit sogenannten Deskriptoren beschrieben. Das sind kleine Datensätze von wenigen Byte, die der Controller aus dem Device auslesen kann. Diese Deskriptoren enthalten alle Daten über das Device, seine Configurationen sowie deren Interfaces und Endpoints.
 

Reichweiten

Auch der USB Standard definiert Längenbeschränkungen. In der folgenden Tabelle sind diese Maximallängen für USB 1.1, USB 2.0 und USB 3.0 aufgeführt:




USB 3.0 gibt keine konkrete Spezifikation der maximal erlaubten Längen, empfiehlt jedoch drei Meter. Die in der Tabelle aufgeführten maximalen Gesamtlängen können durch die Aneinanderreihung von sechs Kabeln über fünf sog. Hubs erreicht werden. Um über die maximale Gesamtlänge hinauszugehen, wird spezielle Hardware benötigt, bspw. Repeater Extension Cables oder USB Bridges. Für den USB 3.0 Standard existieren bereits Lösungen, die Kabel mit eigener Elektronik einsetzen, um mit einem einzigen Kabel auf bis zu 20 Meter Länge zu kommen.
Der USB 2.0 Standard verlangt für Full-/High-Speed-Kabel vier Leitungen, jeweils zwei für Daten und zwei für die Stromübertragung, plus einer äußeren Abschirmung.
Demgegenüber werden für Super-Speed-Kabel nach USB 3.0 Standard insg. zehn Leitungen nebst Abschirmung benötigt: Zwei Leitungen für die Stromübertragung und ein nicht abgeschirmtes verdrilltes Leitungspaar (UTP-unshielded twisted pair) für die Rückwärtskompatibilität zu High-Speed und niedrigeren Transferraten. Zusätzlich zwei abgeschirmte Differentialpaare (SDP-shielded differential pairs), die jeweils drei Leitungen enthalten: Zwei für Daten und eine Erdleitung (drain wire). Die beiden SDPs werden für die Super-Speed-Datenübertragung verwendet und ermöglichen den gleichzeitigen bidirektionalen Datenfluß durch das Kabel.

 

USB-Treiberzuordnung unter Windows

Woher weiss das Betriebssysten (z.B. Windows) welchen Treiber es für ein bestimmtes USB-Device verwenden muss?

Jeder Hersteller von USB-Geräten muss sich bei USB-Org registrieren lassen (kostet 2000 Euro) und erhält dafür eine 16-Bit lange Identifikationsnummer, die Vendor-ID (VID). (Es kann also weltweit nur 65000 Hersteller von USB-Geräten geben) Diese Vendor-ID trägt er in die Konfiguration seiner USB-Geräte ein. Außerdem vergibt der Hersteller nun noch für jeden Gerätetyp, den er herstellt, eine weitere 16-Bit-Produktkennung (product identifier - PID). Auch die trägt er in die Konfiguration des Gerätes ein.

Bei der Installation eines Treibers im Betriebssystem wird nicht nur der Treiber übergeben, sondern auch ein *.inf-File. In diesem File steht, für welche Kombination von VID&PID dieser Treiber zu verwenden ist.

Wird ein USB-Gerät an den PC gesteckt, dann liest das Betriebssystem die Konfiguration mit VID&PID aus. Nun schaut es nach, ob diese VID&PID-Angabe in einem *.inf-File vorkam. Wenn ja, dann wird der zugehörige Treiber geladen. Falls nicht, dann wird der User zur Installation eines zu VID&PID passenden Treibers aufgefordert.

Die VID&PID-Kombination des Device legt also fest, welchen Treiber das Betriebssystem verwenden soll.


Für den Bastler ergibt sich nun ein Problem: Er wird sich nicht für 2000 Euro registrieren lassen wollen. Man kann aber auch nicht einfach irgendeine fremde VID&PID verwenden. Falls die zufällig zu einem bereits installierten Gerät/Treiber passen sollte, funktioniert nichts mehr.

Wer Microchip-PICs für Basteleien oder eine Kleinserie benutzen will, kann bei Microchip eine einzelne VID&PID beantragen. Er erhält dann eine individuelle PID mit der VID von Microchip. Es gibt auch Firmen, die bei USB.Org eine VID erstehen, und dann kleine VID&PID-Gruppen weiterverkaufen (z.B. 10 VID&PIDs für 20 Pfund).

Wer FTDI-Chips, IOWarriors oder USB4all benutzt, muss sich hier keine Gedanken machen. Diese Chips kommen mit ihren festen VID&PIDs, und benutzen immer den selben Treiber.



USB Stecker und Buchsen

Der Universal Serial Bus Standard kennt eine ganze Reihe verschiedener Stecker- und Buchsenformen und mit der Einführung von USB 3.0 wird es nicht unbedingt übersichtlicher. Hier alle Stecker-Typen des USB Standards.



Und die zugehörigen Buchsen.




In der folgenden Tabelle sind alle bekannten Standard USB 2.0 und 3.0 Stecker- und Buchsentypen so dargestellt, daß die zulässigen Steckkombinationen deutlich werden.



Ein Lesebeispiel: Als einziger der USB 3.0 Stecker kann nur der Std A (Type A) Stecker in eine USB 2.0 Std A Buchse gesteckt werden. Dies gilt allerdings für keinen anderen Stecker-Typ des USB 3.0 Standards, da nur der Std A Stecker Abwärtskompatibel zu USB 2.0 Buchsen gestaltet wurde oder werden konnte. Im englischen Wikipedia-Artikel zum Universal Serial Bus sind die oben gezeigten Stecker- und Buchsentypen, allerdings ohne USB 3.0, gut aufbereitet in Tabellenform unter Host Interface receptableshttp://stick-test.de/images/link_ext.gif mit Bildern dargestellt.
Im folgenden Bild sind die drei USB 3.0 Stecker abgebildet.



Aufgrund der Tatsache, daß für USB 3.0 insgesamt zehn Leitungen für die Datenübertragung benötigt werden, hat sich das Steckerlayout für Std B und Micro B geändert: Dem Std B wurde ein Mini B zusätzlich aufgeflanscht während der Micro B seine Erweiterung in der Horizontalen erfuhr, indem links des ursprünglichen USB 2.0 Micro B Steckers ein zusätzlicher Mini B Stecker platziert wurde.

Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.