Cat
如何監控@ 250000 波特的串列連接?
我希望直接監控到我的 3d 列印機的串列 USB 連接,它以 250000 波特執行。例如,我可能會監控它
cat /dev/ttyUSB0
但是首先我需要設置波特率,例如
stty -F /dev/ttyUSB0 115200
但是,如果我嘗試將波特率設置為 250k,則會失敗:
stty -F /dev/ttyUSB0 250000
給出結果:
stty: invalid argument 250000
Ubuntu/Mint 似乎不支持波特率 250000。誰能建議一種替代方法來監視此串列連接?
如果驅動程序實現了它們,您可以使用一些未記錄的 ioctl 來設置非標準速度。呼叫它們的一種簡單方法是使用一小段 python。例如放入文件
mysetbaud.py
中chmod +x
:#!/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]))
這會從包中獲取一些程式碼,其中
pyserial
包含 Linux C 包含文件所需的各種值的常量,以及struct termios2
. 您將它與波特率參數和您的設備一起使用在標準輸入上,例如來自 bash:./mysetbaud.py <>/dev/ttyUSB0 250000