2386586_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2386586_zh-CN

2386586_zh-CN

关于 S32K312 上 FlexCAN 增强型 RX FIFO + DMA 操作的说明需要澄清

你好 ,

我们目前正在研究基于 S32K312 的 FlexCAN 增强型 RX FIFO 和 DMA, enhanced FIFOenhanced FIFOenhanced FIFO增强型先进先出

 

我们正在使用 rtd v 7.0.1,希望就我们遇到的几个问题和观察结果进行澄清。


1. MEX 配置验证

请您确认启用 DMA 的 FlexCAN 增强型 RX FIFO 的推荐 MEX 配置是什么?我们希望确保我们的配置符合预期的RTD使用模型。

2. 增强型接收 FIFO + DMA 数据丢失观察

根据 FlexCAN 勘误表中的建议,启用增强型 RX FIFO 时,以下消息缓冲区将不使用:

MB0–MB7、MB10、MB12、MB20、MB22、MB30、MB32、MB40、MB50 和 MB60。

我们的配置如下:

  • 增强型接收 FIFO 已启用
  • DMA已使能
  • 水印配置为 10 个条目
  • DMA 将 FIFO 数据传输到软件缓冲区。

观察到的行为:

  • CAN 消息已正确接收到增强型 RX FIFO 中。
  • DMA 可以成功传输数据,直到达到水印级别。
  • DMA完成中断被触发。
  • 此后,在预期的下一个 FIFO 位置(从第 11 个 FIFO 条目开始)中未观察到传入的 CAN 消息。
  • 观察到数据丢失和异常的先进先出(FIFO)行为。

请解释一下这种情况下的预期行为以及出现消息丢失的可能原因?

3. FlexCAN_Ip_RxFifo DMA 重配置

在调试 RTD 驱动程序时,我们观察到 FlexCAN_Ip_RxFifo API 似乎会重新配置 DMA 参数。

具体来说:

  • 次要循环计数似乎已配置为 16
  • 传输大小似乎为 4 字节

这导致总传输大小为 64 字节(或根据解释约为 68 字节),这似乎与参考手册中描述的增强型 RX FIFO 条目大小不符。

能否解释一下这个 API 的预期功能以及这些 DMA 设置背后的原理?

4. 增强型接收 FIFO 存储器观察

调试过程中还观察到,尽管 DMA 似乎将数据从 FIFO 传输到软件缓冲区:

  • FIFO 内存区域仍然包含较旧的消息 ID。
  • 内存浏览器似乎只显示第一个增强型 RX FIFO 元素。
  • 先进先出位置似乎没有按预期更新。

附上屏幕截图供参考。

能否解释一下这是否是预期行为,以及在运行时调试期间应该如何解释增强型 RX FIFO 内存?

5. 结构尺寸不匹配

我们还观察到 RTD 结构与参考手册之间存在差异。

  • FlexCAN_Ip_MsgBuffType 在 RTD 中的大小:78 字节
  • 根据参考手册,增强型 RX FIFO 元素大小为:80 字节

请问您能否解释一下:

  • 为什么会出现这种尺寸差异?
  • 是否需要考虑包装/对齐方面的问题?
  • DMA 传输应该配置为 78 字节还是 80 字节?

预期用途案例

我们的要求是使用:

  • 增强型接收 FIFO
  • 基于DMA的接收
  • 消息接收过程中不会出现 CPU 中断。

预期行为是:

  1. CAN 消息到达增强型 RX FIFO。
  2. DMA 会自动将 FIFO 条目传输到软件缓冲区。
  3. 正常运行不需要软件轮询或接收中断处理。

有意避开增强型 RX FIFO 保留的消息缓冲区(MB0–MB7、MB10、MB12、MB20、MB22、MB30、MB32、MB40、MB50 和 MB60),而其余的消息缓冲区则用于传输。

申请它

请问您能否提供以下信息:

  1. 任何能够演示增强型 RX FIFO 与 DMA 操作的示例项目。
  2. 针对此用例推荐的RTD配置。
  3. 澄清 RTD 目前是否支持使用 DMA 进行连续增强型 RX FIFO 接收而无需软件重新激活。
  4. 任何实现增强型 RX FIFO + DMA 接收的裸机驱动程序示例。

感谢您的支持。

Re: Clarification Required on FlexCAN Enhanced RX FIFO + DMA Operation on S32K312

您好,

1. MEX 配置验证
A:看来您的 MEX 与您描述的设置不符。
- 水印设置为 1
- DMA传输配置并非必需,驱动程序会自动配置DMA,除非您想要自行设置DMA参数和传输方式。

2. 增强型接收 FIFO + DMA 数据丢失观察
A:DMA 完成中断后,所有接收到的消息都会被读取,并且分配的 DMA 通道将被禁用。
因此,如果不再调用 FlexCAN_Ip_RxFifo,RXFIFO 仍然会从条目 0 开始接收消息,但由于 DMA 没有再次启动,因此不会读取 RXFIFO。

3. FlexCAN_Ip_RxFifo DMA 重配置
A:什么是次要循环计数?驱动程序本身将次要循环大小(字节)设置为 80,以便从 RXFIFO 读取最多 64 字节的有效负载消息以及 IDHIT 和时间戳信息。
所以,我其实不太明白你的计算方法。或许可以分享一下你的代码

4. 增强型接收 FIFO 存储器观察
A:仅第一个增强型 RX FIFO 元素区域可见,表示增强型 FIFO 输出端口地址范围。调试期间不建议显示 RXFIFO 内存。为了使 FIFO 引擎正常运行,CPU 在 DMA 操作期间不应访问增强型 FIFO 输出端口地址范围,实际上显示此内存空间会导致对其进行读取。

5. 结构尺寸不匹配
A:FlexCAN_Ip_MsgBuffType 不能完全反映 RXFIFO 结构。传输结束时,驱动程序读取内部缓冲,并将相应的数据填充到用户缓冲区的相应字段中。
如上所述,DMA 应设置为每次 DMA 请求读取 80 字节。

驱动程序的编写方式是,在 DMA 完成并调用 FLEXCAN_EVENT_DMA_COMPLETE 事件后,需要重新激活 DMA(调用 FlexCAN_Ip_RxFifo)。

您可以参考下面的演示来增强 RXFIFO 和 DMA 的使用,但这是在 RTD400 中实现的。
https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K344-FlexCAN-Ip-TX-RX-EnhanceRXFIFO-DMA-...

BR,彼得

标记 (1)
无评分
版本历史
最后更新:
‎06-27-2026 03:29 AM
更新人: