summer274 发表于 2025-9-1 11:46

CAN通信偶尔出现接收FIFO溢出导致丢帧的问题

在项目中遇到了接收FIFO溢出这个问题,经过测试导致溢出的原因似乎是接收数据到FIFO后没有触发中断,导致没能接收数据并清除FIFO因此溢出。测试过程中发现在如果只是接收数据不处理并不会出现FIFO溢出问题(数据的解析处理并没有在中断中,在中断中采用消息队列通信,所以应该不是中断处理时间过长导致的),只要我在应用层调用CAN的发送接口(使用的是GD32F103),通信就会偶尔出现FIFO溢出问题,所以想请问一下,CAN外设的发送接口会对接收或接收中断产生什么影响吗

summer274 发表于 2025-9-2 19:45

原因已查明:有一个线程在不断判断系统参数是否变化进行自动保存,保存操作了片上FLASH,片上flash在写操作期间会关闭所有中断,导致中断无法响应。

Dick Hou 发表于 2025-9-3 08:49

不错,问题解决会来反馈{:smile:}

dffzh 发表于 2025-9-3 08:52

找到问题就好。

mnynt121 发表于 2025-9-4 20:46

CAN外设通常有2个FIFO,每个FIFO包含3个邮箱,最多缓存6个报文。

benjaminka 发表于 2025-9-4 21:32

软件处理不及时            

mollylawrence 发表于 2025-9-6 09:08

硬件FIFO深度不足是溢出的直接原因。

wilhelmina2 发表于 2025-9-6 11:24

CAN 控制器无法缓存新帧,只能丢弃,上层应用收不到该数据。

cemaj 发表于 2025-9-6 12:21

CAN接收中断优先级过低,被其他任务或中断阻塞,导致数据未及时取出

usysm 发表于 2025-9-6 13:53

减少 FIFO 堆积、提高软件处理能力、合理配置硬件资源​​。

kkzz 发表于 2025-9-6 14:50

优化中断服务程序,减少不必要的操作

earlmax 发表于 2025-9-6 15:50

选择具有良好抗干扰性能的芯片和设备,减少噪声和抖动对信号的影响。

burgessmaggie 发表于 2025-9-6 17:21

CAN 总线负载过高​            

jtracy3 发表于 2025-9-6 19:07

选择支持更大FIFO容量的控制器。

adolphcocker 发表于 2025-9-6 20:10

CAN总线终端电阻匹配、线缆布局合理,避免因信号反射或干扰导致通信异常

tifmill 发表于 2025-9-6 21:53

启用 DMA 传输            

lzbf 发表于 2025-9-8 08:53

总线上节点频繁发送数据,导致接收端FIFO来不及处理新帧

qiufengsd 发表于 2025-9-8 10:00

增加接收 FIFO 的深度。            

bartonalfred 发表于 2025-9-8 11:03

接收中断服务程序(ISR)或主循环中​​读取 FIFO 的速度跟不上接收的速度​​。

sheflynn 发表于 2025-9-8 12:36

当CAN总线上的通信负载过高时,报文传输频率增加,接收节点可能来不及处理所有报文,从而导致FIFO溢出
页: [1] 2
查看完整版本: CAN通信偶尔出现接收FIFO溢出导致丢帧的问题