S32K3 上的 FlexCAN DMA - 中断与 TCD您好,NXP团队,
我们正在评估S32K3 上的 FlexCAN Rx DMA,希望确认我们的观察结果是否符合预期,或者是否有推荐的方法。
方法 1: 中断基于 DMA 完成 事件
- DMA 将一个 CAN 帧从 Rx FIFO 复制到 RAM 临时缓冲区,并产生一个中断。
- 在将数据推送到应用程序循环缓冲区之前,需要一个临时缓冲区。
意见/问题:
- 临时存储似乎是必要的,因为 eDMA 不支持循环队列或自动重新Arm。
- 我们观察到 RX 信息丢失,偶尔 TX 也会在负载情况下卡住。
对于传统 Rx FIFO和ER-FIFO,是否有使用 DMA 实现无损耗循环Rx缓冲的推荐方法,或者这是已知的限制?
方法 2:基于 TCD 的 DMA
- DMA 将原始 FlexCAN 寄存器字(CS/DLC/标志、ID、数据)从 RxFIFO 输出位置(源)复制到 RAM 缓冲区(目标)。
- 接收的数据不是正常化的 CAN 报文格式。
意见/问题:
- CPU 仍需要按正确顺序解析消息 ID(STD/EXT)、有效负载长度(源自 DLC)、有效负载字节、FD/BRS 标志和时间戳。
- FlexCAN DMA 是否只能执行原始传输,而报文规范化必须始终由软件完成?
- 有没有推荐的方法可以为 DMA 接收到的帧重复使用 RTD 驱动程序解析逻辑?
- 另一个问题是目的地调制解调器无法处理 CAN FD 帧的循环队列操作。这意味着 TCD 方法中有一个目标模的概念,它有助于在达到一定字节数后封装目标地址。因此,CAN FD 帧字节(每帧 72 字节)的数量未正确与那里的模值对齐。
- 我们还尝试了另一种调整目的地最后地址寄存器的方法。它适用于单帧,但存在一个问题,即不能正确封装帧数的目标地址,如 20 帧队列。
附加问题
- 与普通的 Rx FIFO 中断相比,使用CAN DMA 中断的优势是什么。
请确认上述观察结果是否都是 S32K3 上 FlexCAN Rx DMA 的预期行为?
谢谢...
Re: FlexCAN DMA on S32K3 –Interrupt vs TCD你好@kapidlitap
类似的主题问题。
https://community.nxp.com/t5/S32K/S32K358-Legacy-RX-Fifo-with-DMA-vs-enhanced-RX-Fifo-DMA/td-p/22664...
我们的 RTD 驱动程序已经为用户完成了 DMA 配置,因此用户无需根据自己的需要重新配置 DMA。
我们不提供中断和 DMA 方法之间的性能比较数据;用户应根据自己的实际使用情况进行配置和测试,以选择最佳方法。
增强型 FIFO+DMA 演示
https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K344-FlexCAN-Ip-TX-RX-EnhanceRXFIFO-DMA-...