嵌入式爱好者

查看: 5032|回复: 3

[Linux] 开发板PCIE扩展串口与原生串口并行发送问题

[复制链接]

8

主题

28

帖子

67

积分

i.MX8MM通行证i.MX6Q通行证

扫一扫,手机访问本帖
发表于 2022-5-4 20:27:13 | 显示全部楼层 |阅读模式
1.  现象原因
目前开发板上面只有ttymxc3,ttymxc2,以及侧边那个串口是232的串口。

不满足需要,所以从PCIE那里买了PCIE转串口的配件,又分出了四个串口。

2.   实际问题:
在实际使用过程中发现,那四个串口的读写操作会影响,ttymxc3等串口的读写操作。

也就是遇到了,串口并行,互相干扰的问题。

3.  具体代码现象描述(偶发)
目前对这几个串口都是放在了不同线程,并用不同的对象绑定了读写操作。

根据调试发现,当ttymxc3收到数据的时候,有可能在其他串口中收到,本串口收到数据的回调。(代码是Qt写的,实际调试时,绑定了串口读取信息的信号)

也就是说,我两个串口放在两个线程,分别设置读写回调。

但是在ttymxc3串口收到回调的时候,PCIE的扩展串口也会偶发地收到回调。然后PCIE会读取串口中的数据,这样就导致ttymxc3的数据少了一部分。从而导致串口通信出现故障了。

4. 个人猜测原因:
    可能这个PCIE扩展转串口的驱动程序存在问题,生成的串口 ttyXR0,ttyXR1,ttyXR2,ttyXR3,这几个串口的中断号和地址,与ttymxc3一样了。
    或者串口读写那里存在并行限制。(看到往上说,linux系统的这个并行限制是在bios里边可以修改的,具体不知道开发板中默认是多少。)

5.  总结:
    简单的来说,目前我用了ttymxc3和ttyXR0-ttyXR2,这三个串口。也就是目前有四个串口在四个线程中会同时读写。 同时写已经证实,会干扰ttymxc3的读写操作导致串口收发异常。后来,做了互斥操作,避免这几个串口同时发送数据。后来就遇到了读操作,干扰串口读写,并导致原来串口数据丢失的严重问题。

6. 最后:
    根据往上的解决方案,我大概有两个方向要去确认。
    一个就是这块板子linux中最大的串口并行数是多少,是不是因为串口,并行上限导致这个偶发的问题?
   另一个就是,要使用setserial 这个工具,查看扩展串口的中断号地址信息,是否与原来的一样。如果一样,把PCIE扩展出来的串口信息改掉。修改这几个串口的中断号,和具体的地址,尽量不要占用同一个中断地址。解决读写冲突的问题。

7.  题外话:
   Qt是什么时候会触发串口的读取信号,这个机制是导致两个串口冲突的最终原因。


请懂行的大佬给点建议了,谢谢!













回复

使用道具 举报

8

主题

28

帖子

67

积分

i.MX8MM通行证i.MX6Q通行证

 楼主| 发表于 2022-5-4 20:32:35 | 显示全部楼层
PCIE扩展出来的几个串口之间不会出现互相干扰的问题,只有开发板上的串口与扩展出的串口之间存在干扰。开发板自己原生的串口之间也不会出现这个问题。本人不时很懂硬件底层的原理,是一个上位机开发工程师。请各位大佬懂得给点建议和方向了,谢谢!

点评

我看了一下你发的帖子,然后查阅了一下资料,觉得你的那个猜测是对的 1. 很有可能是扩展串口使用了和原生串口相同的中断,或者调用了相同的共享资源,导致的数据丢失或者出现问题,这样的话就需要查看一下具体的扩  详情 回复 发表于 2022-5-10 10:12
点评回复 支持 反对

使用道具 举报

0

主题

49

帖子

138

积分

LS1012A通行证LS1043A\46A通行证A40i/T3/T507/T527通行证i.MX8MM通行证RK3399通行证LS1028A通行证i.MX8MP通行证AM5718通行证Hi3519A通信证AM335x通行证i.MX6UL通行证i.MX RT通行证i.MX6Q通行证XX18通行证TCU通行证FDU产品通行证FCU1401通行证FCU1301通行证FCU11xx通行证FCU1201通行证FCU2201通行证FCU2301/FCU2302通行证FCU2401通行证5G转接卡通行证

发表于 2022-5-10 10:12:28 | 显示全部楼层
zanglengyu 发表于 2022-5-4 20:32
PCIE扩展出来的几个串口之间不会出现互相干扰的问题,只有开发板上的串口与扩展出的串口之间存在干扰。开发 ...

我看了一下你发的帖子,然后查阅了一下资料,觉得你的那个猜测是对的
1. 很有可能是扩展串口使用了和原生串口相同的中断,或者调用了相同的共享资源,导致的数据丢失或者出现问题,这样的话就需要查看一下具体的扩展驱动和原生usb的驱动了,还有就是你那里是否在设备树里面配置了扩展驱动的一些属性,是否与原生串口的属性存在冲突

点评

嗯,排查了,问题解决了,是发送的时候有多余的字符串,不知道是什么原因。导致截取逻辑有问题。改了一下截取逻辑,过滤掉不用的字符才可以  详情 回复 发表于 2022-5-16 09:39
点评回复 支持 反对

使用道具 举报

8

主题

28

帖子

67

积分

i.MX8MM通行证i.MX6Q通行证

 楼主| 发表于 2022-5-16 09:39:08 | 显示全部楼层
15132383595 发表于 2022-5-10 10:12
我看了一下你发的帖子,然后查阅了一下资料,觉得你的那个猜测是对的
1. 很有可能是扩展串口使用了和原 ...

嗯,排查了,问题解决了,是发送的时候有多余的字符串,不知道是什么原因。导致截取逻辑有问题。改了一下截取逻辑,过滤掉不用的字符才可以
点评回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-22 04:34

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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