- 积分
- 67
贡献380
飞刀63 FD
注册时间2021-4-15
在线时间7 小时
扫一扫,手机访问本帖
|
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是什么时候会触发串口的读取信号,这个机制是导致两个串口冲突的最终原因。
请懂行的大佬给点建议了,谢谢!
|
|