Differenze tra le versioni di "Terminali seriali"
Jump to navigation
Jump to search
m (Riordinata un pochetto) |
m (→Troubleshooting: tips per evitare che modemmanager si impicci dei device seriali) |
||
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 4: | Riga 4: | ||
}} | }} | ||
− | In questa pagina sono raccolti alcuni suggerimenti da utilizzare per interfacciarsi con device embedded via seriale | + | In questa pagina sono raccolti alcuni suggerimenti da utilizzare per interfacciarsi con device embedded via seriale. |
− | == | + | <!-- citare: https://unix.stackexchange.com/questions/5800/what-protocol-standard-is-used-by-terminals --> |
− | * | + | == Standard di terminali == |
− | * screen | + | I moderni terminali UNIX fanno uso dello standard ANSI X3.64 o di una sua variante: |
− | * minicom | + | * ANSI X3.64: standard che implementa sequenze di escape per inviare comandi terminale remoto. Esempio: per muovere il cursore in alto a sinistra si invia <code>ESC [ 1 ; 1 H </code>, dove <code>ESC [</code> è la sequenza di escape, <code>1;1</code> rappresentano la posizione del cursore (riga;colonna) ed <code>H</code> è il comando "muovi cursore". Una descrizione più estensiva delle sequenze di escape si può trovare alla relativa [https://en.wikipedia.org/wiki/ANSI_escape_code pagina di wikipedia]. |
+ | * DEC VT100: standard il cui nome deriva dal popolare terminale prodotto da DEC. È equivalente al protocollo VT102 (anch'esso prende il nome da un successivo modello di terminale, più economico ma retrocompatibile). | ||
+ | * xterm: commistione degli standard ANSI e VT-* largamente usato sugli emulatori di terminale Linux. Di uso comune le varianti -color e -color256 che, come suggerisce il nome, supportano le sequenze di escape per cambiare colore al testo. | ||
+ | * linux: altra variante ANSI compatibile, in voga sui sistemi Linux. | ||
+ | |||
+ | === Identificare il proprio standard === | ||
+ | Digitare su shell <code>echo $TERM</code> per conoscere il protocollo attualmente in uso. | ||
+ | Quando si usa ssh, la variabile TERM viene ereditata in modo da adottare uno standard comune. | ||
+ | |||
+ | == Applicativi per comunicazione seriale == | ||
+ | * screen: multiplexer di terminali; consente anche la connessione via seriale usando la sintassi <code>screen /dev/ttyxx baudrate</code>. Supporta gli standard VT100/ANSI. Per l'uso si può far riferimento al [https://gist.github.com/jctosta/af918e1618682638aa82 prontuario]. | ||
+ | * minicom: programma per comunicazioni seriali. Supporta gli standard VT100/ANSI e gli escape per i colori (con l'opzione <code>--color=on</code>). Dispone inoltre di utilità per lo scambio dati quali ZMODEM, kermit, ... e per la comunicazione con modem AT. | ||
+ | * miniterm.py: essenziale script python, non implementa gli standard VT100/ANSI ma supporta alcuni escape. Utile per dialogare con sistemi minimali o con microcontrollori. | ||
== Troubleshooting == | == Troubleshooting == | ||
;I caratteri da tastiera non vengono inviati e/o sono inviati insieme chiudendo il terminale | ;I caratteri da tastiera non vengono inviati e/o sono inviati insieme chiudendo il terminale | ||
:sono attivi il controllo di flusso hardware (RTS/CTS) oppure software (XON/XOFF). Disattivare il controllo di flusso e riprovare. | :sono attivi il controllo di flusso hardware (RTS/CTS) oppure software (XON/XOFF). Disattivare il controllo di flusso e riprovare. | ||
+ | |||
;I tasti End, Home, ctrl+arrow non funzionano o restituiscono caratteri non stampabili | ;I tasti End, Home, ctrl+arrow non funzionano o restituiscono caratteri non stampabili | ||
:editare il file <code>/etc/inputrc</code> ed aggiungere (o decommentare) le righe | :editare il file <code>/etc/inputrc</code> ed aggiungere (o decommentare) le righe | ||
Riga 28: | Riga 41: | ||
"\e[1;5C": forward-word | "\e[1;5C": forward-word | ||
"\e[1;5D": backward-word | "\e[1;5D": backward-word | ||
+ | |||
+ | ;<code>screen</code>/<code>minicom</code> restituiscono errore tentando di connettersi al device, ma da root non si hanno problemi | ||
+ | : verificare i privilegi dell'utente in uso nei confronti delle interfacce seriali. Lanciare <code>ls -lah /dev/tty*</code> per verificare i permessi e il gruppo assegnato (solitamente <code>uucp</code> o <code>dialout</code>). Ricordarsi di disconnettere l'utente quando si modificano le informazioni sui gruppi di appartenenza. | ||
+ | |||
+ | ;Il precedente problema persiste anche con i privilegi corretti. Lanciando i comandi come utente root compaiono caratteri e comandi AT | ||
+ | : è probabile che sul sistema sia presente <code>modemmanager</code>, un software per il controllo di dispositivi 2G/3G/4G e modem-affini. | ||
+ | |||
+ | Disinstallarlo | ||
+ | # apt remove modemmanager | ||
+ | oppure, disabilitare il servizio systemd | ||
+ | # systemctl disable modemmanager | ||
+ | # systemctl stop modemmanager | ||
+ | o ancora, istruire udev che la porta seriale che si sta usando *non* è un modem. Esplicitare rispettivamente il VID e il PID del dispositivo al posto di VVVV e PPPP. Queste informazioni si ottengono con <code>lsusb</code> | ||
+ | $ lsusb | ||
+ | Bus 003 Device 002: ID VVVV:PPPP Serial port duh dah blabla | ||
+ | Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub | ||
+ | ... | ||
+ | |||
+ | # vim /etc/udev/rules.d/99-ttyacms.rules | ||
+ | ATTRS{idVendor}=="VVVV" ATTRS{idProduct}=="PPPP", ENV{ID_MM_DEVICE_IGNORE}="1" | ||
+ | |||
+ | [[Category:Howto]] |
Versione attuale delle 20:17, 20 dic 2020
Appunti con poco filo logico
In questa pagina sono raccolti alcuni suggerimenti da utilizzare per interfacciarsi con device embedded via seriale.
Standard di terminali
I moderni terminali UNIX fanno uso dello standard ANSI X3.64 o di una sua variante:
- ANSI X3.64: standard che implementa sequenze di escape per inviare comandi terminale remoto. Esempio: per muovere il cursore in alto a sinistra si invia
ESC [ 1 ; 1 H
, doveESC [
è la sequenza di escape,1;1
rappresentano la posizione del cursore (riga;colonna) edH
è il comando "muovi cursore". Una descrizione più estensiva delle sequenze di escape si può trovare alla relativa pagina di wikipedia. - DEC VT100: standard il cui nome deriva dal popolare terminale prodotto da DEC. È equivalente al protocollo VT102 (anch'esso prende il nome da un successivo modello di terminale, più economico ma retrocompatibile).
- xterm: commistione degli standard ANSI e VT-* largamente usato sugli emulatori di terminale Linux. Di uso comune le varianti -color e -color256 che, come suggerisce il nome, supportano le sequenze di escape per cambiare colore al testo.
- linux: altra variante ANSI compatibile, in voga sui sistemi Linux.
Identificare il proprio standard
Digitare su shell echo $TERM
per conoscere il protocollo attualmente in uso.
Quando si usa ssh, la variabile TERM viene ereditata in modo da adottare uno standard comune.
Applicativi per comunicazione seriale
- screen: multiplexer di terminali; consente anche la connessione via seriale usando la sintassi
screen /dev/ttyxx baudrate
. Supporta gli standard VT100/ANSI. Per l'uso si può far riferimento al prontuario. - minicom: programma per comunicazioni seriali. Supporta gli standard VT100/ANSI e gli escape per i colori (con l'opzione
--color=on
). Dispone inoltre di utilità per lo scambio dati quali ZMODEM, kermit, ... e per la comunicazione con modem AT. - miniterm.py: essenziale script python, non implementa gli standard VT100/ANSI ma supporta alcuni escape. Utile per dialogare con sistemi minimali o con microcontrollori.
Troubleshooting
- I caratteri da tastiera non vengono inviati e/o sono inviati insieme chiudendo il terminale
- sono attivi il controllo di flusso hardware (RTS/CTS) oppure software (XON/XOFF). Disattivare il controllo di flusso e riprovare.
- I tasti End, Home, ctrl+arrow non funzionano o restituiscono caratteri non stampabili
- editare il file
/etc/inputrc
ed aggiungere (o decommentare) le righe
# Home, End "\e[1~": beginning-of-line "\e[4~": end-of-line # Ctrl+arrow shortcuts "\e[5C": forward-word "\e[5D": backward-word "\e\e[C": forward-word "\e\e[D": backward-word "\e[1;5C": forward-word "\e[1;5D": backward-word
screen
/minicom
restituiscono errore tentando di connettersi al device, ma da root non si hanno problemi- verificare i privilegi dell'utente in uso nei confronti delle interfacce seriali. Lanciare
ls -lah /dev/tty*
per verificare i permessi e il gruppo assegnato (solitamenteuucp
odialout
). Ricordarsi di disconnettere l'utente quando si modificano le informazioni sui gruppi di appartenenza.
- Il precedente problema persiste anche con i privilegi corretti. Lanciando i comandi come utente root compaiono caratteri e comandi AT
- è probabile che sul sistema sia presente
modemmanager
, un software per il controllo di dispositivi 2G/3G/4G e modem-affini.
Disinstallarlo
# apt remove modemmanager
oppure, disabilitare il servizio systemd
# systemctl disable modemmanager # systemctl stop modemmanager
o ancora, istruire udev che la porta seriale che si sta usando *non* è un modem. Esplicitare rispettivamente il VID e il PID del dispositivo al posto di VVVV e PPPP. Queste informazioni si ottengono con lsusb
$ lsusb Bus 003 Device 002: ID VVVV:PPPP Serial port duh dah blabla Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub ... # vim /etc/udev/rules.d/99-ttyacms.rules ATTRS{idVendor}=="VVVV" ATTRS{idProduct}=="PPPP", ENV{ID_MM_DEVICE_IGNORE}="1"