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

[复制链接]
3100|33
summer274 发表于 2025-9-1 11:46 | 显示全部楼层 |阅读模式
在项目中遇到了接收FIFO溢出这个问题,经过测试导致溢出的原因似乎是接收数据到FIFO后没有触发中断,导致没能接收数据并清除FIFO因此溢出。测试过程中发现在如果只是接收数据不处理并不会出现FIFO溢出问题(数据的解析处理并没有在中断中,在中断中采用消息队列通信,所以应该不是中断处理时间过长导致的),只要我在应用层调用CAN的发送接口(使用的是GD32F103),通信就会偶尔出现FIFO溢出问题,所以想请问一下,CAN外设的发送接口会对接收或接收中断产生什么影响吗
 楼主| summer274 发表于 2025-9-2 19:45 | 显示全部楼层
原因已查明:有一个线程在不断判断系统参数是否变化进行自动保存,保存操作了片上FLASH,片上flash在写操作期间会关闭所有中断,导致中断无法响应。
Dick Hou 发表于 2025-9-3 08:49 | 显示全部楼层
不错,问题解决会来反馈
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

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部