Descargo de responsabilidad: soy un novato en electrónica y aún más en trabajar con USB, tengan paciencia conmigo si entiendo mal algunos de los elementos esenciales detrás de cómo funciona USB. Cualquier corrección bienvenida!
El escenario: con un grupo de amigos estamos construyendo un velero robótico. Estamos gestionando todos los sensores a bordo a través de un µC (AVR), pero la IA de navegación se realiza en un sistema Linux integrado. La electrónica está conectada al hardware AI a través de USB, y estoy buscando consejos sobre qué protocolo usar para la transmisión.
Ya probamos tanto el puerto serie a través de USB como el uso de HID, y ambos funcionaron lo suficientemente bien™ en nuestras breves pruebas cercanas a la costa, pero antes de conformarme con uno u otro, me gustaría saber si hay algo que no sea trivial . pero sin embargo diferencias importantes entre los dos que me faltó considerar . Para nuestro proyecto las características más importantes son:
...pero como dije: soy bastante nuevo en electrónica/USB, así que si sientes que me falta un parámetro clave, estaré encantado de saberlo.
¡Gracias de antemano por su tiempo y experiencia!
Para determinar qué solución será mejor para el rendimiento, debe encontrar el cuello de botella y mejorarlo hasta que ya no sea el cuello de botella hasta que ya no pueda eliminar nada.
Para obtener más confiabilidad, debe ceñirse a lo que funciona y a lo que mejor conoce. Relaje las especificaciones. Aquí, una interfaz serial probada y verdadera es una buena elección.
¿Cómo funciona "serial over USB" en su aplicación?
Si se trata de un controlador de software en el dispositivo Linux incorporado y un IC USB <-> paralelo (o puerto serie de software en un AVR habilitado para USB, lo que parece probable ya que probó el modo HID), entonces no tendrá problemas con tasas de bits más altas.
Sin embargo, los verdaderos circuitos integrados USB <-> serie existen y son populares (me viene a la mente el FTDI232R en Arduinos más antiguos...) que convierten el USB en una comunicación serie RS232 de nivel lógico. No necesita ni desea esta capa para su aplicación. Reducirá su rendimiento y agregará una sección de retraso asíncrono adicional a su aplicación.
Hice un proyecto que requería una interfaz USB (usando PIC micro) hace un par de años, miré ambos pero creo que HID es superior:
HID tiene detección automática y almacenamiento en búfer de paquetes por windoze en lugar de seguir teniendo que 'reconectar' el puerto serie en cada complemento (y a un número de puerto que depende del puerto usb utilizado cada vez (LAME)) --programación ¡VB para HID es simple!
El rendimiento máximo es menor para HID, creo que es de 64 bytes (tamaño máximo de búfer oculto) en ambos sentidos cada 10 ms para USB 1.1 o 1 ms para USB 2.0.
1) En cuanto a la confiabilidad, preferiría protocolos de nivel inferior como serie de hardware con manejo manual de errores. El dispositivo USB podría simplemente desaparecer si al controlador no le gusta algo, y si no lo reinicializa, no lo volverá a ver. Por lo tanto, debe aprender a reiniciar el USB.
2) En cuanto a la velocidad, la conexión serial a través de USB no está limitada a 115 Kb/s en general, pero en realidad verá una limitación en una de nuestras implementaciones. En general, esperaría que 'serial-over-USB' fuera más eficiente que HID, ya que HID debería tener más carga de 'decoración'. Aún más rápido es 'parralel-over-USB' que se usa para bombear a velocidades cercanas al rendimiento USB.
No es el perfil serie el que está limitado a 115200 bps; de hecho, rara vez es el puerto serie hoy en día. Si usa algo como un FT245, puede alcanzar velocidades mucho más altas que eso. El problema con la transferencia asíncrona estándar (estilo RS-232) es que necesita tener espacios ocasionalmente para tener la oportunidad de sincronizar en bytes (o alternativamente, enviar 0xff de vez en cuando).
En cuanto a la diferencia entre HID y serie USB, la serie es a granel, mientras que HID es control e interrupción. Eso es fundamental para USB y significa que HID tiene (potencialmente) una latencia más baja, pero la serie tiene mayor capacidad. No hay mucho más que eso, ninguno es más confiable, y querrá una forma de restablecer su circuito cuando las cosas salgan mal.
... por cierto, esto suena familiar. ¡Hola Mac! Perdón por mi ausencia de Abbenay ayer.
0xFF
problemas de "sincronización en bytes" de bytes? ¡Gracias!
Super gato
adam lorenzo