CAN通信偶尔出现接收FIFO溢出导致丢帧的问题
在项目中遇到了接收FIFO溢出这个问题,经过测试导致溢出的原因似乎是接收数据到FIFO后没有触发中断,导致没能接收数据并清除FIFO因此溢出。测试过程中发现在如果只是接收数据不处理并不会出现FIFO溢出问题(数据的解析处理并没有在中断中,在中断中采用消息队列通信,所以应该不是中断处理时间过长导致的),只要我在应用层调用CAN的发送接口(使用的是GD32F103),通信就会偶尔出现FIFO溢出问题,所以想请问一下,CAN外设的发送接口会对接收或接收中断产生什么影响吗 原因已查明:有一个线程在不断判断系统参数是否变化进行自动保存,保存操作了片上FLASH,片上flash在写操作期间会关闭所有中断,导致中断无法响应。 不错,问题解决会来反馈{:smile:} 找到问题就好。 CAN外设通常有2个FIFO,每个FIFO包含3个邮箱,最多缓存6个报文。 软件处理不及时 硬件FIFO深度不足是溢出的直接原因。 CAN 控制器无法缓存新帧,只能丢弃,上层应用收不到该数据。 CAN接收中断优先级过低,被其他任务或中断阻塞,导致数据未及时取出 减少 FIFO 堆积、提高软件处理能力、合理配置硬件资源。 优化中断服务程序,减少不必要的操作 选择具有良好抗干扰性能的芯片和设备,减少噪声和抖动对信号的影响。 CAN 总线负载过高 选择支持更大FIFO容量的控制器。 CAN总线终端电阻匹配、线缆布局合理,避免因信号反射或干扰导致通信异常 启用 DMA 传输 总线上节点频繁发送数据,导致接收端FIFO来不及处理新帧 增加接收 FIFO 的深度。 接收中断服务程序(ISR)或主循环中读取 FIFO 的速度跟不上接收的速度。 当CAN总线上的通信负载过高时,报文传输频率增加,接收节点可能来不及处理所有报文,从而导致FIFO溢出
页:
[1]
2