2409800_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2409800_zh-CN

2409800_zh-CN

S32K388 GMAC0 Eth_43_GMAC 驱动程序未收到 RX 中断

您好,

我使用的是以下配置:

S32K388EVB-Q289

S32DS 3.6.8

RTD 7.0.1

我以提供的 Eth_InternalLoopback_S32K388 示例项目为基础,并对其进行了修改,使其可以通过媒体转换器从我的 PC 接收帧。我添加了示例 S32K388 GMAC0 lwIP FreeRTOS S32DS 3.6.1 RTD600中提到的 RTD 修复程序。我成功达到了断点
Eth_43_GMAC_Receive(EthConf_EthCtrlConfig_EthCtrlConfig_0, 0U, &Status);
并且能够检查以太网帧
EthIf_RxIndication(Eth_43_GMAC_apxInternalCfg[PartitionId]->Eth_43_GMAC_apCtrlConfig[CtrlIdx]->EthCtrlEthIfIdx, FrameType, IsBroadcast, MacSrcAddr, Payload, PayloadLength, IngressTimeTuplePtr, RxHandleId);

但是,当我添加了一个 while 1 循环,启用了 Rx 中断并将其链接到 GMAC0_CH0_RX_IRQHandler 时,我却无法在任何地方获得任何中断。我的项目文件附在下面。

James_Zhang_SE_0-1788220964718.pngJames_Zhang_SE_0-1788220964718.pngJames_Zhang_SE_0-1788220964718.pngJames_Zhang_SE_0-1788220964718.pngJames_Zhang_SE_0-1788220964718.png

S32K3汽车-RTD

Re: S32K388 GMAC0 Eth_43_GMAC driver not getting RX interrupt

你好@James_Zhang_SE

我查看了附件中的项目。要在 RTD7.0.1 中启用 RX IRQ,您需要更改 Ingress QueueHandlerFunction 并启用 QueueInterrupt:

PavelL_0-1788263577590.pngPavelL_0-1788263577590.pngPavelL_0-1788263577590.pngPavelL_0-1788263577590.pngPavelL_0-1788263577590.png

更改之后,我在 GMAC_RxIRQHandler() 处触发了断点。在 Eth_43_GMAC_Receive()。

我还注意到您的 RGMII TXCLK 被定义为输入 -> 它应该是输出。

但是,要在 Wireshark 中查看您的 TX 帧,您需要相应地更改初始化序列。 例如,S32K388 GMAC0 lwIP FreeRTOS S32DS 3.6.1 RTD600 。因此,在您的项目中,它看起来像这样

PavelL_1-1788264277735.pngPavelL_1-1788264277735.pngPavelL_1-1788264277735.pngPavelL_1-1788264277735.pngPavelL_1-1788264277735.png

顺祝商祺!

帕维尔

Re: S32K388 GMAC0 Eth_43_GMAC driver not getting RX interrupt

你好,帕维尔,

非常感谢您的支持。按照您建议的修复方法操作后,GMAC 驱动程序现在可以正常工作了。

我还有几个问题,希望您能指导我:

  1. 是否有详细的文档描述了配置和使用 GMAC 驱动程序的完整步骤?我想先自己仔细阅读一下文档,以便在提出太多问题之前更好地了解驱动程序。
  2. EthIf_RxIndication() 函数内部,我需要调用吗?
    Eth_43_GMAC_ReleaseRxBuffer(CtrlIdx, RxHandleId);
    在函数结束时释放接收缓冲区?
  3. GMAC提供了相当多的配置选项。是否有任何文档或参考资料解释每个配置参数的作用以及应该如何配置?

再次感谢您的帮助。我非常感谢您的支持。

Re: S32K388 GMAC0 Eth_43_GMAC driver not getting RX interrupt

你好@James_Zhang_SE

感谢您分享最新情况。很高兴得知 GMAC 驱动程序现在对您有效。

关于您提出的其他问题:

1.配置和使用驱动程序的主要参考资料是 Eth_43_GMAC 用户手册,该手册包含在 RTD 安装包中,例如:C:\NXP\S32DS.3.6.6_RTD701\S32DS\software\PlatformSDK_S32K3\RTD\Eth_43_GMAC_TS_T40D34M70I1R0\doc\RTD_ETH_43_GMAC_UM.pdf

我还建议查阅保存在同一目录下的相应 Eth_43_GMAC 集成手册 (RTD_ETH_43_GMAC_IM.pdf) 以及可用的 GMAC 示例项目。
 

2. 是否必须调用 Eth_43_GMAC_ReleaseRxBuffer() 取决于 EthCtrlReleaseResourceAfterReception 配置参数。

PavelL_0-1789024403441.pngPavelL_0-1789024403441.pngPavelL_0-1789024403441.png

如果启用接收后自动释放,驱动程序会在 EthIf_RxIndication() 返回后释放 RX 资源,您不应该显式地释放它。

如果禁用自动释放,则在 EthIf_RxIndication() 返回后,接收缓冲区仍保持分配状态。在这种情况下,应用程序最终必须调用:

Eth_43_GMAC_ReleaseRxBuffer(CtrlIdx, RxHandleId);
 

当应用程序需要保留接收到的数据以进行进一步处理时,此模式非常有用。但是,应用程序使用完毕后,必须释放缓冲区。否则,可用的接收缓冲区最终会耗尽。

另请注意,在相应的缓冲区释放后,不应再使用接收到的有效载荷指针。

3. Eth_43_GMAC 用户手册也是各个配置参数的主要参考资料。此外,S32 配置工具在选择或将鼠标悬停在相应设置上时,会显示许多参数的描述。有关硬件级行为,例如 MAC 过滤、DMA 操作、MTL 队列、时间戳和中断状态,请参阅 S32K3 参考手册的 GMAC/EMAC 章节。

作为实际的起点,我建议参考 RTD 软件包提供的 GMAC 示例。页面上还有一些功能性的 lwIP 示例:

https://community.nxp.com/t5/S32K-Knowledge-Base/S32K-Examples/ta-p/1108990


如果您发现任何问题,请随时寻求帮助。建议每个主题单独开一个帖子。这有助于我们清晰地了解案例,以便其他用户使用。

顺祝商祺!

帕维尔

Tags (1)
No ratings
Version history
Last update:
Friday
Updated by: