Frage:
Zubehör für Android-Geräte mit USB-Host
Chinasaur
2011-07-11 10:21:46 UTC
view on stackexchange narkive permalink

Das Android Accessory SDK basiert auf dem Zubehör mit USB-Host. Mein Verständnis ist jedoch, dass neuere Versionen von Android (3.1, 2.4?) USB-Host-Unterstützung im Kernel haben. Und ich weiß, dass viele vorhandene Android-Geräte Hardware-Unterstützung für Hosts bieten (die meisten Tablets sicherlich Moto Droid, HTC Droid Incredible usw.).

Meine Frage ist also, wenn man ein Android-Gerät mit USB-Host verwendet, was wird der einfachste / billigste Weg sein, dies mit einem Mikro zu verbinden? Das erste, was mir in den Sinn kommt, ist die Verwendung eines FTDI USB-> seriellen Chips und eines Mikros mit UART. Aber ich weiß nicht, ob die FTDI-Treiber auf Android-Geräten installiert werden können. Auf jeden Fall gibt es wahrscheinlich eine viel bessere Lösung.

Ich würde eine Lösung bevorzugen, die kein gerootetes Android-Gerät erfordert, aber ich wäre interessiert, auch einige dieser Optionen zu hören.

Momentan kein Link, aber ich habe das genau beobachtet und sie planen nicht, Android dazu zu bringen, USB OTG zu unterstützen oder direkt Host zu sein. Dies bedeutet, dass Sie wirklich ihre Spezifikation verwenden müssen.
@Kortuk "sie", was bedeutet, dass Google dies möglicherweise nicht plant, aber "sie", was Android-Gerätehersteller bereits haben, insbesondere bei einigen Wabentabletts - einige haben sogar USB-A-Anschlüsse, sodass kein Adapter benötigt wird. Eingebaute Treiber sind jedoch wahrscheinlich für Dinge wie Massenspeicher, Tastaturen und Mäuse gedacht, keine Ahnung, ob sie FTDI-Treiber enthalten oder ob dies Kernel-Mods erfordern würde.
@ChrisStratton, möchten Sie ein Produkt entwickeln, das auf einigen verschiedenen Herstellern basiert, die Entscheidungen getroffen haben, bevor Google eines angekündigt hat, das es jetzt hat? Ich wünschte, sie hätten beschlossen, USBonthego zu unterstützen
@Kortuk als ADK-Protokoll ist eine ziemlich hässliche Lösung, die erfordert, dass das Zubehör externe Stromversorgung zum Laden des Android-Geräts bereitstellt. Ich würde sagen, der Kompromiss hängt wirklich vom Markt ab. Wenn das Zubehör für die Verwendung mit einem bestimmten Android-Gerät verkauft wird, kann dies je nach gerätespezifischer Funktionalität in Ordnung sein (in einigen Fällen kann der Preis des Zubehörs den des angeschlossenen Tablets in den Schatten stellen). Umgekehrt kann die Verwendung eines PC-orientierten USB-Zubehörs von der Stange trotz der eingeschränkten Kompatibilität auch eine gute Lösung sein, da nur geringe Investitionen getätigt werden.
@ChrisStratton, wünschte immer noch, sie hätten sich für die volle Unterstützung von USB-OTG entschieden
Wow, das ist verrückt. Warum sollten sie usb otg / host nicht in den Kernel einfügen? Wollen Tablet-Besitzer nicht generisches Zubehör verwenden können?
Jetzt bin ich verwirrt. Die Android 3.1-API gibt ausdrücklich an, dass sie die Interaktion sowohl mit USB-Zubehör (dh Dingen mit Host-Modus) als auch mit USB-Geräten (Dinge ohne Host) unterstützt, einschließlich Dingen wie Massentransport usw. Wird dieser Host-Modus also nicht auf dem Android-System ausgeführt? ?
@Chinasaur Interessant ... Ich sehe, dass all dies in 3.1 neu ist (seit: API Level 12). USBManager scheint ebenfalls ein USB-Host-Manager zu sein. Ich denke, dies impliziert, dass USB-OTG tatsächlich nativ unterstützt wird, obwohl ich in der API nichts sehe, was das Wechseln zwischen Host und Gerät auf Anwendungsebene ermöglicht - ich vermute, dass dies automatisch geschieht, je nachdem, was gerade ist wurde verbunden. Möchten Sie eine Antwortzusammenfassung als Antwort verfassen? Ich würde gerne alle verfügbaren Optionen sehen.
@Jon, scheint veraltet zu sein, wird sich darum kümmern.
Ah cool, hoffentlich werden sie es wirklich unterstützen! Scheint besonders verrückt, dies nicht zu tun, da die Community mit gerooteten Telefonen bereits die notwendigen Kernelmodule ausgearbeitet hat. Und da das Android-Zubehörmodell, das auf einem Zubehör mit Host basiert, bereits so ziemlich nur ein "Segen" eines bestehenden Community-Projekts (USB Host Shield) ist, erscheint es besonders widersprüchlich, die Möglichkeit, dass das Android-System den Host auf seinem Host unterstützt, nicht zu nutzen besitzen!
Es klingt also so, als ob ein Mikro, das eine bestimmte Art von USB-Gerät emulieren kann, der einfachste Weg ist, mit einem Android-Gerät mit Host-Fähigkeit zu arbeiten. Ich weiß nicht viel über verschiedene Standard-USB-Geräte. Gibt es Links für einen einfachen Überblick über die Funktionen verschiedener Benutzer für die Interaktion mit dem Host?
@Chinasaur, Hier ist eine Liste aller USB-Geräteklassen: http://www.usb.org/developers/devclass_docs#approved Die meisten USB-Mikros haben Beispielcode für HID (Tastatur / Maus) und Massenspeicher. Vielleicht können Sie diese zu Ihrem Vorteil nutzen. Wenn Sie eine Antwortzusammenfassung verfassen können, wäre dies sehr dankbar. Ich denke, diese Informationen könnten für andere hilfreich sein, die diesen Weg gehen möchten.
Fünf antworten:
Majenko
2011-07-11 13:50:00 UTC
view on stackexchange narkive permalink

Der billigste Weg? Verwenden Sie einen µC mit integriertem USB. Viele der Bilder ab 18 haben dies. So auch viele andere Marken von µC.

Der einfachste Weg? Wie Sie bereits festgestellt haben - konvertieren Sie es auf TTL-Ebene mit einer Art Konvertierungschip wie dem FTDI in RS-232.

Ja, es könnte durchaus Probleme mit Treibern für beide Lösungen geben, aber es ist wahrscheinlicher, dass FTDI wird sofort unterstützt. Die erste Lösung hat jedoch den Vorteil, dass Sie den µC so aussehen lassen können, wie das Gerät aussehen soll.

Oh, und nebenbei - einige der High-End-PICs (z. B. einige pic32-Chips) ) haben auch USB-Host eingebaut. Ich dachte nur, ich würde es erwähnen ...

Warum die Abstimmung? Eine konstruktive Kritik wäre nett ...
Jon L
2011-07-11 22:06:32 UTC
view on stackexchange narkive permalink

Ich bin kein Experte für Android, aber FTDI hat einen App-Hinweis veröffentlicht, in dem beschrieben wird, wie Sie die Treiberunterstützung für ihre USB-zu-Seriell-ICs in den Android-Kernel integrieren können.

I. Ich weiß nicht, ob dies auf einem Produktionstelefon möglich ist oder ob in Telefonen dieser Treiber bereits integriert ist (ich bezweifle es). Meiner Meinung nach hat Google eine gute Spezifikation für Open Accessory erstellt, die höchstwahrscheinlich für diese Generation von Android-Geräten und die nächste verfügbar sein wird, da alle auf die neueren Android-Betriebssystemversionen aktualisiert werden.

In der Öffnen Sie die Zubehörhülle, das Telefon wechselt zu einem Gerät und das Zubehör ist der Host. Die Implementierung eines eingebetteten USB-Hosts ist etwas komplizierter als die Verwendung eines FTDI-USB-zu-Seriell-ICs, aber es gibt einige ziemlich gute anwendungsspezifische Mikros, die Hardware-Unterstützung für den USB-Stack bieten, und es gibt einige Beispiele für das Open Accessory-Protokoll auf einigen dieser Mikros implementiert. Angesichts der Tatsache, dass die Unterstützung bereits im Betriebssystem für Open Accessory enthalten ist (oder in naher Zukunft für alle Geräte verfügbar sein wird), denke ich, dass dies der richtige Weg ist.

Ja, aber dies ist der "alte" Weg vor der offiziellen Unterstützung - mit Ausnahme der integrierten Funktionen wie Tastaturen und Mäuse erwarten die Android-USB-Host-APIs, dass der in einzelnen Apps enthaltene Benutzermoduscode über rohe USB-Vorgänge spricht.Konzeptionell ähnelt es einer Desktop-App, die gegen libusb geschrieben wurde, anstatt sich auf einen Kerneltreiber für das Peripheriegerät zu verlassen.
Chinasaur
2011-09-20 06:33:41 UTC
view on stackexchange narkive permalink

Update: Ich habe dies auf das Community-Wiki umgestellt.

Es sieht so aus, als würde Android den USB-Host im Kernel unterstützen. Android 3.1 hat dies bereits, ich denke, Android 2.4 wird es wieder portieren, und sicherlich wird Android 4 es haben. Wenn Sie also ein Mikro haben, das ein geeignetes USB-Slave-Gerät emulieren kann, sollten Sie in der Lage sein, relativ einfach und kostengünstig mit Android zu kommunizieren, solange Ihr Android-Gerät Hardware-fähig für USB-Host ist. Die meisten älteren Geräte (z. B. Droid, Droid Inc) sind hardwarefähig, und neue Geräte sollten es sein.

Ich weiß nicht genau, mit welchen USB-Slave-Geräten über Android einfach zu interagieren ist ( hier ist eine Liste der vorhandenen Gerätetypen), aber die Tastatur (dh HID) ist sicherlich leicht zu testen.

Bearbeiten: Die Android-USB-Host-APIs basieren auf der Idee, dass in Anwendungen enthaltener Benutzermoduscode rohe USB-Übertragungen an Peripheriegeräte vornimmt. Anstelle des Modells "Kerneltreiber" ist dies das Modell "Anwendung versteht periphere Details" - konzeptionell sehr ähnlich zu Desktop-Programmen, die libusb oder ähnliches verwenden, um mit einem Peripheriegerät zu kommunizieren. Ausnahmen wären HID-Geräte wie Tastaturen und Mäuse, die Android mit sich selbst spricht und in der erwarteten Weise verwendet, um Eingaben in das System im Allgemeinen bereitzustellen. Es ist auch erwähnenswert, dass (mit Ausnahme einiger Geräte, bei denen der Hersteller etwas anderes getan hat) der USB-Massenspeicher nicht vom System implementiert wird. Daher muss eine App, die ein solches Gerät verwenden möchte, sowohl den Dateisystemcode als auch den Code implementieren USB-Massenspeicherprotokoll gegen die rohen Android-USB-APIs.

Es gibt eine AVR-Bibliothek, die einen USB-Stack bereitstellt: http://fourwalledcubicle.com/LUFA.php. Damit sollten Sie in der Lage sein, eine Tastatur- oder andere Geräteemulation von einem USB-fähigen AVR durchzuführen. Es ist nicht allzu schwierig, dies in Ihren generischen AVR-Firmware-Build aufzunehmen. Stellen Sie, wie Mihailo in den Kommentaren ausführt, sicher, dass Sie eine mit USB kompatible Oszillatorfrequenz (8 oder 16 MHz) verwenden. Ich bin mir nicht sicher, ob es möglich ist, dies auf Standard-Arduino-Hardware zum Laufen zu bringen.

Der einfachste Weg, dies zu erreichen, scheint das neue Arduino Leonardo-Board zu sein: http: // arduino. cc / blog / 2011/09/17 / arduino bringt neue Produkte auf den Markt /

Ich bin sicher, dass bald billigere / einfachere / kleinere Leonardo-Klone herauskommen werden oder rollen Sie Ihre eigenen!

ATMega8u2 ist das billigste, das Sie gehen können, ATMega32u4 ist wie ein größerer Bruder (in Leonardo vorgestellt). Für ein minimales Board benötigen Sie buchstäblich 5 passive Komponenten, damit es funktioniert. Außerdem verfügt es über einen DFU-Bootloader (Device Firmware Upgrade), sodass Sie ihn zum Programmieren einfach an einen USB-Anschluss anschließen können - kein externer Programmierer erforderlich. LUFA enthält viele Beispieltreiber (Tastatur, Maus, Joystick, ...) und es ist kinderleicht, sie zu erstellen und zu testen (und sie anschließend an Ihre Bedürfnisse anzupassen). Stellen Sie einfach sicher, dass Sie 8- oder 16-MHz-Quarz verwenden, da USB sonst nicht funktioniert.
Alle großen Punkte; Vielen Dank! Mit billiger meine ich, dass ein Arduino Leonardo-kompatibler billiger herauskommt als die offiziellen 20 Dollar. Aber natürlich ist es wahrscheinlich noch billiger, es selbst zusammenzustellen, und wie Sie sagen, ziemlich einfach. Ich habe meine Antwort bearbeitet, um einige Ihrer Punkte wiederzugeben.
Übrigens, ist das der Grund, warum Arduino 16 MHz ist? Ich dachte immer, das wäre eine seltsame Wahl ...
Ich bin mir nicht sicher, ob ältere Arduino (die ich habe) FTDI USB to Serial-Chips hatten, die neueren haben ATMEGA8U2. Ich habe mir die Schaltpläne der neuen nicht angesehen. Wenn sie nur einen Kristall verwenden, würde ich sagen, dass dies daran liegt, dass ATMEGA8U2 dies erfordert.
krushna ratnaparkhi
2017-07-14 14:17:08 UTC
view on stackexchange narkive permalink

Ich bin mir nicht sicher, was Sie unter billig verstehen, aber ich glaube nicht, dass es Probleme bei der Verwendung von FTDI UART-> USB-Chips wie FT232RL oder Prolific PL2303 gibt. Sie sind billig.

Offensichtlich gibt es zwei Möglichkeiten, dies zu tun:

  1. Holen Sie sich eine MCU mit USB-Unterstützung:
  2. ol>

    Vorteile:

    A. Sie benötigen keinen externen Chip, um Ebenen zu konvertieren oder ein Protokoll zu implementieren.

    Nachteile:

    A. Sie müssen das USB-Protokoll mit der von Ihnen benötigten Klasse (wie CDC, HID usw.) in Ihrer Firmware selbst implementieren.

    B. Sie müssen eine VID und PID kaufen, wenn Ihr MCU-Hersteller die Verwendung der Standard-VID und -PID nicht zulässt.

    1. Verwenden Sie einen FTDI-Chip:
    2. ol>

      Vorteile:

      A. Sie müssen das Protokoll nicht implementieren. Eine einfache UART-Kommunikation wäre in Ordnung.

      B. Android unterstützt FTDI perfekt. Ich bin nicht sicher, was "Treiber in Android Phone installieren müssen" bedeutet, aber meiner Erfahrung nach ist das einzige, was Sie benötigen, um ein Gerät in Android zu erkennen, VID und PID, die Sie in den Intent-Filter Ihrer Aktivität setzen, vorausgesetzt, Android und Host unterstützen beide die Klasse, die Sie implementieren möchten.

      Nachteile:

      A. Wenn Sie sich den Chip leisten können, glaube ich nicht, dass es welche gibt.

      Ein Vorschlag:

      Wenn Ihre MCU keine andere Funktion als die USB-Kommunikation ausführt (Prozesse in parallelen Threads ausführen oder mehrere Interrupt Request-Subroutinen implementieren, ereignisorientierte Rückrufe durchführen oder mit zu vielen Peripheriegeräten verbunden sind), wählen Sie eine MCU mit USB-Unterstützung, andernfalls einen FTDI-Chip ist immer eine bessere Option, da nur ein UART der MCU verwendet wird und dieser überhaupt nicht überlastet wird.

avra
2011-09-20 15:18:13 UTC
view on stackexchange narkive permalink

Haben Sie über ein Arduino ADK Board nachgedacht? Es nutzt Google ADK , um eine Kommunikation mit Android zu erreichen.

Vielen Dank, aber das ADK benötigt das Zubehör, um den USB-Host zu implementieren (daher ist es viel teurer als ein Standard-Arduino / Micro). Mit dieser Frage soll vermieden werden, dass ein USB-Host implementiert wird.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...