s32k322 EMAC RMII 问题您好,
我们 我们 使用 的 恩智浦 S32K322 微控制器 并 经历 以太网 以太网 接收 问题: TX 传输 正常工作 正常、 但 RX 接收 不 不 功能.关于 硬件 硬件方面 硬件方面、 硬件方面 RMII 接口 是 直接 与 直接连接到 以太网 以太网 交换机、 并且 我们 我们 验证了 开关 电路板 PCB 迹线 长度 匹配 和 阻抗 控制 满足 设计 设计 符合设计要求。用于 功率 排序、 我们 目前 确保 手动 确保 开关 开关 完成 其 开机 之前 在 S32K322。
测试期间 测试期间、 我们 我们 开关 开关 发送 ARP 数据包 并 已 测量到 测量了 与 RX 信号 波形 用 示波器 示波器、 所有 所有 所有 看起来 正确。然而 然而 S32K322 EMAC 不 不 进入 接收 接收 中断 (与 相同 波形 成功 成功 接收到 在 另一个 ECU 平台)。我们 我们还 还 检查了 我们还检查了 EMAC 接收 和 错误 计数器 中的 寄存器中的 和错误计数器、 和 都 读取 为 零.所有 时钟 频率 配置 已 已 时钟频率配置 频率配置 正确。 正确。请 帮助 提供 额外的 故障排除 意见 或 建议。
顺祝商祺!
李永祥
Re: s32k322 EMAC RMII issue你好@PavelL、
感谢您的答复。我们已经检查了所提供的一些要点。
只有在交换机完全启动并运行(确认与其他端口通信)后,才会接通 MCU 的电源。我们增加了图中所示的延迟,但无济于事。
我们检查了时钟并重新配置了它,但 RX 计数器仍然没有显示新的计数。
交换机可以从 TX 方向正确接收和转发 RMII 帧到其他端口,因此交换机配置似乎是正确的。我们还扫描了交换机和 MCU RX0/RX1 信号提供的 TXCLK,波形看起来很好,交换机的帧没有明显问题。
我们使用的是 RTD 6.0.0。测试项目附后,以供验证(代码混乱,敬请原谅,这是测试固件)。
顺祝商祺!
李永祥
Re: s32k322 EMAC RMII issue你好@YongxiangLi、
有几个方面看起来值得首先检查。 由于发送工作正常,但 RX 数据包计数器和 RX 错误计数器都保持为 0,我目前怀疑 EMAC 根本无法识别有效的 RMII 接收活动,而不是接收帧后再丢弃它们。
最重要的检查是
1) 初始化期间的 RMII 参考时钟计时
在执行 emac/引脚/时钟初始化之前,请验证来自交换机的外部 50 MHz RMII 参考时钟是否已经存在并稳定在 S32K322 引脚上。很可能需要增加较小的延迟,正如 S32K3-T-BOX 所建议的那样。另请注意下面代码片段的第一行:
PavelL_0-1781082817961.png
2) MCU 内部的 RMII 时钟配置
对于 S32K3 RMII,MAC 在 EMAC_MII_RMII_TX_CLK 上使用 50 MHz 的 RMII 参考时钟,而外部 RX_CLK 引脚不在 RMII 模式下使用。但是,仍需要正确配置内部 EMAC RX/TX 时钟(100 Mbps 通常为 25 MHz,源自 50 MHz RMII 参考时钟)。请仔细检查 EMAC 时钟多路复用器/分频器设置。
3) RMII 模式选择
请确认 gmac 驱动程序(用于 EMAC 外设)确实配置为 RMII 模式(而非 MII),并且在初始化过程中尽早进行了选择。
4) 开关侧 RMII 模式
由于您的 MAC 直接连接到交换机端口,而不是分立的 PHY,因此还请验证交换机端口是否真正配置为 RMII/rev-RMII 运行,并且正在向 MCU 驱动正确的 50 MHz 参考时钟。
5) 或者,您可以将您的项目与我的 S32K344 EMAC lwIP 项目进行比较
S32K 示例
为了缩小范围,请与我们分享一下:
- 您使用的是哪个版本的 S32K3 RTD 驱动程序?
- 能否至少分享您项目的简约版本或 mex 文件?
顺祝商祺!
帕维尔
Re: s32k322 EMAC RMII issue你好@YongxiangLi、
我仔细审查了您的项目,对每个细节都格外关注。我实在想不出Rx为什么对你不起作用。虽然有些细节可以调整,但这些调整微乎其微。
您使用的是哪种 VDD_HV_B?
作为诊断步骤,您还可以尝试在 GMAC 驱动程序中启用混杂模式。
这样,MAC 就能接受所有传入帧,而不受目标 MAC 地址过滤的限制,这有助于判断问题是与帧过滤相关,还是接收路径在更底层出现了故障。
如果启用混杂模式后行为未发生改变,且接收计数器仍保持为零,那么问题很可能出在数据包过滤层之下(例如 RMII 时钟、接收路径初始化或 DMA/描述符处理)。
作为另一个有用的调试步骤,我建议您退一步,从标准的 InternalLoopback 示例开始,并根据您的硬件平台进行调整。
首先,请验证 InternalloopBack 示例在您的主板上是否能正常运行。这有助于确认 GMAC 的基本初始化、描述符处理、缓冲区配置以及软件流程在 S32K322 上均按预期运行。
之后,您可以取消勾选“内部环回模式”,并将该项目作为与外部交换机通信的最小基线。换句话说,使示例尽可能接近有效的参考设计,并再次测试帧的传输和接收。
这种方法有助于确定问题是源于与交换机的硬件接口(例如 RMII 时序/时钟),还是由当前项目中更高层级的软件集成差异所导致。
顺祝商祺!
帕维尔
Re: s32k322 EMAC RMII issue你好@PavelL
感谢您的耐心支持。我们将按照您的建议在周末继续进行调查,并将于下周一或周二给您回复。
顺祝商祺!
李永祥
Re: s32k322 EMAC RMII issue你好@PavelL、
很抱歉回复晚了。我们根据最近的研究结果进行了进一步的测试。我们测试了混杂模式,但结果没有变化。
我们还有一点观察结果:在重新设计 PCB 并实现外部环回后,MCU 能够接收自己发送的帧。然而,同一台交换机使用相同的配置,通过同一端口,经由 RMII 与另一产品板上的不同 MCU 成功通信。这让我们非常困惑,究竟是什么原因导致了这个问题。
我们将继续进行分析。我们目前的计划是通过让MCU TX和交换机输出相同的包来比较波形。然而,这在实施上具有挑战性,我们仍在努力——交换机转发的帧并不干净,因为它们包含许多其他数据包,会干扰波形捕获。
我们非常感谢您能提供任何其他建议。
顺祝商祺!
李永祥
Re: s32k322 EMAC RMII issue你好@YongxiangLi、
谢谢你的更新。
根据您最新的观察,下一步的一个有用方法可能是通过交换机本身创建一个更可控的交换机到 MCU 接收测试。
由于 MCU 端的外部环回功能正常,这表明基本的 GMAC TX/RX 路径和软件流程是功能正常的。因此,隔离从开关输出到 MCU RMII 接收接口的特定路径可能很有帮助。
如果你的交换机支持,你可以尝试以下方法之一:
1. 配置一个非常简单的静态 L2 转发路径,以便将已知的测试帧仅转发到 MCU RMII 端口。
2. 或者,如果支持,可以使用端口镜像生成向 MCU 端口的受控出口帧。
如果交换机支持,我还建议暂时禁用所有端口的 MAC 地址学习功能。
无论哪种情况,我都建议禁用或过滤所有其他不必要的流量,如果可能的话,禁用转发到所有其他端口。目标是只让一个已知的帧模式到达 MCU,以便更清晰地捕获 RMII 接收波形(REF_CLK、CRS_DV、RXD0、RXD1)。
顺祝商祺!
帕维尔