# Null modem

Null modem è un metodo di collegamento che permette a due dispositivi data terminal equipment (DTE) (computer, terminali, stampanti ecc.) di essere connessi direttamente usando un cavo seriale RS-232. Lo standard originale RS-232 prevedeva solo la connessione di un DTE con un Data circuit-terminating equipment (DCE) (modem). Con un null modem vengono invertite le linee di trasmissione e ricezione di un canale di comunicazione seriale in modo da poter permettere a due dispositivi DTE di dialogare direttamente. Spesso però è necessario invertire fra loro anche i segnali di handshake per permettere la comunicazione. Ci sono diversi schemi di collegamento null modem in quanto non esiste uno standard a questo riguardo.
I null modem sono comunemente utilizzati per trasferire file fra computer o eseguire operazioni di controllo remoto.
Nel sistema operativo Microsoft Windows si può utilizzare la connessione diretta via cavo per mettere in comunicazione due PC tramite un cavo null modem. Le ultime versioni di MS-DOS sono state distribuite con il programma InterLnk che permetteva di mettere in comunicazione due PC facendo vedere al primo il disco dell'altro tramite un collegamento seriale null modem senza la necessità di installare servizi di rete specifici.
L'ampia diffusione delle connessioni di rete ethernet, la loro facilità di utilizzo e la grande velocità di trasferimento delle informazioni sulla rete hanno reso molto meno comune l'utilizzo di connessioni null modem. Sono comunque indispensabili sia nella comunicazione fra computer, ad esempio per attività di debug, sia fra computer ed apparati vari, ad esempio per la configurazione dell'interfaccia di rete.

## Adattatore null modem

Un adattatore null modem è un accessorio (vedi immagine in alto) con una porta seriale maschio e una femmina che permuta fra di loro i segnali dei piedini di ingresso e uscita in modo da trasformare un cavo seriale RS-232 dritto in un null-modem.

## Cavo null modem

Un cavo null modem è un cavo seriale RS-232 con due connettori femmina a 25 o 9 piedini in cui i segnali di ingresso e di uscita sono permutati per permettere a due dispositivi DTE di essere collegati direttamente.

## Schemi di collegamento null modem

A seconda delle necessità e delle caratteristiche dei dispositivi da collegare ci possono essere diversi schemi di collegamento. Qui sotto sono riportati i più frequenti, ma ne esistono anche altre implementazioni più o meno corrette.
Tutti gli schemi sotto riportati si riferiscono a connettori DB-9 o DB-25 femmina in quanto sui dispositivi DTE dovrebbe essere sempre presente un connettore maschio. All'occorrenza si può anche utilizzare un cavo null modem con un connettore DB-25 e uno DB-9 derivando il relativo schema dagli esempi sotto riportati utilizzando i nomi di ciascuna linea. In alternativa si può anche utilizzare un adattatore seriale DB-25/DB-9.
Solo il connettore DB-25 può essere utilizzato sia per una seriale sincrona, sia per una asincrona. Il connettore DB-9 può essere utilizzato solo per una seriale asincrona.

### Null modem semplice asincrono

Lo schema più semplice per collegare fra loro due dispositivi DTE è quello di invertire la linea di trasmissione dati (TD) con quella di ricezione dati (RD) in modo da collegare la linea di trasmissione di un dispositivo DTE con la linea di ricezione dell'altro e viceversa. Ovviamente la massa (GND, piedino 7 nella seriale DB-25 e 5 in quella DB-9) deve essere connessa direttamente.
Questo schema null modem non utilizza nessuna linea di sincronizzazione; il controllo di flusso deve essere garantito dal software utilizzando, ad esempio, il Controllo di flusso software Xon/Xoff.
La programmazione di un dispositivo con la seriale può essere effettuata con questo tipo di null modem in modo interattivo. Questo schema non è adatto per trasferire l'intera configurazione di un apparato o utilizzare funzioni automatiche come copia-incolla di istruzioni in quanto, non garantendo il controllo di flusso, non si può assicurare che tutte le informazioni siano trasmesse correttamente.

### Null modem a 3 fili con handshaking locale asincrono

Un null modem senza sincronismi, come quello dello schema precedente, non sempre permette alla comunicazione di avviarsi se uno o entrambi i DTE controllano le linee di sincronismo RTS/CTS, DTR/DSR e DCD.
Ove è necessario utilizzare una comunicazione su soli 3 fili e i DTE richiedano un controllo di flusso hardware si può adottare uno schema che gestisca un handshake locale. Un handshake locale si ottiene collegando su ciascun connettore, localmente, le linee RTS e CTS fra loro in modo che il DTE, attivando l'uscita RTS, veda il segnale CTS attivo. Allo stesso modo, collegando localmente le linee DTR, DSR e DCD, si ottiene una emulazione locale della gestione di questi segnali. In questo modo quando il DTE è pronto ad inviare i dati e attiva l'uscita DTR si vede attive le linee DSR e DCD e ritiene così che esista la portante (segnale DCD) e che il DTE remoto sia operativo (DSR).
Questo tipo di collegamento null modem deve essere utilizzato solo con software in grado di gestire direttamente il controllo di flusso. Il collegamento locale delle linee di controllo di flusso può sì attivare la comunicazione fra due DTE, ma rende anche impossibile il controllo di flusso hardware, pur facendo credere ai DTE che questo sia presente.
Le linee TD, RD, e GND sono collegate come nello schema precedente.

### Null modem a 5 fili con handshaking parziale asincrono

Un controllo di flusso parziale si ottiene su un cavo a 5 fili collegando la linea RTS di un DTE alla linea CTS dell'altro DTE e viceversa. In questo modo, quando il buffer di un DTE si riempie, abbassando la linea RTS si comunica all'altro DTE di sospendere la trasmissione fino a quando l'RTS non sarà nuovamente impostato su alto.
Le linee TD, RD e GND devono essere collegate come nello schema di null modem semplice.
Le linee DTR, DSR e DCD devono essere collegate come nello schema precedente.
Con questo schema di null modem il trasferimento dati è coperto dal controllo di flusso anche se un DTE non sa quando l'altro DTE è operativo.

### Null modem a 7 fili con handshaking completo asincrono

Un controllo di flusso completo può essere ottenuto con un cavo a 7 fili in cui le linee TD, RD, GND, RTS e CTS sono collegate come nello schema di null modem a 5 fili mentre la linea DTR di un DTE è collegata alla linea DSR e alla linea DCD dell'altro DTE.
Il controllo di flusso durante la trasmissione avviene utilizzando le linee RTS e CTS come nello schema precedente, ma un DTE può in questo modo comunicare all'altro DTE quando ci sono dei dati da trasferire alzando il segnale DTR. Il segnale DTR su un lato deve essere collegato sia al DSR del DTE remoto sia al DCD dello stesso DTE remoto. Il collegamento DTR/DSR fa sì che un DTE comunichi all'altro quando ha dei dati da trasmettere mentre il collegamento DTR/DCD emula il segnale di presenza della portante in modo che il DTE ritenga che il modem remoto (emulato dal null modem) sia in linea.
Con un handshaking completo si possono ottenere anche velocità di trasmissioni più alte.
La linea RI (Ring Indicator - piedino 22 sul connettore DB-25, piedino 9 su DB-9) non è normalmente utilizzata su un collegamento null modem.

### Null modem a 8 fili per comunicazioni sincrone

Due DTE che operino in modalità sincrona possono essere collegati direttamente se uno è configurato come generatore di clock (master) e l'altro in modalità passiva (slave). Il segnale di clock (TC master) è trasmesso sulla linea 24 del DTE generatore di clock e deve essere propagato alla linea 15 di entrambi i DTE. A questa linea è anche opportuno collegare il piedino 17 di ciascun DTE.
Tutte le altre linee devono essere collegate come nello schema null modem a 7 fili con handshaking completo asincrono.

## Null modem virtuale

Per mettere in comunicazione due applicazioni sviluppate per comunicare su porta seriale si può utilizzare un null modem virtuale che, creando delle porte seriali virtuali, si comporta esattamente come un null modem hardware senza però utilizzare alcuna porta seriale fisica. Questo meccanismo può anche essere utilizzato su sistemi differenti collegati in rete. Queste applicazioni presentano molteplici vantaggi rispetto ad una implementazione hardware fra cui:
* maggiore velocità di trasmissione, limitata solo dalle prestazioni del sistema su cui opera e della rete dati
* distanza illimitata fra le parti perché la condivisione può avvenire utilizzando Internet
* numero illimitato di connessioni virtuali possibili
* facile configurazione dello schema null modem, inclusa la possibilità di emulare esternamente lo stato delle linee come RI
* operatività senza impiego di cavi seriali
Anche Unix fornisce uno strumento, gli pseudo terminal (pty), che forniscono un'interfaccia standard tty alle applicazioni fornendo anche tutti i meccanismi di controllo seriale. Due pty possono essere facilmente collegate insieme creando un canale di comunicazione basato su un null modem virtuale.