GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie überwacht man eine serielle Verbindung bei 250000 Baud?

Ich möchte die Seriell-über-USB-Verbindung zu meinem 3D-Drucker, der mit 250000 Baud läuft, direkt überwachen. z.B. könnte ich es mit cat /dev/ttyUSB0 überwachen

Allerdings muss ich zuerst die Baudrate einstellen, zB stty -F /dev/ttyUSB0 115200

Aber wenn ich versuche, die Baudrate auf 250k einzustellen, schlägt es fehl:

stty -F /dev/ttyUSB0 250000

ergibt Ergebnis:

stty: invalid argument 250000

Es scheint, dass die Baudrate 250000 unter Ubuntu/Mint nicht unterstützt wird. Kann jemand einen alternativen Weg vorschlagen, um diese serielle Verbindung zu überwachen?

Akzeptierte Antwort:

Es gibt einige undokumentierte ioctls, die Sie verwenden können, um nicht standardmäßige Geschwindigkeiten einzustellen, vorausgesetzt, der Treiber implementiert sie. Eine einfache Art, sie anzurufen, ist mit einem kleinen Stück Python. Legen Sie zB die Datei mysetbaud.py an und 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]))

Dies erfordert etwas Code aus pyserial Paket mit Konstanten für die verschiedenen Werte, die von Linux-C-Include-Dateien benötigt werden, und einem Array für struct termios2 . Sie verwenden es mit einem Baudratenparameter und Ihrem Gerät auf stdin, zB von bash:

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

Linux
  1. Wie deaktiviere ich die automatische Monitorkonfiguration?

  2. Wie füge ich eine Remote-MySQL-Verbindung unter Linux hinzu?

  3. Wie überwacht man cwnd- und ssthresh-Werte für eine TCP-Verbindung?

  4. Wie entferne ich eine CLOSE_WAIT-Socket-Verbindung?

  5. Wie kann ich den Datenverkehr der seriellen Schnittstelle überwachen?

So überwachen Sie die WLAN-Verbindung mit Wavemon von der Befehlszeile in Linux

So verwenden Sie den Befehl ss (Netzwerkverbindungen überwachen)

Wie überwacht man die Festplattenaktivität?

Wie kann ich disk io überwachen?

Woher kennt cat die Baudrate der seriellen Schnittstelle?

Wie bestimme ich die Baudrate einer seriellen Schnittstelle?