2014-02-11 2 views
2

Я начинаю писать код для устройства, которое будет транслировать данные в полнодуплексном режиме, поэтому я буду использовать аппаратное квитирование и установку условия перерыва, когда что-то пойдет не так. Но когда дело доходит до обнаружения ошибок, менее понятно, что лучше всего сделать.RS232: Чтобы паритет или нет?

RS232 имеет встроенную проверку паритета, которую я мог бы использовать. Насколько я понимаю, если я использую 8 бит данных, один бит четности и один стоповый бит, тогда пакет на проводе будет 10 бит. Это означает, что для каждых 1024 байтов, которые я отправляю, я также отправляю 128 байтов информации проверки, чередующихся с ней.

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

Если я использую контрольную сумму в конце каждого 1024 байта, который по-прежнему составляет всего 80 мс при 115200 бод, мои служебные данные проверки снижаются с 12% до менее 1%, даже если я использую 64-битную контрольную сумму. И тяжелее пропустить коррупцию.

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

+0

Также следует рассмотреть вопрос о том, является ли короткий шум, который может появиться в среде, где это используется? Если это так, RS-232 определенно не подходит, его следует рассматривать как внутреннюю шину офисной среды. Лучше альтернативой является RS-485 (совместимый с кодом) или еще лучше, CAN (несовместимый). – Lundin

+0

@ Lundin [RS-485] (http://en.wikipedia.org/wiki/Rs4850) не будет соответствовать необходимости «ввода и вывода данных в полнодуплексном режиме» и это не полный дуплексный протокол связи. [RS-422] (http://en.wikipedia.org/wiki/Rs422) обеспечит лучшую помехоустойчивость в отношении электрического шума, но все же сохранит полную дуплексную способность. – chux

+1

@ Lundin - * «RS-232 ... следует рассматривать как ... шину» * - не «автобус», а связь.Шина подразумевает контроль, адресацию и даже мощность, а также данные. – sawdust

ответ

1
  1. Предложите вычислить и добавить CRC вместо контрольной суммы. 16-бит может удовлетворить ваши потребности - я бы использовал 32-битный. 16-разрядный со случайным шумом провалится 1 в 64k. 32-бит 1 в 4G.

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

  3. Расчет накладных расходов немного выключен. 1 старт + 8 данных + 1 стоповый бит = 10 против 10 + паритет = 11.

  4. Соотношение не стоит ИМО. Не обнаруживает намного больше того, что обеспечивает ошибка кадрирования (неправильный стоповый бит). Не обеспечивает целостность сообщений.

+0

CRC и контрольная сумма - две разные вещи (обе из них небрежно используются). CRC - это _algorithm_ (циклическая проверка избыточности), используемая для вычисления _checksum_. Более формально контрольная сумма, полученная из алгоритма CRC и добавленная в пакет, известна как [FCS] (http://en.wikipedia.org/wiki/Frame_check_sequence) (последовательность проверки кадров). – Lundin

+1

@ Lundin В моем опыте контрольная сумма (значение) является суммированием (алгоритмом) предыдущих данных - отсюда и название «контрольная сумма». Контрольный код (значение) является общим наименованием, описывающим код, добавляемый к сообщению, циклическая проверка избыточности которого (CRC) является лишь одним из многих алгоритмов, используемых для вычисления такого. Фраза «CRC», безусловно, относится к алгоритму. Но это также относится к самому чеку. Многие стандарты связи называют код проверки «CRC» (например, ISO 15693.), но тогда, возможно, ISO не так формален, как должно быть, и должен назвать это FCS? – chux

4

Паритет - очень грубый, старомодный способ обнаружения ошибок. И это добавляет много накладных расходов на вашу передачу: на самом деле это добавляет гораздо больше латентности, чем контрольная сумма. Для 1024 байт, отправленных со скоростью 115200 бод, четность вызовет дополнительную задержку в 8,88 мс. Поэтому лучше всего забыть, что вы когда-либо слышали о паритете и считаете его устаревшей.

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

Рассмотрите возможность разделения большого фрагмента данных на более мелкие пакеты, каждая из которых имеет меньшую контрольную сумму, такую ​​как CRC-8 или CRC-16.

+0

Уже принял другой ответ к тому времени, когда это появилось, и оба очень похожи, но спасибо за это. –

+0

@CraigGraham Сайт позволяет вам передумать :) Хотя вы можете продвигать все ответы, которые вам полезны. – Lundin

Смежные вопросы