Non vuoi la parità. Vuoi una comunicazione più affidabile.
Il motivo per cui la parità è poco utilizzata è che è costosa in termini di velocità effettiva dei dati. Inizia rendendo un frame più lungo di quasi il 10%: bit di inizio + 8 bit di dati + parità + bit di stop = 11 bit invece di 10. Ma è molto peggio di così. Se hai un modo per sapere se hai ricevuto i dati correttamente, hai il dovere di fare qualcosa con quello. Ignorare semplicemente la comunicazione errata non va bene; il trasmettitore deve inviarlo di nuovo. Quindi ha bisogno di sapere se è stato ricevuto bene. Dovrai inviare un riconoscimento ( ACK
/ NAK
) dopo ogni byte e il trasmettitore non può inviare il byte successivo prima di aver ricevuto ACK
. Se utilizzi codici ASCII, sono 11 bit di ritorno. Quindi questo dimezza il rendimento e abbiamo già perso il 10%, quindi ora siamo a un 36% di efficienza del carico utile , dall'80%. E questo è il motivo per cui a nessuno piace davvero la parità.
Note:
1. Non è necessario confermare la ricezione di una ricevuta; la distanza di Hamming tra i codici ASCII per ACK
e NAK
è 3 (con parità anche 4), quindi un errore nella ricezione di ACK / NAK
può essere non solo rilevato, ma anche corretto .
2. Molti UART possono lavorare con lunghezze di dati fino a 5 bit ed è possibile passare a 5 bit per l'invio di ACK
, ma questa è una semplice vetrina e complica solo la comunicazione.
Una soluzione migliore può essere usare un CRC alla fine di ogni blocco. I CRC sono migliori dei bit di parità nell'acquisizione di più errori (ma non possono ancora correggerli). Una migliore efficienza può essere ottenuta solo per blocchi lunghi; se un blocco consiste di soli 2 byte non serve aggiungere un CRC a 8 bit.
Un altro svantaggio sarebbe che devi ancora riconoscere la corretta ricezione. Quindi probabilmente non è nemmeno questo.
Che ne dici dei codici di correzione automatica ? I codici di Hamming aggiungono un piccolo sovraccarico e ti consentono di correggere 1 bit errato da solo; non è più necessario riconoscere. Come i CRC, i codici di Hamming sono più efficienti su blocchi più lunghi; il numero di bit aggiuntivi è definito come
\ $ N + H < 2 ^ H \ $
dove N = numero di bit di dati e H = numero di bit di Hamming. Quindi per correggere 1 bit in una comunicazione a 8 bit è necessario aggiungere 4 bit di Hamming; un quinto bit di Hamming è richiesto solo da 12 bit di dati. Questo è il modo più efficiente per rilevare / correggere gli errori su messaggi brevi (pochi byte), sebbene richieda un po 'di giocoleria con i dati: i bit di Hamming devono essere inseriti in posizioni specifiche tra i bit di dati.
Ora, prima di aggiungere i codici di correzione degli errori di Hamming, vale la pena esaminare la configurazione. Puoi aspettarti errori su una linea di 100 m che corre tra macchinari pesanti, ma non dovresti avere errori su una linea di 2 cm. Se rileva rumore, potrebbe essere un'impedenza troppo alta. I driver spingono / tira? Se è così, dovrebbero essere in grado di darti bordi veloci, tranne se il tuo "cavo" è capacitivo, che non sarà a questa breve distanza. Ci sono tracce ad alta corrente che corrono parallele alle linee dati? Potrebbero indurre rumore. Hai davvero bisogno di questa alta velocità e gli orologi su entrambi i lati corrispondono abbastanza da vicino? Rallentare fino a 57600 bit al secondo potrebbe risolvere il problema.