AM623: AM6234 串口发送出现数据不连续发送情况

Part Number: AM623

内核使用的是Linux version 6.1.33-rt11+。

串口是在应用层操作。通信参数 3M波特率,8,1,无参数。

AM6234做主,通过232接串口模块。数据采用主站请求,从站回复。问答式通信。

从站对主站发送的数据有严格的断包时间处理。

在使用中发现存在通信超时,即6234主站发送报文,串口模块不回复的情况。

分析发现如下问题:

AM6234串口主动发报文,报文长度小于10字节。内核串口驱动FIFO为64字节,禁用DMA。

通过示波器抓包发现,当出现问题的时候,发送的数据是不连续的。正常的数据是10个字节,发送一个字节马上就紧跟一个字节。

也就是正常的话,数据的字节之间的延时是不超过字节时间的。

出现问题的时候,比如,看到先发了6个字节,然后突然间隔了1到10ms,后面4个字节才出现。

测试过,3M波特率,write函数,发送3个字节。也会偶尔出现,示波器看到前两个字节是连续的,然后中间间隔了1~10ms左右,第三个字节才出来。

因为数据的发送不连续,导致串口模块认为数据不是在一个协议帧里面,从而影响了通信。

做了一些测试,比如,把波特率改成1.5M 或者1M,概率大大降低了。

我们的通信场景是每1ms与串口模块做数据交互。 CPU使用率不高。启用DMA没有改善,通信效率反而下降了。

应用层是使用标准的串口接口,能尝试的方法基于都试了。

查看过串口的中断,中断进程任务优先级是50,标准的==IRQ级别。把中断进程任务优先级设置最大到99,依然还是有这个问题。

把FIFO大小改成1,也有这个问题。

3M波特率,1ms的通信周期,每几分钟就会有一条数据出现这个问题。

1.5M、1M波特率,1ms的通信周期,大概十几分钟到半小时才出现一次。

尝试将进程中断的CPU设置到其它CPU,也是一样有问题。

image.png

请帮忙协助分析与处理。用的SDK9。