Давайте сделаем шаг назад и поговорим о протоколе сигнализации низкого уровня, используемом 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 кбит / с.