我有一个没有流量控制的串行设备,但是通过保持 RTS高和 DTR低从 RS232 端口供电
我希望使用简单的bash脚本读取此设备,但无法使用stty或其他方式设置握手线以允许上述配置。
如果有可能,有什么想法吗?
答案 0 :(得分:0)
我没有得到关于在不接触DTR的情况下设置RTS的答案,因为我的加密狗上没有任何DTR引脚;但是,尝试设置RTS已经是非常棘手的非纯粹的shell。
您可能需要使用stty crtscts和clocal标志。
我在这里发表了详细的答案: https://forums.gentoo.org/viewtopic-p-8132756.html#8132756
以下是简短版本:
#!/bin/bash
MySerialPort="/dev/ttyUSB0"
MyLatency="2"
echo "#include <fcntl.h>
#include <sys/ioctl.h>
main()
{ int fd; fd = open(\"${MySerialPort}\",O_RDWR | O_NOCTTY );
int RTS_flag; RTS_flag = TIOCM_RTS;
ioctl(fd,TIOCMBIS,&RTS_flag);
sleep (${MyLatency});
ioctl(fd,TIOCMBIC,&RTS_flag);
close(fd); } " | tcc -run -
请注意,在TX上发送数据可能会导致RTS混乱;有关详细信息,请参阅Gentoo论坛。
答案 1 :(得分:0)
当hucpcl = 1时,socat控制DTR
(Atmel EDBG USB串行需要DTR高)
sleep 1; while true; do echo -en "\x01\x02"; sleep 0.1; done | socat -T1 -t1 - /dev/ttyUSB0,hupcl=1,raw,b1000000,cs8,echo=0
man socat-可能会找到更多解决您序列问题的方法。
答案 2 :(得分:0)
我在这里尝试过类似的方法。 我用了ioctl。然后用万用表测量。 这是我发现的:
dsrv=TIOCM_DTR;//this sets RTS to -11.7?
dsrv=TIOCM_RTS;//sets DTR -11.7
ioctl(fd, TIOCMBIS, &dsrv);
dsrv=TIOCM_DTR;//this sets RTS to 11.7?
dsrv=TIOCM_RTS;//sets DTR 11.7
ioctl(fd, TIOCMBIC, &dsrv);
有点奇怪...