GNU/Linux >> Tutoriels Linux >  >> Linux

Comment surveiller une connexion série à 250 000 bauds ?

Je souhaite surveiller directement la connexion série sur USB de mon imprimante 3D, qui fonctionne à 250 000 bauds. par exemple, je pourrais le surveiller avec cat /dev/ttyUSB0

Cependant, je dois d'abord définir le débit en bauds, par exemple stty -F /dev/ttyUSB0 115200

Mais si j'essaie de régler le débit en bauds sur 250 000, cela échoue :

stty -F /dev/ttyUSB0 250000

donne le résultat :

stty: invalid argument 250000

Il semble que le débit en bauds 250000 ne soit pas pris en charge sous Ubuntu/Mint. Quelqu'un peut-il suggérer une autre façon de surveiller cette connexion série ?

Réponse acceptée :

Il existe des ioctls non documentés que vous pouvez utiliser pour définir des vitesses non standard, à condition que le pilote les implémente. Une façon simple de les appeler est d'utiliser un petit morceau de python. Par exemple mettre dans le fichier mysetbaud.py et chmod +x il :

#!/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]))

Cela prend du code du pyserial package avec des constantes pour les différentes valeurs nécessaires à partir des fichiers d'inclusion Linux C et un tableau pour la struct termios2 . Vous l'utilisez avec un paramètre de débit en bauds et votre appareil sur stdin, par exemple depuis bash :

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

Linux
  1. Comment désactiver la configuration automatique du moniteur ?

  2. Comment surveiller la connexion sans fil ?

  3. Comment surveiller les valeurs cwnd et ssthresh pour une connexion TCP ?

  4. Comment supprimer une connexion de socket CLOSE_WAIT

  5. Comment déterminer le débit en bauds d'un port série ?

Comment surveiller la connexion WiFi avec Wavemon à partir de la ligne de commande sous Linux

Comment utiliser la commande ss (Surveiller les connexions réseau)

Comment surveiller l'activité du disque ?

Comment partager la connexion internet ?

Comment puis-je surveiller le disque io ?

Comment cat connaît-il le débit en bauds du port série ?