# EIA RS-232

EIA RS-232 (acronimo di Electronic Industries Alliance Recommended Standard 232, più semplicemente come RS-232 o impropriamente porta seriale), in informatica, elettronica e telecomunicazioni, indica uno standard EIA equivalente allo standard europeo CCITT V21/V24, che definisce un'interfaccia seriale a bassa velocità di trasmissione per lo scambio di dati tra dispositivi digitali.

## Storia dello standard

L'interfaccia seriale EIA RS-232 è uno standard costituito da una serie di protocolli meccanici, elettrici ed informatici che rendono possibile lo scambio di informazioni a bassa velocità tra dispositivi digitali. Esso includeva le caratteristiche elettriche dei segnali, la struttura e le temporizzazioni dei dati seriali, la definizione dei segnali e dei protocolli per il controllo del flusso di dati seriali su un canale telefonico, il connettore e la disposizione dei suoi pin ed infine il tipo e la lunghezza massima dei possibili cavi di collegamento.
Nel corso di oltre 40 anni lo standard si è evoluto, pur mantenendosi in larga parte invariato. L'evoluzione è riconoscibile dalla sigla, leggendo l'ultima lettera; l'ultima revisione è del 1997 ed è indicata come EIA RS-232f. Probabilmente la versione più diffusa è la RS232c, del 1969, che corrisponde alle specifiche europee CCITT, raccomandazione V.24. Pur essendo un protocollo piuttosto vecchio, attualmente la EIA RS-232 è ancora largamente utilizzata per la comunicazione a bassa velocità tra microcontrollori, dispositivi industriali ed altri circuiti relativamente semplici, che non necessitano di particolare velocità; è invece praticamente scomparsa in ambito "desktop", nel quale lo standard è nato per la comunicazione tra un computer ed un modem.
Le informazioni, relative principalmente al livello elettrico, sono state codificate inizialmente dallo standard EIA/TIA-232-E (sezione 2) e successivamente modificate in alcuni dettagli secondari dallo standard EIA/TIA-562.

## Utilizzi

Lo standard EIA RS-232 nacque nei primi anni sessanta per opera della Electronic Industries Association ed era orientato alla comunicazione tra i mainframe e i terminali (DTE, Data Terminal Equipment) attraverso la linea telefonica, utilizzando un modem (DCE, Data Communication Equipment).
Sebbene negli anni novanta la porta EIA RS-232 fosse presente in quasi tutti i PC desktop, nel primo decennio degli anni 2000 la stessa è stata ampiamente soppiantata dall'interfaccia USB (o da PS/2) in quasi tutti gli utilizzi a causa della sua lentezza (ad esempio è impossibile collegare un modem ADSL alla porta seriale perché la trasmissione tra modem e computer sarebbe più lenta della connessione alla linea telefonica stessa).
Tra gli utilizzi della porta seriale, si possono citare:
* connessione di terminali ad un calcolatore (tradizionalmente un mainframe, ma anche un PC)
* connessione di periferiche:
** la porta seriale è stata usata per collegare i mouse ai primi PC
** stampante (soppiantato dalla porta parallela, e poi da USB e dalle connessioni di rete)
** scanner (soppiantato dalla porta parallela, e poi da USB e firewire e dalle connessioni di rete)
** dispositivi specializzati, come ad esempio lettori di codici a barre e di tessere magnetiche (soppiantato da USB)
* connessione a dispositivi embedded, ad esempio dispositivi di rete, per scopi di configurazione e monitoraggio. In questo utilizzo RS-232 è ancora ampiamente usato, anche se spesso è necessario dotarsi di un adattatore seriale/USB per utilizzare come terminale un computer privo di porta seriale.
* connessione a dispositivi audio/video per comandarli da remoto.

## Descrizione dello standard

L'EIA RS-232 è uno standard che definisce un'interfaccia di livello fisico del modello ISO/OSI per la realizzazione di una trasmissione seriale, sia in modalità sincrona che asincrona.
L'interfaccia EIA RS-232 ridotta (porta seriale a nove pin) utilizza solo protocolli di trasmissione di tipo asincrono.
Per trasmissione "seriale" si intende che i bit che costituiscono l'informazione sono trasmessi uno alla volta su di un solo "filo". Tale tipo di trasmissione si contrappone a quella "parallela", dove i dati sono trasmessi contemporaneamente su più fili (per esempio otto, sedici o trentadue). In astratto potrebbe pensarsi che la trasmissione seriale sia intrinsecamente più lenta di quella parallela (su di un filo possono passare meno informazioni che su sedici), ciò è generalmente vero per lo standard RS-232, ma non è valido in assoluto, sia in considerazione dell'estrema velocità raggiunta ormai da molte tecnologie seriali (fibra ottica, cavo Ethernet, thunderbolt, USB o FireWire, tutti standard seriali con velocità paragonabili a quella di un bus PCI a trentadue fili), sia per la difficoltà, in un bus parallelo, di controllare lo skew (disallineamento temporale tra i vari segnali) dei molti trasmettitori presenti.
Trasmissione "asincrona" significa, invece, che i dati sono trasmessi, byte per byte, in modo anche non consecutivo, senza l'aggiunta di un segnale di clock, cioè di un segnale comune che permette di sincronizzare la trasmissione con la ricezione. Sia il trasmettitore sia il ricevitore devono comunque essere dotati di un clock locale per poter interpretare i dati e la sincronizzazione di questi è realizzata in corrispondenza della prima transizione sulla linea dei dati.
Oltre alle linee di trasmissione dati (TD, RD, e i loro equivalenti canali secondari), lo standard definisce un certo numero di circuiti di controllo, usati per gestire la comunicazione tra DTE e DCE. Esempi di linee di controllo sono i circuiti Request to Send (RTS), Clear to Send (CTS), Data Terminal Ready (DTR), e Data Set Ready (DSR).
Ogni circuito, di trasmissione dati o di controllo, opera esclusivamente in una direzione: l'invio dei dati e delle segnalazioni avviene dal DTE al DCE, o viceversa. Poiché i dati trasmessi e quelli ricevuti viaggiano su circuiti separati (TD e RD) l'interfaccia RS-232 può operare in modalità full duplex, supportando contemporanei flussi di dati in entrambe le direzioni.
L'EIA RS-232, essendo uno standard di livello fisico, non definisce né il framing dei caratteri trasmessi né la modalità della loro codifica, demandando tale definizione a livelli di protocollo superiori.

### Caratteristiche elettriche

Le caratteristiche di natura elettrica previste dallo standard consentono di acquisire le poche informazioni necessarie a progettare dispositivi elettronici che comunicano con un PC attraverso questa porta.
Il protocollo specifica una massima tensione di circuito aperto di 25 V, mentre i livelli di tensione che si possono usare per i segnali sono ±5 V, ±10 V, ±12 V e ±15 V. Per incrementare l'immunità ai disturbi elettrici l'interfaccia elettrica ha una soglia di commutazione di ±3 V, cioè per passare da uno stato ad un altro non è sufficiente arrivare allo zero, ma dovrà essere superata la soglia dei 3 V di segno opposto.
Lo standard EIA RS-232 prevede nei circuiti dati (per esempio TD e RD) che il segnale di tensione positivo rappresenta lo zero logico (space) mentre quello negativo un 1 (mark). È quindi una codifica a logica negativa, ossia rovesciata rispetto al comune pensare. I segnali delle linee di controllo (p.e. RTS, CTS, DTR, DSR), invece, lavorano in logica positiva: lo stato attivo è comunicato con una tensione positiva, quello inattivo con una tensione negativa.

### Descrizione del segnale

Nell'immagine a lato è visualizzato, in modo idealizzato, cosa appare collegando un oscilloscopio alla linea dati su cui transita un segnale EIA RS-232 a 9600 bit/s del tipo 8n1 (più avanti verrà spiegata questa sigla) corrispondente alla lettera "K" espressa in codice ASCII.
Tutte le transizioni appaiono in corrispondenza di multipli di 104 μs (pari ad ${\frac {1}{9600}}s$, cioè ciascun bit dura esattamente l'inverso del bit rate).
La linea si trova inizialmente nello stato di riposo, a livello logico 1 (nessun dato in transito), quindi segnale di tensione negativo (p.e. −12 V); la prima transizione da segnale negativo a positivo indica l'inizio della trasmissione (inizia il "bit di start", lungo esattamente 104 μs), a cui segue il bit meno significativo (LSB), dopo altri 104 μs, e così via, per otto volte, fino al bit più significativo (MSB). Da notare che il byte è trasmesso "al contrario", cioè va letto da destra verso sinistra. Segue infine un "bit di stop", cioè un periodo di riposo della linea di 104 µs (ma può essere superiore qualora si convenga di usare un numero maggiore di bit di stop), e quindi, eventualmente, inizia un nuovo pacchetto di bit.
Un segnale seriale nello standard RS-232 può avere le seguenti varianti:
* velocità di trasmissione, rispetto all'esempio di 9600 bit/s può essere più veloce o più lenta, cambiando in questo modo la distanza tra i fronti (p.e. a 1200 bit/s le transizioni avvengono a multipli di ${\frac {1}{1200}}s$, pari a 833 μs)
* numero di bit dati trasmessi, generalmente otto (come nell'esempio), ma se ne possono trasmettere cinque, sei, sette o anche nove (ma quest'ultima possibilità non è prevista dalle porte seriali dei normali PC)
* possibilità di aggiungere un bit di parità alla fine del carattere
* numero dei bit di stop, la linea rimane nello stato di riposo per almeno uno, uno virgola cinque o due bit; nel caso in cui per un certo tempo non vi fosse più nulla da trasmettere, il "riposo" sarebbe molto più lungo.
A questo punto possiamo definire il significato della sigla 8n1 menzionata all'inizio dell'esempio. Tale sigla è usata in genere per definire il formato del pacchetto rice-trasmesso. Esempi possono essere 8n1 o 7e2:
* il primo numero indica quanti bit di dati sono trasmessi (nei due esempi rispettivamente 8 e 7)
* la lettera indica il tipo di parità (nei due esempi, rispettivamente, nessuna o even-parity, cioè parità pari)
* il secondo numero indica il numero di bit di stop (rispettivamente 1 e 2)
Tenendo conto che esiste sempre un solo bit di start, una sequenza di bit trasmessa è quindi, per i due esempi citati, costituita rispettivamente da 10 ($1+8+0+1$) e 11 ($1+7+1+2$) bit. Da notare che di questi bit solo otto e, rispettivamente, sette sono effettivamente utili a trasportare l'informazione.
Lo standard originale prevede una velocità da 75 baud a 19200 baud. Uno standard successivo (RS-562) ha portato il limite a 64 Kbps lasciando gli altri parametri elettrici praticamente invariati e rendendo quindi i due standard compatibili a bassa velocità. Nei normali PC le cosiddette interfacce seriali RS-232 arrivano in genere almeno a 115 Kbps o anche più: pur essendo formalmente al di fuori di ogni standard ufficiale non si hanno particolari problemi di interconnessione.
Sia trasmettitore sia ricevitore devono accordarsi sul modo di trasmettere i dati prima di iniziare la trasmissione.
È importante garantire il rigoroso rispetto della durata dei singoli bit: infatti non è presente alcun segnale di clock comune a trasmettitore e ricevitore e l'unico elemento di sincronizzazione è dato dal fronte di discesa del bit di start. Come linea guida occorre considerare che il campionamento in ricezione è effettuato di norma al centro di ciascun bit: l'errore massimo ammesso è quindi, teoricamente, pari alla durata di mezzo bit (circa il 5% della frequenza di clock, considerando che anche il decimo bit deve essere correttamente sincronizzato). Questo limite non tiene conto della possibile difficoltà di riconoscere con precisione il fronte del bit di start (soprattutto su grandi distanze ed in ambiente rumoroso) e della presenza di interferenze intersimboliche tra bit adiacenti: per questo spesso si consiglia caldamente di usare un clock con una precisione migliore dell'1% imponendo di fatto l'uso di oscillatori a quarzo. Si potrebbe anche ipotizzare un meccanismo che tenta di estrarre il clock dai fronti intermedi ma si tratta nel caso specifico di un lavoro poco utile, visto che la lunghezza del pacchetto è piuttosto breve.

### Esempio di funzionamento dell'interfaccia

Come è stato detto, l'interfaccia elettrica standard EIA RS232 è stata concepita unicamente per interfacciare un Data Terminal Equipment (DTE) a un Data Communication Equipment (DCE) – cioè a un modem – anche se, nel caso di protocolli asincroni, attraverso connessioni di tipo NULL MODEM si è abusato di connessioni dirette fra DTE.
Consideriamo un sistema a due terminali, formato da DTE1, DCE1, linea telefonica, DCE2, DTE2.
Consideriamo che al tempo T0 tutto il sistema sia in condizioni non attive (spento).
Al tempo T1 vengono accese le apparecchiature e in breve DCE1 e DCE2 comunicano ai rispettivi DTE il loro stato di pronto portando il segnale DSR (Data Set Ready) ad un valore significativo attivo fra i +5 e i +15 V. Tutti gli altri segnali sono a -12 V.
Al tempo T2, dopo il caricamento del sistema operativo sui DTE (se il caso) e dopo il caricamento del programma (o microprogramma) di gestione della linea seriale dei DTE, il terminale porrà al suo DCE il segnale DTR (Data Terminal Ready) in attivo (+12 V).
Al tempo T3 il DTE1 ha la necessità di trasmettere dati al DTE2 e per far questo per prima cosa rende attivo il segnale RTS. DCE1 si attiva iniziando ad emettere una portante di trasmissione sulla linea telefonica relativa e, dopo un tempo di "sincronizzazione" dipendente tipicamente dalla velocità di trasmissione del MODEM (il DCE), DCE1 invierà a DTE1 il segnale attivo di CTS (pronto a trasmettere). Nel frattempo DCE2 avrà ricevuto la portante trasmessa da DCE1 e avrà reso attivo il proprio segnale DCD (data carrier detect, rilevamento di portante) segnalando al proprio DTE2 che DTE1 sta per inviare dati. Anche DTE2 dovrà aver predisposto la propria linea seriale ed inviato a DCE2 il proprio DTR altrimenti i dati inviati da DTE1 andranno persi.
Al tempo T4, dopo che DTE1 avrà ricevuto il segnale CTS attivo dal proprio DCE, finalmente DTE1 potrà inviare i primi bit.

### Il bit di parità

Oltre ai bit dei dati (in numero variabile tra 5 e 9) viene inserito un bit di parità (opzionale) per verificare la correttezza del dato ricevuto. Esistono cinque tipi di parità:
* None: nessun tipo di parità, cioè nessun bit aggiunto;
* Pari (even): il numero di mark (incluso il bit di parità) è sempre pari;
* Dispari (odd): il numero di mark (incluso il bit di parità) è sempre dispari;
* Mark: il bit di parità vale sempre mark;
* Space: il bit di parità vale sempre space;
Il bit di parità può essere LRC o VRC, cioè la funzione di parità, un XOR di a bit della stringa dati incluso il bit di parità stesso, può essere eseguita sia lateralmente che verticalmente sui dati inviati, ottenendo una stringa dati di parità finale con il relativo bit di parità: il LRC di tale stringa dati di controllo deve combinarsi secondo le parità precedentemente eseguite verticalmente che sul blocco VRC-dati creato.

### I parametri elettrici EIA RS-232

La tensione di uscita ad un trasmettitore EIA RS-232 deve essere compresa in valore assoluto tra 5 V e 25 V (quest'ultimo valore ridotto a 13 V in alcune revisioni dello standard). A volte le tensioni in uscita sono intenzionalmente diminuite a +/- 6 V anziché 12 V per permettere minori emissioni EM, peraltro sempre critiche, e favorire maggiori velocità di trasmissione.
Il ricevitore deve funzionare correttamente con tensioni di ingresso comprese, sempre in modulo, tra i 3 V ed i 25 V. Molti ricevitori commerciali considerano semplicemente una tensione di soglia al valore di +2 V (sopra viene riconosciuto un segnale alto, sotto uno basso) anche se ciò non è pienamente aderente alla norme. È però utile per effettuare una trasmissione "RS232" con livelli TTL.
L'impedenza di uscita del trasmettitore deve in ogni situazione essere maggiore di 300 ohm; l'impedenza di ingresso deve essere compresa tra i 3 ed i 7 kohm, anche a dispositivo spento. La corrente prelevabile in uscita mantenendo i corretti valori logici deve essere di almeno di 1.6 mA (potrebbe però essere maggiore, anche di un ordine di grandezza) e nel caso di corto circuito deve essere minore di 100 mA.
Infine lo slew rate (cioè la pendenza del grafico del segnale nel passare da 1 a 0 o viceversa) deve essere minore di 30 V/us per evitare eccessive emissioni elettromagnetiche.
Come collegare una porta TTL o CMOS alla EIA RS-232. In genere i segnali utilizzati dai sistemi digitali variano tra 0 e 5 V e non sono quindi direttamente compatibili con la standard EIA RS-232. In commercio esistono appositi traslatori di livello che hanno il compito di fornire sia in trasmissione che in ricezione gli opportuni livelli pur non modificando la forma del segnale trasmesso.
Alcuni integrati (per esempio i classici MC1488 e MC1489, introdotti sul mercato dalla Motorola, rispettivamente un trasmettitore ed un ricevitore, ambedue a quattro canali) sono molto usati in sistemi in cui è presente (oltre all'alimentazione logica di 5 V o 3.3 V) un'alimentazione duale a +/-12 V. Questo integrato, come praticamente tutti i circuiti di questo tipo, contiene un inverter per ciascun canale e quindi nel segnale in uscita o in ingresso uno zero logico appare come 0 volt, cioè in quella che a molti sembra essere la rappresentazione ovvia dei segnali digitali.
L'uso di questi integrati è semplice ma non è sempre attuabile a causa della necessità di disporre di tre alimentazioni: si pensi per esempio alle apparecchiature alimentate a batteria.
Il MAX232 (ed integrati simili, fu introdotto dalla Maxim ma furono e sono prodotti da molte ditte di semiconduttori) è un circuito integrato che permette il collegamento tra logica TTL o CMOS a 5 V e le tensioni EIA RS-232, partendo solo da un'alimentazione a 5 V.
Per ottenere la tensione positiva e negative necessarie per il funzionamento dell'integrato è usata una configurazione a pompa di carica, costituito da circuiti interni all'integrato e quattro condensatori esterni di circa 1 uF (i valori iniziali erano da 10uF per arrivare ai 100nF). La capacità effettiva dipende dal tipo di integrato e dalla relativa frequenza di commutazione; a volte i condensatori sono presenti all'interno dell'integrato stesso.
Sono disponibili anche integrati che richiedono un'alimentazione di solo 3.3 V (p.e. il MAX3232).
La sezione ricevente del MAX232 è costituita da due porte invertenti che accettano in ingresso una tensione di +/- 12 V (o altra tensione compatibile allo standard EIA RS-232) ed in uscita hanno un segnale TTL compatibile.
La sezione trasmittente ha due driver invertenti con in ingresso TTL compatibile e capaci di erogare a vuoto una tensione di poco meno di +/- 10 V, compatibile con lo standard EIA RS-232.

## La piedinatura del connettore EIA RS-232

Il connettore utilizza due segnali in modalità "Full duplex" più altri di controllo e il comune (massa SG).
L'interfaccia EIA RS-232 utilizza una notevole quantità di linee ausiliarie per i segnali di controllo ma per una comunicazione di base senza controllo di flusso hardware sono sufficienti TD, RD e GND. Questa configurazione minima si utilizza anche con controllo di flusso software (XON-XOFF).
I personal computer hanno una interfaccia seriale ridotta anche nel caso in cui è presente un'interfaccia con connettore DB-25. Dall'avvento dell'IBM AT però si è optato per un connettore DE-9.
L'interfaccia dei PC è comunque sempre solo asincrona mentre alcuni host e i router utilizzano interfacce sincrone. In questo il clock di trasmissione deve essere unico per tutto il sistema e normalmente è generato dal gestore telefonico. Se si utilizzano connessioni seriali sincrone in ambito locale, il clock è generato da uno dei due modem, in configurazione punto-punto, o dal modem master, in una configurazione punto-multipunto.
Perché tanti fili? L'interfaccia EIA RS-232 è nata con l'unico scopo di connettersi ad un Modem e quindi ha tutti i controlli per gestire questa apparecchiatura. Tuttavia l'interfaccia viene spesso usata per connettere direttamente fra di loro due PC e, in teoria per ricevere e trasmettere un segnale in modo asincrono bastano tre fili: ricezione, trasmissione e massa (nel caso l'applicazione preveda una comunicazione esclusivamente unidirezionale, come per esempio l'interfacciamento di uno strumento di misura ad un terminale, possono essere impiegati persino due soli fili, ovvero trasmissione, che andrà connesso al pin di ricezione del connettore della porta seriale del terminale, e massa). Spesso, se si usa un programma di connessione che non controlla gli altri segnali d'interfaccia, lo è anche in pratica, e questo consente l'uso di connettori di forme e dimensioni diverse da quelle previste dallo standard RS-232, come il connettore DIN.
Gli altri segnali (spesso opzionali, ma dipende dall'applicazione) servono per il cosiddetto handshake tra PC e periferica (o tra PC e PC) cioè per sincronizzare in hardware la comunicazione.
Se due host sono connessi direttamente è necessario utilizzare un cavo seriale null modem, che, per esempio, nel caso l'applicazione non richieda i segnali di controllo hardware e la connessione sia di tipo asincrono, inverte fra di loro i fili di ricezione e trasmissione, mettendo in connessione il pin di trasmissione di uno dei due connettori con quello di ricezione dell'altro.
La connessione seriale può essere utilizzata anche per fornire una alimentazione al dispositivo come avviene ad esempio con il classico mouse seriale. Questa alimentazione, anche se non prevista dallo standard e, quindi, non regolata ne protetta, può essere prelevate da linee di segnalazione non utilizzate come, ad esempio, DTR e RTS.

### UART

Gli UART (Universal Asynchronous Receiver & Trasmitter) sono dei circuiti integrati che permettono di trasformare il segnale parallelo proveniente dal processore in segnale seriale. In genere vengono gestite dall'hardware tutte le funzioni a basso livello necessarie (inserimento dei bit di start e di stop, generazione o riconoscimento del bit di parità, generazione di interrupt) e spesso è presente un buffer FIFO che permette di ricevere ed inviare dati anche quando la CPU è impegnata.
A volte, usando microcontrollori, questa funzione viene svolta in software anche se spesso in questo modo non si superano i 9600 bps.