Cat

如何監控@ 250000 波特的串列連接?

  • December 14, 2017

我希望直接監控到我的 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.pychmod +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

引用自:https://unix.stackexchange.com/questions/327188