Interfaz de computadora de alta velocidad con un Arduino

10

Estoy planeando un proyecto con un Arduino que involucra el manejo de muchas solicitudes de una computadora host, y el estándar 115200 baudios máximos en serie no es suficiente. Me gustaría poder obtener 1Mbps full duplex si es posible, pero 400Kbps + full duplex sería aceptable. Estoy usando un Arduino Due, por lo que debería ser capaz de manejar velocidades de comunicación significativamente más altas.

¿Hay alguna manera de aumentar significativamente la velocidad en baudios en serie, o hay una segunda opción que pueda elegir en términos de interfaz con una computadora a velocidades más altas?

Polinomio
fuente
Los dispositivos FTDI FT232 pueden alcanzar hasta 3 Mbps sin problemas, por lo que si tiene un convertidor USB-serie basado en FTDI, esa sería una opción fácil. Realmente desearía que la gente de Arduino se hubiera quedado con ellos, en lugar del ATmega16U2.
Connor Wolf
Tal vez el UART admitirá velocidades de bits de 1 Mbps, pero también necesita el microcontrolador para alimentarlo con datos. Se puede hacer, pero alcanzará un máximo con bastante facilidad.
jippie
Si está cerrando un AVR con "muchas solicitudes" a 400 kbps, me sorprendería si tiene mucho tiempo libre para hacer algo de uso.
Nick T

Respuestas:

8

Definitivamente es posible subir al rango de Mbps con un Arduino, especialmente con su Due. El monitor en serie solo admite baudios de hasta 115200, pero puede usar una ventana de terminal separada que le permite configurar sus baudios para cualquier cosa que desee.

Para un poco más de información, vea este hilo en el foro de Arduino.

En términos de configuración, en Arduino es tan fácil como Serial.begin(1000000);o hasta ese punto. Se trata de la configuración del dispositivo con el que desea comunicarse y de lo que puede manejar.

Jay Greco
fuente
¿El controlador serial estándar a través de USB admite tales velocidades? Voy a hablar con él a través de un script, no el monitor en serie en el IDE.
Polinomial
Yo creo que si. Si está utilizando un script, debe estar en buena forma. El hardware UART en Arduino Due es el mismo que UNO; utiliza el ATmega16U para interactuar con serial, que es capaz de al menos 1 Mbps. El controlador serie a través de USB también debe admitir esa velocidad.
Jay Greco
Para probar, siempre puede configurar un boceto de prueba rápida. Establezca la velocidad en baudios a algo más alto que el predeterminado y use un terminal configurado a la misma velocidad. Si los datos llegan, sabes que el Arduino es bueno hasta ese baud.
Jay Greco
Técnicamente, en realidad no importa lo que pida la PC host en términos de velocidad de transmisión, sino solo que el 16U y el procesador Arduino principal estén de acuerdo: el lado USB real funciona mucho más rápido que la velocidad de transmisión en serie de todos modos, y toda la PC lo que hace es decirle al 16U a qué velocidad ejecutar su interfaz serial. Además, si observa inexactitudes en los divisores de baudios, recuerde que lo que realmente importa es que coinciden entre las dos fichas en su tablero, no que coincidan con algún objetivo tradicional. Aprovecharlo al máximo podría requerir un firmware personalizado para el 16U.
Chris Stratton
1

Me gustaría escribir un firmware personalizado para el Atmega16u2 que está haciendo la interfaz USB. Ese chip puede hablar USB de alta velocidad (velocidad de señal de hasta 12 Mbit) y el puerto de salida SPI de ese chip está convenientemente disponible en el encabezado ICSP. Conéctelo a la entrada SPI del Arduino (también disponible en su encabezado ICSP) y puede ejecutar SPI a, creo, 4 Mbit / s (4 relojes de CPU por bit).

El Atmegas en el mega (16u2 y 128) puede ejecutar su puerto serie a hasta 2 Mbit / s. Si escribe firmware personalizado para el 16u2, también puede usar el USART serial asincrónico que ya está allí.

En ambos casos, es probable que pierda la capacidad de programación del puerto serie, por lo que deberá utilizar un programador independiente basado en USB.

El proyecto LUFA tiene muchos programas de muestra y bibliotecas útiles para hablar realmente USB en un chip Atmega. "libusb" es una biblioteca conveniente para hablar directamente con dispositivos USB, en lugar de tener que depender de la emulación en serie.

Jon Watte
fuente
0

Hay algunos resultados que pueden ser útiles aquí .

Eric Gunnerson
fuente