一个shell正在对串口读出(cat)的同时下能不能再对串口进行写(echo)操作,怎样实现?
不知道是串口设置的原因还是其它原因,现在接收串口数据正常,如果开始不接收数据,直接发数据可以。只要执行过接收命令后就不能发送命令了,除非重启前端设备,我第一次弄LINUX串口,是不是有什么清除串口缓存的命令或者初始货串口命令不对?希望有相关经验的高手指点指点。
我串口的初始化命令是:
stty -F /dev/ttyS1 9600 raw
怎样同时对串口进行收和发的操作?
-
- 帖子: 14
- 注册时间: 2020-01-08 14:43
- 系统: Linux version 3.2.40
怎样同时对串口进行收和发的操作?
上次由 cnxk 在 2020-04-30 10:16,总共编辑 1 次。
- astolia
- 论坛版主
- 帖子: 6454
- 注册时间: 2008-09-18 13:11
Re: 怎样同时对串口进行收和发的操作?
cat /dev/ttyS0 &
echo abc > /dev/ttyS0
echo abc > /dev/ttyS0
-
- 帖子: 14
- 注册时间: 2020-01-08 14:43
- 系统: Linux version 3.2.40
Re: 怎样同时对串口进行收和发的操作?
这样同时使用cat和echo的话不是限定只能发送abc这条命令了吗?能不能任何时候发送任意指令,或者折中先把cat暂停发关完ECHO再执行CAT的方法?
-
- 帖子: 14
- 注册时间: 2020-01-08 14:43
- 系统: Linux version 3.2.40
Re: 怎样同时对串口进行收和发的操作?
不知道是串口设置的原因还是其它原因,现在接收串口数据正常,如果开始不接收数据,直接发数据可以。只要执行过接收命令后就不能发送命令了,除非重启前端设备,我第一次弄LINUX串口,是不是有什么清除串口缓存的命令或者初始货串口命令不对?希望有相关经验的高手指点指点。
我串口的初始化命令是:
stty -F /dev/ttyS1 9600 raw
我串口的初始化命令是:
stty -F /dev/ttyS1 9600 raw
- astolia
- 论坛版主
- 帖子: 6454
- 注册时间: 2008-09-18 13:11
Re: 怎样同时对串口进行收和发的操作?
看起来是你的设备/相应驱动不支持全双工。因为用cat读取时,除非遇到EOF或出错,都会一直读下去,如果没有数据可读,就会进入阻塞状态,不是全双工的话会导致无法写入
你可以拿支持全双工的虚拟串口设备来做个实验
先用socat把两个虚拟串口设备的输入和输出端连起来
代码: 全选
socat -d -d pty,raw,echo=0 pty,raw,echo=0
代码: 全选
cat /dev/pts/1 &
代码: 全选
cat /dev/pts/2 &
对于你那种半双工的情况,如果知道待读取数据的长度,可以选择用dd来只读取指定长度的内容,防止无数据可读进入阻塞状态
代码: 全选
dd if=/dev/pts/1 bs=字节数 count=1 status=none
代码: 全选
dd if=/dev/pts/1 iflag=nonblock status=none 2>/dev/null
-
- 帖子: 14
- 注册时间: 2020-01-08 14:43
- 系统: Linux version 3.2.40
Re: 怎样同时对串口进行收和发的操作?
linux下的串口全双工是不是需要设置的,或者说怎么设置,因为在winodws下面串口助手是可以收发同时操作的
- astolia
- 论坛版主
- 帖子: 6454
- 注册时间: 2008-09-18 13:11
-
- 帖子: 14
- 注册时间: 2020-01-08 14:43
- 系统: Linux version 3.2.40
Re: 怎样同时对串口进行收和发的操作?
我找到原因了,是初始化串口的问题。我用root权限执行
stty -F /dev/ttyS5 speed 9600 cs8 -parenb -cstopb -echo
初始化一遍串口后问题解决了,应该是停止位的原因,设置停止位后可以保持服务器端和客户端的时钟相同
stty -F /dev/ttyS5 speed 9600 cs8 -parenb -cstopb -echo
初始化一遍串口后问题解决了,应该是停止位的原因,设置停止位后可以保持服务器端和客户端的时钟相同