Я читаю о стандартном протоколе для UART и думаю, что если принимающий UART не знает, на какой скорости передачи данных были переданы, было бы много проблем. Если предполагаемая скорость передачи данных ниже, чем скорость передачи данных, будут биты, которые не будут «увидены» принимающим UART. С другой стороны, если скорость передачи, используемая приемником, выше, чем скорость передачи данных, будут биты, которые будут учитываться дважды, что приведет к неправильному «чтению» данных.
Насколько я знаю об UART, когда линия простаивает, она поддерживается на уровне «1», стартовый бит равен «0», а стоповый бит равен «1». Кроме того, стоп-бит, равный «1», не имеет никакой разницы с «1», когда линия простаивает, или есть способ отличить?
Договариваются ли два взаимодействующих UART сначала о том, какую скорость передачи данных они будут использовать? Если да, то как они это делают?
Обычные UART должны быть предварительно настроены человеком с желаемой скоростью передачи данных (а также длиной слова, стоповыми битами, четностью и т. д.).
Однако в течение нескольких десятилетий в некоторых настройках были обнаружены реализации «автоматического определения скорости передачи», которые обычно работают, синхронизируя ключевые характеристики формы сигнала для определения скорости передачи в бодах. Ранние версии нуждались в известном символе для передачи, но более сложные версии могли определить скорость по более произвольным данным.
Принимающий UART обычно имеет локальные часы, которые работают с более высокой скоростью - обычно в 8 или 16 раз выше скорости передачи данных. Это используется для выборки входящего сигнала и обнаружения битов в слове таким образом, чтобы допускать погрешность в несколько процентов. Даже два кварцевых генератора не будут идеально соответствовать частотам, но устойчивость к ошибкам может позволить использовать некоторые менее точные источники, иногда в том числе урезанные встроенные генераторы и т. д. Это также может помочь учесть тот факт, что деление частот популярных генераторов может дать только неточное приближение к определенным скоростям передачи данных - в старые времена основным часам UART иногда требовались определенные частоты для доступа к популярным скоростям передачи данных, например 11,0592 МГц в семействе 8051.
Два UARTS «договариваются» о скорости передачи с помощью документации и путем установки оператором/пользователем скорости передачи вручную, включая протокол квитирования, размер стоп-бита и т. д.
Да, все настраивается вручную, что часто немного неудобно, особенно когда системы плохо документированы (я смотрю на вас, на каждую встраиваемую систему).
Я знаю, что USB, SATA и большинство других современных протоколов данных запускаются после некоторого сброса или инициализации на самой низкой скорости с некоторой стандартизированной конфигурацией по умолчанию и согласовывают со всеми остальными (или только с мастером, в зависимости от протокола) до более высоких скоростей. . Некоторые также используют подтягивающие или подтягивающие резисторы на своих линиях передачи данных / питания для обозначения поддерживаемых скоростей.
Посетите этот веб-сайт, посвященный согласованию USB, если вы заинтересованы в более глубоком изучении других протоколов.
Питер Беннет
Брэдман175
фиксированный
Батибот323
Рохат Кылыч
фиксированный