Uno o due bit di stop UART?


15

Le UART spesso consentono di scegliere tra 1, 1,5 e 2 bit di stop. Con 1 payload, l'efficienza del payload è dell'80% (8/10), con 2 bit di stop che scendono al 72,7% (8/11). Quindi qual è il vantaggio del secondo bit di stop?

Risposte:


19

I bit di stop aggiuntivi possono essere un modo utile per aggiungere un po 'di tempo di elaborazione in più di ricezione, in particolare a baud rate elevati e / o utilizzando UART soft, dove è necessario del tempo per elaborare il byte ricevuto.

Laddove la velocità è ridotta e il tuo UART offre solo rapporti di divisione con potenze di 2, l'aggiunta di un ulteriore stopbit può essere un'opzione per dare una riduzione meno drastica della velocità rispetto al prossimo baudrate più basso.

Credo che questo sia uno dei motivi per cui lo standard DMX512 specifica 2 stopbit.

Un'altra situazione in cui possono essere utili è se si dispone di dispositivi che inoltrano un flusso di dati senza buffering o impacchettamento: piccole differenze nelle frequenze di clock tra i nodi e granularità del campionamento finito possono causare errori quando i dati vengono ricevuti e ritrasmessi da un numero di nodi in una catena, ma se i dati vengono inviati con 2 stopbit e i ricevitori sono impostati su uno stopbit, aggiunge un margine sufficiente per accogliere questi errori e lascia almeno un periodo di stopbit valido affinché i nodi lontani della catena possano ricevere in modo affidabile.

Ho anche riscontrato una situazione in cui un cavo molto lungo ha causato una certa asimmetria nei tempi di salita e di discesa, con conseguente inadeguata lunghezza dello stopbit - l'invio di 2 stopbit e il ricevitore ne richiede solo uno risolto.


6

In passato i tipografi erano (quasi) costrutti completamente meccanici. I baudrate erano in qualche modo standardizzati anche allora, quindi l'aggiunta di un bit di stop in più avrebbe dato alla stampante un po 'di tempo in più per stampare il personaggio. Gli aspetti dei tempi erano più visibili allora. Per la mia prima stampante, un http://en.wikipedia.org/wiki/Teletype_Model_33 rumoroso , ho dovuto inserire una pausa di due caratteri dopo aver inviato un ritorno a capo.


Un Modello 33 correttamente regolato necessitava di un solo personaggio dopo il Ritorno a capo. Questo è quando dovresti inviare il Linefeed! Ho dimenticato che avevano bisogno di 2 bit di stop, ma hai ragione e quindi vale quello che ho detto sotto la risposta di Russel (ma quei bit di stop 1,5 erano per l'hardware Baudot). Tuttavia, i bit di stop extra (di 10ms) non hanno aiutato alcun ritardo di ritorno del carrello.
Gbarry,

4

È improbabile che due bit di arresto siano molto più utili di uno su un sistema che ha una percentuale significativa di tempo di arresto e che funziona in un ambiente a basso rumore (BER basso) come interno all'apparecchiatura o in un'interfaccia periferica con pochi metri di cavo e / o senza uno stadio modem-modem.

2 bit di stop offrono un maggiore tempo di sincronizzazione, più tempo per l'elaborazione tra i caratteri e probabilmente, a seconda dell'hardware e degli algoritmi, maggiori possibilità di ottenere o riguadagnare la sincronizzazione durante un flusso di dati continuo. Il tempo intercharacter ha un valore molto inferiore sui sistemi moderni rispetto a quando le velocità di clock erano basse e la produttività del processore inferiore.

Se hai un flusso di dati essenzialmente continuo, quindi se non sincronizzato, qualsiasi bit alto sembrerà un bit di stop. Qualsiasi transizione alta bassa sembrerà un limite di byte. Se il ricevitore si avvia su un limite di 10 e non è un vero limite di avvio, questo verrà scoperto solo il 50% delle volte) (ovvero se il "bit di stop" finale è effettivamente un bit di dati basso e anche hai saltato il limite di stop / start originale lungo la strada. In media hai 1/4 di prospettiva di un limite di byte pari a 1/0 e falsamente simile a una coppia stop / start. Quanto sopra suggerisce che se scegli un falso stop- inizia la coppia, quindi c'è probabilmente circa il 50% di probabilità che tu scelga un altro nel tentativo seguente.

Se si utilizzano 2 bit di arresto (11), una sequenza di avvio di arresto valida è 110 che ha 1/8 possibilità di verificarsi nel traffico di dati casuale. La miscelazione di bit di stop e start originali nel flusso non sincronizzato modifica leggermente i sats, ma sembra relativamente improbabile che se si ottiene una sequenza di stop / start 110 falsa su un ciclo, ne si provi un altro tentativo successivo prima di inciampare sul 110 originale sequenza che si verifica successivamente.

Come si nota, 1 bit di stop produce 8/10 = 80% di throughput massimo e 2 bit di stop producono 8/11 = 72% di efficienza. La differenza nella velocità effettiva al limite totale è dell'80% / 72% = ~ 11% in più. questo è un utile guadagno in circostanze estreme ma non vaste e se il circuito è inattivo più del 10% delle volte ha un valore minimo. Se il circuito è rumoroso e soggetto a occasionali perdite di sincronizzazione, il bit di stop aggiuntivo può essere di grande aiuto. MA se ti interessa così tanto il throughput puoi spesso aumentare la velocità di trasmissione (non sempre) o passare al funzionamento completamente sincrono.


Non conosco alcun UART che può essere configurato per ignorare eventuali bit di inizio apparenti che non sono preceduti da più di un tempo di marcatura completo (in effetti, la maggior parte accetta un bit di inizio che è preceduto da mezzo tempo di marcatura e non può essere configurato per fare diversamente). Tale caratteristica potrebbe essere utile, però.
supercat,

Ti sei piuttosto imbattuto nella risposta corretta, se possiamo accettare che questa pratica risale ai giorni meccanici. Allora, il meccanismo del ricevitore aveva bisogno di circa 1 bit di tempo per fermarsi per essere pronto per il prossimo bit di avvio. Quindi il trasmettitore è stato costruito per avere un bit di stop di 1,5 bit. Ha avuto l'effetto che hai descritto. Se la sincronizzazione è andata persa, potrebbero esserci diversi caratteri di immondizia fino a quando non si è ripristinata la sincronizzazione. Quando arrivammo alle implementazioni elettroniche, il ricevitore poteva iniziare ad aspettare il prossimo bit di avvio immediatamente dopo aver visto il passaggio al livello di arresto - non aveva bisogno di imbottitura
gbarry

@gbarry - i methink non sono piuttosto inciampati nel tuo commento.
Russell McMahon,

In realtà, ho finito i personaggi :) Qualcosa non va?
Gbarry,

3

Per amplificare il punto di vista di mikeselectricstuff sul tempo di ricezione con "soft UART", un'applicazione di ricezione che saprà sempre quando accettare i dati e lo farà su base polling può spesso gestire baud rate più veloci di quanto sarebbe pratico con un UART soft guidato da interrupt. Tali applicazioni, tuttavia, possono elaborare i dati in entrata solo durante il tempo tra l'inizio del bit di stop di un byte e il bit di inizio del byte successivo; il tempo necessario per elaborare ciascun byte finisce per essere il fattore limitante per la velocità di comunicazione. L'elaborazione dei dati a 115.200-N-8-2 non è molto più impegnativa rispetto all'elaborazione a 57.600-N-8-1, ma è più veloce dell'80%.

A volte si può spingere ulteriormente le cose utilizzando formati di dati apparentemente meno efficienti. Ad esempio, uno può inviare ogni byte in due pezzi, uno con sette bit e uno con uno (gli MSB della parte a un bit sono tutti impostati). Se uno lo fa, anche con un solo bit di stop, ci saranno otto bit di marcatura tra la fine di una coppia di byte e l'inizio della successiva, permettendo così di spingere la velocità di bit quattro volte più alta di quella potrebbe fare solo con due bit di stop (e otto volte più alti di quello che si potrebbe fare con uno). Nonostante sia necessario inviare il doppio del numero di byte, il quadruplo aumento della velocità dei dati sarebbe una vittoria importante. Inoltre, sebbene ogni coppia di byte trasmessa possa essere utilizzata per inviare otto bit di dati, solo la codifica utilizza solo 130 su 256 possibili valori di byte,


Puoi anche eseguire il soft-UART baudrate alti (da 250 K in poi) generando un interrupt sul bordo dello startbit e rimanendo all'interno del codice di interrupt per l'intero byte - un stopbit extra può essere molto utile qui.
mikeselectricstuff

@mikeselectricstuff: un bit di stop aggiuntivo può essere molto utile, poiché può essere utile utilizzare solo alcuni dei bit in ciascun byte (richiedere l'impostazione del LSB di ciascun byte può essere utile perché si può derivare il timing dal fronte di salita di quel bit, anche se potrebbe esserci un piccolo ribaltamento quando si verifica l'interrupt). Una grande limitazione dell'approccio bit-interrupt-trigger-on-start-bit, tuttavia, è che non esiste alcun modo piacevole per inviare i dati mentre potrebbero arrivare i dati in entrata. I dati trasmessi o quelli ricevuti (o entrambi) andranno persi.
supercat

2

C'erano una volta mostri elettromeccanici chiamati teletipi. La maggior parte funzionava su motori AC sincroni con la frequenza della linea di alimentazione. Quindi c'era sempre la possibilità che due macchine comunicanti non fossero state sincronizzate con la stessa rete elettrica o addirittura funzionassero su corrente alternata usando frequenze diverse per quella materia.

Pertanto, al fine di consentire a una macchina più lenta di recuperare e non deviare dalla sincronizzazione, sono stati inviati due bit di arresto.

Per altri scopi, come consentire al carrello di stampa di tornare all'inizio di una nuova riga, sono stati inviati un CR, LF più due rubout (tutti i fori su un nastro a 8 livelli).

Era consuetudine per i circuiti che funzionavano a una velocità di 110 Baud e solo più lentamente.


1

La lentezza dei dispositivi meccanici riceventi è stata la ragione dietro l'aggiunta dei bit di stop extra, tuttavia i dispositivi oggi sono abbastanza veloci e funzionano a baud rate ancora più elevati senza la necessità di un bit di stop aggiuntivo

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.