Differenze tra le versioni di "Terminali seriali"

Da GolemWiki.
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.
  
== Applicazioni utili ==
+
<!-- citare: https://unix.stackexchange.com/questions/5800/what-protocol-standard-is-used-by-terminals -->
* mosh (da testare)
+
== 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

Golem-template-note-attention.png 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 , dove ESC [ è la sequenza di escape, 1;1 rappresentano la posizione del cursore (riga;colonna) ed H è 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 (solitamente uucp o dialout). 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"