我有一个串行设备,使用 设置为原始模式stty -F /dev/ttyS0 raw
。当我尝试使用 通过它发送任何数据时echo 'hello' > /dev/ttyS0
,会发生以下情况:
对方未收到任何数据;示波器显示未发送任何数据
大约 40 秒内没有出现任何提示,终端似乎挂起了
造成这种行为的原因是什么?
PS 作为输出的串行端口设置如下stty -F /dev/ttyS0 -a
:
速度 9600 波特; stty:/dev/ttyS0 line = 0; intr = ^C; quit = ^\; 擦除 = ^?; kill = ^U; eof = ^D; eol = < undef>; eol2 = < undef>; swtch = < undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8 -opost -olcuc -ocrnl -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
答案1
如果使用 RTS/CTS 硬件流控制,则串行将阻塞等待 RTS(准备发送)。您可能希望通过禁用 CTS 和 RTS 来启用软件流控制:
stty -F /dev/ttyS0 -crtscts
答案2
经过长时间的寻找可能的原因,我偶然发现了解决方案。这与我在 Linux 下初始化硬件时出现的某个错误有关。解决方案是手动(嗯,从运行高程的程序)设置一个控制中断信号级别的标志。
设置完成后,串行口开始按预期工作。
我在这里找到了解决方案:linux.org 论坛. 它引用优越工具作为灵感