Salta al contenuto
Note per Studenti Comunicazione seriale - UART, RS232, RS422 e RS485

Comunicazione seriale - UART, RS232, RS422 e RS485

In questa pagina 4
** invia un bit alla volta su pochi fili. **Asincrona** (UART): senza clock comune, ogni dato è inquadrato da **1 bit di start**, 5-8 bit di dati, parità opzionale e 1-2 **bit di stop**; per 8 bit di dati servono 10 bit sulla linea (efficienza 80%); tempo di bit BT=1/bpsBT=1/bps; il ricevitore campiona a 1,5 BT,2,5 BT,…1{,}5\,BT,2{,}5\,BT,\dots dal fronte di start e tollera uno scostamento di frequenza di circa ±5,3%\pm5{,}3\% (o 4,6%4{,}6\% con campionamento a 16×). **Sincrona**: il trasmettitore invia anche il clock (e il frame sync), efficienza 100%. Livelli fisici: **RS232** (±12\pm12 V, 1 = −12-12 V), **RS422/RS485** (differenziale, doppino, 10 Mbit/s su <15<15 m; RS485 multi-trasmettitore), **loop di corrente** 0-20 mA. -->

Lo scambio di dati tra un µC o DSP e una periferica esterna si può fare in modo molto semplice con una trasmissione seriale: trasmissione e ricezione (anche simultanee) un bit alla volta, con un supporto fisico minimo (di solito 3 o 4 conduttori). La trasmissione in parallelo richiede bus con molte più linee. Si distingue la trasmissione asincrona dalla sincrona: la sincrona permette velocità maggiori ma richiede un supporto fisico più complesso; l'asincrona è molto usata nei µC (moduli UART), la sincrona è più comune nei DSP e, nei µC, per il bus I2C e l'SPI (Bus I2C, SPI e CANI2C: bus seriale sincrono a 2 fili (SDA dati, SCL clock, con resistenze di pull-up), un master (il µC) e molti slave con indirizzo a 7 bit; byte da 9 bit (8 + ACK dato dal ricevitore abbassando SDA); start: SDA scende con SCL alto; stop: SDA sale con SCL alto; 100 kbit/s (normale), 400 kbit/s (fast); half-duplex. SPISerial Peripheral Interface: bus seriale sincrono a quattro fili: 4 fili (MOSI, MISO, SCK, CS), full duplex, master e slave selezionati da CS, 4 modi (CPOL, CPHA). CAN: bus differenziale (120 Ω) asincrono, messaggi etichettati da un identificatore (11 o 29 bit), arbitraggio automatico (vince l'ID più basso), bit stuffing dopo 5 bit uguali, CRC a 15 bit, contatori di errori (127, 255).Bus I2C, SPI e CAN →).

Trasmissione seriale asincrona

I clock del trasmettitore (Tx) e del ricevitore (Rx) non sono sincronizzati: il ricevitore deve estrarre il sincronismo dalla stessa linea dei dati. La convenzione: ogni dato è preceduto da un bit di start (transizione dalla linea inattiva allo stato opposto) e seguito da uno o più bit di stop (stessa polarità della linea inattiva). Tra un dato e il successivo la linea può restare inattiva a lungo. È uno standard per le comunicazioni punto-punto a bassa velocità.

Parametri tipici (impostati nella UARTUniversal Asynchronous Receiver/Transmitter: periferica per la trasmissione seriale asincrona): bit di startbit che segna l'inizio di un dato nella trasmissione asincrona 1; bit di dati da 5 a 8; bit di paritàbit aggiuntivo che permette di rivelare un errore su un bit nessuno o 1; bit di stopbit (o bit) che segnano la fine di un dato 1, 1,5 o 2; velocità 1200, 2400, 4800, 9600, 19200 bit/s (bpsbit per secondo).

Parità. Un bit aggiuntivo (opzionale) trasmesso dopo il dato per rivelare errori: si pone a 1 se la somma dei bit trasmessi è pari (o dispari, per convenzione). Il ricevitore lo ricalcola: se è diverso segnala errore (due errori sullo stesso dato sono molto meno probabili di uno).

Efficienza. Per un dato a 8 bit con start e stop servono 10 bit sulla linea: il canale è sfruttato all'80% (il 20% è overhead); con parità o più bit di stop peggiora.

Tempo di trasmissione. Il tempo di bitdurata di un bit sulla linea: 1 diviso la velocità in bit al secondo è BT=1/bpsBT=1/bps. A 19200 bps BT=52,1 μBT=52{,}1\ \mus. Per un solo byte (10 bit) occorrono 10⋅52,1=521 μ10\cdot52{,}1=521\ \mus; per un dato a 16 bit trasmesso come due byte (20 bit) 20/19200=1042 μ20/19200=1042\ \mus.

Campionamento del ricevitore. Per leggere correttamente, il ricevitore campiona ciascun bit a metà dell'intervallo. Dalla transizione di start, i campioni dei bit di un dato a 8 bit cadono dopo 1,5 BT,2,5 BT,…,8,5 BT1{,}5\,BT,2{,}5\,BT,\dots,8{,}5\,BT; dopo 9,5 BT9{,}5\,BT la linea deve essere a livello di stop, altrimenti c'è un errore di sincronismo. Poiché i due clock non sono sincronizzati, il massimo errore relativo tra le frequenze si ricava dal fatto che l'errore massimo ammesso è ±0,5 BT\pm0{,}5\,BT accumulato in 9,5 BT9{,}5\,BT: ΔffTx=∣fTx−fRx∣fTx=0,59,5=0,053=5,3%.\frac{\Delta f}{f_{Tx}}=\frac{|f_{Tx}-f_{Rx}|}{f_{Tx}}=\frac{0{,}5}{9{,}5}=0{,}053=5{,}3\%. Il ricevitore campiona di solito la linea a 16 volte la frequenza di trasmissione: la sincronizzazione scatta al primo campione "alto" dopo una serie di "bassi"; dopo 6 periodi di campionamento acquisisce 3 campioni consecutivi per confermare lo start; poi legge gruppi di 3 campioni distanti 16 periodi e decide il valore del bit a maggioranza (riduce la probabilità di errore). L'incertezza nel rilevare lo start (ritardo massimo 116BT\frac1{16}BT) porta il limite a ΔffTx=0,5−1169,5=0,43759,5=0,046=4,6%.\frac{\Delta f}{f_{Tx}}=\frac{0{,}5-\frac1{16}}{9{,}5}=\frac{0{,}4375}{9{,}5}=0{,}046=4{,}6\%.

Frequenza di clock del trasmettitore. La UART usa un clock a 16×bps16\times bps derivato dal clock del sistema con un prescaler: per bps=19200bps=19200 il clock è 16⋅19200=307,216\cdot19200=307{,}2 kHz; con clock di sistema 4 MHz il prescaler (fattore di divisione) è 4 MHz307,2 kHz=13,02→13=0x000D\frac{4\text{ MHz}}{307{,}2\text{ kHz}}=13{,}02\to13=\texttt{0x000D} (il baud rate effettivo è 4 MHz/13/16=192314\text{ MHz}/13/16=19231 bps, errore 0,16%0{,}16\%, ben sotto il 4,6%).

Trasmissione seriale sincrona

Si basa sulla sincronizzazione dei clock di trasmettitore e ricevitore: il trasmettitore è masteril dispositivo che comanda la comunicazione e fornisce il clock e invia anche il proprio clock su una linea dedicata; spesso ci sono linee aggiuntive di frame syncsegnale di sincronismo che indica l'inizio di una parola (inizio parola). Le linee operano sui dati per il 100% del tempo (nessun bit di start/stop). Il fronte (per esempio di discesa) del clock dice al ricevitore quando il dato è stabile. Le periferiche sincrone (USRT) permettono di configurare: polarità del clock (quale fronte campiona), polarità dei dati, ordine dei bit (MSB first o LSB first), dimensione (8 o 16 bit), durata e frequenza del segnale di frame (spesso un BTBT, talvolta ogni 2 parole), frequenza del clock (divisore programmabile con prescaler o predefinita o esterna).

Standard di livello fisico

Definiscono i conduttori, i livelli di tensione e il pilotaggio delle linee. Principali: RS232, RS422/RS485, loop di corrente 0-20 mA.

  • RS232 (1962, più volte modificato): pensato per il collegamento tra un DTEData Terminal Equipment: il terminale, per esempio un computer (computer) e un modem, poi usato per ogni punto-punto. Il connettore ha 25 poli (o 9); per la comunicazione asincrona bastano 3 linee (Tx, Rx, massa). Livelli: +12+12 V e −12-12 V, con −12-12 V = livello logico 1 e +12+12 V = livello logico 0 (logica negativa); molti dispositivi lavorano anche a ±10\pm10 V. I µC lavorano a 0-5 V (o 3,3 V): serve un driver come il MAX232circuito integrato che adatta i livelli 0-5 V ai livelli RS232 e viceversa, che con un duplicatore di tensione e un inverter genera ±10\pm10 V da 5 V (condensatori da 1 µF).
  • RS422: trasmissione differenzialein cui il segnale è la differenza di tensione tra due conduttori su un doppinocoppia di conduttori intrecciati, che riduce l'accoppiamento di disturbi induttivi intrecciato (riduce gli accoppiamenti induttivi) con terminazioni da 125 Ω (120 Ω). Per la maggiore immunità ai disturbi supporta velocità elevate (10 Mbit/s su meno di 15 m). Gli accoppiamenti capacitivi sono resi ininfluenti perché il ricevitore è insensibile al modo comunela tensione comune ai due conduttori, che il ricevitore differenziale ignora.
  • RS485: elettricamente simile all'RS422 ma consente più trasmettitori sulla stessa linea (con un comando di abilitazione che porta i trasmettitori in alta impedenzastato di uscita scollegata, che permette a più trasmettitori di condividere la linea). Molto usati in ambito industriale per la robustezza ai disturbi; spesso con conduttori schermati.
  • Loop di corrente 0-20 mA: il livello 1 è il passaggio di una corrente (20 mA), lo 0 è assenza di corrente. Massima immunità ai disturbi elettromagnetici (usato in passato in ambito industriale); si usano driver optoisolatiseparati galvanicamente con un accoppiatore ottico che separano galvanicamente Tx e Rx anche per migliaia di volt. Esistono anche trasmissioni senza alcuno standard (sistemi chiusi).

Periferiche. Molti µC e alcuni DSP integrano UART (asincrona) e/o USRT, SPI; spesso I2C e CAN; sempre più spesso anche interfacce Ethernet. Programmare una USART è semplice (bit rate, parità, lunghezza); programmare una periferica di bus (I2C, CAN, Ethernet) è più complesso perché serve anche il protocollo (si usano librerie).

Errori comuni

  • Dimenticare i bit di start e di stop nel calcolo del tempo di trasmissione (8 bit di dato = 10 bit).
  • Confondere il baud rate (= bpsbps per modulazioni a due livelli) con la frequenza del clock della UART (16 volte maggiore).
  • Credere che RS232 usi livelli logici 0/5 V: usa ±12\pm12 V in logica negativa.
  • Dire che la UART richiede il clock sul cavo: è proprio il contrario della trasmissione sincrona.

Versione ripasso

Esercizi su questo argomento

Teoria collegata