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

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

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

Здесь задаются вопросы

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

12 голосов | спросил Vivek Maran 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 27 Sep 2012 15:54:37 +0400 2012, 15:54:37

3 ответа


15

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

Начальный бит, который является низким, и стоп-бит, который является высоким, гарантируют, что между двумя байтами всегда есть переход с высоким и низким, который может синхронизировать получатель, но после этого он сам по себе: есть никакие дальнейшие подсказки времени, которые он может использовать, чтобы разделить друг на друга. Все, что у него есть, это собственные часы. Таким образом, самая простая задача - начать с начала бит-бит каждый бит в середине своего времени. Например, при 9600 бит /с бит времени составляет 104 мкс, тогда он будет отсчитывать начальный бит в \ $ T_0 \ $ + 52 мкс, первый бит данных в \ $ T_0 \ $ + 52 мкс + 104 мкс, а второй - бит при \ $ T_0 \ $ + 52 мкс + 2 \ $ \ times \ $ 104 мкс и т. д. \ $ T_0 \ $ является падающим фронтом стартового бита. Хотя выборка стартового бита на самом деле не нужна (вы знаете она низкая), полезно выяснить, что начальный край не был шипом.

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

<p> Для синхронизации в 52 мкс вам потребуется вдвое больше частоты 9600 бит /с, или 19200 Гц. Но это всего лишь базовый метод обнаружения. Более продвинутые (читай: более точные) методы будут принимать несколько выборок подряд, чтобы избежать удара только одного пика. Тогда вам действительно понадобится 16 \ $ \ times \ $ 9600 Гц, чтобы получить 16 тиков на бит, из которых вы можете использовать, скажем, 5 или около того, что должно быть в середине бит. И используйте систему голосования, чтобы увидеть, следует ли ее читать как высоко или низко. </p>

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

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

<p> <strong> непревзойденные часы </strong> <br>
Это произойдет, если часы приемника не синхронны с передатчиком: </p>

<p> <img src =

ответил stevenvh 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 27 Sep 2012 16:09:16 +0400 2012, 16:09:16
10

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

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

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

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

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

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

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

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

ответил Olin Lathrop 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 27 Sep 2012 16:31:20 +0400 2012, 16:31:20
4

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

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

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

ответил Jasen 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 27 Sep 2012 16:22:41 +0400 2012, 16:22:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132