Тактовая частота приемника UART


14

Я пытался понять основы UART. Понятно, что

  • Это протокол асинхронной связи, и, следовательно, часы TX и RX не зависят друг от друга
  • Прием данных гарантируется использованием начального бита и одного или нескольких стоповых битов. Кроме того, приемник должен знать скорость передачи данных, чтобы генерировать подходящие тактовые импульсы для возбуждения регистра SIPO, используемого для приема.

Вопросы здесь

Упоминается, что обычно для восстановления данных используется тактовая частота 16X . Так как же возможно преобразование бит / с в тактовую частоту ? Пожалуйста, предоставьте мне некоторые ссылки для изучения механизма синхронизации, используемого в приемнике UART.

Ответы:


18

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

T0T0T0×T0является падающим фронтом стартового бита. Хотя сэмплирование начального бита не является действительно необходимым (вы знаете, что оно низкое), полезно убедиться, что начальное ребро не было всплеском.

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

×

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

Тактовая частота дискретизации не зависит от скорости передачи, а наоборот. Для 9600 бит / с вам нужно установить частоту дискретизации на 153 600 Гц, которую вы получите через прескалер из тактовой частоты микроконтроллера. Затем битовые часы выводятся из этого другим делением на 16.

непревзойденные часы
Вот что произойдет, если часы приемника не синхронизированы с часами передатчика:

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

Часы приемника работают на 6,25% медленнее, и вы можете видеть, что выборка для каждого следующего бита будет позже и позже. Типичная передача UART состоит из 10 битов: 1 стартовый бит, полезная нагрузка из 8 бит данных и 1 стоповый бит. Тогда, если вы сделаете выборку в середине бита, вы можете позволить себе быть на пол-бита от последнего бита, стоп-бита. Половина на десять бит составляет 5%, поэтому с нашим отклонением 6,25% мы столкнемся с проблемами. Это ясно видно на картинке: уже на третьем бите данных мы выполняем выборку около края.


Я ценю помощь. Спасибо !!. Разве стартовый бит не должен быть выбран в T0 + 104us вместо T0 + 52us?
Вивек Маран

1
@ Vivek27 - нет, потому что 104 us это длительность начального бита, и тогда вы будете производить выборку в конце, а не в середине. Если вы дадите мне пару минут, я обновлю свои фотографии. :-)
stevenvh

1
@Vivek: На самом деле стартовый бит на самом деле вообще не «сэмплирован». Вся его цель состоит в том, чтобы обеспечить тот начальный переход от простоя линии, к которому синхронизируется остальная часть символа. Его «значение» всегда противоположно пустой строке и само по себе не содержит никаких данных.
Олин Латроп

7
@ Олин - я бы выбрал стартовый бит, только чтобы убедиться, что начальный фронт не был шипом.
Стивенв

1
@ downvoter - Если бы вы сказали нам, что здесь не так, я мог бы это исправить. Но тогда ты должен сказать нам кое-что . (Вы тот же самый, кто также отрицал мой другой ответ сегодня?)
stevenvh

11

Давайте сделаем шаг назад и поговорим о протоколе сигнализации низкого уровня, используемом UART. TX и RX - это линии данных, а не часы. Часы находятся только внутри каждого UART, поэтому необходимо заранее договориться о том, какова скорость передачи данных.

При отсутствии передачи линия остается в состоянии ожидания. Чтобы передать байт (например, возможны другие значения ширины данных), передатчик сначала отправляет стартовый бит . Приемник использует время переднего фронта начального бита и известную скорость передачи, чтобы затем декодировать оставшуюся часть символа. Скажем для простоты, что используется 100 кБод. Это означает, что продолжительность каждого бита составляет 10 мкс. Это включает в себя стартовый бит, биты данных и стоповый бит (ы). Следовательно, середина первого бита данных будет через 15 мкс после переднего фронта начального бита, второго - через 25 мкс и т. Д.

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

С 8 битами данных наихудшим случаем для синхронизации является выборка последнего бита. Это в 8,5 битовых раз от эталона синхронизации, который является передним фронтом начального бита. Если приемник выключен на 1/2 бита или более, он будет выбирать последний бит в течение другого бита. Понятно, что это плохо. Это происходит при несоответствии тактовой частоты 1/2 бит в 8 1/2 бит или 5,9%. Это гарантированное несоответствие. Для надежности вы обычно хотите убедиться, что приемник соответствует передатчику с точностью до половины этого значения, или 2,9%. Это представляет ошибку времени 1/4 бита в последнем бите.

Однако не все так просто. В описанном выше сценарии приемник по существу запускает секундомер на переднем фронте начального бита. Теоретически это можно сделать в аналоговой электронике, но это будет сложно и дорого, и его трудно будет интегрировать в цифровые чипы. Вместо этого большинство цифровых реализаций UART имеют внутренние часы, которые в 16 раз превышают ожидаемую скорость передачи данных. Затем «секундомер» считает эти 16x циклов. Это означает, что есть дополнительная возможная ошибка 1/16 бита, добавленная ко всем временам дискретизации битов, что похоже на еще одно несоответствие тактовой частоты на 0,7% в последнем бите.

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

Давным-давно этот протокол был расшифрован с помощью кулачков, рычагов и вращающихся колес. Два стоповых бита часто использовались для сброса механизма. В настоящее время все сделано в цифровой логике, и 1 стоповый бит используется практически повсеместно. Вы часто видите протокол низкого уровня, записанный как 8-N-1, означающий 8 бит данных, без битов четности (забудьте об этом, они редко используются сегодня) и 1 стоповый бит. Начальный бит подразумевается, поскольку там нет опции.

Используя 8-N-1, 8-битный байт данных на самом деле занимает 10 битных раз для отправки. Это одна из причин, по которой существует различие между «скоростью передачи данных» и «скоростью передачи данных». Скорость в бодах относится к отдельным временам передачи битов, включая стартовый и стоповый биты. При 100 кБод каждый передаваемый бит занимает 10 мкс, включая начальный и конечный биты. Таким образом, весь символ занимает 100 мкс, но передаются только 8 бит реальных данных. Скорость передачи данных составляет 100 кбит, но скорость передачи данных с точки зрения более высоких уровней составляет всего 80 кбит / с.


5

Скорость передачи для передачи - это тактовая частота, деленная на (как вы обычно говорите) 16. У вас также есть несколько битов, не относящихся к данным, для битов кадрирования (начало, четность, остановка). Таким образом, для тактовой частоты 16000 Гц вы получаете 1000 бит в секунду, но после минимального набора кадров вставляются только 800 бит данных или 100 байтов в секунду.

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

Пока тактовые частоты приемника близки к частоте тактовых импульсов передатчика, выборка попадет в правильные части передаваемого сигнала.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.