Perché preoccuparsi di pari parità?


12

Sto usando una periferica SPI nella mia applicazione. La periferica restituisce pacchetti contenenti 15 bit di dati, oltre a un bit di parità pari per il rilevamento degli errori.

Parità su una periferica SPI

Pertanto, tutti gli zeri e tutti e due superano il controllo di parità.

Ciò significa che il mio microcontrollore non è in grado di rilevare il tipo più comune di errore: la periferica è disconnessa! In questo caso, i bit ricevuti sono tutti zero, che supera il controllo di parità.

Presumendo che sarebbe stato altrettanto facile per il produttore della periferica implementare la parità dispari, la mia domanda è: perché avrebbero scelto di utilizzare la parità pari in questo caso ? Esiste un altro vantaggio di Even Parity in questo caso per compensare il fatto che non è in grado di rilevare il tipo più comune di errore?


6
Si noti che la "parità", pari o dispari, è la tecnologia dei dinosauri, non dovrebbe essere utilizzata in sistemi moderni e professionali. Ha una probabilità inferiore al 50% di rilevare errori a bit singolo e peggio ancora per errori a bit multipli. Dimentica semplicemente di usare la parità, usarla era un'idea idiota anche negli anni '60. Se è necessario convalidare una linea di dati SPI, è necessario supervisionare i dati su un livello inferiore, utilizzando un timer di acquisizione input o simile. Controlla anche i flag SPI per sovraccarichi del buffer ecc.
Lundin

39
@Lundin "Ha una probabilità inferiore al 50% di rilevare errori a bit singolo, e peggio ancora per errori a bit multipli." - Se un singolo bit è errato, la parità sarà errata. La parità semplice ha una probabilità del 100% di rilevare errori a bit singolo, non "inferiore al 50%". (allo stesso modo, ha lo 0% di probabilità di rilevare errori a 2 bit e di nuovo il 100% a rilevare errori a 3 bit).
marzo

7
@Lundin - Ti preghiamo di inviare i tuoi commenti ai produttori di AMS, che realizzano questi chip.
Rocketmagnet,

26
@Lundin Se il bit di parità viene invertito, il controllo di parità non riesce ancora.
Adam Haun,

4
Questo è ancora per lo più inutile nella maggior parte delle situazioni. ⁽ᶜᶦᵗᵃᵗᶦᵒᶰ ᶰᵉᵉᵈᵉᵈ⁾
dasdingonesin l'

Risposte:


14

Un singolo bit di parità può solo verificare la presenza di numeri singoli o dispari di bit negli errori, quindi aspettarsi che rilevi quando una periferica è disconnessa probabilmente si aspetta troppo.

Tuttavia, molti sistemi produrranno una serie continua di 1 quando non è presente una periferica e ciò può essere ottenuto con un semplice resistore pull-up sulla linea di dati di ritorno. Se i dati a 8 bit effettivi fossero restituiti da una periferica collegata, il bit di parità sarebbe zero per il 255 decimale trasmesso. Quindi anche la parità può rilevare quando una periferica viene disconnessa in queste circostanze.

Se si usasse la parità dispari, 8 bit alti (255 decimali) comporterebbero un bit di parità elevato, rendendo inutile la parità dispari come mezzo per rilevare la perdita del chip periferico.

Cavalli per i corsi.


2
Silly me, avrei dovuto menzionare che questa particolare applicazione ha 15 bit di dati e un bit di parità. Corretto ora. Ma penso ancora che sia ragionevole aspettarsi un controllo di parità per rilevare una periferica completamente disconnessa. È abbastanza all'interno delle sue capacità ed è in realtà il controllo più utile che puoi fare.
Rocketmagnet,

1
@Rocketmagnet inoltre, la tabella che hai aggiunto alla tua domanda sembra essere per il formato dei dati inviati alla periferica - nota il termine "Deve essere 0" per il 14 ° bit - forse dovresti collegarti alla scheda tecnica del dispositivo ?
Andy alias il

3
La tabella modificata mostra il bit 14 come flag di errore e il mio consiglio è di usare un pull-up sui dati di ritorno seriale per rendere tutti i dati 1 quando il dispositivo è disconnesso perché il bit 14 decodificato indicherà un problema.
Andy alias il

1
@Trevor_G oops sì. Modifica in corso.
Andy alias il

1
L'aspettativa corretta è che il software che utilizza il controller SPI dovrebbe convalidare i dati che vengono restituiti, in caso di rischio. Se non hai il controllo su uno o gli altri lati, devi sicuramente farlo nel software di livello superiore. L'unica volta che puoi lasciarlo andare è se controlli entrambi i lati del progetto SPI e lo fai soddisfare i tuoi requisiti di errore bit, che suona in questo caso che non puoi. Quindi il tuo software dovrebbe controllare tutti gli zeri e tutti, non il lavoro del controller spi, né la parità che ha un'utilità limitata ...
old_timer

5

La parità, o qualsiasi rilevamento di errori di blocco, ha lo scopo di rilevare errori all'interno di una stessa trasmissione di dati. La parità non è progettata per rilevare se la trasmissione dei dati è in corso o meno.

Data una linea di trasmissione, ci sono diversi tipi di preoccupazioni. I due che sono rilevanti qui sono: 1) totale fallimento della linea stessa e, 2) bloccare errori di dati all'interno di una trasmissione particolare. Altri meno rilevanti sono, ad esempio, tensioni di linea errate, errori di protocollo o errori di sicurezza. La parità aiuta con 2 ma non 1. Per un sottosistema su entrambe le estremità di una linea di trasmissione per far fronte a 1 (fallimento totale di una connessione), è necessaria un'altra funzione di protocollo.

Il tasso di rilevamento degli errori di un singolo bit di parità è spesso superiore al 50%. Che cos'è esattamente tale tasso dipende dall'euristica del segmento di dati nel protocollo. Supponiamo che tu abbia un pacchetto (MSB) 1011010111011110 e che vi sia un errore a bit singolo nell'ultimo bit trasmesso, il controllo di parità fallirebbe e lo respingerebbe correttamente. Allo stesso modo, se si verifica un errore di dati nel primo bit (il bit di parità), il pacchetto verrebbe rifiutato.

L'esecuzione di questo controllo nell'hardware è estremamente semplice e non richiede elaborazioni complicate. È utile in applicazioni con tassi di errore relativamente bassi per eliminare elementi come l'inclinazione o i segnali di clock generati dai processori che eseguono stack di software raccolti in modo inutile.

SPI è un protocollo di collegamento fisico progettato per brevi linee connesse elettricamente in cui il tasso di errore a bit singolo non dipende in gran parte dalla perdita della linea. Se stai eseguendo qualcosa su una linea che perde, avrai bisogno di qualcosa di molto più robusto della parità. Questo non è proprio ciò che fa SPI.

Per verificare se un dispositivo è ancora collegato, provare qualcosa in più nello stack. In confronto, TCP / IP (in particolare IP) non specifica i bit di parità mentre molte delle specifiche Ethernet 802.x lo fanno. IP, d'altra parte, ha un complicato, "ci sei?" protocollo. Cosa stai eseguendo su SPI? La risposta alla gestione del collegamento dati è probabilmente lì.


1
802.3 e .11 utilizzano CRC32; IP e TCP e (opzionalmente) UDP usano una somma del complemento a 16 bit, che a causa del fatto che pochissime macchine o persino ALU oggi sono 1sC è implementata principalmente da aggiunta senza segno più carry-around.
dave_thompson_085,

Il punto è che la parità potrebbe facilmente rilevare il fallimento della linea stessa. Se torno indietro tutti gli 1 o tutti gli 0, dovrebbe essere un errore.
Rocketmagnet,

4

Non c'è ovvio vantaggio di parità pari su dispari. Negli schemi di comunicazione e archiviazione, la polarità di parità (pari o dispari) deve essere selezionata per intercettare le modalità di guasto più probabili o più frequenti.

Come dici tu, un bersaglio non rispondente o un filo di ricezione dati rotto potrebbe causare una linea MISO bloccata in alto o in basso.

Quando si comunicano numeri pari di bit, come byte su SPI, un bit di parità dispari rileverà un errore nei dati di questo all-1 o di tutti-0, ma nemmeno la parità.

Tuttavia, non esiste un vincitore così chiaro quando si comunica un numero dispari di bit, come nell'applicazione con 15 bit su SPI. Perfino la parità rileverebbe un errore nel caso di all-1 ma perderebbe il caso di all-0. Viceversa, la parità dispari rileverebbe un errore nel caso di tutti-0 ma mancerebbe il caso di tutti-1.


In realtà, sì, c'è chiaramente in questo caso . Come ho spiegato nella domanda, la parità dispari sarebbe in grado di rilevare: chip scollegati mancanti e difettosi e guasti dei cavi, mentre la parità pari non può.
Rocketmagnet,

0

C'è poca differenza nel beneficio con parità pari o dispari. Uno può essere convertito nell'altro con una singola porta di inversione. Lo scopo principale del bit di parità è controllare solo i 15 bit in quel valore. Non è suo scopo fare qualsiasi altra cosa. L'uno o l'altro potrebbe rilevare un chip mancante, difettoso o disconnesso non è una considerazione. Dici che essere disconnesso è il tipo più comune di errore nel tuo caso. Non importa. Il bit di parità non è presente per rilevare quel tipo di errore.


0

Hai ragione a metterlo in discussione, ho le stesse critiche anche alla parità. Con un numero dispari di bit di dati prima dell'aggiunta del bit di parità, come nel tuo esempio, e come è comune, la parità pari consente a tutti gli 0 e tutti gli 1 come parole trasmesse valide, il che è inutile nel rilevare un collegamento morto o un chip morto. La risposta precedente di Tony M è errata in questo senso. Vedere la tabella di esempio dei dati a 7 bit qui per la prova: - https://en.wikipedia.org/wiki/Parity_bit

La parità dispari tuttavia inserisce un bit di stato opposto nel caso di tutti gli 0 o di tutti gli 1, dimostrando così che il collegamento e il chip sono vivi e sarebbe una scelta molto migliore in questo caso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.