Cambio en caliente entre puertos RS232

-1

Tengo un sistema con dos dispositivos seriales (Arduino uControllers) conectados a un solo chip FTDI (USB a serie) a través de un interruptor de silicio. Cada dispositivo funciona bien por sí solo.

Me gustaría poder alternar entre la salida en serie de los dos dispositivos mientras se ejecutan. A veces funciona, pero no de manera confiable y es más confiable a velocidades más lentas (por ejemplo, 9600). Cuando falla, solo consigo basura después de cambiar entre ellos. Si reinicio el dispositivo que estoy escuchando, obtengo buenos datos.

¿Cómo puedo cambiar limpiamente entre los dos puertos limpiamente?

Gracias.

    
pregunta MemoryWrangler

2 respuestas

1

Supongo que los datos confusos se deben al cambio entre 'marcos', es decir, se obtiene la mitad del último byte y la mitad del siguiente byte interpretado como un byte. Cuando cambia, puede incluso obtener bits de un dispositivo mezclados con bits del otro dispositivo.

O bien necesitas:

  • un multiplexor más inteligente que solo puede alternar entre bytes o 'marcos', es decir, uC extra leyendo ambos y 'cambiándolos' con software
  • o un protocolo de corrección de datos; cuando detecte datos incorrectos / confusos, ej. con una suma de comprobación, y hacer que se reinicie / reinicie / realine lo que sea.

¡Los puertos serie AFAIK no están diseñados para conectarse de esta manera! Un USART por cada puerto serie.

También n.b. RS-232 incluye los voltajes de línea, salidas de pines, etc. para los conectores de 9 pines y 25 pines. La parte de serie la realiza el USART, que en realidad nunca usa RS-232 en este caso, ya que está usando un USB TTL USART.

    
respondido por el esoterik
1

Si tiene alguna pausa, incluso bastante breve, en la salida de los datos en serie que daría tiempo a la recepción para restablecer la sincronización, es posible que no se obtenga si ambos dispositivos mantienen sus UART en serie constantemente ocupados. por el cable uno tras otro sin huecos. Tenga en cuenta que la salida en serie de Arduino está almacenada en búfer, por lo que, por lo general, un programa "ruidoso" puede "seguir adelante" generando datos, pero una vez que el almacenamiento está lleno, las llamadas de salida comenzarán a bloquearse y el programa se ejecutará esencialmente al ritmo que mantiene la salida en serie constantemente ocupado.

Es probable que su multiplexor implique una gran cantidad de personalización, que es otra cosa más que especificar / realizar, por lo que podría haber mucha lógica al darle a cada placa su propio canal único.

  • Puede comprar dos adaptadores USB de serie económicos. Distinguirlos por el puerto USB físico es típicamente posible pero puede ser un poco doloroso. Hay redacciones en la web, quizás incluso aquí, y, por supuesto, depende del sistema host.

  • Si obtienes dos conjuntos de chips diferentes, puede ser un poco más fácil distinguirlos. Un Arduino tipo CDC / ACM moderno y un FTDI heredado se vuelven aún más fáciles, ya que en Linux u OSX obtienen nombres de nodo de dispositivos de formas bastante diferentes.

  • También puede obtener un convertidor de canal doble o cuádruple, como el FTDI-2232 o FTDI-4232. Estos suelen ser más caros que los dos módulos de un solo canal, pero son dispositivos útiles por sí mismos (también hablan de protocolos síncronos como JTAG o, presumiblemente, AVR ISP, por desgracia, mientras sea posible , intentando que uno sea ambos. un puerto serie y un adaptador JTAG al mismo tiempo pueden ponerlo de nuevo en el campo de las batallas de pilotos - pero me desvío )

respondido por el Chris Stratton

Lea otras preguntas en las etiquetas