»Android Open Accessory« Meisterhafte Peripherie

Wie installiert man auf einem Tablet oder Mobiltelefon einen USB-Treiber? - Antwort: überhaupt nicht, weil das Betriebssystem gesperrt ist. Aber es gibt einen Trick.

Der Anschluss von Peripherie an Smartphones und Tablets ist für die Hersteller ein Randthema, weil die Geräte - i.d.R. mit ARM-Prozessor - für einen Stand-alone-Betrieb ausgelegt sind. Das Betriebssystem ist optimiert auf die Unterstützung der On-Board-Hardware.

Die dafür erforderlichen Treiber sind in das System integriert, das dann meist vom Gerätehersteller gesperrt ist, damit Anwender die Systemsoftware nicht rekonfigurieren können. Android wird regelmäßig aktualisiert, wobei mit jeder Version neue Funktionen hinzukommen. Die Tabelle zeigt die Entwicklung der Android-Versionen:

20082009200920092009
2010
2010
 20112011
V1.0
V1.1V1.5V1.6V2.0V2.2V2.3.xV3.xV4.x
  CupcakeDonutEclairFroyoGingerbreadHoneycombIce Cream Sandwich

In „herkömmlicher“ Hardware wie Laptops und Desktops stehen zahlreiche Steckverbindungen und Treibersupport für Peripherie wie Maus, Drucker etc. zur Verfügung. Bei Tablets sind Größe, Gewicht und Stromverbrauch wichtige Aspekte, und die Vielfalt an Steckverbindungen ist begrenzt.

Viele Android-Plattformen stehen heute mit USB-OTG-Ports (On The Go) zur Verfügung, wobei der USB-Port entweder als Host oder Device fungieren kann. Einige dieser OTG-Ports bieten eine reine USB-Device-Funktion, d.h. sie können nur als USB Device an einen USB Host angeschlossen werden. Neuere Geräte bieten volle OTG-Funktion mit Host- und Device-Funktion.

Ein mögliches Problem beim Host-Port ist jedoch, dass bestimmte Peripherie einen speziellen Treiber benötigt. Der Plattformnutzer muss dann sein Gerät „hacken“, um die Erlaubnis zur Installation neuer Treiber zu erhalten. Das kann jedoch die Herstellergarantie ungültig machen und ist nicht wirklich eine Aufgabe, die der Nutzer durchführen sollte oder könnte. Seit der Android-Version 3.1 (Honeycomb) steht eine neue Lösung für dieses Problem bereit: der Android Open Accessory Mode.

Der Android Open Accessory Mode erlaubt den Anschluss von Peripherie an eine Android-Plattform, wobei das Android-Gerät als USB Device fungiert und die Peripherie als USB Host (Bild 1). Dies ist genau das Gegenteil herkömmlicher USB-Verbindungen. Dieser Ansatz bietet drei wesentliche Vorteile:

  • es müssen keine speziellen Treiber für die Hardware entwickelt werden,
  • Geräte müssen nicht „gehackt“ werden, um Treiber laden zu können,
  • die Stromversorgung für den Port wird durch die Peripherie bereitgestellt. Damit wird die Batterie des Mobilgeräts nicht mehr belastet als wenn externe Hardware angeschlossen wird.

Um im Open Accessory Mode eine Verbindung zu einer Android-Plattform herzustellen, muss diese zuerst diesen Modus unterstützen. Dies gilt ab der Android-Version 3.1, ist aber auch bei früheren Versionen hinab bis Version 2.3.4 möglich, wenn der OEM die Funktion auf diese Version zurückportiert hat.

Wird ein Open Accessory Device an Android angeschlossen, muss es einen „Vendor Request“ senden, damit Android feststellen kann, ob das Gerät den Open Accessory Mode unterstützt (Bild 2). Dabei handelt es sich um den „Get_Protocol“-Befehl. Lautet die Antwort „Nein“, stoppt die Kommunikation. Ist die Antwort jedoch „Ja“, sendet die Peripherie ihren spezifischen Deskriptor-String, um sich selbst zu identifizieren. Es folgt ein weiterer USB Vendor Request, um den Open Accessory Mode zu aktivieren und das Android-Gerät in dieser Konfiguration zu „enummerieren“.

Ist die Enummerierung als Open Accessory Mode Device erfolgt, bestehen ein „USB BULK IN“-Endpunkt, ein „USB BULK OUT“-Endpunkt sowie der Control-Endpunkt. Die Schnittstelle entspricht Full-Speed-USB (12 Mbit/s) und erlaubt die Datenübertragung in beide Richtungen.