RS232

Lo standard RS-3232-C definisce i parametri per la connessione di un dispositivo terminale DTE (Data Terminal Equipment) e un dispositivo di comunicazione DCE (Data Comunication Equipment), con uno scambio seriale asincrono di dati binari (oppure tra due DTE con colloquio Null Modem).

  • Il canale è formato da un conduttore elettrico a più poli, su cui è pilotata una differenza di potenziale tra -25v e +25v.

  • Il trasmettitore genera una d.d.p. di circa +15v per lo zero e per l'ON, mentre genera una d.d.p. di circa -15v per l'uno e per l'OFF.

  • Il ricevitore interpreta tutto il campo tra -25v e -3v come un uno (OFF) e tutto il campo tra +3v e +25v come uno zero (ON); il campo tra -3v e +3v è una zona di transizione tra i due livelli (che non può essere istantanea): eventuali letture in questo campo sono considerate errore.

  • La velocità di trasmissione va da 2 a 115200 baud (in questo caso equivalenti a bit per secondo).

  • Il codice utilizzato può avere 5, 6, 7 o 8 bit per carattere; il controllo di parità (pari o dispari) può essere aggiunto solo per i codici a 5, 6 o 7 bit.

  • Sono possibili una serie di opzioni per l'handshaking legate all'uso o meno di alcuni di segnali di controllo accessori; la connessione può richiedere quindi da 2 a 9 fili. 

Segnale 

Utilizzo 

Connettore
25 pin
Connettore
9 pin
GND1 

Collegamento tra i telai delle apparecchiature connesse

1 5
TX 

Trasmissione dei dati

2 3
RX 

Ricezione dei dati 

3 2
RTS 

Request to Send: abilita il trasferimento dei dati

4 7
CTS

Clear to Send: riceve l’abilitazione al trasferimento

5 8
DSR

Data Set Ready: verifica la presenza del segnale DTR

6 6
GND2

Neutro di riferimento

7 5
CD

Carrier Detect: verifica la presenza della portante sul modem

8 1
DTR

Data Terminal Ready: indica la possibilità di ricevere o trasmettere dati

20 4

Per la connessione dei dispositivi al canale sono usati dei connettori a vaschetta (maschio e femmina) a 9 o a 25 pin.

Per un collegamento elementare tra due PC è sufficiente utilizzare un cavetto a 4 poli, collegando i segnali di massa tra loro e incrociando i collegamenti tra Tx e Rx: in tal caso il controllo di flusso del colloquio (handshaking) è affidata ad un protocollo esclusivamente di tipo software: ad esempio nella tecnica XON-XOFF sui canali dati (Tx e Rx) vengono inoltrati codici speciali (17h e 19h) per autorizzazione a procedere e/o per richiesta di pausa; ovviamente questi codici non devono far parte del messaggio trasmesso (non a caso nel codice ASCII i primi 32 caratteri sono riservati ai controlli).

È possibile costruire un protocollo più complesso (ad esempio READY-BUSY) come quello richiesto dal collegamento con il modem, incrociando tra loro i segnali RTS-CTS e DSR-DTR.

Il circuito di interfaccia UART - RS232
La comunicazione seriale nei PC è affidata ad un dispositivo detto UART (Universal Asynchronous Receiver Transmitter) in grado di gestire una linea bidirezionale Asincrona, secondo lo standard RS232, provvedendo autonomamente alla gestione dei bit di Start, di Stop e di parità orizzontale, e degli errori di overrun.
Il microprocessore è collegato al dispositivo attraverso il bus dati, il bus indirizzi e i segnali di controllo; l'accesso ai registri, ciascuno con un proprio indirizzo, è attivato in modalità Isolated I/O:

  • i registri di Controllo determinano le modalità di funzionamento dell'interfaccia, e devono essere programmati dal microprocessore in base ai parametri del protocollo concordati con gli altri dispositivi: occorre fissare la velocità di trasmissione, il controllo di parità (Parità Pari, Parità Dispari, Nessuna Parità), la lunghezza del carattere (da 5 a 8 bit);

  • i registri di Stato (Flags) indicano il valore dei segnali di controllo ricevuti, l'avvenuta trasmissione e/o ricezione dei dati, le eventuali condizioni d'errore;

  • la sezione Trasmissione, contiene il registro a scorrimento per la serializzazione del dato e il buffer temporaneo Tx Hold;

  • la sezione Ricezione, contiene il registro a scorrimento campionatore e il buffer temporaneo Rx Hold. Trasmissione e Ricezione possono operare in contemporanea consentendo la gestione di una linea full duplex;

  • il generatore di clock, sulla base di un clock base fornito esternamente, provvede a generare la frequenza di trasmissione e di ricezione dei bit (Baud Rate), nonché quella di campionamento, multipla 16X o 32X.

Ogni carattere ricevuto sul Bus Dati viene inserito sul Registro Hold di trasmissione: se questo è già pieno, verrà attivata la Flag di errore di Overrun; resta a carico del programma gestore il controllo della disponibilità del registro. 
L'UART provvede appena possibile a trasferire il dato dall'Hold-Tx allo Shift-Tx, ed a trasmettere il dato sulla linea Tx; in caso di ritardo, da parte della CPU, nella scrittura di un nuovo carattere I'UART si limita a mantenere la linea al livello "1" (stato di wait).

I dati ricevuti sulla linea Rx vengono inseriti sullo Shift-Rx e da questo sull'Hold-Rx; se la CPU non ha prelevato il carattere precedente, verrà attivata la Flag di errore di Overrun: restano a carico della CPU la verifica dell'errore e le conseguenti operazioni di recovery, in funzione del protocollo utilizzato.

Il dispositivo RS232, viene visto dal µP come un insieme di 10 registri consecutivi, indirizzabili in Isolated-I/O; alcuni registri condividono lo stesso indirizzo, e sono selezionati in base alle operazioni in corso: 

  • l'indirizzo di base relativo alla porta COM1 è nei byte RAM 1024 -1025 (040016 - 040116) : generalmente 03F816 .

  • l'indirizzo di base relativo alla porta COM2 è nei byte RAM 1026 -1027 (040216 - 040316) : generalmente 02F816 .

base+0 TXR

Registro di Trasmissione (write); invia i dati sulla porta seriale

base+0 RXR

Registro di Ricezione (read); preleva i dati dalla porta seriale.

base+0 DLL

Divisor Latch Low: byte basso del “baud rate divisor”.

base+1 DLH

Divisor latch High : byte alto del “baud rate divisor”.

base+1 IER

Interrupt Enable : definisce l’abilitazione degli Interrupt.

base+2 IIR

Interrupt Identification : identifica gli Interrupts.

base+3 LCR

Line control : inizializza la porta seriale.

base+4 MCR

Modem control : trasmette i segnali di controllo al modem.

base+5 LSR

Line Status : verifica lo stato della porta seriale.

base+6 MSR

Modem Status: verifica lo stato del modem.

Registri TX e RX
Il Registro di Trasmissione ed il Registro di Ricezione condividono lo stesso indirizzo di I/O: durante le operazioni di trasmissione l’istruzione OUT attiva il segnale di Write ed il valore sul bus dati viene scritto in TXR; durante le operazioni di ricezione, l’istruzione IN attiva il segnale di Read ed il contenuto di RXR viene copiato sul bus dati.

Registro Divisor Latch
I registri per la programmazione del "Baud Rate" sono attivi solo quando l'Access-Bit del Divisor-Latch è ON. DLAB è il bit 7 del registro LCR. 
La velocità base del generatore di clock dell’interfaccia è pari a 115200 baud.
Per ottenere le altre velocità occorre fissare un fattore di divisione della velocità. 
Ad esempio, per ottenere 9600 baud occorre:

  1. settare a 1 DLAB;

  2. inserire 12 nel registro “Divisor Latch” (0 in DLH e 12 in DLL);

  3. resettare a 0 DLAB.

Registro Interrupt Enable
IER seleziona gli eventi in concomitanza dei quali occorre attivare un Interrupt hardware verso il sistema.

MSB 7

0

6

0

5

0

4

0

3

.

1 = Interrupt quando cambia lo stato del modem (registro MSR)

2

.

1 = Interrupt quando viene riscontrato un errore sui dati

1

.

1 = Interrupt quando il transmitter holding register è vuoto

LSB 0

.

1 = Interrupt quando viene riscontrato un errore sui dati

Registro Interrupt Identification
IIR contiene le specifiche dell’evento che ha generato l’interrupt hardware, e può essere interrogato dalla CPU per attivare la relativa procedura:

MSB 7

0

6

0

5

0

4

0

3

0

2

.

.

00 = è variato lo stato del modem(registro MSR)
01 = il transmitter holding register è vuoto
10 = è stato ricevuto un dato nel receive holding register
11 = è stato riscontrato un errore sui dati o è stato ricevuto un break

1

LSB 0

.

1 = Interrupt Pending

Registro Line Control

MSB 7

DLAB

0 = indirizzo 0 per Tx e Rx, indirizzo 1 per IER
1 = indirizzo 0 e 1 per Baud Rate Divisor

6

0

5

0

4

Parità

00 = Controllo di parità disabilitato 
01 = controllo parità Dispari 
11 = controllo parità Pari

3

2

Stop

0 = 1 Stop Bit
1 = 2 Stop Bit

1

Codice

00 = Dati a 5 bit 
01 = Dati a 6 bit
10 = Dati a 7 bit 
11 = Dati a 8 bit

LSB 0

Registro Modem output Control

MSB 7

0

6

0

5

0

4

.

Chiede al modem di restituire in Input i dati che vengono trasmessi in Output (loopback per verifica)

3

.

Int Enable : Questo bit deve essere attivato per permettere alla scheda di trasmettere gli interrupt al sistema

2

.

Output ausiliario

1

.

Request To Send : il computer vuole trasmettere dei dati

LSB 0

.

Data Terminal Ready : il terminale è pronto a comunicare

Registro Line Status

MSB 7

.

Time out (se settato, tutti gli altri bit non sono significativi)

6

.

1 = il registro Shift di Trasmissione è vuoto

5

.

1 = il registro Hold di Trasmissione è vuoto

4

.

1 = Break detect

3

.

1 = Framing error: non riscontrato lo Stop bit

2

.

1 = Parity error : disturbi sulla trasmissione

1

.

1 = Overrun error: un registro dati è stato sovrascritto

LSB 0

.

1 = Data Ready: il registro Hold di ricezione è pieno

Registro Modem Status

MSB 7

.

1 = il modem riceve il segnale di linea (Carrier Detect)

6

.

Ring indicator

5

.

DSR Data Set Ready

4

.

CTS Clear To Send

3

.

Il segnale di linea è cambiato

2

.

trailing edge ring detector

1

.

delta Data Set Ready

LSB 0

.

delta Clear to Send