Как два UARTS знают, какую скорость передачи данных использовать?

14

Я читаю о стандартном протоколе для UART и думаю, что если принимающий UART не имеет никакого представления о том, с какой скоростью передачи данных передаются данные, возникнет много проблем. Если предполагаемая скорость передачи ниже, чем скорость передачи данных, то будут биты, которые не будут «видны» принимающим UART. С другой стороны, если скорость передачи в бодах, используемая приемником, выше, чем скорость в бодах, при которой передаются данные, будут биты, которые будут подсчитаны дважды и приведут к неправильному «чтению» данных.

Мои знания о UART заключаются в том, что когда линия простаивает, она сохраняется на «1», стартовый бит - «0», а стоповый бит - «1». Кроме того, стоп-бит, равный «1», не имеет никакой разницы с «1», когда линия простаивает или есть способ провести различие?

Согласны ли два передающих UART первых, какую скорость передачи данных они будут использовать? Если да, то как они это делают?

Batibot323
источник
«Стоповый бит» можно с тем же успехом назвать «возвратом в состояние ожидания», но, сделав его битовым, он имеет определенную минимальную длину, но после этого гарантированного минимального времени линия останется в состоянии «1» до следующий персонаж приходит
Питер Беннетт
Они могут случайным образом изменять общие скорости передачи, пока что-то не заработает XD.
Bradman175
3
Хейс инициировал способ, позволяющий UART в своих модемах устанавливать ту же скорость передачи данных, что и терминал, разговаривающий с ним, используя последовательность символов «AT» в начале своих команд. Обычно это не декодируется UART, а встроенным программным обеспечением, которое затем настраивает UART для получения остальной части командной строки. Он в основном определил ширину начального бита и то, как была установлена ​​четность.
добавлено
@infix Итак, если я планирую изменить или создать код Verilog для UART, я могу сделать так, чтобы он обнаруживал эту последовательность 'AT' и оттуда регулировал скорость ее передачи? Я думал о том, чтобы инициализировать его с самой высокой скоростью передачи, чтобы он захватывал все и оттуда находил последовательность «AT».
Batibot323
Протокол обмена данными на основе UART (названный LIN), который часто встречается в автомобильной промышленности, имеет механизм автоматического определения скорости передачи, но все же главный и подчиненный узлы «должны» совпадать с точки зрения длины данных и длины стоповых битов. Это означает, что обнаружение только скорости передачи данных недостаточно.
Рохат Килич

Ответы:

26

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

В течение нескольких десятилетий, хотя в некоторых установках были реализованы функции обнаружения «автоматического бода», которые обычно работают путем синхронизации ключевых характеристик сигнала для определения скорости передачи. Ранние версии требовали передачи известного символа, но более сложные версии могли бы находить скорость по более произвольным данным.

Принимающий UART обычно имеет локальные часы, которые работают с более высокой скоростью - обычно в 8 или 16 раз больше скорости передачи. Это используется для выборки входящего сигнала и обнаружения битов в слове таким образом, чтобы выдержать несколько процентов ошибок. Даже два кварцевых генератора не будут идеально соответствовать частотам, но погрешность может позволить использовать некоторые менее точные источники, иногда включая обрезанные встроенные генераторы и т. Д. Это также может помочь учесть тот факт, что деление частот популярных генераторов может привести только к неточное приближение к определенным скоростям в бодах - в старые времена мастер-часам UART иногда требовались определенные частоты для доступа к популярным скоростям в бодах, например 11,0592 МГц для семейства 8051.

Крис Страттон
источник
2
Моя гипотеза об автоматическом обнаружении бода может быть таймером и счетчиком, работающим одновременно, чтобы найти ребра и время между ребрами?
ammar.cma
1
Проблема в том, что не существует алгоритма, который мог бы принимать произвольную "последовательную" форму сигнала и надежно определять скорость передачи данных. Вы можете найти минимальное время между переходами достаточно легко, но это не обязательно представляет один битовый период.
Питер Грин,
Алгоритм существует (я слышал, что он называется «автоматическая передача» в разных местах), но когда он реализован в ограниченном по объему объеме микросхемы UART, иногда единственный способ сделать это - потреблять часть отправленных данных и используя его для калибровки, которая будет сохраняться до конца сеанса. Это часто не желательно. Если это делается в программном обеспечении и допускается небольшая задержка, то тривиально сделать это без использования данных (путем временного хранения их для анализа) по крайней мере для низкоскоростных соединений (менее 200 КБ / с). Более высокие скорости создают дополнительные трудности.
Wossname
8

Два UARTS «согласовывают» скорость передачи данных с помощью документации и оператором / пользователем, устанавливающими скорость передачи данных руками, включая протокол установления связи, размер стоп-бита и т. Д.

Ale..chenski
источник
1
..... для обоих концов интерфейса.
Майкл Карас
2

Да, все настраивается вручную, что часто является небольшой болью, особенно когда системы плохо документированы (я смотрю на вас, каждая встроенная система когда-либо).

Я знаю, что USB, SATA и большинство других современных протоколов данных запускаются после некоторого сброса или события инициализации на самой низкой скорости с некоторой стандартизированной конфигурацией по умолчанию и ведут переговоры со всеми остальными (или просто мастером, в зависимости от протокола) до более высоких скоростей. , Некоторые также используют нагрузочные или понижающие резисторы на своих линиях передачи данных / питания, чтобы указать поддерживаемые скорости.

Посетите этот сайт по USB-согласованию, если вы заинтересованы в углублении в другие протоколы.

Адам Набер
источник