大家好
在开发过程中,我遇到了以太网连接稳定性问题。在同时使用rw612定制主板和frdm_rw612进行了一些调查后,发现MDC引脚上的频率是错误的。不是 2.5 兆赫,而是 13 兆赫。由于以太网模块 ksz8081 允许高达 10 MHz 的 MDC 频率,因此以太网能在 frdm_rw612 上稳定工作只是运气好而已(您可以从 Zephyr 闪存任何以太网示例,查看 frdm_rw612 上 MDC 引脚的频率是否为 13 MHz)
深入研究后发现,问题的根源似乎在于以太网 MSCR 寄存器,该寄存器在计算 MII_SPEED 时使用固定的 50MHz 时钟值。我在 Zephyr 的 mcux/mcux-SDK/devices/rw612/drivers/fsl_clock 的 clock_gettdrmcienetclk Freq(void)函数下找到了它。 c。
当我使用 M33 处理器频率(260 MHz)计算这个寄存器值时,我看到了正确的 MDC 频率 - 2.5MHz。
根据 RW612 数据表,代码中的频率(50 MHz)似乎是正确的,但实际上它使用 260 MHz 的时钟作为计算参考。
最初,我更改了 CLOCK_GetTddrMciEnetClkFreq 的返回值改为 260 MHz。的返回值改为 260 MHz,但我不确定这是否会影响代码的其他部分,不过现在已经可以正常工作了。
能否请您确认该问题是否存在,并帮助我在哪里解决?
赞一个@Maciej_Jj
感谢你们发现并解决了这个问题! 我的项目也是基于 zephyr 的,但就是因为这个问题卡住了。
你好,里卡多、
是否有任何更新?
在 MCUxpresso 样本中,似乎使用 260 MHz 频率来计算 MSCR 寄存器的值:
您好,
没问题,我已经使用 MCUXpresso IDE 24.9.25 更新了 frdmrw612_enet_txrx_transfer 样品,在这里一切正常,MDC 引脚的测量频率为 2.5 MHz。
你好
我知道您使用的是 Zephyr,但能否请您帮助我们检查一下在使用 MCUXpresso SDK 时是否也会出现这个问题?
在此期间,我还将查看 Zephyr 的例子。
此致,
里卡多
在这里,我将测量 MDC 频率的 CLOCK_GetTddrMciEnetClkFreq 更 改为 260 MHz:
你好,里卡多、
我们的产品正在开发 Zephyr 3.7,但为了确保这个问题可以重现,我设置了 Zephyr 4.1.0.rc3,它使用 ZephyrSDK 0.17.0,在 west.yml 中我看到它指向 HAL 恩智浦修订版。9dc7449014a7380355612453b31be479cb3a6833(https://github.com/zephyrproject-rtos/hal_nxp/commits/9dc7449014a7380355612453b31be479cb3a6833).
我使用以下命令从 Zephyr 示例中构建 dhcpv4 示例:
west build-b frdm_rw612 samples/net/dhcpv4_client/-p
闪烁后,我在控制台看到该示例正确启动。我在 GPIO56 上测量了频率(正好在 frdm_rw612 主板上的 R31 上)。请参见 frdm_rw612 原理图中的图片:
测量频率约为 13 兆赫。根据 ksz8081 数据手册,它的频率不得超过 10MHz,最佳条件是该频率为 2.5MHz:
查看 MSCR 寄存器,其值似乎正确,但实际上必须使用 260 MHz 频率重新计算,而不是 50 MHz。因此,MSCR MII_SPEED 为 13MHz 而不是 2.5MHz,MSCR HOLDTIME 设置为 0,导致连接问题。
我在 enet devicetree 中做了一些变通,但不能这样。使用以下方法会导致 HOLDTIME 值出错,并且仍然存在一些通信问题。
我没有尝试 mcuexpresso 的 eth 示例,因为我们使用 Zephyr 进行开发
你好
希望你一切顺利。能否详细介绍一下您的设置?
您使用的是哪个版本的 SDK?您尝试使用 SDK 中的以太网示例了吗?
您是如何使用 FRDM 进行测量的?
顺祝商祺!
里卡多