Domanda:
Perché abbiamo bisogno del bit di avvio / arresto per la trasmissione asincrona
amjad
2020-06-10 20:03:11 UTC
view on stackexchange narkive permalink

Stavo leggendo un libro che dice

La trasmissione asincrona è così chiamata perché la tempistica di un segnale non è importante.Invece, le informazioni vengono ricevute e tradotte secondo schemi concordati.Per avvisare il ricevitore dell'arrivo di un nuovo gruppo, quindi, viene aggiunto un bit in più all'inizio di ogni byte.Questo bit, di solito uno 0, è chiamato bit di inizio.Per far sapere al destinatario che il byte è finito, 1 o più bit aggiuntivi vengono aggiunti alla fine del byte.Questi bit, solitamente 1, sono chiamati bit di stop.

Come mostra l'immagine seguente:

enter image description here

Non ho capito bene, perché abbiamo bisogno di un bit di avvio / arresto?Non è che un byte è composto da 8 bit, quindi il ricevitore deve solo contare quanti bit ha ricevuto finora, se il numero è 8, ha un byte e ripete il processo.Allora perché abbiamo bisogno del bit start / stop?

Quindi come conti i bit se non sai quando iniziare a contare?Ricorda, i messaggi non sono continui e possono arrivare sporadicamente, e sia HI che LO, i tuoi unici due stati sono già entrambi utilizzati per rappresentare i dati.Non esiste un terzo stato per rappresentare l'assenza di un messaggio.
asincrono, nessun clock, è necessario almeno un fronte e una velocità concordata (o se possibile rilevata) in modo da poter eseguire il campionamento delle celle a metà bit per quegli 8 bit dare o ricevere (parità, len, ecc.).E questo non è sufficiente per sapere dove ti trovi a seconda della situazione potresti aver bisogno di un certo numero di errori di inquadratura finché non pensi di essere sincronizzato.
anche se avessi un orologio non sai dove sono i confini potresti avere qualcosa come spi dove hai un orologio e un segnale di selezione in modo da poter vedere sia dove campionare sia come dividere ciò che stai campionando in modo da poterlo recuperareDall'altro lato.
"il tempismo di un segnale non è importante" - sappi che c'è uno scherzo se ne ho sentito uno.
Cinque risposte:
Andy aka
2020-06-10 20:05:50 UTC
view on stackexchange narkive permalink

Se non avessi un bit di inizio zero che ha dato il via alla temporizzazione al ricevitore, come sapresti cosa fare quando un byte seriale arriva con una prima cifra nel flusso di dati?Cosa succede se anche il bit successivo è 1 e il bit successivo - cosa succede se tutti i bit sono 1?Quindi mancherebbe l'intero byte perché non cambierebbe nulla (perché non ha un bit iniziale di 0).

8 bit alti regolari con bit iniziale zero iniziale: -

enter image description here

Bit di inizio mancante: -

enter image description here

I commenti non sono per discussioni estese;questa conversazione è stata [spostata in chat] (https://chat.stackexchange.com/rooms/109283/discussion-on-answer-by-andy-aka-why-we-need-start-stop-bit-for-asincrono-tra).
Cort Ammon
2020-06-12 01:33:31 UTC
view on stackexchange narkive permalink

Un'altra considerazione, oltre alla risposta accettata, è il tempismo.Avrai una deriva tra l'orologio del mittente e quello del destinatario, quindi il destinatario deve "recuperare" l'orologio in un modo o nell'altro.Ci sono schemi fantasiosi come 10 / 8B che usano segnali inattivi per farlo, ma l'approccio semplice negli UART è quello di avere un "bit di inizio", la cui presenza segnala il fronte di salita del segnale.Ciò consente al ricevitore di risincronizzare il proprio orologio per ricevere il byte in arrivo.

Questi schemi di inizio e fine devono verificarsi abbastanza spesso da garantire che l'allineamento non si sposti troppo durante la ricezione.Questo porta ad avviare e arrestare i bit che compaiono ogni byte.È una regola semplice, anche se per altri versi non è "ideale".

Buon punto da sottolineare, che stavo cercando di far capire all'OP.
Tanner Swett
2020-06-11 23:25:34 UTC
view on stackexchange narkive permalink

Non ho capito bene, perché abbiamo bisogno di un bit di avvio / arresto? Non è che un byte è composto da 8 bit, quindi il ricevitore deve solo contare quanti bit ha ricevuto finora, se il numero è 8, ha un byte e ripete il processo. Allora perché abbiamo bisogno del bit start / stop?

Il ricevitore non può contare i bit che sta ricevendo, perché il ricevitore non sa se sta ricevendo bit!

Immaginiamo che il mittente e il destinatario stiano comunicando usando il suono e immaginiamo che uno 0 sia rappresentato da un secondo di silenzio e un 1 sia rappresentato da un secondo di suono. Nel tuo libro, lo "stato di inattività", ovvero ciò che il mittente invia quando non ha dati effettivi da inviare, è 1, che significa suono.

Ora supponi di essere il destinatario e il mittente non utilizza un bit di inizio. Si sentono otto secondi di suono continuo. Hai appena sentito il byte "11111111" o il mittente è inattivo? Non hai modo di saperlo, perché ti sembra tutto uguale.

In alternativa, supponi di sentire un secondo di silenzio, poi sei secondi di suono, quindi un secondo di silenzio. Hai appena sentito il byte "01111110"? O forse era il byte "11110111" seguito dal byte "11101111"? Ancora una volta, non hai modo di saperlo.

È qui che entra in gioco il bit di inizio. Ogni volta che il mittente vuole inviare un byte, prima invia uno 0 (un secondo di silenzio), poi invia il byte di dati.

Ora il tuo lavoro di ricevitore è molto più semplice! Se senti nove secondi di suono, sai che il mittente è semplicemente inattivo. Se, invece, senti un secondo di silenzio seguito da otto secondi di suono, sai che il mittente ha appena inviato il byte "11111111".

Ovviamente, la maggior parte dei sistemi di comunicazione delle macchine non utilizza il suono; invece usano l'elettricità. Ma i segnali elettrici funzionano proprio come il suono. Il destinatario riceverà sempre qualcosa , indipendentemente dal fatto che lo vogliamo o meno. Quindi dobbiamo dare al ricevitore un modo per sapere se sta ricevendo dati reali o solo rumore inattivo.

Per rispondere a questa domanda specifica dal tuo commento:

solo una domanda, se non abbiamo il valore "idle", quindi quando non ci sono dati da inviare, il ricevitore non riceverà nulla, quindi può contare ogni 8 bit come un byte senza bisogno di stop / start bit?

È fisicamente impossibile non avere un valore inattivo. Se hai un cavo elettrico, allora è possibile inviare una tensione positiva, o una tensione negativa, o una tensione di 0, ma è fisicamente impossibile non inviare alcuna tensione. Ciò significa che il ricevitore riceverà sempre un po 'di tensione, indipendentemente da ciò che facciamo. Quindi dobbiamo dare al ricevitore un modo per sapere se la tensione che sta ricevendo è significativa o no.

auspicious99
2020-06-10 21:54:43 UTC
view on stackexchange narkive permalink

Forse la confusione è dovuta al fatto che noi umani quando vediamo un diagramma come nella tua domanda, vediamo esattamente dove sono tutti i bit, quale segue quale, ecc. Tuttavia, immagina di essere il destinatario e tutto ciò che hai con cui lavorare è un flusso di segnale in ingresso (ad esempio, 2 livelli, un livello (diciamo, alto) per rappresentare un bit 1, un altro livello (diciamo, basso) per rappresentare un bit 0), come segnale elettrico analogico o stabile o che cambia da un valore all'altro. Ancora una volta, nota che il destinatario non è un essere umano che vede il primo bit, il secondo bit e così via con una vista globale.

Supponiamo che il valore "idle" sia lo stesso del valore a 1 bit (alto). Allora non sai quando i bit iniziano ad arrivare a meno che non abbiamo la transizione da 1 a 0. Altrimenti, se il primo bit è 1, come fai a sapere quando inizia?

Quindi per i bit di stop, vuoi che sia opposto al bit di inizio (quindi, vuoi che sia valori di 1), quindi segna la fine di un byte e puoi sapere quando inizia il byte successivo quando di nuovo va da alto a basso.

Si potrebbe anche sostenere che invece di una visione globale, è una visione non causale.Non solo non è causale, ma i diagrammi sono anche disegnati * dopo * che qualcuno o qualcosa ha già capito dove tutto inizia e finisce e li ha etichettati.Potresti anche dire "Perché abbiamo bisogno di tutto questo lavoro per risolvere questa equazione? La risposta è proprio qui alla fine! Usala e basta!"
@auspicious99 Grazie per la tua risposta.solo una domanda, se non abbiamo valore "idle", quindi quando non ci sono dati da inviare, il ricevitore non riceverà nulla, quindi può contare ogni 8 bit come un byte senza bisogno di bit di stop / start?
@amjad Per evitare confusione, ogni byte inviato ha un bit di inizio e uno di fine aggiunto, quindi vengono inviati 10 bit ogni volta.Alcuni lo chiamano ancora baud rate.Il ricevitore si aspetta 10 bit per byte di dati.Ricorda che i bit di inizio e fine aiutano a mantenere il ricevitore sincronizzato con i dati.I dati a 8 bit possono essere tutti gli 1 o tutti gli 0.Senza transizione da 0 a 1 o da 1 a 0, il limite del byte non può essere rilevato.
Notare che in questo caso il bit di stop non "segna veramente la fine di un byte", non segna nulla, la fine del byte è nota dalla temporizzazione.Il bit di stop è lì per ripristinare la linea al suo stato inattivo in modo che il bit di avvio successivo possa essere rilevato ogni volta che arriva.
@vsz grazie per la tua risposta.Ma abbiamo davvero bisogno del bit di stop per ripristinare la linea al suo stato di inattività?Mi è stato detto che quando il canale è inattivo, invia ancora 1 al ricevitore
Ma come fa il canale a * sapere * che è inattivo?;)
@amjad sul lato del trasmettitore, immagina di avere un interruttore e devi scegliere un valore o l'altro in ogni momento, mettendo l'interruttore in una posizione o nell'altra.
@amjad: forse sarebbe più facile pensare al bit di inizio semplicemente come riportare la linea allo stato inattivo, piuttosto che come un bit.
@amjad: "così può contare ogni 8 bit come un byte senza bisogno di bit di stop / start": No. Stai descrivendo la comunicazione sincrona (che ha problemi analoghi nel mantenere sincronizzati gli orologi alla deriva casualmente di tutti).Nella comunicazione asincrona può trascorrere un periodo di tempo qualsiasi tra la fine di un byte e l'inizio del successivo.Quel tempo non deve essere un multiplo del tempo per trasmettere un po '.
@auspicious99: In assenza di bit di stop, cosa accadrebbe se un dispositivo inviasse 5.000 byte zero consecutivi prima di lasciare la linea inattiva per un po '?Quanto dovrebbe essere accurato l'orologio di un destinatario per determinare che il mittente ha inviato esattamente 5.000 zero byte, invece di 4.999 zeri e 0x80 o 5.000 zeri seguiti da 0xFF?Esistono modi per progettare protocolli asincroni per garantire che all'interno di qualsiasi comunicazione continua ci saranno transizioni di linea periodiche senza utilizzare bit di stop, ma la maggior parte degli UART non può essere configurata per supportarli.
supercat
2020-06-12 02:39:51 UTC
view on stackexchange narkive permalink

Se una linea inattiva è rappresentata da un flusso continuo dello stesso stato che non ha un inizio chiaro, ogni trasmissione deve iniziare inviando qualcosa che differisce da una condizione di linea inattiva, indipendentemente dal fatto che il primo bit trasmesso sia zero o uno . In assenza di altri mezzi per indicare l'inizio di una trasmissione, un bit di inizio è quindi generalmente essenziale nei protocolli sincroni e asincroni in cui una linea inattiva sarebbe indistinguibile da una stringa uniforme di uno o zero.

Sebbene esistano modi per progettare protocolli che non richiedono bit di inizio e fine separati tra i byte e quindi migliorano l'efficienza delle comunicazioni del 10%, tendono ad essere un po 'più complicati del protocollo corrente che è stato progettato per essere meccanicamente decodificato con una combinazione di un solenoide, un motore e alcune camme. Una delle cose che renderebbe difficile fare senza bit di stop è che se un bit di inizio guida sempre la linea all'opposto dello stato di inattività e ogni bit di dati può essere indipendentemente alto o basso, allora l'azione di inviare molti byte zero consecutivi potrebbe semplicemente abbassare la linea per un tempo arbitrariamente lungo senza transizioni per garantire che mittente e destinatario rimangano sincronizzati.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...