Начальный бит против стартового байта - PullRequest
8 голосов
/ 09 ноября 2008

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

Но начальный бит - это просто 1 или 0. Как вы отличаете начальный бит от конечного бита от последнего пакета?

Ex. Если я выберу свой начальный бит равным 0, а мой конечный бит равным 1. и я получаю 0 (поток данных A) 1 0 (поток данных B) 1, что может помешать мне предположить, что существует поток данных C, который содержит такое же содержимое «(поток данных A) 1 0 (поток данных B)»?

Разве не удобнее иметь стартовый БАЙТ, а затем проверять поток данных на эту комбинацию битов? Это уменьшит вероятность путаницы между битом начала / конца.

Ответы [ 5 ]

9 голосов
/ 09 ноября 2008

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

Пример: давайте передадим символы ABC, которые являются ASCII 65, 66 и 67:

A = 65 = 0x41 = 0100 0001
B = 66 = 0x42 = 0100 0010
C = 67 = 0x43 = 0100 0011

Давайте также предположим (произвольно), что начальный бит равен 0, а стоповый бит равен 1, и данные передаются из MSB в LSB. Передатчик будет в состоянии остановки (1), когда данные не передаются. Таким образом, получатель может увидеть это:

Data:   ....1111 0010000011 111 0010000101 0010000111 11111....
         (quiet) ^   A    $     ^    B   $ ^    C   $ (quiet)

С извинениями за графику ASCII данные состоят из серии стоп-битов (1), когда канал не используется. Когда передатчик готов к отправке символа, он отправляет стартовый (0) бит (отмечен ^), после которого следует код символа и заканчивается битом остановки (1) (отмечен * 1019). *). Он продолжает отправлять стоповые биты до тех пор, пока не будет передан следующий символ, начиная с другого начального бита.

Причина, по которой мы используем стартовые биты вместо байтов , заключается в эффективности. Приведенная выше схема требует 10 битов (1 начало + 8 данные + 1 стоп ) для передачи 8 бит данных, что приводит к издержкам из (10 - 8) / 8 = 1/4 = 25%. Если бы мы использовали start и stop bytes , нам нужно было бы передавать 3 байта для каждого байта данных, что было бы служебной информацией (3 - 1) / 1 = 2 = 200%. Если бы стартовые, данные и стоп-байты были каждые 8 ​​битов, нам пришлось бы передавать 24 бита вместо 10 для каждого символа, поэтому для отправки данных потребовалось бы почти 2,5 раза!

1 голос
/ 10 ноября 2008

Всегда можно определить начальный байт как указание на то, что сообщение начинается (и коды ASCII SOH, STX и ETX предназначались для таких целей). Однако стандартное оборудование и протоколы для подключения к оборудованию для передачи данных (RS232C и более поздние версии) работают на более низком уровне, и, как правило, невозможно и нежелательно изменять это расположение (особенно с помощью программного обеспечения).

Высокопроизводительные схемы синхронной передачи данных, такие как используемые в локальных сетях и глобальных системах передачи, действительно используют сложные маркеры кадров. Маркер кадра представляет собой четкую комбинацию битов, которая никогда не встречается в потоке для данных сообщения. Как правило, существует специальное правило перезаписи, которое по существу «избегает» любого вхождения в данных подобного битового шаблона, так что передающее оборудование не будет видеть его как маркер кадра. Эти экранированные шаблоны восстанавливаются получателем, поэтому отправителю и получателю никогда не придется обращать на это внимание. Эти договоренности делают специализированное аппаратное обеспечение еще более важным, например, в типовой плате сетевого интерфейса (ныне чип материнской платы) для персональных компьютеров.

ФОН НА АСИНХРОННОЙ СЕРИЙНОЙ СВЯЗИ

Полезно рассматривать асинхронные последовательные передачи как асинхронные между символьными / информационными кадрами и синхронные в пределах диапазона символьных кадров (включая начальные биты и начальную остановку / заполнение).

При такой схеме между кадрами имеется постоянный сигнал заполнения, и он обычно имеет ширину не менее одного бита данных, хотя для некоторых схем требуется остановка / заполнение 1,5 или 2 бита. Стоповый бит использует тот же уровень сигнала и может считаться минимальным периодом заполнения до того, как поступит другой стартовый бит.

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

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

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

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

Несмотря на то, что высокоскоростные модемы теперь передают сложные аналоговые сигналы, которые не описаны в терминах двух простых уровней сигналов, цифровая связь RS232C (и более поздний режим) между компьютером UART и связью данных на модеме довольно хороша. так же, как описано.

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

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

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

0 голосов
/ 09 ноября 2008

Начальные и конечные биты поступают со дней телетайпов . По сути, это были импульсы, которые занимали время, чтобы позволить механическому оборудованию установить. Строки текстового файла DOS заканчиваются CR LF, что буквально заставило каретку вернуться в столбец 1, а стол переместился на одну строку. Я думаю, что это в порядке, потому что требуется больше времени для возникновения CR, и LF может эффективно происходить параллельно.

Обнаружить это немного сложнее. Вы как бы должны наблюдать за потоком битов. Со временем вы должны быть в состоянии обнаружить его, поскольку данные обычно представляют собой ASCII с битами запуска / остановки вокруг них. Обычно это не проблема, потому что он обрабатывается UART , который запускает порт COM .

0 голосов
/ 09 ноября 2008

Это все зависит от протокола. Вы можете сказать, что после начального символа вы будете ожидать N символов или будете читать, пока не встретите символ остановки.

Где символ colud - любая n-битная последовательность (включая биты и байты).

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

Допустим, вы отправили 00000000 поток A 11111111 00000000 поток B 11111111. В этом случае вы все равно можете путать его с потоком C = поток A 11111111 00000000 поток B.

Обычно используется стартовый бит, потому что изменение уровня напряжения может вызвать событие (см. Запуск по фронту в триггерах .) С другой стороны, символ запуска с несколькими битами будет использоваться для синхронизации часов две системы в дополнение к запуску события. Примером этого может быть сигнал PAL.

0 голосов
/ 09 ноября 2008

Вот как обычно работают стартовые и стоповые биты:

  1. Отправляется стартовый бит, скажем, 1. Это указывает получателю, что будет передано определенное количество бит данных, скажем, 8.
  2. отправлено 8 бит данных.
  3. Отправляется стоповый бит, скажем, 0. Это указывает на то, что 8 бит данных были отправлены.

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

...