GNU/Linux >> Znalost Linux >  >> Linux

Jak monitorovat sériové připojení @ 250 000 Baud?

Chci přímo monitorovat sériové připojení přes USB k mé 3D tiskárně, která běží rychlostí 250 000 baudů. mohu to například sledovat pomocí cat /dev/ttyUSB0

Nejprve však musím nastavit přenosovou rychlost, např. stty -F /dev/ttyUSB0 115200

Ale pokud se pokusím nastavit přenosovou rychlost na 250 k, selže:

stty -F /dev/ttyUSB0 250000

dává výsledek:

stty: invalid argument 250000

Zdá se, že přenosová rychlost 250 000 není podporována v Ubuntu/Mint. Může někdo navrhnout alternativní způsob monitorování tohoto sériového připojení?

Přijatá odpověď:

Existuje několik nezdokumentovaných ioctlů, které můžete použít k nastavení nestandardních rychlostí, pokud je ovladač implementuje. Jednoduchý způsob, jak je zavolat, je pomocí malého kousku krajty. Např. vložte do souboru mysetbaud.py a chmod +x to:

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

Toto přebírá nějaký kód z pyserial balíček s konstantami pro různé hodnoty potřebné z Linuxu C include soubory a pole pro struct termios2 . Používáte jej s parametrem přenosové rychlosti a vaším zařízením na stdin, např. z bash:

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

Linux
  1. Jak zakázat automatickou konfiguraci monitoru?

  2. Jak přidat vzdálené připojení MySQL v linuxu?

  3. Jak sledovat hodnoty cwnd a ssthresh pro připojení TCP?

  1. Jak odeberu připojení soketu CLOSE_WAIT

  2. Jak zjistit, zda se používá připojení ssh ControlMaster

  3. Jak sdílet připojení k internetu?

  1. Jak monitorovat bezdrátové připojení?

  2. Jak mohu sledovat data na sériovém portu v Linuxu?

  3. Jak mohu monitorovat disk io?