Handshaking (Flow Control)
Notevole importanza ha il controllo del flusso dati.
Abbiamo
visto come non sia possibile operare gli stretching o le sospensioni che, nelle
comunicazioni sincrone, servono ad adeguare la velocità del trasmettitore alla
capacità del ricevitore, dato che, non essendoci un clock separato, è la
costanza nella lunghezza dei bit trasmessi che permette al ricevitore la loro
decodifica.
Va ricordato che RS-232 è nata con lo scopo di collegare
computer a modem e che questi, operando su linee telefoniche, richiedono un
sensibile numero di segnali di controllo allo scopo di rendere sicura e
funzionale la trasmissione.
In RS-232 occorre, allora, disporre di un efficiente sistema di handshake, il
cui scopo principale è quello di
compensare la diversa velocità di risposta dei dispositivi collegati; ad
esempio, nel collegamento con il modem, sarà necessario individuare la
corretta presenza della linea telefonica attiva, della portante della
modulazione e correggere o evitare i probabili errori di ricezione dovuti alla
cattiva qualità del segnale. Nel collegamento tra un trasmettitore
veloce (computer) e un ricevitore lento (stampante), occorrerà dare modo alla
stampante di adeguare il ritmo di emissione dati da parte del computer alle
possibilità di stampa, oltre alla necessità di interrompere l'invio di dati
nel caso di fine carta, mancanza di inchiostro, inceppamenti o anche solo
impedire l' inizio della comunicazione se la stampante è spenta.
Usando segnali di
handshaking, il ricevitore sarà in grado di comunicare al trasmettitore la
necessità di mettere in pausa la trasmissione
fino a che tutti i dati ricevuti sono stati elaborati.
Ci sono tre tipi di controlli di flusso:
-
software
-
hardware
-
entrambi.
Handshake Software
L' handshaking software utilizza due caratteri di controllo:
Handshake |
CTRL |
ASCII |
hex |
dec |
XON |
CTRL S |
DC1 |
11 |
17 |
XOFF |
CTRL Q |
DC3 |
13 |
19 |
Si tratta di due dei caratteri non stampabili
della tabella
ASCII che il ricevitore invia al trasmettitore per regolare la comunicazione.
XON
é usato per avviare la trasmissione : quando un sistema riceve questo carattere, inizia a trasmettere e continua fino a quando riceve un carattere si arresto
(XOFF).
Quando il sistema ricevente non ha la
possibilitá di continuare a processare i dati in arrivo (ad esempio buffer pieno, fine carta e simili) invia un XOFF per fermare la trasmissione.
I
caratteri usati come semaforo possono anche essere differenti ; spesso i
software di gestione della comunicazione permettono di sostituirli con altri,
anche se, normalmente, non é necessario.
Il protocollo prevede la possibilitá di determinare anche un XOFFTime, ovvero un
tempo fisso di attesa dopo la ricezione di un XOFF prima di riprendere la
trasmissione ; questo serve ad evitare un blocco del flusso dati se il carattere
XON di riavvio non viene riconosciuto .
Il vantaggio di
questo sistema è che non occorre alcun altro
conduttore tra i due dispositivi.
I suoi inconvenienti sono:
-
La segnalazione di stop alla trasmissione non è istantanea:
infatti occorre che sia trasmesso, ricevuto e processato il carattere di
XOFF. Questo significa che il dispositivo che sta trasmettendo e riceve l'
XOFF dall' altro dispositivo richiede un certo tempo prima di arrestarsi. Se
ci sono altri dati nel buffer di invio è probabile che alcuni di questi
siano automaticamente inviati dall' UART prima che il processore intervenga
ad arrestarlo.
Quindi, per evitare perdita di dati, occorre che i dispositivi abbiano un
buffer di ricezione sufficientemente ampio.
• I caratteri XON/XOFF, o comunque quelli usati come semaforo, devono
ovviamente essere eliminati dal flusso di dati della comunicazione,
ovvero non possono far parte dei dati trasmessi, proprio per la loro
funzione di controllo.
Solitamente questo non è un problema se la trasmissione è limitata a
caratteri ASCII, dove, tra l' altro, i "caratteri di controllo"
possono essere usati con funzioni di gestione della comunicazione. Diventa
però non possibile se la trasmissione comprende anche dati binari, che
possono assumere qualunque valore esadecimale, come nel caso di
strumentazione, data logger, ecc.
Il leggero aumento della
lunghezza della trasmissione è irrilevante ai fini della prestazione in quanto
l' handshake è reso necessario proprio quando si richiede di rallentarla.
Occorre però che i dispositivi abbiano sufficiente potenza di calcolo per
gestire la trasmissione il riconoscimento degli handshake software, cosa che
deve effettuare proprio il software di gestione, mentre sarà necessario il buffer fifo
per fare da "polmone" al flusso dei dati che potrebbe continuare per
un tempo più o meno breve dopo la ricezione dell' XOFF.
Un altro metodo, detto ETX/ACK, usa la separazione dei dati in blocchi;
dopo ogni blocco viene trasmesso il carattere ETX (End of TeXt).
Quando il ricevitore ha accettato il blocco di dati, invia il carattere ACK
(ACKnowledge) per consentire l' invio del blocco successivo.
Anche qui si rendono necessari buffer per contenere uno o più blocchi di
messaggio.
Altri codici, tra quelli non stampabili della tabella ASCII possono
essere utilizzati a questo scopo, ma principalmente sono impiegati dal software di controllo
della comunicazione come indicatori di particolari eventi della periferica o
come comandi speciali.
Questo insieme di codici sono noti come codici di controllo, il che
giustifica al tasto 'CTRL' delle tastiere attuali.
Se originariamente l'idea di handshaking software non era stata
considerata, causa la lentezza delle apparecchiature, essa è attualmente più
diffusa in considerazione dell' aumentata capacità di trattamento dati dei
moderni processori.
Handshake Hardware
Handshaking hardware ha a disposizione linee fisiche su cui inviare livelli di
tensione.
Queste linee prendono il nome di RTS, CTS, DTR, DSR, DCD, RI
e saranno descritte più avanti.
Il vantaggio della soluzione hardware è quello di non avere limiti per i
caratteri trasmissibili e che solitamente il modulo UART gestisce questi segnali
con il minimo impegno del software.
Per contro si rende necessario disporre di un numero maggiore di conduttori nel
cavo di collegamento.
È anche possibile impostare il controllo di flusso Software +
Hardware, quando si richieda una elevata sicurezza, anche se è una pratica
non comune.
Per contro, quando trasmettitore e ricevitore non hanno problemi a trattare in
tempo reale i dati, non sarà necessario introdurre alcun controllo. Questo è
ottenibile anche adattando la velocità di comunicazione ad un bit
rate tale da consentire alla periferica più lenta di ricevere tutti i pacchetti
dati senza bisogno di fermare il trasmettitore.
Vediamo ora i segnali impiegati per il controllo della
comunicazione
|