GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo monitorear una conexión serial a 250000 baudios?

Deseo monitorear directamente la conexión serie a través de USB a mi impresora 3D, que funciona a 250000 baudios. por ejemplo, podría monitorearlo con cat /dev/ttyUSB0

Sin embargo, primero necesito establecer la velocidad en baudios, por ejemplo, stty -F /dev/ttyUSB0 115200

Pero si intento establecer la velocidad de transmisión en 250k, falla:

stty -F /dev/ttyUSB0 250000

da resultado:

stty: invalid argument 250000

Parece que la velocidad en baudios de 250000 no es compatible con Ubuntu/Mint. ¿Alguien puede sugerir una forma alternativa de monitorear esta conexión en serie?

Respuesta aceptada:

Hay algunos ioctls no documentados que puede usar para establecer velocidades no estándar, siempre que el controlador los implemente. Una forma sencilla de llamarlos es con un pequeño trozo de python. Por ejemplo, poner en el archivo mysetbaud.py y chmod +x es:

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

Esto toma algo de código del pyserial paquete con constantes para los diversos valores necesarios de los archivos de inclusión de Linux C y una matriz para struct termios2 . Lo usa con un parámetro de velocidad en baudios y su dispositivo en stdin, por ejemplo, desde bash:

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

Linux
  1. ¿Cómo agregar una conexión MySQL remota en Linux?

  2. ¿Cómo puedo monitorear datos en un puerto serie en Linux?

  3. ¿Cómo monitorear los valores cwnd y ssthresh para una conexión TCP?

  4. Cómo destruir completamente una conexión de socket en C

  5. ¿Cómo determinar la tasa de baudios de un puerto serie?

Cómo monitorear la conexión WiFi con Wavemon desde la línea de comandos en Linux

Cómo usar el Comando ss (Supervisar las Conexiones de Red)

¿Cómo monitorear la actividad del disco?

¿Cómo compartir la conexión a Internet?

¿Cómo puedo monitorear el disco io?

¿Cómo sabe cat la velocidad en baudios del puerto serie?