Comunicazione seriale
La comunicazione
La comunicazione è il cuore del nostro hobby, ma costituisce un elemento chiave per ogni sistema informatico, compres alle moderne apparecchiature radio. Grazie ad essa possibile
far dialogare l’unità centrale con le periferiche e, all’interno dello stesso elaboratore, i singoli moduli che lo compongono (come CPU e memoria).
Esistono due grandi famiglie di comunicazione: parallela e seriale. La parallela agli albori dei personal computer era molto diffusa perchè più bit vengono trasferiti contemporaneamente su linee dati dedicate, il che la rende concettualmente semplice e veloce su distanze brevi. Per distanze maggiori è necessario ricorrere alla comunicazione seriale.
La Comunicazione Seriale
Nella comunicazione seriale i bit che compongono il dato da trasmettere vengono inviati in sequenza, uno alla volta, su un unico canale. La logica è analoga a quella del codice Morse: ogni carattere è codificato in una sequenza di segnali dalla stazione trasmittente e decodificato nella stazione ricevente. La comunicazione seriale è in uso dalla fine dell’Ottocento nelle telescriventi, che impiegavano un alfabeto a 5 bit inventato da mile Baudot: dal suo nome deriva l’unità di misura baud, che rappresenta il numero di simboli trasmessi per secondo. In una linea binaria semplice, 1 baud corrisponde a 1 bit/s.
La semplificazione sul piano elettrico ha per come contraltare un aumento significativo della complessità dell’interfaccia: infatti è necessario stabilire criteri precisi affinchè la stazione ricevente possa ricostruire correttamente la sequenza di bit trasmessa.
Comunicazione sincrona e asincrona
La funzione primaria di qualsiasi protocollo seriale è la sincronizzazione tra trasmittente e ricevente, che può essere effettuata in due distinti metodi.
Nella trasmissione sincrona i bit vengono trasmessi allineati a un segnale ausiliario detto clock, che determina la scansione temporale. I dati sono inviati in gruppi chiamati frame
e la stazione ricevente sa che a ogni fronte di salita del clock c’ un bit da leggere, rendendo la ricostruzione del flusso relativamente semplice. La cito solo per completezza, perchè nelle casistiche che ci riguardano è invece usata la trasmissione asincrona.
Anzichè fare affidamento su riferimenti esterni, gli elementi di sincronizzazione tra trasmittente e ricevente sono inframezzati nella sequenza di bit stessa, eliminando la necessità di una linea di clock dedicata.
UART Asincrono
La variante più comune di comunicazione seriale asincrona la UART (Universal Asynchronous Receiver/Transmitter). Dato che, come ho detto prima, non c’è un riferimento esterno, per poteresi capire di due dispositivi devono gli stessi parametri operativi, a partire dalla durata di ogni bit, che è definito dal baud rate.
Il frame
Ma altrettanto fondamentale è il metodo con cui inviare i singoli bit. Ogni byte trasmesso incapsulato in un frame, che consente al ricevitore di identificare inizio e fine del dato. La linea a riposo si trova al livello logico alto (“1”). La trasmissione segue questa sequenza. Viene prima inviato lo Start bit, portando la linea a livello basso (0), e segnalando l’inizio della trasmissione. Seguono poi i Bit dati, tipicamente 8 (5 nell’RTTY), trasmessi dal meno significativo (LSB) al più significativo (MSB). Opzionalmente può essere inviato un Bit di parità, calcolato in base ai bit (dati) trasmessi, ed utilizzato per individuare possibili errori. Chiude la sequenza lo Stop bit, che chiude il frame riportando la linea al livello alto.
Il bit di start sincronizza il ricevitore, che da quel momento campiona i bit basandosi sul proprio clock interno. La sincronizzazione viene rigenerata a ogni carattere, quindi le inevitabili fluttuazioni temporali tra trasmittente e ricevente non si accumulano e rimangono del tutto ininfluenti. La trasmissione asincrona tuttavia meno efficiente di quella sincrona, poichè una parte del flusso dati destinata proprio alla sincronizzazione.
La configurazione
La configurazione di una porta seriale determinata da quattro parametri, che devono essere identici su entrambi i dispositivi comunicanti. Un singolo parametro errato causa caratteri
casuali, errori di framing o assenza totale di dati, senza che il sistema fornisca indicazioni chiare sull’origine del problema.
| Parametro | Valori tipici |
Note |
| Baud rate | 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 | 9600 baud il più comune nei TRX radio |
| Bit dati | 7 oppure 8 (5 per rtty) | 8 bit lo standard moderno; 7 bit può essere usato in apparati più datati |
| Parità | Nessuna (N), Pari (E), Dispari (O) | Raramente usata nelle applicazioni moderne |
| Bit di stop | 1, 1.5, 2 | Quasi sempre 1 nelle applicazioni correnti, 1.5 per RTTY |
La notazione compatta riassume tutti i parametri in una stringa del tipo 9600 8N1: baud rate, bit dati, parit , bit di stop.
RS-232, TTL e LVTTL
Il frame definisce come inviare i bit, ma perchè la comunicazione possa avvenire è necessario anche definire i parametri elettrici. La scelta dipende dall’applicazione, dalla distanza e dal tipo di dispositivi coinvolti.
Il capostipite
RS‑232 è uno standard di comunicazione seriale introdotto dall’Electronic Industries Association (EIA) nel 1960 per definire in modo unificato come collegare un dispositivo terminale (DTE), come un computer, a un dispositivo di comunicazione (DCE), tipicamente un modem o un server. Nonostante l’anzianità, RS‑232 continua a essere sorprendentemente vivo perché risolve problemi che molte tecnologie moderne non affrontano con la stessa semplicità. La sua natura punto‑a‑punto, l’assenza di stack complessi, la totale indipendenza da driver proprietari e la capacità di funzionare anche in condizioni elettriche difficili lo rendono ideale per determinate applicazioni. In questi contesti la priorità non è la velocità, ma l’affidabilità e la prevedibilità: due qualità che RS‑232 continua a garantire. comunicazione che utilizzano scambio di dati digitali seriali.
RS-232 utilizza tensioni relativamente elevate con logica invertita rispetto alle convenzioni TTL: Lo stato logico 1 (mark) corrisponde a una tensione negativa (da −5 a −15 V, con tolleranza fino a −25 V), mentre lo stato logico 0 (space) corrisponde a una tensione positiva (da +5 a +15 V, con tolleranza fino a +25 V).
Questa scelta garantisce un’elevata immunit al rumore e consente distanze fino a circa 15 metri con cavi standard. Con cavi a bassa capacit possibile superare questa lunghezza senza problemi. Tutte le linee sono sbilanciate (riferite a una massa comune).
Cito giusto per completezza, che esistono altri standard di interfacciamento (come la RS-485) che veicolano i segnali UART con metodi diversi.
seriale TTL e LVTTL
Nei sistemi a microprocessore, per collegamenti più corti, si utilizzano invece livelli logici diretti, senza l’inversione e le tensioni elevate di RS-232. TTL definisce lo stato logico 0 con la tensione a 0 V, il livello 1 con una tensione a 5 V, mentre LVTTL differisce leggermente per le soglie di communtrazione ed il livello alto con una tensione a 3.3 V.
Bisogna fare attenzione al fatto che i livelli elettrici di RS-232, TTL e LVTTL non sono compatibili, e collegare interfacce di diversa tecnologia può danneggiarle. Sono disponibili componenti dedicate alla conversione di livello (come ad esempio i MAX232). Alcuni dispositivi LVTTL sono in grado di collegarsi a sistemi TTL (5V tolerant), ma è bene verificare sempre prima di collegarli.
I connettori RS-232
Lo standard originale RS-232 prevedeva come standard il connettore DB-25 (25 pin), con il lato DTE (Data Terminal Equipment, il computer) con connettore maschio e il lato DCE (Data
Communication Equipment, il modem, o la radio) con connettore femmina. Con il computer PC/AT, IBM introdusse la versione a 9 pin DE-9 (comunemente chiamato DB-9), che da allora diventato lo standard di fatto per le porte seriali dei personal computer.
Perchè tante linee? Oltre ai due segnali che trasferiscono i bit da un apparato all’altro e viceversa, sono definite alcune linee di controllo, che fungono come una sorta di semaforo per controllare il flusso dei dati.
Pinout DE-9 (DB-9)
| Pin | Sigla | Nome | Direzione |
| 1 | DCD | Data Carrier Detect | DCE > DTE |
| 2 | RXD | Receive Data | DCE > DTE |
| 3 | TXD | Transmit Data | DTE > DCE |
| 4 | DTR | Data Terminal Ready | DTE > DCE |
| 5 | GND | Massa di segnale | |
| 6 | DSR | Data Set Ready | DCE > DTE |
| 7 | RTS | Request To Send | DTE > DCE |
| 8 | CTS | Clear To Send | DCE > DTE |
| 9 | RI | Ring Indicator | DCE > DTE |
Il riferimento di massa di segnale al pin 5. I dati veri e propri vengono scambiati attraverso le linee TXD (pin 3) e RXD (pin 2). I segnali di controllo svolgono funzioni specifiche descritte nelle sezioni seguenti.
DCD (Data Carrier Detect)
Il segnale DCD (pin 1) è attivato dal modem quando agganciato al modem remoto, segnalando che la portante presente. un segnale di fondamentale importanza nei sistemi automatici. Il passaggio da basso ad alto indica l’arrivo di una nuova chiamata (connessione stabilita). Il passaggio da alto a basso segnala che una connessione attiva caduta, per qualsiasi ragione.
In ambito radiantistico, DCD è viene talvolta riutilizzato da software CAT e TNC per scopi analoghi di segnalazione di stato.
Controllo di Flusso
Lo scambio seriale di datu ha bisogno di meccanismi per regolare il flusso di dati tra trasmittente e ricevente, adeguando la velocità di invio alla capacità di elaborazione del ricevitore. Lo standard RS-232 mette a disposizione due circuiti hardware e un metodo software.
DTR/DSR
La coppia DTR (Data Terminal Ready) / DSR (Data Set Ready) gestisce la sessione di connessione a livello di disponibilit dei dispositivi. Il DTE (computer) alza DTR quando pronto a operare. Il DCE (modem) alza DSR a conferma che anch’esso operativo. Se il computer rileva DTR alto ma non riceve la risposta DSR nei tempi prestabiliti, in grado di rilevare un malfunzionamento del modem.
RTS/CTS
La coppia RTS (Request To Send) / CTS (Clear To Send) regola il flusso effettivo dei dati durante la trasmissione. Il DTE alza RTS quando è in condizione di ricevere dati, e quindi chiede alla controparte di trasmettere. Il CTS alto dà il via libera alla trasmissione. Quando il DTE non è più in grado di ricevere, abbassa RTS e segnala alla controparte di interrompere il flusso.
In ambito radiantistico, la linea DTR viene spesso impiegata dai software CAT per gestire il PTT (Push To Talk), sfruttando la sua capacità di commutare rapidamente tra due stati logici.
XON/XOFF
Il controllo di flusso può essere implementato anche in via software, inviando caratteri di controllo speciali nel flusso dati. Il metodo più comune si basa sui codici XON (riprendere la trasmissione) e XOFF (sospendere la trasmissione), definiti nello standard ASCII. Non richiede linee hardware aggiuntive ma occupa banda nel canale dati e può causare problemi con dati binari che contengano casualmente questi valori.
Uno standard variegato
Lo standard RS-232 nacque per un uso molto specifico: collegare terminali tramite modem, ma nell’adattarlo alle nuove tecnologie emergenti, molti produttori si sono presi grandi libertà in sede di implementazione. quindi è facile imbattersi in dispositivi con interfacce seriali che, pur etichettate come RS-232, differiscono in modo significativo dallo standard.
Il cavo null modem
Per collegare due dispositivi cablati come DTE (ad esempio due computer) senza l’ausilio di modem intermedi, è necessario utilizzare un cavo con un cablaggio specifico detto null modem. Anche di questo esistono versioni diverse. La prima è quella completa, che incrocia TXD con RXD e tutte le linee di controllo (RTS con CTS, DTR con DSR e DCD), con massa comune. E’ la soluzione più corretta e garantire il pieno funzionamento di tutti i protocolli di controllo di flusso. Esiste poi una versione minimale, a tre fili, che incrocia solo TXD con RXD (e trasporta GND), in genere incrociando localmente sul connettore le linee di controllo. Funziona se le velocità del sistema non richiedono l’uso delle linee di controllo di flusso.
Header (LV)TTL
Nei sistemi embedded moderni, la connessione seriale avviene spesso tramite header a pin con livelli TTL o LVTTL. La disposizione dei pin varia tra i produttori: indispensabile verificare sempre il datasheet prima del collegamento.Generalmente sono gestiti solo GND, TXD e RXD, più raramente la coppia RTS/CTS.
Risoluzione dei Problemi
La comunicazione seriale è semplice ma richiede precisione. In caso di malfunzionamento, la causa quasi sempre riconducibile a uno dei seguenti fattori:
| Elemento | Cosa controllare |
| Baud rate | Identico su entrambi i dispositivi. |
| Parametri frame | Numero di bit dati, parit e bit di stop devono coincidere (es. 8N1). |
| Controllo di flusso | Verificare se abilitato (RTS/CTS, DTR/DSR o XON/XOFF) e se configurato allo stesso modo. |
| Livelli elettrici | Non collegare mai direttamente RS-232 a TTL/LVTTL senza convertitori di livello. |
| Cablaggio | Verificare se le interfacce degli apparati sono cablate come DCE o DTE e se il cavo di collegamento è adeguato. |
| Segnali controllo | In sistemi automatici, verificare che DCD e DSR vengano gestiti correttamente dal software. |
Nella grande maggioranza dei casi, il problema di comunicazione seriale riconducibile a uno di questi elementi, ed un approccio sistematico che li verifichi nell’ordine indicato
permette di isolare rapidamente la causa del malfunzionamento.
Nella foto del titolo: per fare il debug delle connessioni RS-232 si usa un breakout box, che consente di visualizzare lo stato dei segnali delle singole linee e di modificare al volo la configurazione




Commento all'articolo