Один или два стоповых бита UART?

UART часто позволяют выбирать между 1, 1,5 и 2 стоповыми битами. С 1 стоповым битом эффективность полезной нагрузки составляет 80% (8/10), с 2 стоповыми битами она падает до 72,7% (8/11). Так в чем преимущество второго стопового бита?

Ответы (7)

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

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

Я считаю, что это может быть одной из причин, по которой стандарт DMX512 определяет 2 стоповых бита.

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

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

В давно минувшие дни принтеры были (почти) полностью механическими конструкциями. Даже тогда скорость передачи была несколько стандартизирована, поэтому добавление дополнительного стопового бита давало принтеру дополнительное время для печати символа. Аспекты времени тогда были более заметными. Для моего первого принтера, шумного http://en.wikipedia.org/wiki/Teletype_Model_33 , мне приходилось вставлять двухсимвольную паузу после отправки возврата каретки.

Правильно настроенной модели 33 требовался только один символ после возврата каретки. Вот когда вы должны отправить Linefeed! Я забыл, что им нужны 2 стоповых бита, но вы правы, и поэтому то, что я сказал ниже, относится к ответу Рассела (но эти 1,5 стоповых бита были для оборудования Бодо). Однако дополнительные стоповые биты (10 мс) не помогли с задержками возврата каретки.

Два стоповых бита вряд ли будут намного полезнее, чем один, в системе, которая имеет значительную долю времени остановки и работает в среде с низким уровнем шума (низкий 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% времени, это имеет минимальное значение. Если ваша схема зашумлена и склонна к случайным потерям синхронизации, дополнительный стоповый бит может очень помочь. НО, если вам так важна пропускная способность, вы часто можете увеличить скорость передачи (не всегда) или перейти на полностью синхронную работу.

Я не знаю ни одного UART, который можно настроить так, чтобы он игнорировал любые очевидные стартовые биты, которым не предшествует более чем полное битовое время маркировки (действительно, большинство из них примет стартовый бит, которому предшествует половина битового времени маркировки). маркировка и не может быть настроена иначе). Хотя такая функция может быть полезна.
Скорее всего, вы наткнулись на правильный ответ, если мы можем признать, что эта практика восходит к механическим дням. В то время механизму приемника требовалось около 1 бита времени, чтобы остановиться, чтобы быть готовым к следующему стартовому биту. Таким образом, передатчик был сконструирован так, чтобы иметь 1,5-битный стоп-бит времени. Описанный вами эффект был. Если синхронизация была потеряна, может быть несколько ненужных символов, пока вы не восстановите синхронизацию. Когда мы добрались до электронных реализаций, приемник мог начать ждать следующего стартового бита сразу же после перехода к стоповому уровню — ему не нужно было заполнение.
@gbarry - мне кажется, ты не наткнулся на свой комментарий.
На самом деле у меня закончились символы :) Что-то не так?
@gbarry Я снова «наткнулся» на это спустя 6 с лишним лет. вставая, может быть, там, где я остановился (память меркнет, так что кто с уверенностью знает, что я тогда имел в виду? :-)). Я был старым тогда и старше сейчас. (70 лет назад). Моим первым принтером был телетайп Creed 7B с 6-битной системой Бодо и 1,5 стоповыми битами (память говорит). Мой первый ASYNC-код был написан на машинном языке на NatSemi SC/MP (может быть, 1976 года?), поскольку у него не было внутреннего UART (или любых других периферийных устройств), и хотя вы могли купить дискретные UART, они стоили денег, а код был «бесплатным». Таким образом, 1 1,5 2 нюанса были тогда «частью жизни».
@RussellMcMahon Моим первым (и вторым) были настоящие продукты Teletype, и они использовались на радио, со статическими помехами и замираниями, где вы определенно обменяли бы скорость на возможность синхронизации. Никаких компьютеров. Когда появились компьютеры, я искал способы объединить их. Собрал UART. Заплатили хорошие деньги за один, когда они появились в виде чипов. Думаю, мы могли бы обменяться множеством хороших историй. Может быть, разговор по электронной почте в порядке.
@gbarry мой адрес электронной почты есть в моем профиле

Чтобы усилить мнение mikeselectricstuff о времени приема с помощью «программных UART», приложение приема, которое всегда будет знать, когда принимать данные, и делает это на основе опроса, часто может обрабатывать более высокие скорости передачи, чем это было бы практично с программным UART, управляемым прерываниями. Однако такие приложения могут обрабатывать входящие данные только в течение времени между началом стопового бита одного байта и стартовым битом следующего байта; время, необходимое для обработки каждого байта, становится ограничивающим фактором для скорости связи. Обработка данных на 115 200-N-8-2 не намного сложнее, чем на 57 600-N-8-1, но более чем на 80 % быстрее.

Иногда можно пойти еще дальше, используя, казалось бы, менее эффективные форматы данных. Например, можно отправить каждый байт двумя частями, одну с семью битами, а другую с одним (все старшие биты однобитной части установлены). Если кто-то сделает это, даже с одним стоповым битом, между концом одной пары байтов и началом следующей будет восемь битов времени маркировки, что позволит увеличить скорость передачи в четыре раза. можно было бы обойтись только двумя стоповыми битами (и в восемь раз больше, чем можно было бы сделать с одним). Несмотря на необходимость отправлять в два раза больше байтов, четырехкратное увеличение скорости передачи данных было бы большой победой. Кроме того, хотя каждая передаваемая пара байтов может использоваться для отправки восьми битов данных, кодирование будет использовать только 130 из 256 возможных значений байтов.

Вы также можете использовать UART с высокой скоростью передачи (250 КБ и выше), генерируя прерывание на фронте стартового бита и оставаясь внутри кода прерывания для всего байта — здесь может быть очень полезен дополнительный стоп-бит.
@mikeselectricstuff: Дополнительный стоповый бит может быть очень полезен, как и использование только некоторых битов в каждом байте (требование установки LSB каждого байта может быть полезным, потому что можно получить синхронизацию по переднему фронту этого бита, даже если при прерывании может возникнуть небольшая пауза). Тем не менее, основным ограничением подхода с запуском битового прерывания при стартовом бите является то, что нет никакого хорошего способа отправить данные, в то время как входящие данные могут поступать. Либо переданные данные, либо полученные данные (или оба) будут потеряны.

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

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

Для других целей, таких как возможность возврата печатной каретки к началу новой строки, были отправлены CR, LF плюс два перетирания (все отверстия на 8-уровневой ленте).

Это было принято только для цепей, работающих на скоростях 110 бод и ниже.

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

Как вы знаете, UART — это асинхронный метод передачи данных, это означает, что часы приемника и передатчика не синхронны. Таким образом, по мере увеличения количества полученных битов время выборки приемника смещается от середины длительности бита, поэтому стоповый бит может быть установлен равным 2 битам, чтобы мы были уверены, что приемник может правильно произвести выборку стопового бита. Как упоминалось выше, могут быть и другие причины, такие как замедление скорости передачи, чтобы приемник мог принимать правильно. Но я думаю, что есть еще одна важная причина, о которой я упоминал.