UART часто позволяют выбирать между 1, 1,5 и 2 стоповыми битами. С 1 стоповым битом эффективность полезной нагрузки составляет 80% (8/10), с 2 стоповыми битами она падает до 72,7% (8/11). Так в чем преимущество второго стопового бита?
Дополнительные стоповые биты могут быть полезным способом немного увеличить время обработки приема, особенно при высоких скоростях передачи данных и/или при использовании программируемого UART, где требуется время для обработки полученного байта.
Там, где скорость ограничена, и ваш UART предлагает только коэффициенты деления в степени 2, добавление дополнительного стопового бита может быть вариантом, чтобы дать менее резкое снижение скорости, чем следующая самая низкая скорость передачи данных.
Я считаю, что это может быть одной из причин, по которой стандарт DMX512 определяет 2 стоповых бита.
Другая ситуация, в которой они могут быть полезны, — это если у вас есть устройства, пересылающие поток данных без какой-либо буферизации или пакетирования. Небольшие различия в тактовых частотах между узлами и конечная степень детализации выборки могут привести к возникновению ошибок при получении и повторной передаче данных несколькими узлами в одном потоке. цепочка, но если данные отправляются с 2 стоповыми битами, а получатели настроены на один стоповый бит, это добавляет достаточный запас для устранения этих ошибок и оставляет по крайней мере один действительный период стоповых битов для узлов, расположенных дальше по цепочке, для надежного приема.
Я также столкнулся с ситуацией, когда очень длинный кабель вызывал некоторую асимметрию во времени нарастания и спада, что приводило к неадекватной длине стопового бита - отправка 2 стоповых битов и наличие у приемника только одного исправленного.
В давно минувшие дни принтеры были (почти) полностью механическими конструкциями. Даже тогда скорость передачи была несколько стандартизирована, поэтому добавление дополнительного стопового бита давало принтеру дополнительное время для печати символа. Аспекты времени тогда были более заметными. Для моего первого принтера, шумного http://en.wikipedia.org/wiki/Teletype_Model_33 , мне приходилось вставлять двухсимвольную паузу после отправки возврата каретки.
Два стоповых бита вряд ли будут намного полезнее, чем один, в системе, которая имеет значительную долю времени остановки и работает в среде с низким уровнем шума (низкий BER), например, внутри оборудования или в периферийном интерфейсе с несколькими метрами. кабеля и/или без каскада модем-модем.
2 стоповых бита дают вам большее время синхронизации, больше времени для обработки между символами и, возможно, в зависимости от оборудования и алгоритмов, больше шансов получить или восстановить синхронизацию во время непрерывного потока данных. Межсимвольное время в современных системах имеет гораздо меньшее значение, чем когда тактовые частоты были низкими, а пропускная способность процессора — меньшей.
Если у вас есть по существу непрерывный поток данных, то при отсутствии синхронизации любой старший бит будет выглядеть как стоповый бит. Любой высокий низкий переход будет выглядеть как граница байта. Если ваш приемник запускается на границе 10 и это не истинная начальная граница, то это будет обнаружено только в 50% случаев) (т. е. если будет обнаружено, что конечный «стоповый бит» на самом деле является пропустили подлинную границу стоп/старт. В среднем у вас есть 1/4 вероятности того, что граница байта равна 1/0 и ложно выглядит как пара стоп/старт. Вышеизложенное предполагает, что если вы выберете ложную остановку- начните с пары, то вероятность того, что вы выберете другую при следующей попытке, составляет около 50%.
Если вы используете 2 стоповых бита (11), то действительная последовательность начала остановки равна 110, что имеет 1/8-ю вероятность появления в случайном трафике данных. Смешивание подлинных стоповых и стартовых битов в несинхронизированном потоке немного меняет статистику, но кажется относительно маловероятным, что если вы получите ложную последовательность стоп/старт 110 в одном цикле, вы нажмете еще одну в следующей попытке, прежде чем наткнетесь на подлинные 110. последовательность, которая происходит дальше.
Как вы заметили, 1 стоповый бит дает 8/10 = 80% максимальной пропускной способности, а 2 стоповых бита дают 8/11 = 72% эффективности. Разница в пропускной способности на пределе 80%/72% =~ на 11% больше. Это полезное усиление в экстремальных условиях, но оно невелико, и если схема простаивает более 10% времени, это имеет минимальное значение. Если ваша схема зашумлена и склонна к случайным потерям синхронизации, дополнительный стоповый бит может очень помочь. НО, если вам так важна пропускная способность, вы часто можете увеличить скорость передачи (не всегда) или перейти на полностью синхронную работу.
Чтобы усилить мнение mikeselectricstuff о времени приема с помощью «программных UART», приложение приема, которое всегда будет знать, когда принимать данные, и делает это на основе опроса, часто может обрабатывать более высокие скорости передачи, чем это было бы практично с программным UART, управляемым прерываниями. Однако такие приложения могут обрабатывать входящие данные только в течение времени между началом стопового бита одного байта и стартовым битом следующего байта; время, необходимое для обработки каждого байта, становится ограничивающим фактором для скорости связи. Обработка данных на 115 200-N-8-2 не намного сложнее, чем на 57 600-N-8-1, но более чем на 80 % быстрее.
Иногда можно пойти еще дальше, используя, казалось бы, менее эффективные форматы данных. Например, можно отправить каждый байт двумя частями, одну с семью битами, а другую с одним (все старшие биты однобитной части установлены). Если кто-то сделает это, даже с одним стоповым битом, между концом одной пары байтов и началом следующей будет восемь битов времени маркировки, что позволит увеличить скорость передачи в четыре раза. можно было бы обойтись только двумя стоповыми битами (и в восемь раз больше, чем можно было бы сделать с одним). Несмотря на необходимость отправлять в два раза больше байтов, четырехкратное увеличение скорости передачи данных было бы большой победой. Кроме того, хотя каждая передаваемая пара байтов может использоваться для отправки восьми битов данных, кодирование будет использовать только 130 из 256 возможных значений байтов.
Когда-то существовали электромеханические монстры, называемые телетайпами. Большинство из них работали на двигателях переменного тока, синхронизированных с частотой сети. Таким образом, всегда был шанс, что две взаимодействующие машины могут быть не синхронизированы с одной и той же энергосистемой или даже работать на переменном токе, используя разные частоты, если уж на то пошло.
Таким образом, чтобы позволить более медленной машине догнать и не потерять синхронизацию, были отправлены два стоповых бита.
Для других целей, таких как возможность возврата печатной каретки к началу новой строки, были отправлены CR, LF плюс два перетирания (все отверстия на 8-уровневой ленте).
Это было принято только для цепей, работающих на скоростях 110 бод и ниже.
Медлительность приемных механических устройств была причиной добавления дополнительных стоповых битов, однако современные устройства достаточно быстры и работают с еще более высокими скоростями передачи данных без необходимости дополнительного стопового бита.
Как вы знаете, UART — это асинхронный метод передачи данных, это означает, что часы приемника и передатчика не синхронны. Таким образом, по мере увеличения количества полученных битов время выборки приемника смещается от середины длительности бита, поэтому стоповый бит может быть установлен равным 2 битам, чтобы мы были уверены, что приемник может правильно произвести выборку стопового бита. Как упоминалось выше, могут быть и другие причины, такие как замедление скорости передачи, чтобы приемник мог принимать правильно. Но я думаю, что есть еще одна важная причина, о которой я упоминал.
гбарри