Android ATtiny comunicación de datos arbitrarios a través de USB [cerrado]

Tengo un código de ejecución ATtiny13a a 9,6 MHz (oscilador interno) para un puerto serie semidúplex Tx Rx de un solo pin a una velocidad de transmisión de 115200 baudios usando una librería que encontré en línea

Usando FTDI 232RL o BT HC-06 puedo enviar y recibir datos arbitrarios entre el circuito MCU y Putty/Android.

¿Cuál sería la forma más barata y pequeña (en términos de tamaño de PCB y memoria ATTiny) de lograr la misma comunicación de datos arbitrarios a un dispositivo Android (no rooteado) en lugar de BT?

También hay una manera de lograrlo manteniendo el circuito MCU en modo accesorio para Android y NO usando el modo host de Android, ya que el circuito MCU se alimentará externamente y no desde Android. La fuente de energía de la MCU también suministrará energía a Android en los buses de energía del USB.

¿Cómo puedo lograr una comunicación de datos arbitraria entre ATTiny en modo accesorio y Android a través de USB?

¿Funcionará VUSB en este caso? o tengo que comprar un chip convertidor (¿CHG340?), pero ¿funcionará ese chip en modo accesorio? ¿También habrá cambios para admitir el puerto USB tipo C?

Gracias

No me queda claro lo que quieres lograr. ¿Quiere que sus cosas se comporten como un dispositivo USB o como un host USB?
@Janka bueno, el dispositivo Android ciertamente no será el anfitrión, ya que se alimenta/carga externamente desde la fuente de alimentación de la MCU, pero quiero tener una comunicación de datos arbitraria con la MCU. Similar al escenario cuando transferimos datos a través de USB entre Android y una PC: el teléfono Android se carga pero también tenemos comunicación de datos bidireccional. Bueno, para eso usamos protocolos complejos como MTP, etc. Pero quiero hacer lo mismo excepto entre Android y ATTiny. Entonces es como si el circuito MCU fuera un accesorio para Android. ¿Es eso alcanzable?
Así que quieres crear un dispositivo USB. Claro, para eso está VUSB. Creé con éxito un emulador de teclado con él: vusb.wikidot.com/project:vusb . Fueron unos 2 días de trabajo. Ciertamente vale la pena. Sin embargo, la velocidad es limitada. Si desea crear cualquier cosa que no sea un token, un simulador de teclado u otro dispositivo de baja velocidad, es mejor que use una MCU que tenga un controlador de dispositivo USB integrado.
@Janka Provengo principalmente de una formación en software en grado y profesión. AVR es solo un pasatiempo para mí. Entonces, ¿quería saber si VUSB necesita algún soporte en el lado de Android? ¿Ha intentado usar MCU con Android antes con comunicación VUSB? ¿Funciona normalmente como una comunicación ATTiny VUSB con una PC? ¿Además no usas Android en modo anfitrión?
Usé un ATtiny45. VUSB puede usar el oscilador interno a 12,6 MHz, pero luego cada pieza debe calibrarse; así que agregué el cristal. El dispositivo VUSB que hice se declara como un teclado y Android lo ve como un teclado. Puede implementar una serie de otras clases de dispositivos para las que el kernel de Linux en su teléfono tiene controladores, pero en realidad está limitado a USB-HID en Android. Para cdc_anything, VUSB no es lo suficientemente rápido y usted dijo que no desea implementar su propio controlador.
¿Qué quieres decir con "no usar Android en modo host"? Cuando conecta un dispositivo USB, su teléfono es seguro un host USB.
@Janka Ah, ya veo. Sí, el oscilador interno de ATtiny13a está restringido a ~ 10 MHz, supongo, y afaik requiere una señal CLK externa y no un cristal, pero de todos modos intentaré usar un ATTiny45 en su lugar. Sí, tiene razón, puedo presentar el dispositivo como un dispositivo HID para Android.
@Janka, lo que quise decir es que no alimentaré mi circuito ATTiny usando la energía del puerto USB, es decir, Android no actuará como un host de energía para el dispositivo. En cambio, lo alimentaré desde una fuente externa y también cargaré a Android. Piense en mi dispositivo actuando como un comunicador de datos y un banco de energía al mismo tiempo. ¿Es eso posible junto con la transferencia de datos?
Tienes que conectar los GND. De dónde obtienes los +5V es irrelevante para el teléfono. También vea el diagrama del circuito en el archivo en la página que vinculé. Sobre la carga, no tengo idea de si esto funciona al mismo tiempo.
@Janka Ohh, seguro que revisaré el esquema que vinculaste. y si esa era mi pregunta; si ambos funcionarían al mismo tiempo. Y como mencionó, estaría entregando energía al puerto USB de Android desde la fuente de alimentación de la MCU, pero cuando estoy codificando mi aplicación de Android, ¿debería usar la API del modo host o el modo accesorio (ADK)? Como no puedo cargar mi teléfono en modo host, no tendré que usar el teléfono en ese modo... ¿verdad?
@Janka - No. El cartel quiere alimentar el teléfono desde el circuito externo, lo que apunta hacia el modo "Accesorio USB" anterior de Android, donde el teléfono es el DISPOSITIVO y el circuito externo es el HOST, en lugar de su soporte parcial posterior (varía según el modelo) para el teléfono. siendo un host USB.
Los teléfonos Android que tengo al menos permiten conectar un teclado USB, así que creo que el modo host es bastante estándar ahora. Pero cuando no es posible cargar al mismo tiempo, el OP no puede ir de esa manera.
@ChrisStratton sí, tienes razón; Necesito 2 funciones al mismo tiempo: entregar energía al teléfono y tener comunicación de datos arbitraria. ¿Es eso posible?
Eso es lo que se supone que debe hacer el modo Accesorio de Android, qué tan bien funciona en un caso dado será para que usted determine.
@ChrisStratton oh, está bien, gracias. Le daré una oportunidad al modo Accesorio de Android con VUSB+ATtiny.
No puede hacer un accesorio de Android con VUSB, necesita usar algo que pueda ser un host USB. No creo que haya ninguna pieza ATmega o ATtiny que pueda, y los hosts USB externos no son rentables en comparación con el uso de una MCU con capacidad de host para empezar.
@ChrisStratton ¿No puedo usar esta biblioteca de host USB para arduino debido a: arduino.cc/en/Reference/USBHost y presentar el dispositivo Android como un teclado para arduino? Arduino debido tiene 32 bits completos y otras capacidades de hardware, ¿hay alguna versión portada de la misma biblioteca para mcus menos potentes?
Aparentemente, varias MCU de ARM, incluida la de Due, tienen capacidad de host USB. Hasta donde yo sé, ninguna de las series ATmega o ATtiny lo hace. Hay soluciones más baratas que Due que también lo hacen (como el KL25Z), pero es posible que esté más solo para descubrir el software. Y no, no puede usar el dispositivo Android como teclado, debe hablar el protocolo que conoce, al menos a menos que lo rootee e instale un controlador de dispositivo personalizado o similar.
@ChrisStratton ohh... ¿Tiene alguna idea de cómo es el circuito interno de este cable que permite el modo OTG/Host y la carga al mismo tiempo? ¿Podemos replicar el mismo circuito en un pcb? ¿Será compatible con todos los dispositivos? Por cierto, obtuve la información de estos enlaces de intercambio de pila: enlace1 y enlace2
Esos cables no son universales. Mira las reseñas. Si este es solo un proyecto único o un teléfono específico, entonces podría copiar esos cables. Si requiere una secuencia específica, también puede controlarla.

Respuestas (2)

No hay una manera fácil de hacer un host USB y cargar al mismo tiempo. La mayoría de los teléfonos no admiten esto.

Pero puede evitar la necesidad de comunicación USB mediante el uso de un módulo Bluetooth a serie . Nada cambia realmente en su ATtiny aparte de una configuración menor. Mismo puerto serial que el FTDI. Luego proporcione energía como una conexión USB normal.

V-USB actúa como un FTDI u otro IC serie USB, por lo que aún se requiere el modo de host de Android.

Gracias... Y sí, Bluetooth funciona en este caso... Lo probé y funciona muy bien con ATtiny13a pero un chip Bluetooth aumenta el tamaño de mi pcb... Quería algo más pequeño que el HC 05/6 o SPP-C SMT actualmente disponible papas fritas. Gracias de todos modos. Tendré que recurrir a Bluetooth si nada más funciona.
@ ritesht93 Estoy seguro de que hay módulos más pequeños. O salte los módulos con tableros posteriores y conecte los circuitos integrados directamente. Las tablas base agregan demasiado.
@ ritesht93 como m.gearbest.com/other-accessories/pp_341243.html (personalmente no los he usado).

¿Cuál sería la forma más barata y pequeña (en términos de tamaño de PCB y memoria ATTiny) de lograr los mismos datos arbitrarios?

O use una MCU diferente y compatible con USB Host / OTG o use algún truco analógico en el puerto de auriculares. Este último requiere algunos pasivos y un pin ADC en el Tiny.

Hay una buena cantidad de MCU ARM Cortex-M con host USB incorporado de Freescale, ST, etc. el hardware más pequeño/más barato, ya que este último puede requerir más trabajo original.