小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 15970|回复: 10

关于Ser2net转发特殊数据丢包现象的原因和解决方法

[复制链接]
发表于 2013-2-5 23:42:06 | 显示全部楼层 |阅读模式
细心的朋友会发现,用ser2net进行网口-串口转发的时候,如果数据包中有0x11、0x13、0x0D这三个数据的时候,在上位机那边,是收不到的!好像ser2net过滤掉了它们似的,怎么回事呢?
请看如下摘要:

许多流行的linux串口编程的版本中都没对c_iflag(termios成员变量)这个变量进行有效的设置,这样传送ASCII码时没什么问题,但传送二进制数据时遇到0x0d,0x11和0x13却会被丢掉。不用说也知道,这几个肯定是特殊字符,被用作特殊控制了。关掉ICRNL和IXON选项即可解决。
       c_iflag &= ~(ICRNL | IXON);
0x0d 回车符CR
0x11 ^Q VSTART字符
0x13 ^S VSTOP字符
ICRNL 将输入的CR转换为NL  
IXON 使起动/停止输出控制流起作用
在《UNIX环境高级编程第二版》第18章第11小节看到把终端I/O设置为原始模式(串口通讯就是终端I/O的原始模式)时输入属性设置为
term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);

原来这三个数据是串口通信里面特殊字符,具有特别的意义,难怪会被ser2net过滤掉,那么怎么保证数据完整无误地传输呢?方法一:修改ser2net源代码,这个方法太麻烦。
方法二:
用winscp登陆WIFI板,转到/etc/目录,打开ser2net.conf文件,找到如下配置:

2001:raw:600:/dev/ttyATH0:9600 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS

将其中蓝色字体部分删除,变为:

2001:raw:600:/dev/ttyATH0:9600 NONE 1STOPBIT 8DATABITS  LOCAL -RTSCTS

保存,再重启WIFI板,ser2net就不再会过滤掉特殊字符了。
回复

使用道具 举报

发表于 2013-2-6 13:26:05 | 显示全部楼层
哦、试试看,谢谢老大,辛苦了
回复 支持 反对

使用道具 举报

发表于 2013-2-25 13:22:23 | 显示全部楼层
试试看,这个挺不错
回复 支持 反对

使用道具 举报

发表于 2013-3-30 19:38:31 | 显示全部楼层
试试学习一下
回复 支持 反对

使用道具 举报

发表于 2013-12-17 11:06:42 | 显示全部楼层
谢谢楼主!谢谢楼主!
回复 支持 反对

使用道具 举报

发表于 2014-5-18 19:01:13 | 显示全部楼层
一般这种 非常有技术含量的干货帖子都没人顶。
回复 支持 反对

使用道具 举报

发表于 2014-6-4 17:15:26 | 显示全部楼层
刚好遇到这个问题,一直在想怎么回事。遇到0x13的时候,就卡死了,无法再发送数据。。。。回去试试楼主的方法!!!!
回复 支持 反对

使用道具 举报

发表于 2014-11-14 23:57:50 | 显示全部楼层
多谢分享~\(≧▽≦)/~啦啦啦
回复 支持 反对

使用道具 举报

发表于 2015-2-10 10:21:05 | 显示全部楼层
试试看,这个挺不错
回复 支持 反对

使用道具 举报

发表于 2015-5-26 20:34:34 | 显示全部楼层
完善在不断进行中啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-4-27 03:32 , Processed in 1.128147 second(s), 20 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表