开发板PCIE扩展串口与原生串口并行发送问题
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是什么时候会触发串口的读取信号,这个机制是导致两个串口冲突的最终原因。
请懂行的大佬给点建议了,谢谢!
PCIE扩展出来的几个串口之间不会出现互相干扰的问题,只有开发板上的串口与扩展出的串口之间存在干扰。开发板自己原生的串口之间也不会出现这个问题。本人不时很懂硬件底层的原理,是一个上位机开发工程师。请各位大佬懂得给点建议和方向了,谢谢! zanglengyu 发表于 2022-5-4 20:32
PCIE扩展出来的几个串口之间不会出现互相干扰的问题,只有开发板上的串口与扩展出的串口之间存在干扰。开发 ...
我看了一下你发的帖子,然后查阅了一下资料,觉得你的那个猜测是对的
1. 很有可能是扩展串口使用了和原生串口相同的中断,或者调用了相同的共享资源,导致的数据丢失或者出现问题,这样的话就需要查看一下具体的扩展驱动和原生usb的驱动了,还有就是你那里是否在设备树里面配置了扩展驱动的一些属性,是否与原生串口的属性存在冲突 15132383595 发表于 2022-5-10 10:12
我看了一下你发的帖子,然后查阅了一下资料,觉得你的那个猜测是对的
1. 很有可能是扩展串口使用了和原 ...
嗯,排查了,问题解决了,是发送的时候有多余的字符串,不知道是什么原因。导致截取逻辑有问题。改了一下截取逻辑,过滤掉不用的字符才可以
页:
[1]