Come fanno due UART a sapere quale baud rate usare?


14

Sto leggendo il protocollo standard per UART e penso che se l'UART ricevente non avesse idea di quale velocità di trasmissione dei dati fosse trasmessa, ci sarebbero molti problemi. Se la velocità di trasmissione presunta è inferiore alla velocità di trasmissione in cui i dati vengono trasmessi, ci saranno bit che non verrebbero "visti" dall'UART ricevente. D'altra parte se la velocità di trasmissione utilizzata dal ricevitore è superiore alla velocità di trasmissione in cui i dati vengono trasmessi, ci saranno bit che verranno conteggiati due volte e risulterebbe che i dati vengono "letti" in modo errato.

La mia conoscenza di UART è che quando la linea è inattiva, viene mantenuta su un '1', il bit di Start è uno '0' e il bit di Stop è un '1'. Inoltre, il bit di Stop essendo '1' non ha alcuna differenza con '1' quando la linea è inattiva o c'è un modo per differenziare?

Due UART comunicanti concordano innanzitutto su quale baud rate useranno? Se sì, come lo fanno?


Il "bit di stop" potrebbe ugualmente essere chiamato "ritorno allo stato inattivo", ma rendendolo un po ', ha una lunghezza minima definita, ma dopo quel tempo minimo garantito, la linea rimarrà in uno stato "1" fino al arriva il prossimo personaggio.
Peter Bennett,

Potrebbero cambiare casualmente i baud rate comuni fino a quando qualcosa non funziona XD.
Bradman175,

3
Hayes ha avviato un modo per consentire all'UART nei propri modem di impostare la stessa velocità di trasmissione del terminale che comunica con esso utilizzando una sequenza di caratteri "AT" all'inizio dei comandi. Questo di solito non è stato decodificato dall'UART, ma dal firmware in tempo reale che avrebbe quindi configurato l'UART per ricevere il resto della riga di comando. Fondamentalmente ha rilevato l'ampiezza del bit iniziale e il modo in cui è stata impostata la parità.
apposto il

@infix Quindi, se ho intenzione di modificare o creare un codice Verilog per UART, posso farlo in modo che rilevi questa sequenza 'AT' e regoli la sua velocità di trasmissione da lì? Stavo pensando di inizializzarlo al baud rate più alto in modo che potesse catturare tutto e da lì, trovare la sequenza "AT".
Batibot323,

Un protocollo di comunicazione basato su UART (chiamato LIN) che può essere visto molto nell'industria automobilistica ha un meccanismo di rilevamento auto-baud, ma i nodi master e slave "devono" corrispondere in termini di lunghezza dei dati e lunghezza dei bit di arresto. Ciò significa che rilevare solo il baud rate non è sufficiente.
Rohat Kılıç,

Risposte:


26

Gli UART ordinari devono essere preconfigurati con il baud rate desiderato (nonché la lunghezza della parola, i bit di stop, la parità, ecc.) Tradizionalmente da un essere umano.

Da diversi decenni ormai ci sono state implementazioni del rilevamento "baud automatico" in alcune impostazioni, che di solito funziona misurando le caratteristiche chiave della forma d'onda per dedurre il baud rate. Le prime versioni necessitavano di un carattere noto da trasmettere, ma versioni più sofisticate potrebbero essere in grado di trovare la frequenza da dati più arbitrari.

Un UART ricevente in genere ha un orologio locale che funziona a una velocità maggiore, in genere 8 o 16 volte la velocità di trasmissione. Questo è usato per campionare il segnale in entrata e rilevare i bit all'interno di una parola in un modo che può tollerare qualche percento di errore. Anche due oscillatori a cristallo non corrisponderebbero perfettamente ai tassi, ma la tolleranza agli errori può consentire l'uso di alcune fonti meno precise, a volte inclusi oscillatori su chip troncati, ecc. Può anche aiutare a sostenere il fatto che la divisione delle frequenze degli oscillatori popolari può solo produrre un'approssimazione imprecisa a determinati baud rate - ai vecchi tempi, i master clock UART a volte avevano bisogno di frequenze particolari per accedere a baud rate popolari, ad esempio 11,0592 MHz sulla famiglia 8051.


2
La mia ipotesi sul rilevamento automatico del baud può essere un timer e un contatore che lavorano simultaneamente per trovare bordi e tempo tra i bordi?
ammar.cma,

1
Il problema è che non esiste un algoritmo che possa prendere una forma d'onda arbitraria "uart serial" e determinare in modo affidabile il baudrate. È possibile trovare il tempo minimo tra le transizioni in modo abbastanza semplice, ma ciò non rappresenta necessariamente un periodo di bit singolo.
Peter Green,

Esiste un algoritmo (l'ho sentito chiamato "bauding automatico" in vari punti) ma quando implementato nell'ambito di risorse limitato di un chip UART, a volte l'unico modo per farlo è consumare alcuni dei dati inviati e usandolo per la calibrazione che persisterà per il resto della sessione. Questo spesso non è desiderabile. Se eseguito nel software e concesso un po 'di latenza, è banale farlo senza consumare dati (memorizzandolo temporaneamente per analisi) almeno per comunicazioni a bassa velocità (meno di 200 KB / s). Le velocità più elevate presentano ulteriori difficoltà.
Wossname

8

Due UART "concordano" sulla velocità di trasmissione mediante la documentazione e impostando manualmente la velocità di trasmissione, incluso il protocollo di sincronizzazione, la dimensione dei bit di arresto, ecc.


1
..... per entrambe le estremità dell'interfaccia.
Michael Karas,

2

Sì, tutto è impostato manualmente, il che è spesso un po 'una seccatura, specialmente quando i sistemi sono scarsamente documentati (ti sto guardando, ogni sistema embedded di sempre).

So che USB, SATA e molti altri protocolli dati moderni iniziano dopo un evento di reset o inizializzazione alla velocità più bassa con una configurazione standard standardizzata e negoziano con tutti gli altri (o solo il master, a seconda del protocollo) fino a velocità più elevate . Alcuni usano anche resistenze pull-up o pull-down sulle loro linee dati / alimentazione per indicare le velocità supportate.

Vedi questo sito web sulla negoziazione USB se sei interessato ad approfondire un po 'di più in altri protocolli.

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.