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

15

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

Федерико Руссо
источник

Ответы:

19

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

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

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

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

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

mikeselectricstuff
источник
6

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

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

Два стоповых бита вряд ли будут более полезными, чем один в системе, в которой значительная доля времени останова и которая работает в среде с низким уровнем шума (низкий 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 - я думаю, что в вашем комментарии это не запуталось.
Рассел МакМахон
На самом деле у меня кончились персонажи :) Что-то не так?
gbarry
3

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

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

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

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

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

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

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

Жак Орсали
источник
1

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

ArunMKumar
источник