您好!
我们在 RMII 模式下使用的是 DP83848 PHY 以及 STM32F407 (LwIP 协议栈)。 50MHz 参考 CLK 由 STM32 PLL 生成。
情况如下:
-无法实现100M 操作。 启用自动协商时、PHY 会进入100M 全双工模式、但 RXD0/1上的所有帧都会损坏。 µs、大多数帧将仅由保持在高电平20至100 μ s 的 RXD0组成。 100M 运行对于我们的应用不是至关重要的、因此进行了进一步的测试、迫使 PHY 达到10M。 我将其提及以进行故障排除。
-进行了两次测试:ping 命令和 Modbus TCP 请求。 Ping 响应偶尔会失败(大约5%的时间)。 当它未发生故障时、响应时间为低电平(<10ms)。 使用 Modbus TCP 时、我们观察到大多数请求回复很快、但偶尔 (每20秒左右)、响应时间将增加到500ms 或1秒。 将超时值设置为2秒、通常会在运行10-20分钟后发生超时。
- STM32上的调试显示失败的 ping 没有到达 LwIP 协议栈的入口(即协议栈对它收到的每个 ping 都进行了应答,每次应答都到达主机)
-为了测试数据包的完整性,我们设置了一个参数相同的开发板,并将其连接到同一个交换机,并比较了 RXD0信号。 我们在某些帧上发现了损坏。
以下是常规帧的示例。 除了前导码长度之外、两个电路板上的帧是相同的:


下面是一个损坏的帧示例。 DP83848的帧(上部)与开发板不同。

根据这些结果、DP83848似乎会破坏少量的 Rx 数据包。 在 TCP 操作中、发送方重新发送数据包、因此它只会引起应答延迟。 当同一数据包被损坏多次时、可能会发生 Modbus 超时
这似乎是一个硬件问题、因此我们尝试在 X1、RXD0和 RXD1信号上添加100欧姆串联电阻。 这使问题变得更加严重。 传输的帧中只有很小的一部分没有损坏。 负载因子似乎也会影响这种现象。 当将负载因子降低10倍时、损坏帧的百分比会降低。
这是 CLK 信号、没有串联电阻

根据这些信息,我们应该进行哪些设计更改,以确保至少有可靠的10M 运行?
这里是原理图。 我应该补充的是、RMII 信号布线非常短、因为组件距离 MAC 只有3cm。 差分信号布线较长(10cm)。 所有 RMII 信号都直接传输到微控制器。
一
