共两个CAN FD通道,使用MCP2518FD作为CAN FD控制器,我每个CAN FD控制器的发送FIFO配置了5个报文,接收FIFO配置了15个报文,当两个通道对测,同时收发100帧时(注意,是同时收发),偶发出现多出30帧的现象,刚好是上次发送100帧的后15帧接收了两次,用的中断接收方式,用示波器测了下,当出现这种多帧问题时,会有一个持续1s左右的中断信号,有遇到这种问题吗,求帮助
4条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
在处理这个问题时,我们需要检查几个关键点以确定可能的原因并提出相应的解决方案。
首先,确保您的硬件连接正确无误,包括电源、接地、时钟以及CAN H/L线之间的匹配电阻。其次,检查您的FPGA设计是否正确地配置了MCP2518FD的寄存器,并且在中断触发条件上没有错误。
下面是关于MCP2518FD配置的一些建议和可能的解决步骤:
-
检查中断源:确认您只在接收完成(RX FIFO满)时才触发中断。这可以通过配置
INTENCLR寄存器来实现。确保其他中断源如错误中断没有被无意间打开。reg [7:0] intenclr; // 清除所有中断使能位,仅保留接收完成中断 intenclr = 8'b0000_0001; assign INTEN_CLR = intenclr; -
确保正确的接收缓冲区管理:在中断服务例程(ISR)中,每次收到消息后,应从RX FIFO读取数据并将其移除。这样可以防止新的接收数据覆盖旧的数据,导致重复接收。使用
RXBnCTRL寄存器中的RXMPPT位来跟踪接收缓冲区的状态。always @(posedge clk) begin if (rx_fifo_interrupt) begin // 读取并处理第一个缓冲区中的消息 rx_buffer[0] <= RXB0DATA; RXB0CTRL.RXBMPPT <= ~RXB0CTRL.RXBMPPT; // 更新缓冲区状态 // 如果还有更多的缓冲区未处理,继续读取 if (RXB0CTRL.RXBMPPT == 0 && RXB1CTRL.RXBMPPT == 0) begin // ... 处理RXB1DATA, RXB2DATA...直到所有的缓冲区都被处理 end end end -
调整中断延迟:检查FPGA的中断延迟设置,确保它足够快,不会错过中断信号。在某些情况下,过长的中断延迟可能会导致多个中断事件合并为一个。
-
查看时序:使用示波器检查中断信号的时序,确保它们在预期的时间范围内,并且与实际发生的接收活动同步。如果有任何不一致,可能需要调整中断触发逻辑。
-
检查CAN总线通信:确保在发送和接收过程中,总线上的数据传输没有问题。使用CAN分析仪进行测试,观察是否有任何错误帧或者数据冲突。
-
优化中断处理:尽可能减少中断服务例程中的延时操作,例如等待锁存器的稳定时间,以保证快速响应和处理新的中断请求。
-
测试负载均衡:尝试调整发送和接收的负载平衡,看看是否会影响问题的发生。例如,如果一个通道的发送速率远高于另一个,可能会导致接收端的问题。
如果以上步骤都无法解决问题,建议进一步查看MCP2518FD的官方数据手册,确认是否有关于特定应用场景的限制或已知问题。同时,考虑联系Microchip技术支持获取更专业的帮助。
解决 无用评论 打赏 举报 编辑记录-