GNU/Linux >> Linux Esercitazione >  >> Linux

Come monitorare una connessione seriale a 250000 baud?

Desidero monitorare direttamente la connessione seriale su USB alla mia stampante 3d, che funziona a 250000 baud. ad esempio, potrei monitorarlo con cat /dev/ttyUSB0

Tuttavia prima devo impostare il baud rate, ad esempio stty -F /dev/ttyUSB0 115200

Ma se provo a impostare il baud rate su 250k, fallisce:

stty -F /dev/ttyUSB0 250000

dà risultato:

stty: invalid argument 250000

Sembra che il baud rate 250000 non sia supportato in Ubuntu/Mint. Qualcuno può suggerire un modo alternativo per monitorare questa connessione seriale?

Risposta accettata:

Ci sono alcuni ioctl non documentati che puoi usare per impostare velocità non standard, a condizione che il driver le implementi. Un modo semplice per chiamarli è con un piccolo pezzo di pitone. Ad esempio, inserisci il file mysetbaud.py e chmod +x esso:

#!/usr/bin/python
# set nonstandard baudrate. http://unix.stackexchange.com/a/327366/119298
import sys,array,fcntl

# from /usr/lib/python2.7/site-packages/serial/serialposix.py
# /usr/include/asm-generic/termbits.h for struct termios2
#  [2]c_cflag [9]c_ispeed [10]c_ospeed
def set_special_baudrate(fd, baudrate):
    TCGETS2 = 0x802C542A
    TCSETS2 = 0x402C542B
    BOTHER = 0o010000
    CBAUD = 0o010017
    buf = array.array('i', [0] * 64) # is 44 really
    fcntl.ioctl(fd, TCGETS2, buf)
    buf[2] &= ~CBAUD
    buf[2] |= BOTHER
    buf[9] = buf[10] = baudrate
    assert(fcntl.ioctl(fd, TCSETS2, buf)==0)
    fcntl.ioctl(fd, TCGETS2, buf)
    if buf[9]!=baudrate or buf[10]!=baudrate:
        print("failed. speed is %d %d" % (buf[9],buf[10]))
        sys.exit(1)

set_special_baudrate(0, int(sys.argv[1]))

Questo prende del codice da pyserial pacchetto con costanti per i vari valori necessari da Linux C include file e un array per struct termios2 . Lo usi con un parametro di baud rate e il tuo dispositivo su stdin, ad esempio da bash:

./mysetbaud.py <>/dev/ttyUSB0 250000

Linux
  1. Come disabilitare il monitoraggio della configurazione automatica?

  2. Come aggiungere una connessione MySQL remota in Linux?

  3. Come posso monitorare i dati su una porta seriale in Linux?

  4. Come distruggere completamente una connessione socket in C

  5. Come rimuovo una connessione socket CLOSE_WAIT

Come monitorare la connessione WiFi con Wavemon dalla riga di comando in Linux

Come monitorare l'attività dell'utente in Linux

Come usare ss Command (monitora connessioni di rete)

Come monitorare l'attività del disco?

Come posso monitorare il disco io?

Come fa cat a conoscere il baud rate della porta seriale?