Encadenamiento de varios controladores de concentrador USB para interfaz en serie

Necesito una gran cantidad de E/S en serie desde una computadora de escritorio en una aplicación de robótica. Consideré usar todas las piezas estándar con un gran conjunto de concentradores USB y adaptadores USB a serie, pero las soluciones estándar eran demasiado grandes.

Necesito alrededor de 26, tal vez más canales que funcionen entre 9600 y 115200 baudios. Para encajar en el espacio reducido, estaba considerando obtener algunos controladores de concentrador USB y colocarlos en una placa de circuito con el usb a los ASIC en serie.

La computadora host es una máquina basada en Intel mini itx.

Mi concepto actual implica este controlador de concentrador USB 3 de 4 canales: Concentrador USB 3 de 4 puertos Y varios chips de concentrador USB 2 de 7 puertos: Concentrador USB 2 de 7 puertos concepto Los concentradores de 7 puertos se conectarían a los puertos del concentrador de 4 puertos los puntos finales USB que necesito. El USB a los ASIC seriales (FTDI o un producto similar) se conectaría directamente a cada puerto del controlador del concentrador de 7 puertos. Sé que FTDI, por ejemplo, ofrece usb multicanal a dispositivos seriales, pero no sé si cada canal USB se enumera como un dispositivo separado en Linux (como en un dispositivo /dev/usbttyx separado)

Mi pregunta es, ¿qué tan difícil es implementar este hardware? He hecho algunos diseños de señales diferenciales antes, pero nunca una velocidad USB rápida. También estaba considerando tener un control separado de la alimentación de cada controlador concentrador para que pudieran restablecerse por separado si fuera necesario.

¿Hay alguna trampa que deba tener en cuenta específica para trabajar con estos chips USB? Este será mi primer diseño de placa que tiene USB.

¡Gracias!

Esto generalmente no se resuelve con USB sino con un "bus de campo", por eso se desarrollaron cosas como CAN. Una solución sencilla es RS485 con un solo maestro, que puede conectar en cadena sin problema (solo respete la terminación), no hay razón para usar 28 controladores de host en serie separados
Si quieres usar, USB, lo que propones debería funcionar. AFAIK, USB tiene un límite de 127 dispositivos, incluidos los concentradores, por lo que debe estar dentro del límite. Cada uno debe instanciarse como un dispositivo /dev/ttyUSB, aunque es posible que no tenga ningún control sobre qué dispositivo es qué número. De hecho, ¡esto puede cambiar de un encendido a otro!
@DoxyLover no hay problema para asignar el mismo número de tty según la identificación de serie (si se proporciona) o, alternativamente, según el número de puerto físico usando UDev
@crasic Todos los dispositivos usan diferentes tipos de interfaz serial. No es algo sobre lo que tenga control. Algunos son RS485, 422, 232 y TTL. Aunque tener un montón de dispositivos CAN suena significativamente menos terrible. Parte de lo que me alejó de CAN es que el costo de los dispositivos de interfaz es un poco más alto... Pero si es más simple, podría valer la pena. Además, ¿cómo haría para asignar los números tty para superar el problema que señaló DoxyLover?
@alphasierra cualquier bus de campo requerirá algo equivalente a su chip FTDI para USB, CAN es más pesado en periféricos, pero hay otros sistemas para elegir (los basados ​​en Ethernet, por ejemplo). USB funcionará absolutamente, pero es posible que tenga requisitos que no satisfaga, por ejemplo, tiempo de respuesta determinista y sondeo de red.
¿Ha considerado usar un servidor serial? Un servidor serial típico le dará de 8 a 32 puertos de 232/422/485, conectados a la red a través de conectores TCP. En cuanto al tamaño, se puede tener un servidor serie de 32 puertos en 1RU.
@crasic tiene razón, puede configurar reglas udev para asignar unidades específicas a números ttyUSB. Esto requiere un conocimiento bastante avanzado de Linux udev.
@DoxyLover: ¿Qué tan complicado estamos hablando? ¿Es extremadamente complicado?
@ uint128_t Consideré que, sin embargo, solo necesito ejecutar protocolos seriales asíncronos en su mayor parte. Además, esos servidores tienden a tener conectores db9 voluminosos. Estoy buscando algo barato, compacto, con bloques de terminales.
@crasic Ese es un buen punto... Tendré que investigarlo. Parte de la motivación de este enfoque fue que sería súper simple desde el punto de vista del software, y esto está destinado a un proyecto de estudiante. La idea es que simplemente podrían llamar a un dispositivo serial existente. Pero si podemos facilitar el direccionamiento de mensajes a través de CAN, entonces parece ser la mejor solución.
No estoy seguro de lo que quiere decir con la asincronía, 232/422/485 son asincrónicos. Los servidores serie con los que estoy familiarizado en realidad tienen terminación RJ45, por lo que es muy fácil construir sus propios cables y los conectores son relativamente compactos. Sin embargo, no son súper baratos, pero $ 1500 por 32 canales en serie configurables no es un mal negocio.
Calificaría a udev moderadamente complicado. Básicamente, debe escribir reglas basadas en algunos criterios para asignar nombres de dispositivos específicos. Con suerte, cada dongle serial informará un número de serie único en el que puede ingresar. No estoy realmente calificado para dar más detalles. Le sugerimos que busque en la red "reglas udev".
Un inconveniente potencial que veo es la distribución de energía; Es posible que algunos puertos descendentes deban autoalimentarse (es decir, es posible que el puerto raíz no pueda suministrar toda la energía necesaria desde su puerto USB).

Respuestas (1)

No es realmente una respuesta, simplemente no puedo comentar ...

¿Evaluaste la opción de usar Arduino/AVR simple? Con Atmega128 TQFP64, debería poder obtener series de software 26ish, los UART de hardware pueden ir tan rápido como 2Mbps (para conectarse al host de la PC), Atmega128 tiene 2.

También hay ARM de la serie STM32F103 con reloj de 72 MHz.

En el lado del host de la PC, si realmente necesita 26 COM separados, existe la posibilidad de usar puertos COM virtuales ... se necesitará algún software para "agregar" datos de estos 26 puertos en 1 real. O edite el software de su PC. Crear algún protocolo personalizado (similar a Modbus) para abordar cada puerto serie no debería ser difícil. Lo mismo en el lado de MCU.