Das Android-Zubehör-SDK ist darauf angewiesen, dass das Zubehör über einen USB-Host verfügt. 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 Hardwareunterstützung für Hosts haben (die meisten Tablets sicherlich, Moto Droid, HTC Droid Incredible usw.).
Meine Frage ist also, was bei einem Android-Gerät mit USB-Host der einfachste / billigste Weg ist, dies mit einem Mikro zu verbinden? Das erste, was mir in den Sinn kommt, ist die Verwendung eines FTDI USB-> Serial-Chips und eines Mikros mit UART. Aber ich weiß nicht, ob die FTDI-Treiber auf Android-Geräten installiert werden können. Wie auch immer, es gibt wahrscheinlich eine viel bessere Lösung.
Ich würde eine Lösung bevorzugen, die kein gerootetes Android-Gerät erfordert, wäre aber auch daran interessiert, einige dieser Optionen zu hören.
Der billigste Weg? Verwenden Sie einen µC mit eingebautem USB. Viele der pic18 und höher haben dies. Das gilt auch für viele andere Hersteller von µC.
Der einfachste Weg? Wie Sie bereits gesagt haben, konvertieren Sie es mit einer Form von Konvertierungschip wie dem FTDI auf TTL-Pegel in RS-232.
Ja, es könnte durchaus Probleme mit Treibern für beide Lösungen geben, aber es ist wahrscheinlicher, dass FTDI standardmäßig unterstützt wird. Die erste Lösung hat jedoch den Vorteil, dass Sie den µC so aussehen lassen können, wie Sie es möchten.
Oh, und nebenbei - einige der High-End-PICs (z. B. einige pic32-Chips) haben auch einen USB-Host eingebaut. Ich dachte nur, ich erwähne es...
Ich bin kein Android-Experte, aber FTDI hat einen App-Hinweis veröffentlicht, in dem beschrieben wird, wie Sie Treiberunterstützung für ihre USB-to-Serial-ICs in den Android-Kernel einbauen können .
Ich weiß nicht, ob dies auf einem Produktionstelefon möglich ist oder ob dieser Treiber bereits in Telefone integriert ist (ich bezweifle es). Meiner Meinung nach hat Google eine gute Spezifikation für Open Accessory erstellt, die höchstwahrscheinlich auf dieser und der nächsten Generation von Android-Geräten verfügbar sein wird, da sie alle auf die neueren Android-Betriebssystemversionen aktualisiert werden.
Im Fall von Open Accessory schaltet das Telefon auf ein Gerät um 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 Hardwareunterstü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 für Open Accessory bereits im Betriebssystem vorhanden ist (oder in naher Zukunft für alle Geräte verfügbar sein wird), denke ich, dass dies der richtige Weg ist.
Update: Ich habe dies auf das Community-Wiki umgestellt
Es sieht so aus, als würde Android USB-Host im Kernel unterstützen. Android 3.1 hat dies bereits, ich denke, Android 2.4 wird es zurückportiert haben, und Android 4 wird es sicherlich haben. Wenn Sie also ein Mikro haben, das ein geeignetes USB-Slave-Gerät emulieren kann, sollten Sie in der Lage sein, ziemlich einfach und kostengünstig mit Android zu kommunizieren, solange Ihr Android-Gerät USB-Host-fähig 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 von Android aus leicht zu interagieren ist ( hier ist eine Liste vorhandener Gerätetypen ), aber Tastatur (dh HID) ist sicherlich einfach auszuprobieren.
Bearbeiten: Die Android-USB-Host-APIs basieren auf der Idee, dass in Anwendungen enthaltener Benutzermoduscode rohe USB-Übertragungen an Peripheriegeräte durchführt. Anstelle des "Kernel-Treiber"-Modells ist dies also das Modell "Anwendung versteht Peripheriedetails" - konzeptionell sehr ähnlich zu Desktop-Programmen, die libusb oder ähnliches verwenden, um mit einem Peripheriegerät zu kommunizieren. Die 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 für das System im Allgemeinen bereitzustellen. Es ist auch erwähnenswert, dass (mit Ausnahme einiger Geräte, bei denen der Hersteller etwas anderes getan hat) USB-Massenspeicher nicht vom System implementiert werden, sodass eine App, die ein solches Gerät verwenden möchte, sowohl den Dateisystemcode als auch den implementieren muss 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, Tastatur- oder andere Geräteemulationen von einem USB-fähigen AVR durchzuführen. Es ist nicht allzu schwierig, dies in Ihren generischen AVR-Firmware-Build aufzunehmen. Wie Mihailo in den Kommentaren betont, stellen Sie sicher, dass Sie eine Oszillatorfrequenz verwenden, die mit USB kompatibel ist (8 oder 16 MHz). Ich bin mir nicht sicher, ob es möglich ist, dies auf Standard-Arduino-Hardware zum Laufen zu bringen.
Es sieht so aus, als wäre der einfachste Weg, dies zu erreichen, das neue Arduino Leonardo Board: http://arduino.cc/blog/2011/09/17/arduino-launches-new-products-in-maker-faire/
Ich bin mir sicher, dass bald billigere/einfachere/kleinere Leonardo-Klone herauskommen werden, oder rollen Sie Ihre eigenen!
Ich bin mir nicht sicher, was Sie genau mit billig meinen, aber ich glaube nicht, dass es Probleme mit der Verwendung von FTDI UART-> USB-Chips wie FT232RL oder Prolific PL2303 gibt. Sie sind billig.
Dennoch gibt es offensichtlich zwei Möglichkeiten, dies zu tun:
Vorteile:
A. Sie benötigen keinen externen Chip, um Pegel umzuwandeln 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.
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 mir nicht sicher, was "Treiber in Android Phone installieren müssen" bedeutet, aber meiner Erfahrung nach ist das einzige, was Sie brauchen, um ein Gerät in Android zu erkennen, VID und PID, die Sie in den Intent-Filter Ihrer Aktivität einfügen, vorausgesetzt, dass Android und Host unterstützen beide die Klasse, die Sie implementieren möchten.
Nachteile:
A. Wenn Sie sich den Chip leisten können, ich glaube nicht, dass es welche gibt.
Wenn Ihre MCU keine anderen Funktionen als die USB-Kommunikation ausführt (Prozesse in parallelen Threads ausführen oder mehrere Interrupt Request Subroutinen implementieren, ereignisorientierte Callbacks haben oder mit zu vielen Peripheriegeräten verbunden sind), dann entscheiden Sie sich für eine MCU mit USB-Unterstützung, andernfalls ist der FTDI-Chip immer besser Option, da sie nur einen UART der MCU verwendet und ihn überhaupt nicht überlastet.
Haben Sie das Arduino ADK- Board in Betracht gezogen? Es nutzt Google ADK , um die Kommunikation mit Android zu erreichen.
Kortuk
Chris Stratton
Kortuk
Chris Stratton
Kortuk
Chinasaurier
Chinasaurier
Jon L
Kortuk
Chinasaurier
Chinasaurier
Jon L