USB: ¿cuáles son las ventajas (o desventajas) o el uso de HID en serie a través de USB?

4

Descargo de responsabilidad: soy un principiante en electrónica y más aún para trabajar con USB, por favor, tenga paciencia conmigo si entiendo mal algunos de los elementos esenciales de cómo funciona el USB. Cualquier corrección bienvenida!

El escenario: con un grupo de amigos estamos construyendo un barco de vela robótico. Estamos administrando 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 el serial sobre USB y el uso de HID, y ambos funcionaron suficientemente bien ™ en nuestras pruebas cortas cerca de la costa, pero antes de conformarnos con uno u otro, me gustaría saber si hay algunas diferencias no triviales, pero no obstante importantes entre las dos que no pude considerar . Para nuestro proyecto las características más importantes son:

  • Confiabilidad : nuestro robot debe navegar de forma autónoma durante unos días. Es cualquiera de los dos protocolos inherentemente "más seguros" / con mejor manejo de errores / funcionalidad de auto-recuperación?
  • Rendimiento : aunque en situaciones de funcionamiento normales, nuestro rendimiento podría Estaremos bien bajo 1Kb / s, bajo ciertas condiciones necesitaremos recopilar datos casi en tiempo real La serie está limitada a 115 Kb / s, ¿HID tiene un límite de velocidad? ¿Aparte de los 1500Kb / s del protocolo USB 1.0?

... pero como dije: soy bastante nuevo en electrónica / USB, así que si sientes que me falta un parámetro clave, me alegrará saberlo.

¡Gracias de antemano por su tiempo y experiencia!

    
pregunta mac

4 respuestas

3

Para determinar qué solución será la mejor para el rendimiento, debe encontrar el cuello de botella y mejorarlo hasta que deje de ser el cuello de botella hasta que ya no pueda eliminar nada.

  1. Su AVR tiene una frecuencia máxima fija, el objetivo es hacer que sus rutinas de procesamiento (optimizadas) sean el factor limitante. Si su protocolo de comunicaciones puede manejar esta velocidad, entonces no hay nada más que pueda hacer.
  2. El USB a 1.5Mbps representa mover 1 byte cada 160 relojes. Eso es bastante tiempo. para hacer el procesamiento, y si está guardando en el búfer triple sus datos o enviando bloques completos, querrá que esto sea aún más rápido. A 12 Mbps, obtiene 13 ciclos de reloj por byte, que es mucho más difícil de lograr y sería un objetivo razonable.
  3. La interfaz entre USB (e incluso el propio USB) conllevará cierta sobrecarga. El envío de datos ASCII a través de una interfaz serial asíncrona es una gran sobrecarga. Un chip de interfaz USB FIFO paralelo será mucho más rápido. Un micro con periférico USB incorporado será mejor aún.

Para obtener más confiabilidad, necesita seguir con lo que funciona y con lo que mejor sabe. Relaje las especificaciones. Aquí, una interfaz serial probada y verdadera es una buena opción.

¿Cómo funciona "serial over USB" en tu aplicación?

Si se trata de un controlador de software en el dispositivo Linux incorporado y un dispositivo USB < - > IC paralelo (o puerto serie de software en un AVR habilitado para USB, que probablemente suene ya que ha probado el modo HID), entonces no tendrá problemas con velocidades de bits más altas.

Sin embargo, verdadero USB < - > Los ICs en serie existen y son populares (el FTDI232R en Arduinos más antiguo viene a la mente ...) que convierte el USB en una comunicación serial RS232 de nivel lógico. No necesitas ni quieres esta capa para tu aplicación. Reducirá su rendimiento y agregará una sección adicional de retardo asíncrono a su aplicación.

    
respondido por el Nivek
2

Hice un proyecto que requería una interfaz USB (usando PIC micro) hace un par de años, miré a ambos, pero HID es superior, me parece:

HID tiene detección automática y almacenamiento en búfer de paquetes por Windoze en lugar de tener que 'volver a conectar' el puerto serie en cada plug-in (y a un número de puerto que depende del puerto usb usado cada vez (LAME)) - ¡La programación de VB para HID es simple!

El rendimiento máximo es menor para HID, creo sus 64 bytes (tamaño máximo de búfer) en ambos sentidos cada 10 ms para USB 1.1 o 1 ms para USB 2.0.

    
respondido por el Benj
1

1) En cuanto a la confiabilidad, preferiría los protocolos de nivel inferior como el hardware en serie con manejo manual de errores. El dispositivo USB podría desaparecer si al controlador no le gusta algo, y si no lo reinicia, no lo volverá a ver. Así que necesitas aprender a reiniciar el USB.

2) En cuanto a la velocidad, la serie sobre USB no se limita a 115Kb / s en general, en el caso de que se vea una limitación en una de nuestras implementaciones. En general, esperaría que 'serial-sobre-USB' sea 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-sobre-USB', que se utiliza para bombear a velocidades cercanas al rendimiento USB.

    
respondido por el BarsMonster
1

No es el perfil de serie el que se limita a 115200bps, de hecho, en la actualidad, rara vez es el puerto de serie. Si usas algo como un FT245 puedes alcanzar velocidades mucho más altas que eso. El problema con la transferencia asíncrona estándar (estilo RS-232) es que necesita tener brechas de vez en cuando para poder sincronizar en bytes (o, alternativamente, enviar 0xff de vez en cuando).

En cuanto a la diferencia entre HID y USB serial, la serie es masiva mientras que HID es control e interrupción. Eso es fundamental para USB, y significa que HID tiene (potencialmente) menor latencia, pero la serie tiene mayor capacidad. No hay mucho más que eso, tampoco es más confiable, y querrá una manera de restablecer su circuito cuando las cosas vayan mal.

... por cierto, esto suena familiar. Hola mac Perdona mi ausencia de Abbenay ayer.

    
respondido por el Yann Vernier

Lea otras preguntas en las etiquetas