Comunicación Tx/Rx UART entre 2 MCU sobre 1 línea

Estoy tratando de establecer comunicación entre 2 MCU usando TX/RX en 1 línea. Por favor refiérase a la imagen.

Preguntas:

  1. esto funcionara? Habrá un eco seguro.

    Si MCU 1 envía una señal "123", MCU 1 y MCU 2 recibirán "123" al mismo tiempo.

    Si MCU 2 envía una señal "678", MCU 2 y MCU 1 recibirán "678" al mismo tiempo.

    ¿Es correcta esta suposición?

  2. A la larga, ¿dañará el MCU?

Gracias.

ingrese la descripción de la imagen aquí

Respuestas (2)

Si bien su suposición de cómo funciona el RX es correcta, se debe tener cuidado con los dos TX que conducen la misma línea. Desea al menos amortiguar el TX con un diodo inverso y una resistencia pull-up, como este:

ingrese la descripción de la imagen aquí

Hacer algo así no es nada nuevo y hay muchas referencias en Internet. Esta configuración será realmente útil para ayudar a detectar errores de transmisión, ya que el transmisor también recibe los datos de bucle invertido.

Es posible que desee buscar algunas cosas en Internet como this y this .

Gracias @sybreon. Esto es útil. Según los artículos, parece que el MCU 2 ni siquiera necesita su propia energía. Puede aprovechar la energía de la MCU 1, energía parasitaria. ¿Es esto correcto?
@Daniel: el segundo enlace apunta a 1 cable , un esquema de comunicación/energía que multiplexa energía y datos en un cable (más una ruta de retorno). Sin embargo, le sugiero que primero haga que el circuito funcione con energía para ambas MCU, luego experimente con 1 cable si es necesario. Eso, o usar MCU, sensores y/o transceptores diseñados para comunicación de 1 cable.
La placa AVR Xmega Xplained conecta TX y RX a una línea utilizando resistencias de 220 ohmios para implementar el protocolo PDI (UART síncrono con una línea de reloj separada). ¿Cómo se compara eso con un diodo?
@sybreon: cuando dice "Esta configuración será realmente útil para ayudar a detectar errores de transmisión ya que el transmisor también recibe los datos de bucle invertido", esto no puede ser completamente cierto, ¿verdad? Solo puede verificar hasta el punto en que el Tx vuelve a RX. Si el cable se corta más allá de ese punto, no se puede detectar, ¿verdad?

Es muy común que cualquier MCU moderno tenga pines UART compartidos con pines GPIO. Normalmente, la función principal es GPIO y la función secundaria es UART.

Esto significa que los diodos no son necesarios. Entonces, para implementar un bus de 1 cable usando UART, considere lo siguiente.

Digamos que tenemos una MCU con pines A0 y A1:

  • Los pines de función principal A0 y A1 son GPIO-0 y GPIO-1, respectivamente.
  • La función secundaria para los pines A0 y A1 es UART-TX y UART-RX, respectivamente.

Diseño de software

Configuración inicial (recepción):

  • Establezca el Pin A0 en la función GPIO principal (en modo de entrada de alta impedancia).
  • Establezca el Pin A1 en la función secundaria UART-RX.

Transmitir:

  • Establezca el pin A0 en la función UART-TX secundaria.
  • Enviar flujo de bytes
  • Por cada byte TX, se recibirá un byte RX. Suponga que la transmisión falló si no coinciden.
  • Vuelva a establecer el pin A0 en la función GPIO principal.

Diseño de hardware

  • Inserte una resistencia de 1K en cada pin UART-TX, para proteger contra un cortocircuito cuando 2 o más transmisores envían simultáneamente.
  • Inserte una resistencia pull-up de 100K desde el bus de datos a VCC, para estabilizar el bus cuando nadie esté transmitiendo.