Macos OS X上串行端口波特率超过230400

Macos OS X上串行端口波特率超过230400,macos,serial-port,stty,Macos,Serial Port,Stty,我正在尝试编写一个小的可移植脚本,它允许串行端口嗅探,而不需要任何进一步的嗅探软件需求,只需要使用一些标准的命令行实用程序 我可以调用/serialSniffer.sh/dev/cu.usbserial xyz,然后用我要嗅探的软件连接到显示的设备 serialSniffer.sh: #! /usr/bin/env zsh TEMPORARYDIR="$(mktemp -d 2>/dev/null || mktemp -d -t 'serialSniffer')" cleanup ()

我正在尝试编写一个小的可移植脚本,它允许串行端口嗅探,而不需要任何进一步的嗅探软件需求,只需要使用一些标准的命令行实用程序

我可以调用
/serialSniffer.sh/dev/cu.usbserial xyz
,然后用我要嗅探的软件连接到显示的设备

serialSniffer.sh:

#! /usr/bin/env zsh

TEMPORARYDIR="$(mktemp -d 2>/dev/null || mktemp -d -t 'serialSniffer')"

cleanup ()
{
    kill $(cat $TEMPORARYDIR/rx_tee.pid) 2> /dev/null
    kill $(cat $TEMPORARYDIR/rx_cat.pid) 2> /dev/null
    kill $(cat $TEMPORARYDIR/tx_tee.pid) 2> /dev/null
    kill $(cat $TEMPORARYDIR/tx_cat.pid) 2> /dev/null
    rm $TEMPORARYDIR/rxfifo
    rm $TEMPORARYDIR/txfifo
    kill $(cat $TEMPORARYDIR/socat.pid) 2> /dev/null
    rm $TEMPORARYDIR/rx_tee.pid
    rm $TEMPORARYDIR/rx_cat.pid
    rm $TEMPORARYDIR/tx_tee.pid
    rm $TEMPORARYDIR/tx_cat.pid
    rm $TEMPORARYDIR/socat.pid
    exit 0
}

trap cleanup SIGINT SIGTERM

socat pty,raw,echo=0,link=$TEMPORARYDIR/ttyDevice pty,raw,echo=0,link=$TEMPORARYDIR/ttyHost &
echo $! > $TEMPORARYDIR/socat.pid
sleep 0.01

mkfifo $TEMPORARYDIR/rxfifo
cat $TEMPORARYDIR/ttyDevice > $TEMPORARYDIR/rxfifo &
echo $! > $TEMPORARYDIR/rx_cat.pid
tee $1 $TEMPORARYDIR/rx < $TEMPORARYDIR/rxfifo > /dev/null &
echo $! > $TEMPORARYDIR/rx_tee.pid

mkfifo $TEMPORARYDIR/txfifo
cat $1 > $TEMPORARYDIR/txfifo &
echo $! > $TEMPORARYDIR/tx_cat.pid
tee $TEMPORARYDIR/ttyDevice $TEMPORARYDIR/tx < $TEMPORARYDIR/txfifo > /dev/null &
echo $! > $TEMPORARYDIR/tx_tee.pid

echo "Connect computer side software to '$TEMPORARYDIR/ttyHost'."

tail -f $TEMPORARYDIR/tx $TEMPORARYDIR/rx
#/usr/bin/env zsh
TEMPORARYDIR=“$(mktemp-d2>/dev/null | | mktemp-d-t'serialSniffer”)”
清理()
{
kill$(cat$TEMPORARYDIR/rx_tee.pid)2>/dev/null
kill$(cat$TEMPORARYDIR/rx_cat.pid)2>/dev/null
kill$(cat$TEMPORARYDIR/tx_tee.pid)2>/dev/null
kill$(cat$TEMPORARYDIR/tx_cat.pid)2>/dev/null
rm$TEMPORARYDIR/rxfifo
rm$TEMPORARYDIR/txfifo
kill$(cat$TEMPORARYDIR/socat.pid)2>/dev/null
rm$TEMPORARYDIR/rx_tee.pid
rm$TEMPORARYDIR/rx_类别pid
rm$TEMPORARYDIR/tx_tee.pid
rm$TEMPORARYDIR/tx_类别pid
rm$TEMPORARYDIR/socat.pid
出口0
}
陷阱清理SIGINT SIGTERM
socat pty,原始,echo=0,link=$TEMPORARYDIR/ttyDevice pty,原始,echo=0,link=$TEMPORARYDIR/ttyHost&
echo$!>$临时目录/socat.pid
睡眠0.01
mkfifo$TEMPORARYDIR/rxfifo
目录$TEMPORARYDIR/ttyDevice>$TEMPORARYDIR/rxfifo&
echo$!>$临时目录/rx_目录pid
tee$1$TEMPORARYDIR/rx<$TEMPORARYDIR/rxfifo>/dev/null&
echo$!>$临时目录/rx_tee.pid
mkfifo$TEMPORARYDIR/txfifo
类别$1>临时目录/txfifo&
echo$!>$临时目录/tx_目录pid
tee$TEMPORARYDIR/ttyDevice$TEMPORARYDIR/tx<$TEMPORARYDIR/txfifo>/dev/null&
echo$!>$临时目录/tx\U tee.pid
echo“将计算机端软件连接到“$TEMPORARYDIR/ttyHost”。”
尾部-f$TEMPORARYDIR/tx$TEMPORARYDIR/rx
它可以在低波特率(高达230400)下工作。但当我在PySerial软件中选择460800时,我得到了“设备的ioctl不适当”错误。 使用
stty
无法设置高波特率


PySerial和
dev/cu.usbserial xyz之间的直接连接可以正常工作,因此这不是一个硬件问题。

这里有一个很好的答案:

基本上使用stty设置波特率和背景,使其不会退出:

stty -f /dev/cu.usbserial 460800 &

有同样的问题。你找到解决办法了吗?我已经尝试过使用FTDI提供的驱动程序,但是使用它也不起作用。这个问题只发生在OSX上。Linux和Windows可以选择波特率>230400,包括内置和FTDI驱动程序。@StefanD。不,不幸的是,我还没有解决办法。