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.
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?
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle