主题中讨论的其他器件:DP83869、 AM6442
我看到在 RGMII 转铜缆模式下以1Gbps 的速率使用 DP83869时、数据包丢失很高(>10%)。 我最初是在使用定制电路板时发现此问题的、但也能够在 TI 的 AM64EVM 电路板上重现此问题。 我已经将问题简化为以1Gbps 运行时、在 PHY 中出现某种类型的 FIFO 溢出。
借助 TI 的 AM64GPEVM 板、我可以 重复发送1516字节数据包 (使用 PRU 内核实现低延迟传输)、从而重现问题。 我将 IPG 配置为192ns、即双倍96ns、以确保不会出现 IPG 问题。 我还通过查看传输线上数据包之间的时间来验证了 IPG。 我目前仅传输数据包(无 RX)以简化调试。 使用 ProfiShark 1G+在线路上捕获数据包。
在以192ns 的 IPG 在每个数据包之间成功地背靠背传输73个数据包(每个1516字节)后会发生该问题。 之后,包74和75 总是被丢弃 (通过 Profishark Tap 看不到)。 我确实看到 MAC 和 PHY 之间通过 RGMII TXC/TXD 线路上的示波器传输的数据包74-75。 将包74-75丢弃后、可以在线路上成功看到数据包76。 此后、每发送30个数据包就会丢弃大约7-8个数据包。 我在多个板上看到过此问题、甚至在同一个板上看到了不同的 PHY、这似乎是 PHY 中出现了某种 FIFO 溢出问题。
如果我降低传输速度(每20us 一个1516字节的数据包、每 50us、每100us...) 改善了数据包丢失情况。 如果我每 200微秒发送不到一个1516字节的数据包、问题就完全解决了。 下面是我尝试过的其他想法:
验证了是否 根据数据表第9.4.8.1节为 RGMII 至铜缆配置了 PHY (BCMR=0x1140、PHY_CONTROL=0x5048、GEN_CFG1=0x300)
2.验证我正在使用 TI 为 AM64EVM 板的 ICSSG 端口上的 TX 时钟偏移提供的值(750ps)
3.尝试改变 TX CLK 移位。 它似乎没有影响,直到它是> 1500ps ,在这一点上我读取垃圾数据导线(如预期)。
4.尝试了 PHY_CONTROL 寄存器0x10的 TX_FIFO_DEPTH 中的0x1、0x2和0x3值。 尽管数据表注释似乎指示 TX_FIFO_DEPTH 不适用于 RGMII。
5.检查 INTERRUPT_STATUS 寄存器0x13。 我看到 设置了 XGMII_ERR_STATUS、ADC_FIFO_OVF_UNF 和 FALSE _CARRIER 位。
我还能做些什么来解决此问题?