Навіщо турбуватися рівним паритетом?


12

У своїй програмі я використовую периферійний модуль SPI. Периферійні зворотні пакети, що містять 15 бітів даних, плюс біт парного парності для виявлення помилок.

Паритет на периферійному інтерфейсі SPI

Тому всі нулі, і всі обидва проходять перевірку паритетності.

Це означає, що мій мікроконтролер не може виявити найпоширеніший тип помилки: периферійний апарат відключається! У цьому випадку отримані біти дорівнюють нулю, який проходить перевірку парності.

Припускаючи, що виробник периферійних пристроїв був би таким же простим способом реалізувати непарний паритет, моє питання: Чому б вони вирішили використовувати в цьому випадку парний паритет ? Чи є в цьому випадку ще якась перевага Even Parity, щоб компенсувати той факт, що він не в змозі виявити найпоширеніший тип помилки?


6
Зверніть увагу, що "паритет", парний чи непарний - це технологія динозаврів, його не слід застосовувати в сучасних професійних системах. Він має ймовірність менше 50% вловлювати одиночні бітові помилки, а ще гірше - для багатобітних помилок. Тільки забудьте про використання паритету, його використання було делікатною ідеєю ще в 60-х роках. Якщо вам потрібно перевірити рядок даних SPI, вам слід контролювати дані на нижньому шарі, використовуючи таймер захоплення вхідних даних або подібний. Також перевірте прапорці SPI на наявність перекриття буфера тощо.
Лундін

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

7
@Lundin - Будь ласка, адресуйте свої коментарі виробникам AMS, які роблять ці фішки.
Rocketmagnet

26
@Lundin Якщо біт парності відвертається, перевірка парності все ще не вдається.
Адам Хаун

4
У більшості ситуацій це все ще марно. ⁽ᶜᶦᵗᵃᵗᶦᵒᶰ ᶰᵉᵉᵈᵉᵈ⁾
dasdingonesin

Відповіді:


14

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

Однак багато систем вироблятимуть безперервну серію 1-х, коли периферійних пристроїв немає, і це може бути досягнуто простим підтягуючим резистором на лінії, що повертається. Якщо фактично 8-бітові дані повертаються підключеною периферією, то біт парності буде нульовим для передачі десяткової 255. Тож навіть парність може виявити, коли периферійний апарат відключений за цих обставин.

Якщо використовувати непарний паритет, 8 високих бітів (десяткова 255) призведе до отримання біта високого паритету, тому нечетний паритет буде марним як засіб виявлення втрати периферійного чіпа.

Коні на курси.


2
Нерозумно, я повинен зазначити, що саме ця програма має 15 бітів даних і один біт паритету. Виправлено зараз. Але я все ж думаю, що розумно очікувати перевірки паритету для виявлення повністю відключеної периферії. Це цілком в межах її можливостей і є фактично найкориснішою перевіркою, яку ви можете зробити.
Rocketmagnet

1
@Rocketmagnet також, таблиця, яку ви додали до свого запитання, виглядає як формат даних, що надсилаються на периферію - зверніть увагу на термін "Повинен бути 0" для 14-го біта - можливо, вам слід зв’язатися з інформаційним аркушем пристрою ?
Енді ака

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

1
@Trevor_G ой так. Внесення змін.
Енді ака

1
Власне очікування - це програмне забезпечення, яке використовує контролер spi, має перевірити дані, що повертаються, якщо є ризик. Якщо у вас немає контролю над тією чи іншою стороною, вам це обов'язково потрібно зробити в програмному забезпеченні вищого рівня. Єдиний раз, коли ви можете це відпустити, це якщо ви керуєте обома сторонами спіральної конструкції та змушуєте її відповідати вашим вимогам щодо бітових помилок, про що це звучить у цьому випадку. Таким чином, ваше програмне забезпечення повинно перевіряти всі нулі та всі, а не роботу контролера spi, а також паритет, який має обмежену корисність ...
old_timer

5

Паритет або будь-яке виявлення помилок блоку призначені для виявлення помилок у самій передачі даних. Паритет не призначений для визначення того, відбувається чи ні передача даних.

Зважаючи на лінію електропередачі, існує декілька різних проблем. Тут важливими є дві: 1) відмова прямої лінії самої лінії та 2) блокування помилок даних у певній передачі. Іншими менш актуальними є, наприклад, неправильні напруги лінії, помилки протоколу або помилки безпеки. Паритет допомагає 2, але не 1. Для підсистеми на будь-якому кінці лінії електропередачі, щоб впоратися з 1 (відверта несправність з'єднання), потрібна інша функція протоколу.

Частота виявлення помилок у одному біті паритету часто перевищує 50%. Саме ця швидкість залежить від евристики сегмента даних у протоколі. Скажімо, у вас є пакет (MSB) 1011010111011110, і в останньому переданому біті є одна помилка біту, перевірка парності виявиться невдалою і правильно відхилить його пакет. Аналогічно, якби у вас був помилка даних у першому біті (біт парності), пакет буде відхилений.

Виконання цієї перевірки апаратних засобів надзвичайно просте і не вимагає складної обробки. Це корисно в додатках із відносно низькими коефіцієнтами помилок бітів, щоб відмивати такі речі, як перекос годинника або тактові сигнали, що генеруються процесорами, що працюють зі збиранням сміття.

SPI - це фізичний протокол зв'язку, який розроблений для коротких електрично з'єднаних ліній, де частота помилок однорозрядних не сильно залежить від втрати лінії. Якщо ви щось запускаєте через програш, вам знадобиться щось більш надійне, ніж паритет. Це насправді не те, що робить SPI.

Щоб перевірити, чи пристрій все ще підключено, спробуйте щось вище у стеці. Для порівняння, TCP / IP (зокрема, IP) не вказує біти парності, тоді як багато специфікацій 802.x Ethernet роблять. З іншого боку, IP має складне "ви там?" протокол. Що ти працюєш на вершині SPI? Відповідь на управління зв’язком даних, можливо, є.


1
802.3 та .11 використовують CRC32; IP та TCP та (необов'язково) UDP використовують 16-бітну суму доповнення, яка через те, що дуже мало машин або навіть АЛУ сьогодні є 1sC, здебільшого реалізується шляхом безпідписаного додавання плюс перенесення.
dave_thompson_085

Справа в тому, що паритет може легко виявити відвертий провал самої лінії. Якщо я поверну всі 1 або 0, це може бути помилкою.
Rocketmagnet

4

Немає явної користі від парного над непарним. У схемах комунікації та зберігання полярність парності (непарна або парна) повинна вибиратись для захоплення найбільш ймовірних або найвищих випадків відмов.

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

Під час передачі парних чисел бітів, таких як байти через SPI, непарний біт парності виявив б помилку в даних цього «все-1» або «все-0», але навіть парність не буде.

Однак, немає такого чіткого переможця, коли повідомляється непарна кількість бітів, наприклад, у вашій програмі з 15 бітами за SPI. Навіть паритет виявив б помилку у справі «все-1», але пропустив справу «0». І навпаки, непарний паритет виявив б помилку у випадку all-0, але пропустив випадок all-1.


Власне, так, явно є в цьому випадку . Як я пояснював у запитанні, непарний паритет міг би виявити: відсутні, несправні відключені мікросхеми та несправності кабелю, тоді як навіть парність не може.
Rocketmagnet

0

Різниця в користі незначна з парним або непарним паритетом. Один може бути перетворений в інший за допомогою одного обертового затвора. Основна мета біта парності - перевірити лише 15 біт у цьому значенні. Це не будь-яка інша справа. Те, що той чи інший міг виявити відсутні, несправні чи відключені мікросхеми, не враховує. Ви згадуєте, що відключення - найпоширеніший тип помилки у вашому випадку. Не важливо. Біту парності немає для виявлення цього типу помилок.


0

Ви праві сумніватися в цьому, я маю таку ж критику навіть паритету. Із непарною кількістю бітів даних перед додаванням біту парності, як у вашому прикладі, і, як це прийнято, парний парність дозволяє всім 0 і всім 1s бути дійсними переданими словами, що марно при виявленні мертвої посилання або мертвої мікросхеми. Попередня відповідь Тоні М в цьому плані помилкова. Дивіться приклад 7-бітової таблиці даних тут для підтвердження: - https://en.wikipedia.org/wiki/Pality_bit

Однак непарний паритет вставив би бік протилежного стану у всі випадки 0 або всі 1s, тим самим довівши, що посилання та чіп є живими, і це було б набагато кращим вибором у цьому випадку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.