Синхронизация UART [дубликат]

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

В некоторых сценариях любой всплеск, шум или прерывание могут изменить состояние с высокого на низкое, чего достаточно для того, чтобы UART обнаружил его как стартовый бит. Я знаю, что UART внутренне обрабатывает эти сценарии и избегает процесса получения полного byyr.

Может ли кто-нибудь объяснить мне, как UART обрабатывает эти всплески?

В этом связанном вопросе много информации, если вы ее еще не видели.
Вы говорите, что мусор имеет тот же логический уровень и скорость передачи данных, что и стартовый бит??
Мусор @AkshayImmanuelD означает всплеск или шум
@LetUsEmbed «Я знаю, что UART внутренне обрабатывает эти сценарии и избегает обработки». AFAIK UART не может отличить фактические данные от данных, вызванных шумом. Базовый уровень поддержки, который вы можете ожидать от аппаратной логики UART, - это проверка четности, которая также может обнаруживать только однобитовые ошибки. Остальная фильтрация хороших и плохих кадров данных выполняется в части последовательного протокола.
Вы предполагаете, что UART выполняет обнаружение фронта? Мне кажется, что UART выполняет определение уровня и передискретизацию.

Ответы (2)

Приемник UART производит выборку линии Rx 16 раз (большинство uC) перед подтверждением значения каждого бита. Например, если скорость составляет 9600 бод, время каждого бита будет составлять 104 мкс. Теперь, чтобы правильно определить значение каждого бита (т. е. высокий или низкий), приемник UART производит выборку шины каждые 104 мкс/16 секунд. Затем голосование большинства этих выборок используется для определения значения бита. Стартовый бит используется для указания приемнику, что биты данных должны быть получены. Обязательно, чтобы начальный бит был младшим. Используя такую ​​схему дискретизации, приемник гарантирует, что эффекты шума будут устранены.

Это называется передискретизацией. На некоторых микроконтроллерах передискретизация (16x, 8x и т. д.) настраивается.

UART не начнет принимать символ просто потому, что линия стала низкой. Он должен быть низким в течение определенного периода времени (от 30 до 50 процентов времени передачи одного бита, а на некоторых устройствах это можно даже выбрать). Глюк не будет достаточно продолжительным, чтобы вызвать прием персонажа.

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