您好,
我使用的是以下配置:
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.png
你好@James_Zhang_SE ,
我查看了附件中的项目。要在 RTD7.0.1 中启用 RX IRQ,您需要更改 Ingress QueueHandlerFunction 并启用 QueueInterrupt:
PavelL_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.png
顺祝商祺!
帕维尔
你好,帕维尔,
非常感谢您的支持。按照您建议的修复方法操作后,GMAC 驱动程序现在可以正常工作了。
我还有几个问题,希望您能指导我:
再次感谢您的帮助。我非常感谢您的支持。
你好@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
2. 是否必须调用 Eth_43_GMAC_ReleaseRxBuffer() 取决于 EthCtrlReleaseResourceAfterReception 配置参数。
如果启用接收后自动释放,驱动程序会在 EthIf_RxIndication() 返回后释放 RX 资源,您不应该显式地释放它。
如果禁用自动释放,则在 EthIf_RxIndication() 返回后,接收缓冲区仍保持分配状态。在这种情况下,应用程序最终必须调用:
当应用程序需要保留接收到的数据以进行进一步处理时,此模式非常有用。但是,应用程序使用完毕后,必须释放缓冲区。否则,可用的接收缓冲区最终会耗尽。
另请注意,在相应的缓冲区释放后,不应再使用接收到的有效载荷指针。
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
如果您发现任何问题,请随时寻求帮助。建议每个主题单独开一个帖子。这有助于我们清晰地了解案例,以便其他用户使用。
顺祝商祺!
帕维尔