• 全部
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux
  • 问答

关于Linux 下串口通信 求解!!!

J.Bin_ 嵌入式软件工程师  2020-10-30 04:53:11
在使用搭载 NVIDIA Jetson的开发板时,由于GPIO口不够用,所以想通过串口转GPIO模块来拓展GPIO口,所以需要开发板与串口转GPIO模块进行通信,通信内容大体如下:主站请求帧(16进制):01 05 00 05 FF 00 9C 3B,从站响应帧(16进制):01 05 00 05 FF 00 9C 3B,其中 主站就是开发板,从站就是串口转GPIO模块,但是在串口通信过程中,出现一个问题 ,就是发送请求帧可以正常发送,也能够实现控制串口转GPIO模块,但是在读取串口转GPIO模块返回的响应帧时,存在数据读取不完整的情况,就比如 应该返回的是01 05 00 05 FF 00 9C 3B,但是我read 的只有7个字节( 05 00 05 FF 00 9C 3B)甚至更少(00 05 FF 00 9C 3B,05 FF 00 9C 3B),找了很多原因都没找出哪里的问题,有没有大神知道这种情况是怎么回事吗,应该怎么解决?
...全文
39261 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kof98765 03-12
485翻转慢了,说明设备回得太快,设备端回数据的时候可以稍稍延时一下
回复
modbus 协议是适用于RS485口,首先搞清楚你的硬件是RS232还是RS485.如果是RS485,最好的办法是用示波器观察发,收的波形完不完整。如果不完整说明硬件的驱动能力不够。
回复
青湦 2020-12-04
没有读完吧,用while循环不停的读,可以打印一下read出来的总字节数,和你收到的对比一下。
回复
xws245925587 2020-11-08
你这个看上去就像是modbus rtu协议,01 05 00 05 FF 00 9C 3B 这个是你主站的数据帧,设置某个线圈为ON或OFF,你接收到的应该是01 05 00 05 FF 00 crch crcl,也就是说,你写成功的话,接收到的应该和发送的是一样的数据;你可以用串口助手发给你,看看你接受处理有没问题,一般模块不会少发数据的,另外一个,这种使用modbus 协议的模块,一般是485电路的,你是不是没有及时切换到接收状态,导致没收到数据
回复
J.Bin_ 2020-10-31
自顶自顶自顶…
回复
丁劲犇 2020-10-31
会不会是速率不匹配?不过上位机和板卡如果是速率不对,即使连上,也不能通信。没试过如果双方时钟不稳的情况。
回复
xqhrs232 2020-10-31
是不是中断方式读的?想想可能被谁卡住了。还可以通过抓数据的方法,抓取GPIO模块到底回了多少个字节。先定位问题在那边
回复
glen30 2020-10-31
写一个测试程序测试一下:
打开串口设备
建立两个线程:一个读串口线程和一个写串口线程
读串口线程把读到的数据记录到log文件里面

这样看下是否有丢数据的情况

另外这是串口通讯,也可以拿一根线接到widows电脑上,也对比测测看看
回复
相关推荐
发帖
Linux/Unix社区
创建于2007-08-27

2.0w+

社区成员

Linux/Unix社区 应用程序开发区
申请成为版主
帖子事件
创建了帖子
2020-10-30 04:53
社区公告
暂无公告