なぜ偶数パリティで悩むのですか?


12

アプリケーションでSPI周辺機器を使用しています。周辺機器は、15データビットとエラー検出用の偶数パリティビットを含むパケットを返します。

SPIペリフェラルのパリティ

したがって、すべてゼロで、すべて1が両方ともパリティチェックに合格します。

これは、私のマイクロコントローラーが最も一般的なタイプのエラーを検出できないことを意味します:接続されていない周辺機器 この場合、受信ビットはすべてゼロであり、パリティチェックに合格します。

周辺機器の製造業者が奇数パリティを実装するのと同じくらい簡単だったと仮定して、私の質問は次のとおりです。この場合、なぜ偶数パリティを使用することを選択したのですか。この場合、最も一般的なタイプのエラーをキャッチできないという事実を補うために、偶数パリティには他の利点がありますか?


6
偶数または奇数の「パリティ」は恐竜技術であり、現代のプロフェッショナルシステムでは使用しないでください。シングルビットエラーを検出する確率は50%未満であり、マルチビットエラーの場合はさらに悪化します。パリティの使用を忘れてください。1960年代になっても、それを使用することはモロニックなアイデアでした。SPIデータラインを検証する必要がある場合は、入力キャプチャタイマーなどを使用して、下位層のデータを監視する必要があります。バッファオーバーランなどのSPIフラグも確認してください。–
ランディン

39
@Lundin 「シングルビットエラーをキャッチする確率は50%未満ですが、マルチビットエラーの場合はさらに悪化します。」-1ビットが間違っている場合、パリティが間違っています。単純パリティは、「50%未満」ではなく、100%のシングルビットエラーをキャッチする可能性があります。(同様に、2ビットエラーをキャッチする確率は0%で、3ビットエラーをキャッチする確率は100%です)。
-marcelm

7
@Lundin-これらのチップを製造しているAMSのメーカーへのコメントをお願いします。
Rocketmagnet

26
@Lundinパリティビットが反転しても、パリティチェックは失敗します。
アダムHaun

4
ほとんどの場合、これはまだほとんど役に立ちません。⁽ᶜᶦᵗᵃᵗᶦᵒᶰᶰᵉᵉᵈᵉᵈ⁾– dasdingonesin 18
1

回答:


14

単一のパリティビットは、エラー内の単一または奇数のビットの有無のみをチェックできるため、周辺機器が切断されたことを検出することを期待することは、あまりにも多くを期待します。

ただし、多くのシステムでは、周辺機器が存在しない場合、連続した1が生成されます。これは、返されるデータラインの単純なプルアップ抵抗で実現できます。接続された周辺機器から実際の8ビットデータが返された場合、送信される10進255に対してパリティビットはゼロになります。したがって、これらの状況下で周辺機器が切断されると、パリティでさえ検出できます。

奇数パリティが使用された場合、8の高ビット(10進数の255)は高パリティビットになるため、奇数のパリティは周辺チップの損失を検出する手段として役に立たなくなります。

コース用の馬。


2
愚かなことに、この特定のアプリケーションには15データビットと1パリティビットがあることを述べたはずです。今修正しました。しかし、完全に切断された周辺機器を検出するためにパリティチェックを期待することは依然として妥当だと思います。これはその機能の範囲内であり、実際に行うことができる最も便利なチェックです。
Rocketmagnet

1
@Rocketmagnetまた、質問に追加したテーブルは、周辺機器に送信されるデータの形式のようです-14ビット目は「0でなければなりません」という用語に注意してください-デバイスのデータシートにリンクする必要があります?
アンディ別名

3
変更されたテーブルには、エラーフラグとしてビット14が表示されます。デバイスが切断された場合、デコードされたビット14が問題を示すため、シリアルリターンデータでプルアップを使用してデータをすべて1にすることをお勧めします。
アンディ別名

1
@Trevor_Gはい。修正中です。
アンディ別名

1
適切な期待は、リスクがある場合、spiコントローラーを使用するソフトウェアが戻ってくるデータを検証することです。どちらか一方を制御できない場合は、より高いレベルのソフトウェアでこれを行う必要があります。あなたがそれを手放すことができるのは、spiデザインの両側を制御し、ビットエラー要件を満たすようにする場合だけです。したがって、ソフトウェアは、spiコントローラーのジョブや、有用性が制限されているパリティではなく、すべてゼロとすべて1をチェックする必要があります
...-old_timer

5

パリティ、またはブロックエラー検出は、データ送信自体のエラーを検出することを目的としています。パリティは、データ送信が行われているかどうかを検出するように設計されていません。

伝送ラインを考えると、いくつかの異なる懸念事項があります。ここで関連する2つは、1)回線自体の完全な障害、および2)特定の伝送内のデータエラーのブロックです。その他の関連性が低いのは、たとえば、不適切なライン電圧、プロトコルエラー、またはセキュリティエラーです。パリティは1でなく2で役立ちます。1(接続の完全な障害)に対応するために、伝送ラインのいずれかの端のサブシステムには、別のプロトコル機能が必要です。

多くの場合、単一のパリティビットのエラー検出率は50%よりも高くなります。そのレートが正確に何であるかは、プロトコルのデータセグメントのヒューリスティックに依存します。パケット(MSB)1011010111011110があり、最後に送信されたビットにシングルビットエラーがある場合、パリティチェックは失敗し、パケットを正しく拒否します。同様に、最初のビット(パリティビット)にデータエラーがある場合、パケットは拒否されます。

ハードウェアでこのチェックを実行することは非常に簡単で、複雑な処理を必要としません。ガベージコレクションされたソフトウェアスタックを実行するプロセッサによって生成されるクロックスキューやクロック信号などを取り除くには、ビットエラー率が比較的低いアプリケーションで役立ちます。

SPIは、電気的に接続された短い回線用に設計された物理リンクプロトコルであり、シングルビットエラー率は回線の損失にあまり依存しません。損失の多い回線を介して何かを実行している場合、パリティよりも堅牢な何かが必要になります。これは実際にはSPIが行うことではありません。

デバイスがまだ接続されているかどうかを確認するには、スタック内の上位のものを試してください。比較すると、TCP / IP(特にIP)はパリティビットを指定しませんが、802.xイーサネット仕様の多くは指定します。一方、IPには複雑な「あなたはそこにいますか?」プロトコル。SPI上で何を実行していますか?データリンク管理への答えはおそらくそこにあります。


1
802.3および.11はCRC32を使用します。IPとTCPおよび(オプションで)UDPは16ビットの補数の合計を使用します。これは、今日のマシンまたはごくわずかなALUでさえ1sCであるという事実により、ほとんどが符号なし加算とキャリーアラウンドによって実装されます。
-dave_thompson_085

ポイントは、パリティ回線自体の完全な障害を簡単に検出できることです。すべて1またはすべて0を取得した場合、それは失敗です。
Rocketmagnet

4

奇数に対する偶数パリティの明らかな利点はありません。通信およびストレージスキームでは、パリティの極性(奇数または偶数)を選択して、最も可能性の高いまたは最も発生頻度の高い障害モードをトラップする必要があります。

あなたが言うように、応答しないターゲットまたは壊れたデータ受信ワイヤは、MISOラインが高または低でスタックする可能性があります。

SPIを介したバイトなど、偶数のビットを通信する場合、奇数パリティビットは、このall-1またはall-0のデータの障害を検出しますが、偶数パリティは検出しません。

ただし、SPIで15ビットを使用するアプリケーションなど、奇数のビットを通信する場合、そのような明確な勝者はありません。パリティでさえ、all-1の場合は障害を検出しますが、all-0の場合は見逃します。逆に、奇数パリティは、すべて0の場合に障害を検出しますが、すべて1の場合は失敗します。


実際、はい、この場合には明らかにあります。質問で説明したように、奇数パリティは検出できます。欠落している、故障した切断されたチップとケーブル障害、偶数パリティは検出できません。
Rocketmagnet

0

偶数パリティと奇数パリティの利点にはほとんど違いがありません。1つの反転ゲートを使用して、一方を他方に変換できます。パリティビットの主な目的は、その値の15ビットのみをチェックすることです。他のことをすることはその目的ではありません。どちらか一方が、欠けているチップ、欠陥のあるチップ、または切断されたチップを検出できることは考慮されていません。あなたは、あなたのケースで最も一般的なタイプのエラーが切断されていると言います。それはどうでもいい事です。そのタイプのエラーを検出するためのパリティビットはありません。


0

あなたはこれに疑問を呈する権利があります、私も同等の批判をしています。あなたの例のように、パリティビットを追加する前の奇数のデータビットで、そして一般的なように、偶数パリティはすべての0とすべての1を有効な送信ワードとして許可します。トニーMによる以前の回答は、この点で間違っています。証拠については、7ビットデータの例をご覧ください。 //en.wikipedia.org/wiki/Parity_bit

ただし、奇数パリティは、すべて0またはすべて1の場合に反対の状態ビットを挿入するため、リンクとチップが動作していることが証明され、この場合ははるかに適切な選択になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.