Я пытался понять основы UART. Понятно, что
Вопросы здесь
Упоминается, что обычно для восстановления данных используются часы с 16- кратной скоростью передачи данных. Так как же возможно преобразование бит/ с в тактовую частоту ? Пожалуйста, предоставьте мне несколько ссылок для изучения механизма синхронизации, используемого в приемнике UART.
Такты передатчика и приемника не зависят друг от друга, так как они генерируются независимо друг от друга, но они должны быть хорошо согласованы для обеспечения правильной передачи.
Стартовый бит, который является низким, и стоповый бит, который является высоким, гарантируют, что между двумя байтами всегда есть переход от высокого к низкому, который приемник может синхронизировать, но после этого он сам по себе: больше нет времени. подсказки, которые он может использовать, чтобы различать последовательные биты. Все, что у него есть, это собственные часы. Таким образом, самое простое, что можно сделать, это начать с выборки начального бита каждого бита в середине своего времени. Например, при 9600 бит/с битовое время составляет 104 мкс, тогда он будет выбирать начальный бит в + 52 мкс, первый бит данных + 52 мкс + 104 мкс, второй бит данных в + 52 мкс + 2 104 мкс и так далее. является задним фронтом начального бита. Хотя выборка начального бита на самом деле не требуется (вы знаете , что он низкий), полезно убедиться, что начальный фронт не был всплеском.
Для тайминга 52 мкс вам потребуется удвоенная тактовая частота 9600 бит/с или 19200 Гц. Но это только основной метод обнаружения. Более продвинутые (читай: более точные) методы будут брать несколько образцов подряд, чтобы не попасть только в один пик. Тогда вам действительно может понадобиться 16 Тактовая частота 9600 Гц, чтобы получить 16 тиков на бит, из которых вы можете использовать, скажем, 5 или около того в середине бита. И используйте систему голосования, чтобы увидеть, следует ли считать ее высокой или низкой.
Если я правильно помню, 68HC11 взял несколько сэмплов в начале, в середине и в конце бита, первый и последний, предположительно, для повторной синхронизации в случае изменения уровня (что не гарантируется).
Тактовая частота дискретизации зависит не от скорости передачи данных, а наоборот. Для 9600 бит/с вам нужно будет установить тактовую частоту дискретизации на 153 600 Гц, которую вы получите с помощью предварительного делителя из тактовой частоты микроконтроллера. Затем битовые часы получаются из этого еще одним делением на 16.
несогласованные часы
Вот что произойдет, если часы приемника не синхронизированы с часами передатчика:
Часы приемника отстают на 6,25 %, и вы можете видеть, что выборка каждого следующего бита будет происходить все позже и позже. Типичная передача UART состоит из 10 битов: 1 стартовый бит, полезная нагрузка из 8 битов данных и 1 стоповый бит. Затем, если вы сэмплируете в середине бита, вы можете позволить себе быть на полбита в последнем бите, стоповом бите. Полбита на десять битов составляет 5 %, поэтому с нашим отклонением в 6,25 % мы столкнемся с проблемами. Это хорошо видно на картинке: уже на третьем бите данных мы делаем выборку около края.
Давайте немного вернемся назад и поговорим о протоколе передачи сигналов низкого уровня, используемом 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-кратной скоростью передачи данных. Затем «секундомер» считает эти 16-кратные циклы. Это означает, что существует дополнительная возможная ошибка в 1/16 бита, добавленная ко всем временам выборки битов, что похоже на еще одно несоответствие часов 0,7% в последнем бите.
Надеюсь, это проясняет, что такое стоп-бит, как работает битовая синхронизация и что такое 16-кратные часы. Я в основном пропустил стоповые биты, но, может быть, теперь вы сами видите, почему требуется хотя бы один стоповый бит. По сути, стоповые биты - это минимальное принудительное время простоя строки между символами. Это время, в течение которого приемник завершил прием символа и готов к следующему переднему фронту стартового бита. Если бы стопового бита не было, то последний бит данных мог бы иметь ту же полярность, что и стартовый бит, и у приемника не было бы фронта для запуска секундомера.
Давным-давно этот протокол был расшифрован кулачками, рычагами и прялками. Два стоповых бита часто использовались для сброса механизма. В настоящее время все делается в цифровой логике, и 1 стоповый бит используется практически повсеместно. Вы часто видите, что протокол низкого уровня записывается как 8-N-1, что означает 8 бит данных, без битов четности (забудьте об этом, они редко используются сегодня) и 1 стоповый бит. Стартовый бит подразумевается, так как там нет опции.
При использовании 8-N-1 8-битный байт данных фактически занимает 10 бит для отправки. Это одна из причин, по которой существует различие между «скоростью передачи данных» и «скоростью передачи данных». Скорость передачи относится к времени передачи отдельных битов, включая стартовый и стоповый биты. При скорости 100 кбод каждый передаваемый бит занимает 10 мкс, включая стартовый и стоповый биты. Таким образом, весь символ занимает 100 мкс, но передаются только 8 бит реальных данных. Скорость передачи составляет 100 кбит/с, но скорость передачи данных с точки зрения более высоких уровней составляет всего 80 кбит/с.
Битрейт для передачи - это тактовая частота, разделенная (как вы говорите, обычно) на 16. У вас также есть некоторые биты, не относящиеся к данным, для битов кадрирования (начало, четность, стоп). Таким образом, для тактовой частоты 16000 Гц вы получаете 1000 бит в секунду, но после минимального кадрирования битов вставляется только 800 бит данных или 100 байт в секунду.
Для приема приемник отсчитывает от середины начального бита 16 тактов и производит выборку строки, которая вызывает то, что он видит, как «первый бит данных». он повторяет этот подсчет и выборку достаточное количество раз, чтобы прочитать весь символ, затем подтверждает наличие стопового бита и начинает ждать следующего стартового бита.
Пока тактовая частота приемника близка к частоте тактовой частоты передатчика, выборка будет соответствовать правильным частям передаваемого сигнала.
Вивек Маран
Стивенвх
Олин Латроп
Стивенвх
АльфаГоку
АльфаГоку
Каран Шах