Comunicazione seriale - UART, RS232, RS422 e RS485
In questa pagina 4
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 è . A 19200 bps s. Per un solo byte (10 bit) occorrono s; per un dato a 16 bit trasmesso come due byte (20 bit) s.
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 ; dopo 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 è accumulato in : 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 ) porta il limite a
Frequenza di clock del trasmettitore. La UART usa un clock a derivato dal clock del sistema con un prescaler: per il clock è kHz; con clock di sistema 4 MHz il prescaler (fattore di divisione) è (il baud rate effettivo è bps, errore , 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 , 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: V e V, con V = livello logico 1 e V = livello logico 0 (logica negativa); molti dispositivi lavorano anche a 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 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 (= 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 V in logica negativa.
- Dire che la UART richiede il clock sul cavo: è proprio il contrario della trasmissione sincrona.
Versione ripasso
- Asincrona (UART): start 1 bit, dati 5-8, parità opzionale, stop 1-2; 8 dati → 10 bit (80%); (19200: 52,1 µs; byte 521 µs; 2 byte 1042 µs).
- Campionamento: a dallo start; tolleranza ; con 16× e rilevamento start ; voto a maggioranza su 3 campioni.
- Clock UART: (19200: 307,2 kHz; da 4 MHz prescaler 13 = ).
- Sincrona: clock e frame sync sul cavo, efficienza 100%, polarità e ordine configurabili.
- Fisico: RS232 V ( V = 1, MAX232); RS422 differenziale (10 Mbit/s su m); RS485 multi-trasmettitore; loop 0-20 mA optoisolato.
- Errori: start/stop dimenticati; baud ≠ clock UART; RS232 a 0/5 V (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 →).
Esercizi su questo argomento
- Esercizio 21 · controllo digitale della velocità di un motore con regolatore PI, scale, timer e trasmissione seriale (tema d'esame 3 settembre 2020)
- Esercizio 27 · comunicazione seriale asincrona e bus I2C, tempi di trasmissione e tolleranza di frequenza (temi d'esame febbraio 2023, luglio 2026 e settembre 2026)
- Esercizio 31 · sistema di controllo di un ascensore con microcontrollore a 8 bit (tema d'esame 18 luglio 2006)