2393568_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2393568_zh-CN

2393568_zh-CN

FLEXCAN EDMA - 接收 CAN 消息突发时出现 ACK 错误

在 i.MXRT1176 上,我们使用 FLEXCAN 和 EDMA。(SDK 26.03)
我们定义了 DMA 传输完成的回调函数。


这是我们的流程:

1.调用 ` FLEXCAN_TransferReceiveFifoEDMA()` 开始传输。

2. DMA 传输完成后,调用用户定义的回调函数。

3. 从 DMA 缓冲区复制数据,并调用 `FLEXCAN_TransferReceiveFifoEDMA()` 继续接收消息。
4. 重复步骤 2-4


我们注意到,当我们从另一个节点以突发方式发送消息,且帧间间隔仅为最小值时,ACK 错误的数量会增加——iMX 无法确认消息。


从流程来看,每次 DMA 传输完成回调时,FLEXCAN 上的 DMA 都会被禁用。当调用 `FLEXCAN_TransferReceiveFifoEDMA()` 时,DMA 功能会重新启用。这可以通过调用 ` FLEXCAN_EnableRxFifoDMA()` 来实现。启用/禁用 DMA 会更新 FLEXCAN 的 MCR 寄存器中的 DMA 位,并且只能在冻结模式下进行。由于我们以突发方式接收消息,因此当 FLEXCAN 进入冻结模式时,可能正在进行传输,导致它无法确认接收到的消息。

 
我们确认,移除对 `FLEXCAN_EnableRxFifoDMA()` 的调用可以消除所有 ACK 错误,但同时也会丢弃一些消息。此外,我们还尝试拉开消息之间的间隔,这样也消除了 ACK 错误。请问这是否确实是实现方面的问题,或者我们是否应该采用不同的架构方式?
タグ(1)
評価なし
バージョン履歴
最終更新日:
昨日
更新者: