¿Qué sucede después de que DTR / RTS sea enviado a una placa Arduino basada en FTDI?

Estoy trabajando en un boceto para permitir la carga desde un dispositivo Android a una placa Arduino, y funciona para Duemilanove (basado en FTDI ) y Arduino Uno (basado en ATmega ) al probar PC / Arduino usando rxtx (Java puro).

Pero no funciona cuando se utiliza la biblioteca USB-Android, ya que los métodos setDTR / setRTS aún no se han implementado.

Los controladores Android de FTDI permiten el envío de señales setDTR / setRTS, pero falla al enviar / leer datos después de ella.

Así que el problema está en la API USB de Android y no puedo averiguar qué está mal.

¿Qué ocurre con las placas Arduino basadas en FTDI después de que DTR / RTS se conmuten?

Creo que el dispositivo se restablece y espera comandos bootloader ( STK500 ) durante ~ 50-250 ms. ¿Estoy bien?

Estás en lo correcto. La razón de esto es lo que se llama Bootloader.

En su estado más barebones, los microcontroladores (en adelante, uCs) en los que se construye Arduinos pueden programarse mediante el método de programación en el sistema (ISP), que es una implementación particular del protocolo SPI . Lo único que necesitamos saber es que esto no es serial o USB.

Para que los chips AVR (y los tableros Arduino) sean programables vía Serial / USB, cargamos un programa llamado Bootloader (vía ISP) en el chip. El gestor de arranque lee los datos del programa a través del enlace serie y lo escribe en flash. Si no hay ningún programa que se va a cargar, el cargador de arranque le da al programa cargado el control. Así que el cargador de arranque sólo podría estar activo después de encender o restablecer: después de que se ejecuta el programa que cargó y nunca se vuelve a activar de nuevo.

La mayoría de los cargadores de arranque están configurados para buscar datos de programación sólo después de un reinicio, y la razón es que esperar los datos en serie implica un tiempo de espera: hay que esperar un tiempo (digamos 1/3/5/10 segundos) para ver si Hay programa que se cargan y luego cargar el programa si se está enviando. Si el cargador de arranque buscaba datos de programación cada vez que se encendía un Arduino, su Arduino sólo se activaría con un retraso, que se consideró indeseable. Así que el gestor de arranque sólo se activa después de un reinicio.

Podría ser molesto obligar al usuario a tener que empujar el pin de reinicio cada vez antes de que quisieran programar su Arduino, y, además, empezar a enviar los datos en serie inmediatamente después del restablecimiento (o pueden perder la ventana de tiempo de espera), por lo que el Gente inteligente en Arduino se le ocurrió un truco: utilizar la señal DTS para activar el restablecimiento y después de enviar los datos. Así que su Arduino (si no es antiguo) se configura para restablecer al recibir señal DTS.

La respuesta es que la placa se restablece. El esquema se hace en la forma en que se restablece la placa (RTD / DTR está conectado al pin de reinicio del microcontrolador de alguna manera).

  • Android: habilita la conexión de USB mediante programación: hay una aplicación que lo hizo por 2,3
  • Android: Comunicación con un dispositivo USB que actúa como host
  • Leer y grabar datos a través del puerto USB en Android 3.1
  • ¿Cómo hacer una aplicación básica Android Host USB?
  • Android host USB leer desde el dispositivo
  • Cámara web externa para cámara a android usando usb
  • getDeviceList devuelve dispositivos que ya no están conectados
  • Android Development Usb Transferencia
  • Android USB OTG: por programación, apague la alimentación del puerto
  • Supresión de pop-up de acceso a dispositivos USB?
  • ARC con acceso USB?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.