imx6板子串口读写问题
目前开发的时候,遇到大量数据读写时,在接受下位机数据的时候,会丢失一段数据。而且概率很高,排查了上下位机的发送和接受逻辑,甚至更换了几个 Qt的读取数据的库,但问题依然存在。
想问下,这块,在linux底层,串口通讯的ttymxc3这个口,在系统里边是否有什么特殊的限制吗?
我们是并行传输,读与写并行,多串口并行,同时用的还有ttymxc2。
请问开发板这块如何取排查底层串口读写这块的问题?
您如果是并行传输的话,可能读写同时进行,导致数据错误或者丢失,可以在程序中加入互斥操作如果操作时间较短的话可以使用自旋锁 我说一下。如果波特率>38400,且每次收的数据>64byte,那么接收必然出现你说的情况。
1. 因为串口是中断接收,需要cpu处理,cpu很忙,它不仅要处理串口的事情,七大姑八大姨的事情,它同样要处理。这些小姑和大姨的事情,有时会让cpu关闭总中断。
2. 我记得imx串口的硬件fifo是64byte,所以只要接收的数据>64,或者cpu关了总中断,就会导致接收丢包。
我在此大声疾呼,我们大家付费,请飞凌的大神,做两个事情。
A. 在2022年的内核5.17更新中,串口的驱动性能,有提高,能否合并进来
B. 能否把串口的接收,搞成DMA接收。虽然多个人用DMA,也会造成丢包,但是概率会减小到忽略不计(这个更靠谱)。
希望神能听到凡人的呼唤:) 原生串口默认设置的DMA模式,如下图,不知道你那边是不是使用usb扩展,导致数据传输有问题,还是usb扩展不支持dma
页:
[1]