Warum sich mit gleichmäßiger Parität beschäftigen?


12

Ich verwende ein SPI-Peripheriegerät in meiner Anwendung. Das Peripheriegerät gibt Pakete zurück, die 15 Datenbits plus ein Bit für gerade Parität zur Fehlererkennung enthalten.

Parität auf einem SPI-Peripheriegerät

Daher bestehen alle Nullen und alle Einsen die Paritätsprüfung.

Dies bedeutet, dass mein Mikrocontroller die häufigste Art von Fehler nicht erkennen kann: das Peripheriegerät ist nicht angeschlossen! In diesem Fall sind alle empfangenen Bits Null, was die Paritätsprüfung besteht.

Unter der Annahme, dass es für den Hersteller des Peripheriegeräts genauso einfach gewesen wäre, eine ungerade Parität zu implementieren, lautet meine Frage: Warum hätten sie sich in diesem Fall für eine gerade Parität entschieden ? Gibt es in diesem Fall einen weiteren Vorteil von Even Parity, um die Tatsache auszugleichen, dass der häufigste Fehlertyp nicht abgefangen werden kann?


6
Bitte beachten Sie, dass "Parität", gerade oder ungerade, Dinosaurier-Technologie ist und nicht in modernen, professionellen Systemen verwendet werden sollte. Es hat eine Wahrscheinlichkeit von weniger als 50%, Einzelbitfehler abzufangen, und noch schlimmer für Mehrbitfehler. Vergessen Sie einfach die Parität, sie war schon in den 1960er Jahren eine schwachsinnige Idee. Wenn Sie eine SPI-Datenleitung validieren müssen, sollten Sie die Daten auf einer unteren Ebene mithilfe eines Eingangserfassungs-Timers oder ähnlichem überwachen. Überprüfen Sie auch die SPI-Flags auf Pufferüberläufe usw.
Lundin

39
@Lundin "Es hat eine Wahrscheinlichkeit von weniger als 50%, Einzelbitfehler abzufangen , und noch schlimmer für Mehrbitfehler." - Wenn ein einzelnes Bit falsch ist, ist die Parität falsch. Einfache Parität hat eine 100% ige Chance, Einzelbitfehler abzufangen, nicht "weniger als 50%". (In ähnlicher Weise besteht eine Wahrscheinlichkeit von 0%, dass 2-Bit-Fehler abgefangen werden, und von 100%, dass 3-Bit-Fehler abgefangen werden.)
Marcelm

7
@Lundin - Bitte richten Sie Ihre Kommentare an die Hersteller von AMS, die diese Chips herstellen.
Rocketmagnet

26
@Lundin Wenn das Paritätsbit kippt, schlägt die Paritätsprüfung immer noch fehl.
Adam Haun

4
Dies ist in den meisten Situationen meist noch unbrauchbar. ⁽ᶜᶦᵗᵃᵗᶦᵒᶰ ᶰᵉᵉᵈᵉᵈ⁾
dasdingonesin

Antworten:


14

Ein einzelnes Paritätsbit kann nur auf das Vorhandensein von einzelnen oder ungeraden Anzahlen von Bits in Fehlern prüfen, sodass es wahrscheinlich zu viel erwartet, wenn es erkennt, wenn ein Peripheriegerät nicht angeschlossen ist.

Viele Systeme erzeugen jedoch eine fortlaufende Reihe von Einsen, wenn kein Peripheriegerät vorhanden ist, und dies kann mit einem einfachen Pull-up-Widerstand auf der zurückkommenden Datenleitung erreicht werden. Wenn von einem angeschlossenen Peripheriegerät tatsächliche 8-Bit-Daten zurückgesendet würden, wäre das Paritätsbit für die übertragene Dezimalzahl 255 Null. So kann sogar die Parität erkennen, wenn ein Peripheriegerät unter diesen Umständen getrennt wird.

Wenn eine ungerade Parität verwendet würde, würden 8 hohe Bits (Dezimalzahl 255) zu einem hohen Paritätsbit führen, so dass eine ungerade Parität als Mittel zum Erfassen eines Verlusts eines peripheren Chips unbrauchbar wird.

Pferde für Kurse.


2
Dummerweise hätte ich erwähnen sollen, dass diese spezielle Anwendung 15 Datenbits und ein Paritätsbit hat. Korrigiert jetzt. Ich halte es dennoch für vernünftig, eine Paritätsprüfung zu erwarten, um ein vollständig getrenntes Peripheriegerät zu erkennen. Es liegt im Rahmen seiner Möglichkeiten und ist die nützlichste Prüfung, die Sie durchführen können.
Rocketmagnet

1
@Rocketmagnet auch die Tabelle, die Sie Ihrer Frage hinzugefügt haben, scheint für das Format der Daten zu sein, die an das Peripheriegerät gesendet werden - beachten Sie den Begriff "Muss 0 sein" für das 14. Bit - möglicherweise sollten Sie auf das Gerätedatenblatt verweisen ?
Andy aka

3
In der geänderten Tabelle wird Bit 14 als Fehlerflag angezeigt, und ich empfehle, die seriellen Rückgabedaten hochzuziehen, um die Daten auf 1 zu setzen, wenn die Verbindung zum Gerät getrennt wird, da das decodierte Bit 14 auf ein Problem hinweist.
Andy aka

1
@ Trevor_G Hoppla, ja. Änderung in Bearbeitung.
Andy aka

1
Die richtige Erwartung ist, dass die Software, die den SPI-Controller verwendet, die zurückkommenden Daten validieren sollte, wenn ein Risiko besteht. Wenn Sie nicht die Kontrolle über die eine oder andere Seite haben, müssen Sie dies auf jeden Fall in der übergeordneten Software tun. Das können Sie nur dann loslassen, wenn Sie beide Seiten des SPI-Designs kontrollieren und sicherstellen, dass es Ihren Bitfehleranforderungen entspricht, was in diesem Fall so klingt, als ob Sie es nicht können. Ihre Software sollte also nach allen Nullen und Einsen
suchen

5

Die Parität oder eine Blockfehlererkennung soll Fehler innerhalb einer Datenübertragung selbst erkennen. Die Parität soll nicht erkennen, ob eine Datenübertragung stattfindet oder nicht.

Bei einer Übertragungsleitung gibt es verschiedene Arten von Bedenken. Die beiden hier relevanten sind: 1) völliger Ausfall der Leitung selbst und 2) Blockieren von Datenfehlern innerhalb einer bestimmten Übertragung. Andere weniger relevante Faktoren sind beispielsweise falsche Netzspannungen, Protokollfehler oder Sicherheitsfehler. Parität hilft bei 2, aber nicht bei 1. Damit ein Subsystem an beiden Enden einer Übertragungsleitung mit 1 fertig wird (völliger Ausfall einer Verbindung), ist eine andere Protokollfunktion erforderlich.

Die Fehlererkennungsrate eines einzelnen Paritätsbits ist häufig höher als 50%. Wie hoch diese Rate ist, hängt von der Heuristik des Datensegments im Protokoll ab. Angenommen, Sie haben ein Paket (MSB) 1011010111011110 und es liegt ein Einzelbitfehler im zuletzt übertragenen Bit vor. Die Paritätsprüfung würde fehlschlagen und das Paket korrekt ablehnen. In ähnlicher Weise würde das Paket zurückgewiesen, wenn Sie im ersten Bit (dem Paritätsbit) einen Datenfehler hätten.

Das Durchführen dieser Überprüfung in Hardware ist äußerst einfach und erfordert keine komplizierte Verarbeitung. In Anwendungen mit relativ niedrigen Bitfehlerraten ist es nützlich, Dinge wie Taktversatz oder Taktsignale auszusortieren, die von Prozessoren erzeugt werden, die Software-Stapel mit Speicherbereinigung ausführen.

SPI ist ein physikalisches Verbindungsprotokoll, das für kurze elektrisch verbundene Leitungen entwickelt wurde, bei denen die Einzelbitfehlerrate nicht wesentlich vom Leitungsverlust abhängt. Wenn Sie etwas über eine verlustbehaftete Linie laufen lassen, benötigen Sie etwas, das viel robuster ist als die Parität. Das macht SPI nicht wirklich.

Versuchen Sie etwas höher im Stapel, um zu überprüfen, ob ein Gerät noch angeschlossen ist. Im Vergleich dazu spezifiziert TCP / IP (insbesondere IP) keine Paritätsbits, während viele der 802.x-Ethernet-Spezifikationen dies tun. IP hat auf der anderen Seite eine komplizierte Frage: "Bist du da?" Protokoll. Was läuft auf SPI? Die Antwort auf das Datenverbindungsmanagement ist wahrscheinlich da.


1
802.3 und .11 verwenden CRC32; IP und TCP und (optional) UDP verwenden eine 16-Bit-Ein-Komplement-Summe, die aufgrund der Tatsache, dass nur sehr wenige Maschinen oder sogar ALUs heutzutage 1sC sind, meistens durch vorzeichenlose Addition plus Übertrag implementiert wird.
Dave_thompson_085

Der Punkt ist , dass die Parität könnte leicht endgültiges Scheitern der Linie selbst erkennen. Wenn ich alle 1en oder alle 0en zurück bekomme, sollte das ein Fehler sein.
Rocketmagnet

4

Es gibt keinen offensichtlichen Vorteil einer geraden Parität gegenüber einer ungeraden. Bei Kommunikations- und Speichersystemen sollte die Paritätspolarität (ungerade oder gerade) ausgewählt werden, um die wahrscheinlichsten oder am häufigsten auftretenden Fehlermodi einzufangen.

Wie Sie sagen, kann ein nicht reagierendes Ziel oder eine unterbrochene Datenempfangsleitung dazu führen, dass eine MISO-Leitung hoch oder niedrig steckt.

Bei der Kommunikation einer geraden Anzahl von Bits, wie z. B. Bytes über SPI, würde ein ungerades Paritätsbit einen Fehler in den Daten dieser Einsen oder Nullen erkennen, eine gerade Parität jedoch nicht.

Es gibt jedoch keinen so eindeutigen Gewinner, wenn eine ungerade Anzahl von Bits übertragen wird, z. B. in Ihrer Anwendung mit 15 Bits über SPI. Eine gerade Parität würde einen Fehler im Fall von all-1 erkennen, aber den Fall von all-0 verfehlen. Umgekehrt würde eine ungerade Parität einen Fehler im all-0-Fall erkennen, aber den all-1-Fall verfehlen.


Eigentlich ja, da ist in diesem Fall klar . Wie ich in der Frage erklärt habe, kann Odd Parity Folgendes erkennen: fehlende, fehlerhafte, nicht verbundene Chips und Kabelfehler, während Even Parity dies nicht kann.
Rocketmagnet

0

Bei gerader oder ungerader Parität besteht kaum ein Unterschied im Nutzen. Eines kann mit einem einzigen Invert-Gate in das andere umgewandelt werden. Der Hauptzweck des Paritätsbits besteht darin, nur die 15 Bits in diesem Wert zu überprüfen. Es ist nicht seine Absicht, etwas anderes zu tun. Dass der eine oder andere einen fehlenden, fehlerhaften oder nicht verbundenen Chip erkennen könnte, spielt keine Rolle. Sie erwähnen, dass das Trennen der Verbindung in Ihrem Fall die häufigste Art von Fehler ist. Das ist egal. Das Paritätsbit ist nicht vorhanden, um diesen Fehlertyp zu erkennen.


0

Sie haben Recht, dies in Frage zu stellen, ich habe die gleiche Kritik an der geraden Parität. Mit einer ungeraden Anzahl von Datenbits vor der Addition des Paritätsbits, wie in Ihrem Beispiel, und wie es üblich ist, lässt die gerade Parität alle Nullen und alle Einsen als gültige übertragene Wörter zu, was beim Erkennen einer toten Verbindung oder eines toten Chips unbrauchbar ist. Die vorherige Antwort von Tony M ist in dieser Hinsicht falsch. In der 7-Bit-Datenbeispieltabelle finden Sie den Beweis: - https://en.wikipedia.org/wiki/Parity_bit

Eine ungerade Parität würde jedoch ein Bit mit entgegengesetztem Zustand in den Fall aller Nullen oder aller Einsen einfügen, was beweist, dass die Verbindung und der Chip lebendig sind, und wäre in diesem Fall eine weitaus bessere Wahl.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.