El SDK de accesorios de Android depende de que el accesorio tenga un host USB. Sin embargo, tengo entendido que las versiones más nuevas de Android (¿3.1, 2.4?) tienen soporte de host USB en el kernel. Y sé que muchos dispositivos Android existentes tienen soporte de hardware para host (seguramente la mayoría de las tabletas, Moto Droid, HTC Droid Incredible, etc.).
Entonces, mi pregunta es, dado un dispositivo Android que tiene un host USB, ¿cuál será la forma más simple/barata de conectar esto con un micro? Lo primero que se me ocurre es usar un chip FTDI USB->serial y un micro con UART. Pero no sé si los controladores FTDI se pueden instalar en dispositivos Android. De todos modos, probablemente haya una solución mucho mejor.
Preferiría una solución que no requiera un dispositivo Android rooteado, pero también me interesaría escuchar algunas de estas opciones.
¿La forma más barata? Use un µC con USB incorporado. Muchos de los pic18 y posteriores tienen esto. También lo hacen muchas otras marcas de µC.
¿La forma más sencilla? Como ya indicó, conviértalo a RS-232 a niveles TTL con algún tipo de chip de conversión como el FTDI.
Sí, bien podría haber problemas con los controladores para ambas soluciones, pero es más probable que FTDI sea compatible de fábrica. Sin embargo, la primera solución tiene la ventaja de que puede hacer que el µC se vea como cualquier dispositivo que desee que se vea.
Ah, y aparte, algunos de los PIC de gama alta (por ejemplo, algunos chips pic32) también tienen un host USB incorporado. Solo pensé en mencionarlo...
No soy un experto en Android, pero FTDI publicó una nota en la aplicación que detalla cómo puede incorporar compatibilidad con controladores para sus IC USB a serie en el kernel de Android .
No sé si esto es factible de hacer en un teléfono de producción, o si algún teléfono ya tiene este controlador integrado (lo dudo). En mi opinión, Google ha presentado una buena especificación para el accesorio abierto que probablemente estará disponible en esta generación de dispositivos Android y en la siguiente, dado que todos se actualizan a las versiones más nuevas del sistema operativo Android.
En el caso de accesorio abierto, el teléfono cambia a un dispositivo y el accesorio es el anfitrión. Implementar un host USB incorporado es un poco más complicado que usar un USB FTDI a IC serial, pero existen algunos micros específicos de aplicaciones bastante buenos que tienen soporte de hardware para la pila USB y hay algunos ejemplos del protocolo Open Accesorio. implementado en algunos de estos micros. Dado que el soporte ya está en el sistema operativo para accesorios abiertos (o lo estará en un futuro cercano para todos los dispositivos), creo que este es el camino a seguir.
Actualización: cambié esto a la wiki de la comunidad
Parece que Android admitirá USB Host en el kernel. Android 3.1 ya tiene esto, creo que Android 2.4 lo volverá a portar, y seguramente Android 4 lo tendrá. Por lo tanto, si tiene un micro que puede emular un dispositivo esclavo USB apropiado, debería poder comunicarse con Android de manera bastante simple y económica, siempre que su dispositivo Android tenga hardware compatible con USB Host. La mayoría de los dispositivos más antiguos (p. ej., Droid, Droid Inc) son compatibles con el hardware, y los nuevos dispositivos deberían serlo.
No sé exactamente con qué dispositivos esclavos USB es fácil interactuar desde Android ( aquí hay una lista de tipos de dispositivos existentes ), pero seguramente el teclado (es decir, HID) es fácil de probar.
Editar: las API de host USB de Android se basan en la idea de que el código de modo de usuario contenido en las aplicaciones realice transferencias USB sin formato a los periféricos. Entonces, en lugar del modelo de "controlador del kernel", este es el modelo de "la aplicación comprende los detalles periféricos", conceptualmente muy similar a los programas de escritorio que usan libusb o similar para comunicarse con un periférico. Las excepciones serían los dispositivos HID, como teclados y ratones, que Android habla consigo mismo y utiliza de la manera esperada para proporcionar información al sistema en general. También vale la pena señalar que (con la excepción de algunos dispositivos en los que el proveedor ha hecho lo contrario) el sistema no implementa el almacenamiento masivo USB, por lo que una aplicación que quiera usar dicho dispositivo debe implementar tanto el código del sistema de archivos como el Protocolo de almacenamiento masivo USB, contra las API USB de Android sin procesar.
Hay una biblioteca AVR que proporciona una pila USB: http://fourwalledcubicle.com/LUFA.php . Con esto, debería poder hacer una emulación de teclado u otro dispositivo desde un AVR habilitado para USB. Incluir esto en su compilación de firmware AVR genérico no es demasiado difícil. Como señala Mihailo en los comentarios, asegúrate de usar una frecuencia de oscilador compatible con USB (8 o 16 MHz). No estoy seguro de si es posible hacer que esto funcione en el hardware estándar de Arduino.
Parece que la forma más fácil de abordar esto puede ser la nueva placa Arduino Leonardo: http://arduino.cc/blog/2011/09/17/arduino-launches-new-products-in-maker-faire/
¡Estoy seguro de que pronto saldrán clones de Leonardo más baratos/más simples/más pequeños, o rodarán los suyos propios!
No estoy seguro de qué quiere decir exactamente con barato, pero no creo que haya ningún problema con el uso de un chip FTDI UART->USB como FT232RL o Prolific PL2303... Son baratos.
Aún así, obviamente, hay dos formas de hacer esto:
ventajas:
R. No necesitará ningún chip externo para convertir niveles o implementar ningún protocolo.
Desventajas:
R. Deberá implementar el protocolo USB con la clase que necesita (como, CDC, HID, etc.) en su firmware por su cuenta.
B. Deberá comprar un VID y un PID si el fabricante de su MCU no permite usar el VID y el PID predeterminados.
ventajas:
R. No necesita implementar el protocolo. Una simple comunicación UART estaría bien.
B. Android es compatible con FTDI perfectamente. No estoy seguro de qué significa "necesita instalar los controladores en el teléfono Android", pero en mi experiencia, lo único que necesita para reconocer un dispositivo en Android es VID y PID, que coloca en el filtro de intención de su actividad siempre que Android y Host son compatibles con la clase que desea implementar.
Desventajas:
R. Si puede pagar el chip, no creo que haya ninguno.
Si su MCU no realiza ninguna función (ejecuta procesos en subprocesos paralelos o implementa varias subrutinas de solicitud de interrupción, tiene devoluciones de llamada orientadas a eventos o interactúa con demasiados periféricos) además de la comunicación USB, entonces busque una MCU con soporte USB; de lo contrario, el chip FTDI siempre es mejor opción ya que solo usa un UART de MCU y no lo sobrecarga en absoluto.
¿Has considerado la placa Arduino ADK ? Aprovecha Google ADK para lograr la comunicación con Android.
Kortuk
chris stratton
Kortuk
chris stratton
Kortuk
Chinasaurio
Chinasaurio
jon l
Kortuk
Chinasaurio
Chinasaurio
jon l