¿Cómo detectar la conectividad RS232 y USB?

Mi proyecto involucra un PIC que se comunica a través de canales USB y RS-232, que luego se multiplexan a 1 UART por medio de un interruptor analógico dual SPDT. Como tal, el PIC debe saber qué puertos están conectados físicamente para poder seleccionar el puerto USB o el puerto RS232.

¿Cómo haría para hacer esto? Para RS-232, podría configurar una interrupción externa para la línea DTR, pero en mi campo industrial, solo se usan Tx, Rx y Gnd.

Para USB, podría usar Vbus para detectar la presencia, pero es posible una sobrecorriente

¿O sería más factible monitorear la impedancia de las líneas diferenciales usb y las líneas rs232 tx rx, como en los circuitos de detección del conector de audio?

Por interruptor analógico Dual SPDT, ¿se refiere a un interruptor mecánico dpdt estándar?

Respuestas (1)

Para USB, la forma más fácil es monitorear la presencia de VBUS.

No estoy seguro de lo que quiere decir con "sobrecorriente", no debería necesitar cargar mucho la línea de alimentación USB, si es que lo hace. Si está realmente preocupado, coloque una resistencia de 10K en serie con el USB Vcc y simplemente ejecútelo en un pin de entrada. Eso debería protegerlo de cualquier falla.


Desafortunadamente, para la serie, puede ser mucho más complicado.

Si tiene suerte, su sistema utiliza señalización de nivel TTL invertido, lo que significa que el nivel de línea cuando no hay tráfico es Vcc, o señalización de nivel RS232, lo que significa que el voltaje de línea sin tráfico es ~+10v o ~-10v , dependiendo de si su autobús está invertido.

Luego, simplemente puede monitorear el nivel de voltaje. 0v significa nada conectado.

Si no tiene suerte, su sistema usa señalización de nivel TTL, con el estado de bus inactivo en 0V. En este caso, realmente la única forma posible de determinar si un dispositivo está conectado es enviar algo de tráfico y ver si obtiene una respuesta.

Para aclarar más, mi RS232 com. es simplemente el rs232 Tx y Rx convertidos a TTL a través de MAX3232, y la línea pulsa cuando se envían o reciben datos, entonces, ¿cómo ocurriría la detección, cuando las líneas tx y rx siguen pulsando?
Uh.... si el Rx está pulsando, algo debe estar conectado. Si no pulsa, no hay nada conectado.
Sí, entonces, ¿cómo obtengo un 1 lógico estable de la señal pulsante?...
Ok, parece que la línea Tx del RS232 es -10V cuando está enchufado y 0V cuando está desconectado, también parece pulsar, pero debería poder calcular el umbral con un osciloscopio. En definitiva, tenías razón, ¡gracias!
@siidheesh: esto va a entrar en un MCU, ¿verdad? Debería ser bastante fácil interrumpir las transiciones y tener un tiempo de espera si no ve transiciones/pulsos durante un período determinado. Eso le daría una buena bandera de estado conectado/desconectado.
Una estrategia simple sería detectar USB y asumir RS232 siempre que el USB no esté conectado.
@ChrisStratton: creo que sería un buen enfoque.