Accesorios para dispositivos Android con host USB

6

El SDK de accesorios de Android se basa en el accesorio que tiene un host USB. Sin embargo, mi entendimiento es que las versiones más recientes 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 el host (la mayoría de las tabletas seguramente, Moto Droid, HTC Droid Incredible, etc.).

Entonces, mi pregunta es que, dado un dispositivo Android que tiene un host USB, ¿cuál será la manera más sencilla y económica de interactuar con un micro? Lo primero que me viene a la mente es utilizar un chip serial FTDI USB y un micro con UART. Pero no sé si los controladores FTDI se pueden colocar en dispositivos Android. De todos modos, probablemente haya una solución mucho mejor.

Prefiero una solución que no requiera un dispositivo Android rooteado, pero que también estaría interesado en escuchar algunas de estas opciones.

    
pregunta Chinasaur

5 respuestas

4

Actualización: cambié esto a la wiki de la comunidad

Parece que Android va a admitir USB Host en el kernel. Android 3.1 ya tiene esto, creo que Android 2.4 lo tendrá portado nuevamente, y seguramente Android 4 lo tendrá. Por lo tanto, si tiene un micro que puede emular un dispositivo esclavo USB apropiado, debe poder comunicarse con Android de manera bastante simple y económica, siempre que su dispositivo Android sea capaz de hardware USB. La mayoría de los dispositivos más antiguos (por ejemplo, Droid, Droid Inc) son compatibles con hardware, y los nuevos dispositivos deberían ser.

No sé exactamente con qué dispositivos USB esclavos es fácil interactuar desde Android ( aquí hay una lista de los 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 tener un código de modo de usuario contenido dentro de las aplicaciones para realizar transferencias USB en bruto a los periféricos. Así que, en lugar del modelo de "controlador del kernel", este es el concepto de "la aplicación comprende los detalles de los periféricos": conceptualmente muy similar a los programas de escritorio que utilizan libusb o similar para hablar con un periférico. Las excepciones serían los dispositivos HID, como los teclados y ratones, que Android se habla a sí 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 vendedor 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 el código del sistema de archivos y el Protocolo de almacenamiento masivo USB, contra las API USB de Android sin procesar.

Hay una biblioteca AVR que proporciona una pila USB: enlace . Con esto, debería poder realizar la 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 Mihailo señala en los comentarios, asegúrese de usar una frecuencia de oscilador compatible con USB (8 o 16 MHz). No estoy seguro de si es posible conseguir 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: enlace

Estoy seguro de que los clones de Leonardo más baratos / más simples / más pequeños saldrán pronto, ¡o se lanzarán los tuyos!

    
respondido por el Chinasaur
4

¿La forma más barata? Use un µC con USB incorporado. Muchas de las imágenes 18 y posteriores tienen esto. Lo mismo ocurre con muchas otras marcas de µC.

¿La forma más sencilla? Como ya ha dicho, conviértalo a RS-232 en 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 el FTDI sea compatible de forma inmediata. Sin embargo, la primera solución tiene la ventaja de que puede hacer que el µC se vea como cualquier dispositivo que desee.

Ah, y aparte, algunos de los PIC de gama alta (p. ej., algunos chips Pic32) también tienen un host USB incorporado. Solo pensé que lo mencionaría ...

    
respondido por el Majenko
4

No soy experto en Android, pero FTDI lanzó una nota de aplicación que detalla cómo puede compilación en el controlador de seguridad para su USB a Serial IC's en el kernel de Android .

No sé si es factible hacerlo en un teléfono de producción, o si algún teléfono ya tiene este controlador incorporado (lo dudo). En mi opinión, Google ha establecido una buena especificación para el Accesorio abierto que probablemente estará disponible en esta generación de dispositivos Android y la próxima, dado que todos se actualizan a las versiones más recientes del sistema operativo Android.

En el caso del Accesorio abierto, el teléfono cambia a un dispositivo y el accesorio es el host. Implementar un host USB integrado es un poco más complicado que usar un FTDI USB a Serial IC, pero hay algunos micros muy buenos para aplicaciones específicas que tienen soporte de hardware para la pila USB y hay algunos ejemplos del protocolo de accesorios abiertos. Implementado en algunos de estos micros. Dado que el soporte ya está en el SO para Open Accessory (o lo estará en un futuro cercano para todos los dispositivos), creo que este es el camino a seguir.

    
respondido por el Jon L
0

No estoy seguro de qué quiere decir exactamente con barato, pero no creo que haya ningún problema con el uso de un chip USB UART- > FTDI como FT232RL o Prolific PL2303 ... Son baratos.

Obviamente, todavía hay dos formas de hacer esto:

  1. Obtenga una MCU con soporte USB:

Ventajas:

A. No necesitarás ningún chip externo para convertir niveles o implementar ningún protocolo.

Desventajas:

A. Deberá implementar el protocolo USB con la Clase que necesita (como CDC, HID, etc.) en su firmware, todo por su cuenta.

B. Deberá comprar un VID y PID si el fabricante de su MCU no permite usar el VID y PID predeterminados.

  1. Usar chip FTDI:

Ventajas:

A. No es necesario implementar el protocolo. Una simple comunicación UART estaría bien.

B. Android soporta FTDI perfectamente. No estoy seguro de qué significa "necesito instalar los controladores en el teléfono Android", pero según mi experiencia, lo único que necesita para reconocer un dispositivo en Android es VID y PID, que usted pone en el intento de filtro de su actividad, siempre que Android y Host es compatible con la clase que desea implementar.

Desventajas:

A. Si puedes permitirte el chip, no creo que haya alguno.

Una sugerencia:

Si su MCU no realiza ninguna función (ejecute procesos en subprocesos paralelos o implemente varias subrutinas de solicitud de interrupción, tenga devoluciones de llamadas orientadas a eventos o interconectado con demasiados periféricos) que no sean comunicación USB, entonces elija un MCU con soporte USB, de lo contrario chip FTDI Siempre es una mejor opción ya que solo usa un UART de MCU y no la sobrecarga en absoluto.

    
respondido por el krushna ratnaparkhi
-1

¿Has considerado el Arduino ADK ? Explota Google ADK para lograr la comunicación con Android.

    
respondido por el avra

Lea otras preguntas en las etiquetas