Hub USB que elimina datos de adaptadores USB a serie

Hub USB que elimina datos de adaptadores USB a serie

Actualmente estoy diseñando un sistema que necesita recibir datos de dispositivos serie (principalmente placas ARM). Para lograr esto, utilizo algunos adaptadores de USB a serie (FTDI232). Codifiqué un programa de bucle invertido simple (9600 baudios) para probar la configuración, actualicé la placa ARM y pude recibir con éxito todo lo que envié, sin pérdida de datos.

Sin embargo, este sistema eventualmente requerirá comunicarse con muchas placas. Por lo tanto, conecté un concentrador USB al puerto USB y lo usé para conectar más placas. Sin embargo, después de unos días notamos algunos problemas. Al principio parecía que teníamos algunos bitflips. Luego resultó que incluso los bytes completos se pierden cuando recibimos mensajes de los foros. Cuando conectamos estos adaptadores a puertos USB normales (sin un concentrador intermedio), el problema desapareció.

Supusimos que se trata de una cuestión de amortiguación. Quizás el controlador serie o el dispositivo esté enviando datos demasiado rápido. Por lo tanto, instalamos el control de flujo RTS/CTS en el lado serie. Nuevamente, los bytes fueron descartados por concentradores USB y no cuando el adaptador serial está conectado directamente a la PC.

Cambiamos el concentrador USB por uno más caro, pero no cambió nada. Cambiamos de PC, pero tampoco solucionó el problema. Además, resulta confuso que el concentrador no descarte los paquetes que enviamos al adaptador serie, sino solo los paquetes que envía el adaptador serie.

¿Alguien sabe cómo podría solucionar esto o a qué se debe el problema? Estamos pensando que el concentrador USB lo está causando. Sin embargo, dependemos de ello, ya que tendremos que conectar muchos dispositivos. Entonces, antes de crear nuestra propia solución de manejo en serie (basada en FPGA o Pi dedicada), quería preguntar si alguien aquí sabe qué pasa. ¿Existen archivos de configuración de Linux que tal vez permitan un sondeo más rápido (si se trata de un problema de sondeo)? Creo que el adaptador serie no es el problema aquí.

Respuesta1

Para lograr esto, utilizo algunos adaptadores USB a serie (FTDI232).

Obtenga mejores adaptadores que utilicen el protocolo USB 2.0 HS. Una cosa con los dispositivos FS sobre los concentradores HS es que el host debe usar un protocolo de transacción dividida, que es conocido por sus dificultades de implementación debido a su terrible complejidad. No apostaría a que el motor de transacciones divididas se haya probado alguna vez en una gran cantidad de puentes FS UART de mala calidad.

La otra cosa es que muchos concentradores USB 2.0 tienen un solo TT, por lo que el rendimiento general es pésimo y el almacenamiento en búfer/programación debe ser muy cuidadoso. Una vez más, con el loco protocolo de encuestas de los CDC, todas las apuestas deberían estar canceladas. Obtenga un puente USB-UART mejor, algo basado en FT232H.

La diferencia entre la conexión directa al host y la conexión a través de un concentrador USB es que en el caso del host las transacciones se realizan directamente en el protocolo FS nativo, mientras que la conexión a través de concentradores necesita un controlador especial que funcione con transacciones divididas. Es posible que tenga un controlador de transacción dividida débil.

Respuesta2

Sea prudente al mezclar dispositivos e interfaces USB2 y USB3. Pueden surgir algunos problemas debido a dicha mezcla. Además, recuerde que algunos concentradores USB son simplemente una mierda.

información relacionada