Как работает связь UART между двумя устройствами? - PullRequest
0 голосов
/ 17 января 2019

В одном из моих проектов у меня есть нано-компьютер (встроенный Linux), который подключен к микроконтроллеру с помощью соединения UART.

Оба выполняют некоторый процесс самостоятельно, но иногда нано-компьютеру необходимо отправлять данные по UART и наоборот.

Я полагаю, что если A хочет общаться с B, B должен слушать, верно? Как я знаю, когда слушать, а когда говорить? Нужно ли мне иметь специальный поток, работающий параллельно на обоих моих устройствах, отвечающий только за связь UART, в то время как они занимаются другими делами? Если я пропустил сообщение, есть ли заполненный буфер, который я могу прочитать, когда буду готов?

Спасибо за ваши советы. :)

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Подключено и правильно инициализировано, аппаратное обеспечение имеет tx и rx с обеих сторон от tx до rx. Таким образом, обе стороны слушают все время с аппаратной точки зрения. Скорее всего, в операционной системе есть драйвер и буфер, который постоянно накапливает эти данные. НО, если у вас нет программного обеспечения, запрашивающего поступающие данные, вы его не увидите. Вам нужно какое-то программное обеспечение для мониторинга Uart, если потребуется (обычно через драйверы и операционную систему), чтобы вы могли видеть, что отправляет другая сторона в любой момент времени. Вы делаете это на обоих концах соединения, если это то, что требуется.

0 голосов
/ 18 января 2019

Используются два подхода.

В прошлом было принято использовать аппаратное управление потоком. При этом используется дополнительный провод в каждом направлении. Отправитель ждет, пока провод не покажет, что получатель готов. Когда приемник не готов к приему данных, он сигнализирует другой стороне. Аппаратные средства буферизуют хотя бы один байт и, если буфер заполнен, сигнализируют другой стороне не отправлять по этому проводу.

Это менее распространено сегодня. UART настолько медленны по сравнению с современным оборудованием, а большие буферы настолько дешевы и просты в обеспечении, что проблема больше не возникает. Отправитель просто заполняет аппаратный буфер получателя, а получатель периодически очищает аппаратный буфер. Программное обеспечение должно будет долго игнорировать буфер, чтобы он переполнился.

Промежуточным решением является использование управления потоком в потоке данных. Как правило, два символа зарезервированы, один для остановки потока и один для его возобновления. Получатель отправляет символ управления потоком отправителю, если его буфер приближается к полному, и еще один, если его буфер приближается к пустому. Это действительно полезно, только если поток данных не должен обрабатывать двоичные данные. Это чрезвычайно редко и традиционно использовалось главным образом для соединений, на которых был человек на одном конце. Вы также можете приостановить поток, если информация поступает быстрее, чем вы можете ее прочитать.

Как правило, используемые протоколы допускают переполнение и включают некоторую форму подтверждения высокого уровня и / или повторной передачи в зависимости от ситуации. Одно устройство может подождать, пока другая сторона отправит какой-либо ответ на свою команду, и, если оно не получит, повторите команду. Протокол предназначен для того, чтобы не делать ничего страшного, если команда получена дважды, поскольку это может быть потерянный ответ.

0 голосов
/ 17 января 2019

'A' и 'B' слушают все время. Вы должны включить прерывание приема UART.
Может быть, эта ссылка объяснит основы: Основы UART

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...