Связь Tx/Rx UART между 2 MCU по 1 линии

Я пытаюсь установить связь между 2 MCU, используя TX/RX по 1 линии. Пожалуйста, обратитесь к изображению.

Вопросы:

  1. Будет ли это работать? Эхо обязательно будет.

    Если MCU 1 отправляет сигнал «123», MCU 1 и MCU 2 получат «123» одновременно.

    Если MCU 2 отправляет сигнал «678», MCU 2 и MCU 1 получат «678» одновременно.

    Верно ли это предположение?

  2. В долгосрочной перспективе это повредит MCU?

Спасибо.

введите описание изображения здесь

Ответы (2)

Хотя ваше предположение о том, как работает RX, верно, необходимо соблюдать осторожность, когда два TX управляют одной и той же линией. Вы хотите, по крайней мере, буферизовать TX обратным диодом и подтягивающим резистором, например:

введите описание изображения здесь

Делать что-то подобное не является чем-то новым, и в Интернете есть много ссылок. Эта конфигурация действительно будет полезна для обнаружения ошибок передачи, поскольку передатчик также получает данные обратной петли.

Вы могли бы хотеть искать некоторые вещи в Интернете, такие как это и это .

Спасибо @sybreon. Это полезно. Судя по статьям, MCU 2 даже не нуждается в собственном питании. Он может получать питание от MCU 1, паразитная мощность. Это верно?
@Daniel - Вторая ссылка указывает на 1-wire , схему связи / питания, которая мультиплексирует питание и данные по одному проводу (плюс обратный путь). Тем не менее, я бы посоветовал вам сначала заставить схему работать с питанием обоих микроконтроллеров, а затем при необходимости поэкспериментировать с 1-wire. Это или использование микроконтроллеров, датчиков и/или трансиверов, предназначенных для связи 1-Wire.
Плата AVR Xmega Xplained соединяет TX и RX в одну линию с помощью резисторов 220 Ом для реализации протокола PDI (синхронный UART с отдельной тактовой линией). Как это по сравнению с диодом?
@sybreon- когда вы говорите: «Эта конфигурация действительно будет полезна для обнаружения ошибок передачи, поскольку передатчик также получает данные обратной петли», это не может быть полностью правдой, верно? Вы можете проверить только до того момента, когда Tx зацикливается на RX. Если провод обрезан дальше этой точки, его нельзя обнаружить, верно??.

Для любого современного микроконтроллера очень часто контакты UART используются совместно с контактами GPIO. Обычно основной функцией является GPIO, а вторичной — UART.

Это означает, что диоды не нужны. Итак, чтобы реализовать шину 1-wire с использованием UART, учтите следующее.

Скажем, у нас есть MCU с контактами A0 и A1:

  • Основные функциональные контакты A0 и A1 — это GPIO-0 и GPIO-1 соответственно.
  • Вторичная функция контактов A0 и A1 — UART-TX и UART-RX соответственно.

Дизайн программного обеспечения

Первоначальная настройка (получение):

  • Установите вывод A0 на основную функцию GPIO (в режиме ввода с высоким импедансом).
  • Установите вывод A1 на вторичную функцию UART-RX.

Передавать:

  • Установите вывод A0 на вторичную функцию UART-TX.
  • Отправить поток байтов
  • Для каждого байта TX будет получен байт RX. Предположим, что передача не удалась, если они не совпадают.
  • Установите контакт A0 обратно в основную функцию GPIO.

Аппаратный дизайн

  • Вставьте резистор 1 кОм на каждый вывод UART-TX — для защиты от короткого замыкания, когда 2 или более передатчиков отправляют данные одновременно.
  • Вставьте подтягивающий резистор 100 кОм от шины данных к VCC, чтобы стабилизировать шину, когда никто не передает.