Зачем беспокоиться даже с паритетом?


12

Я использую периферийное устройство SPI в своем приложении. Периферийное устройство возвращает пакеты, содержащие 15 бит данных, плюс бит четности для обнаружения ошибок.

Паритет по периферии SPI

Поэтому все нули и все они проходят проверку на четность.

Это означает, что мой микроконтроллер не может обнаружить наиболее распространенный тип ошибки: отключаемое периферийное устройство! В этом случае все принятые биты равны нулю, что проходит проверку на четность.

Предполагая, что для производителя периферийного устройства было бы так же легко реализовать нечетную четность, мой вопрос: почему они решили использовать четную четность в этом случае ? Есть ли еще какое-то преимущество Even Parity в этом случае, чтобы компенсировать тот факт, что он не может поймать наиболее распространенный тип ошибки?


6
Обратите внимание, что четность или нечетность - это технология динозавров, ее не следует использовать в современных профессиональных системах. Вероятность перехвата однобитовых ошибок составляет менее 50%, и что еще хуже для многобитовых ошибок. Просто забудьте об использовании паритета, даже если это было в 1960-е годы. Если вам нужно проверить строку данных SPI, вы должны контролировать данные на нижнем уровне, используя таймер захвата ввода или аналогичный. Также проверьте флаги SPI для переполнения буфера и т. Д.
Lundin

39
@Lundin "С вероятностью менее 50% отлова однобитовых ошибок, и еще хуже для многобитовых ошибок." - Если один бит неверен, четность будет неправильной. Простой контроль четности имеет 100% -ную вероятность перехвата однобитовых ошибок, не менее 50%. (аналогично, у него есть 0% -ый шанс перехвата 2-битных ошибок и 100% снова при перехвате 3-битных ошибок).
Марсель

7
@Lundin - Пожалуйста, направляйте свои комментарии создателям AMS, которые делают эти чипы.
Ракетный магнит

26
@Lundin Если бит четности меняется, проверка четности все равно не выполняется.
Адам Хаун

4
Это все еще в большинстве случаев бесполезно в большинстве ситуаций. As ᶰᵉᵉᵈᵉᵈ⁾
dasdingonesin

Ответы:


14

Один бит четности может только проверять наличие ошибок в единичном или нечетном количестве битов, поэтому ожидается, что он обнаружит, когда периферийное устройство отключено, вероятно, ожидает слишком много.

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

Если бы использовалась нечетная четность, 8 старших бит (десятичное 255) приводили бы к биту высокой четности, поэтому нечетная четность была бы бесполезна в качестве средства обнаружения потери периферийного чипа.

Лошади на курсы.


2
Глупый я, я должен был упомянуть, что это конкретное приложение имеет 15 бит данных и один бит четности. Исправлено сейчас. Но я все еще думаю, что разумно ожидать, что проверка четности обнаружит полностью отключенное периферийное устройство. Это вполне возможно, и на самом деле это самая полезная проверка, которую вы можете сделать.
Ракетный магнит

1
@Rocketmagnet также, таблица, которую вы добавили в свой вопрос, похоже, относится к формату данных, которые отправляются на периферийное устройство - обратите внимание на термин «должно быть 0» для 14-го бита - возможно, вам следует сослаться на таблицу данных устройства ?
Энди ака

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

1
@Trevor_G упс, да. Поправка в процессе.
Энди ака

1
Надлежащее ожидание - программное обеспечение, которое использует spi-контроллер, должно проверять данные, которые возвращаются, если есть риск. Если у вас нет контроля над одной или другой стороной, то вам определенно нужно сделать это в программном обеспечении более высокого уровня. Единственный раз, когда вы можете это отпустить, это если вы контролируете обе стороны конструкции spi и делаете так, чтобы она соответствовала вашим требованиям к битовым ошибкам, что в данном случае кажется невозможным. Таким образом, ваше программное обеспечение должно проверять все нули и все, а не работу spi-контроллера или четность, которая имеет ограниченную полезность ...
old_timer

5

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

Учитывая линию передачи, есть несколько различных видов проблем. Здесь важны два: 1) полный отказ самой линии и 2) блокировка ошибок данных в конкретной передаче. Другими менее значимыми являются, например, неправильные линейные напряжения, ошибки протокола или ошибки безопасности. Четность помогает с 2, но не с 1. Для подсистемы на любом конце линии передачи, чтобы справиться с 1 (прямой сбой соединения), требуется другая функция протокола.

Частота обнаружения ошибок одного бита четности часто превышает 50%. Точно эта скорость зависит от эвристики сегмента данных в протоколе. Скажем, у вас есть пакет (MSB) 1011010111011110, и в последнем переданном бите есть ошибка в один бит, проверка на четность не будет выполнена, и пакет будет корректно отклонен. Точно так же, если у вас была ошибка данных в первом бите (бит четности), пакет был бы отклонен.

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

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

Чтобы проверить, подключено ли устройство, попробуйте что-нибудь выше в стеке. Для сравнения, TCP / IP (в частности, IP) не определяет биты четности, в отличие от многих спецификаций Ethernet 802.x. У IP, с другой стороны, есть сложное, "ты там?" протокол. Что вы используете поверх SPI? Ответ на управление каналом передачи данных, вероятно, там.


1
802.3 и .11 используют CRC32; IP и TCP и (опционально) UDP используют 16-битную сумму с одним дополнением, которая из-за того факта, что очень немногие машины или даже ALU сегодня равны 1 сС, в основном реализуются с добавлением без знака плюс перенос.
dave_thompson_085

Дело в том, что четность может легко обнаружить прямой отказ самой линии. Если я вернусь все 1 или все 0, это должно быть сбой.
Ракетный магнит

4

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

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

При передаче четного числа битов, таких как байты через SPI, нечетный бит четности обнаружил бы ошибку в данных «все 1» или «все 0», но четность не будет.

Тем не менее, нет такого явного победителя при передаче нечетного числа битов, например, в вашем приложении с 15 битами через SPI. Даже четность выявила бы ошибку в случае «все 1», но пропустила случай «все 0». И наоборот, нечетная четность выявила бы ошибку в случае all-0, но пропустила случай all-1.


Собственно, да, тут явно есть в этом случае . Как я объяснил в вопросе, нечетная четность могла бы обнаружить: отсутствующие, неисправные отключенные микросхемы и сбои кабелей, тогда как четная четность не может.
Ракетный магнит

0

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


0

Вы правы в этом вопросе, у меня такая же критика даже паритета. С нечетным числом битов данных перед добавлением бита четности, как в вашем примере, и, как обычно, четная четность разрешает все 0 и все 1 как действительные передаваемые слова, что бесполезно при обнаружении мертвой линии связи или мертвой микросхемы. Предыдущий ответ Тони М неверен в этом отношении. См. Таблицу примеров 7-битных данных здесь для доказательства: - https://en.wikipedia.org/wiki/Parity_bit

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.