250000ボーで動作する3dプリンターへのシリアルオーバーUSB接続を直接監視したいと思います。例:cat /dev/ttyUSB0
で監視する場合があります
ただし、最初にボーレートを設定する必要があります。例:stty -F /dev/ttyUSB0 115200
しかし、ボーレートを250kに設定しようとすると、失敗します。
stty -F /dev/ttyUSB0 250000
結果を与える:
stty: invalid argument 250000
ボーレート250000はUbuntu/Mintではサポートされていないようです。誰かがこのシリアル接続を監視する別の方法を提案できますか?
ドライバーがそれらを実装している場合、非標準の速度を設定するために使用できる文書化されていない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]))
これは、LinuxCインクルードファイルに必要なさまざまな値の定数とstruct termios2
の配列を含む、pyserial
パッケージからいくつかのコードを取得します。ボーレートパラメータとデバイスをstdinで使用します(例:bashから)。
./mysetbaud.py <>/dev/ttyUSB0 250000
setserial -a /dev/ttyUSB0 spd_cust
setserial -a /dev/ttyUSB0 divisor 96
次に、ポートを38400に設定して、250000を取得します。
stty -F /dev/ttyUSB0 38400
(または、アプリケーション(たとえば、ser2net)で38400として使用します)
http://www.linurs.org/linux/SerialPort.html から私の情報を入手しました