Un baudrate nella comunicazione seriale (USB o RS232) deve essere esatto?


8

Nella comunicazione seriale, il baudrate significa che dobbiamo usare la velocità esatta del clock o è una gamma di velocità che possiamo usare?

e se è un valore esatto, quanto dovrebbe essere esatto? ad esempio, posso usare 555 come l'orologio di un circuito di comunicazione seriale?


Un UART di solito può tollerare una deviazione di circa il 3% circa. Dipende da uno specifico, però.
Eugene Sh.

Per USB, verrà specificato nello standard, che può essere scaricato gratuitamente.
The Photon,

Risposte:


6

I tempi devono essere abbastanza precisi da non andare alla deriva prima che il protocollo risincronizzi.


La seriale UART si risincronizza su ogni byte e un byte è di circa 10 bit (8 bit di dati più start e stop). Partiamo dal presupposto che il nostro UART punta al centro di ogni bit. Se tutto è perfetto e solo un'estremità è imprecisa, ciò consente una differenza di circa il 5% tra le due estremità del collegamento.

Però:

  1. Entrambe le estremità del collegamento potrebbero essere imprecise rispetto al nominale. Nel peggiore dei casi un'estremità può essere inferiore al valore nominale mentre l'altra è al di sopra del valore nominale.
  2. Potrebbero esserci errori sistematici. Ad esempio, la maggior parte degli UART ha una gamma limitata di impostazioni del generatore di baud rate.
  3. Il tuo UART si basa su un orologio master con una velocità finita. Anche se il clock e il generatore di baud rate sono perfetti, ciò comporterà che non raggiunga il centro esatto di ciascun bit.

La linea di fondo è che l'errore dell'1% sul tuo orologio va quasi sicuramente bene. L'errore del 5% è quasi certamente un problema. Tra queste due figure potrebbe essere o meno un problema a seconda del quadro generale.

Questo è un ordine elevato per un oscilatore RC. Supponiamo che la tua R abbia una tolleranza dell'1% e che la tua C abbia una tolleranza del 2%. Ciò offre una tolleranza del 3% circa per la costante di tempo della rete RC e cioè prima di pensare a eventuali errori introdotti dal chip del driver.

Quindi la linea di fondo è che dovresti guardare un risonatore di cristallo o ceramica.


Per quanto riguarda l'USB non ho l'esperienza per analizzare dai primi principi, ma https://www.silabs.com/community/interface/knowledge-base.entry.html/2004/03/15/usb_clock_tolerance-gVai dice 1,5% per bassa velocità e 0,25% per piena velocità.


Se si può programmare la velocità di trasmissione in incrementi del 3% o più fini e si può usare una sequenza di "allenamento" adatta, l'accuratezza RC potrebbe non essere un problema. Se uno sa che l'altra estremità si alternerà inviando ripetutamente 0xF8 e 0xF0 (basso rispettivamente per quattro e cinque bit) impostando il proprio baud rate del 33% più velocemente si dovrebbe far sì che uno riceva costantemente 0xF0 (5,33 bit volte) e 0x80 (6,67 bit volte). La ricezione di altri valori farà sapere che uno è più veloce o più lento di quella "33% in più", mentre la ricezione di 0xF0 0x80 ripetuti indicherà che si dovrebbe ridurre la velocità del 25% e iniziare la comunicazione reale.
supercat

8

Gli UART tipicamente utilizzati nei sistemi seriali di tipo RS232 funzionano campionando la linea di dati da qualche parte a metà bit secondo una divisione dell'orologio di frequenza base baud rate predefinito. Pertanto, se i dati inviati e il ricevitore non sono sulla stessa frequenza, il "punto di campionamento" vagherà più vicino al bordo del frame di bit su bit successivi.

Con un UART normale la lunghezza dei bit per un byte è 10 o 11 bit. 1 Start, 8 dati e 1 o 2 bit di stop. Mezzo bit di vagabondaggio sul decimo bit si traduce in errore 0,5 / 10 = 5%.

Tuttavia, in realtà la tua tolleranza è inferiore a quella perché devi anche aggiungere la latenza del tuo periodo di frequenza di base che aggiungerà un offset dal fronte del bit iniziale. Maggiore è la frequenza di base, minore sarà l'effetto.

Per quanto riguarda l'utilizzo di un timer 555 a questo scopo, non lo consiglierei a meno che non preveda di effettuare una regolazione manuale nel circuito 555.

Un USART invece utilizza un metodo di controllo più complesso che tenta di sincronizzare la trasmissione ai dati ricevuti. Ciò può avvenire utilizzando un modello di dati che ha un clock incorporato, utilizzando un clock passato o mediante una qualche forma di blocco di fase ai bordi dei dati ricevuti. (Anche se probabilmente quest'ultimo è veramente pseudo-sincrono.)


Dato che sai di cosa stai parlando, ho pensato di menzionare l'abbreviazione "U S ART", che dovrebbe far parte di questa risposta. Bene, renderebbe la risposta completa secondo me , e dopo ciò meriterei un +1 da parte mia.
Harry Svensson,

1
@HarrySvensson hmm .. Sono d'accordo .. ma cercare di decidere è che rende la risposta più confusa per un OP di imballaggio 555.
Trevor_G,

1
Un USART è diverso in quanto può essere sincrono. E se viene utilizzato come interfaccia sincrona, l'orologio è comune ad entrambe le estremità e quindi la velocità di clock non ha importanza.
Gbarry,

1
Oh bene, può essere nei commenti invece, grazie @gbarry. Non mi dispiace +1 a Trevor.
Harry Svensson,

@HarrySvensson Ho aggiunto una breve spiegazione ondulata della differenza di completezza ..
Trevor_G
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.