GNU/Linux >> Linux の 問題 >  >> Linux

250000ボーでシリアル接続を監視する方法は?

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]))

これは、pyserialからいくつかのコードを取得します Linux Cインクルードファイルに必要なさまざまな値の定数と、struct termios2の配列を含むパッケージ 。ボーレートパラメータとデバイスをstdinで使用します(例:bashから):

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

Linux
  1. モニターの自動構成を無効にする方法は?

  2. Linux のシリアル ポートでデータを監視するにはどうすればよいですか?

  3. CLOSE_WAIT ソケット接続を削除するにはどうすればよいですか

  1. サウンド シンクをソースにリダイレクトする方法

  2. シリアルポートのトラフィックを監視するにはどうすればよいですか?

  3. cat はどうやってシリアルポートのボーレートを知るのですか?

  1. Linuxでユーザーアクティビティを監視する方法

  2. ワイヤレス接続を監視する方法は?

  3. シリアルポートのボーレートを決定する方法は?