This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DP83869HM:大数据包丢失/可能的 FIFO 上溢

Guru**** 2394295 points
Other Parts Discussed in Thread: AM6442

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1241291/dp83869hm-large-packet-loss-possible-fifo-overflow

器件型号:DP83869HM
主题中讨论的其他器件:DP83869AM6442

我看到在 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 位。

我还能做些什么来解决此问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更多的测试表明、发送更大的数据包(3000字节)会导致此问题更快发生(问题发生在~40个数据包发送后)、而较短的数据包(300字节)会导致问题发生在之后(问题发生在~400个数据包发送后)。 这似乎是某种类型的溢出或类似的问题。

    但即使是相对"缓慢"的速率(例如每20微秒一个1520字节的数据包(~60%的千兆容量)、发送的数据包不会出现在线路上时、也会经常出现问题。

    有什么想法吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    周老师、您好!

    感谢您提供详细的详细信息-我有几个问题可以帮助调试您的问题:

    您能否提供寄存器 0x0-0x1F 的寄存器转储?

    在定制电路板中、所使用的处理器是否也是 AM64?

    Unknown 说:
    借助 TI 的 AM64GPEVM 板、我可以  重复发送1516字节数据包 (使用 PRU 内核实现低延迟传输)来解决问题

     数据包从哪里发送? 链路伙伴是什么? 它是 TI PHY 吗?

    此致、

    梅利萨

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Melissa:

    感谢您的答复! 定制电路板 也使用 AM6442。

    我可以将这个问题复制发送到一个 TI 连接方(同一主板上的第2个 DP83869)、一个非 TI 连接方(笔记本电脑)、和一个第2个非 TI 连接方(配置为 SPAN 模式的 ProfiShark 1G)。

    以下是丢弃数据包时截取的寄存器转储:

    0x0 = 0x1140

    0x1 = 0x796D

    0x2 = 0x2000

    0x3 = 0xA0F1

    0x4 = 0x01E1

    0x5 = 0xCDE1

    0x6 = 0x006F

    0x7 = 0x2001

    0x8 = 0x6001

    0x9 = 0x0300

    0xA = 0x3C00

    0xB = 0x0000

    0xC = 0x0000

    0xd = 0x401F

    0xE = 0x0C1F

    0xf = 0xF000

    0x10 = 0x5048

    0x11 = 0xBC02

    0x12 = 0x0000

    0x13 = 0x1D44

    0x14 = 0x29C7

    0x15 = 0x0000

    0x16 = 0x0000

    0x17 = 0x0040

    0x18 = 0x6150

    0x19 = 0x4444

    0x1A = 0x0002

    0x1b = 0x0000

    0x1C = 0x0000

    0x1D = 0x0000

    0x1E = 0x0212

    0x1F = 0x0000

    注意、我在启动 PHY 之后、发送数据包之前拔下并重新插入以太网电缆。 如果我重复相同的测试、但在插入以太网电缆之前转储寄存器、然后在发送数据包之后再次转储寄存器、我第二次在0x13 (INTERRUPT_STATUS)中看到0x0000、在0x11 (PHY_STATUS)中看到0xAC02、在0x6 (ANER)中看到0x006D。

    如果我能提供更多信息、请告诉我、谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    周老师、您好!

    感谢您提供这些信息。 我需要一些时间来查看此问题、并在我们的实验室中尝试一些测试、我将在星期五6点30分之前向您更新。

    此致、

    梅利萨

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Melissa:

    我们 刚刚 发现网络分路器上的 USB 电缆出现故障、导致其在后台无声地丢弃数据包。 这个"硬件丢弃的数据包"计数器隐藏在一个我们很少使用的屏幕上,所以它不是立即明显这发生了。 我们切换到了另一条 USB 电缆、现在、我们的 TAP 将显示该线路上的所有数据包。

    很抱歉花时间讨论此问题! PHY 在全线路速率下工作良好。

    再次感谢!