Trovare la porta seriale
Un adattatore USB seriale compare come due file in /dev. Elencali prima e dopo averlo collegato: il nome nuovo è la tua porta.
ls /dev/cu.*
/dev/cu.Bluetooth-Incoming-Port
/dev/cu.debug-console
/dev/cu.usbserial-1420
I nomi tipici sono cu.usbserial-XXXX per gli adattatori FTDI e Prolific e cu.usbmodemXXXX per le schede che si presentano come modem USB, come molte schede a microcontrollore. Il numero cambia con la presa USB che usi.
Ogni porta ha anche un gemello /dev/tty.*. Usa quello cu. Il dispositivo tty serve per le chiamate in arrivo e aspetta un segnale di portante che un cavo console invia di rado, quindi la sessione può restare bloccata senza output.
Se non compare nessuna porta nuova, controlla che macOS veda l'adattatore:
ioreg -p IOUSB
Se è nell'elenco ma non ha una porta, il chip ha bisogno di un driver del suo produttore. Se non è nell'elenco, prova un altro cavo: alcuni cavi USB portano solo corrente.
Collegarsi con screen
screen è incluso in macOS ed è il terminale seriale più rapido. Dagli la porta e la velocità:
screen /dev/cu.usbserial-1420 9600
Lo schermo diventa vuoto. È normale: una console non stampa nulla finché non le mandi qualcosa, quindi premi Invio e appare il prompt. Dopo la velocità puoi aggiungere le impostazioni di linea, nello stile di stty, separate da virgole:
screen /dev/cu.usbserial-1420 115200,cs8,-ixon,-ixoff
Qui cs8 vuol dire 8 bit di dati, e -ixon,-ixoff spengono il controllo di flusso software.
Per uscire da screen premi Ctrl-A, poi K, poi Y. Ctrl-A e poi D stacca soltanto: la sessione resta attiva e tiene la porta. Per trovare e chiudere una sessione staccata:
screen -ls
screen -r
screen -X -S 98339 quit
Per tenere una copia di tutto ciò che l'apparato stampa, avvia screen con -L. Scrive un file chiamato screenlog.0 nella cartella corrente.
Collegarsi con cu
cu è l'altro strumento incluso. Sul Mac serve sudo, perché scrive un file di lock in /var/spool/uucp. Senza, cu si ferma con Line in use anche quando la porta è libera. È proprio quello che è successo nella nostra prova.
sudo cu -l /dev/cu.usbserial-1420 -s 9600
Per uscire da cu scrivi ~. all'inizio di una riga, cioè Invio, poi tilde, poi punto. Se sei collegato al Mac via SSH, ssh intercetta prima la stessa sequenza, quindi scrivi ~~.. La guida alle sequenze di escape SSH spiega perché.
Velocità, parità e controllo di flusso
I due lati devono usare le stesse impostazioni, altrimenti ottieni caratteri a caso o niente. La notazione abituale è la velocità più 8N1: 8 bit di dati, nessuna parità, 1 bit di stop.
| Apparato | Impostazione comune |
|---|---|
| Switch, router, firewall | 9600 8N1, senza controllo di flusso |
| Raspberry Pi, quasi tutte le schede Linux | 115200 8N1, senza controllo di flusso |
| Schede a microcontrollore | Quella impostata dal firmware, spesso 115200 o 9600 |
| Vecchi modem e alcuni apparati industriali | Possono usare 7E1 (7 bit di dati, parità pari) o RTS/CTS |
Come riconoscere un'impostazione sbagliata: simboli a caso indicano la velocità sbagliata; testo con qualche carattere errato fa pensare a parità o bit di dati; output che si ferma dopo una schermata fa pensare al controllo di flusso. Per vedere come è impostata la porta in questo momento:
stty -f /dev/cu.usbserial-1420
Sul Raspberry Pi la console seriale va anche attivata prima nel sistema. La guida SSH per Raspberry Pi copre la strada di rete, una volta che la console ha fatto il suo lavoro.
Problemi comuni
Resource busyoLine in use. Un altro programma tiene la porta, spesso uno screen staccato. Trovalo conlsof /dev/cu.usbserial-1420e chiudilo, oppure eseguiscreen -ls.- Schermo vuoto. Premi Invio. Se ancora niente, controlla la velocità, poi se per quell'apparato serve un cavo null modem (incrociato) o un cavo console rollover.
- Righe che scendono a scalini, o nessun a capo. L'apparato gestisce CR e LF in modo diverso. Molte console vogliono solo CR quando premi Invio.
- Frecce o menu a schermo intero sbagliati. Imposta
TERMsull'apparato in modo coerente, vedi unknown terminal type.
screen o un terminale seriale dedicato
screen e cu bastano per un controllo veloce. Un terminale seriale per Mac dedicato aiuta quando torni spesso sugli stessi apparati: ricorda porta e impostazioni di linea per ogni apparato, ti elenca le porte e regge un cavo che si stacca. In ogni caso, quando l'apparato è in rete, passa a SSH per il lavoro di tutti i giorni.
Domande
Su Mac devo usare /dev/tty.usbserial o /dev/cu.usbserial?
Usa /dev/cu. Il dispositivo tty aspetta un segnale di portante che quasi nessun cavo console invia, quindi screen può restare fermo senza mostrare nulla. Il dispositivo cu si apre subito.
Come si esce da screen su una porta seriale?
Premi Ctrl-A, poi K, e rispondi Y. Se chiudi invece la finestra del Terminale, screen può restare attivo in background e tenere la porta, che poi risponde Resource busy.
Perché la console seriale mostra caratteri strani?
La velocità è sbagliata. Chiudi la sessione e prova le altre velocità comuni, prima 9600 e 115200, poi 19200, 38400 e 57600.
Il Mac ha bisogno di un driver per un adattatore USB seriale?
Le versioni recenti di macOS includono i driver dei chip più diffusi. Se l'adattatore compare in ioreg -p IOUSB ma non appare nessuna porta /dev/cu., installa il driver del produttore del chip.
Fonti
- screen(1), manuale di GNU Screen
- cu(1), manuale di Taylor UUCP
- stty(1), manuale FreeBSD
- Documentazione Raspberry Pi, configurazione UART