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:RGMII 到 SGMII 桥接自动协商不成功

Guru**** 2447560 points
Other Parts Discussed in Thread: DP83869HM

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1350481/dp83869hm-rgmii-to-sgmii-bridge-auto-negotiation-not-succeeding

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

您好!

我们已经设置了定制 PCBA 和背板、两者都包含一个 DP83869HM PHY 芯片。 请参阅此方框图:

┌──────────────────────────────────────────┐     ┌──────────────────────────────┐
│                                          │     │                              │
│ ┌──────────┐      ┌────────────────────┐ │     │ ┌───────────────┐            │
│ │          │RGMII │                    │ │     │ │               │   ┌──────┐ │
│ │  Xilinx  ├─────►│     DP83869HM      │ │SGMII│ │   DP83869HM   │   │      │ │
│ │  MPSoC   │      │                    ├─┼─────┤►│               ├──►│ RJ45 │ │
│ │          │MDIO  │                    │ │     │ │               │   │      │ │
│ │ ARM CPU  ├─────►│RGMII to GMII bridge│ │     │ │SGMII to Copper│   └──────┘ │
│ │          │      │                    │ │     │ │               │            │
│ └──────────┘      └────────────────────┘ │     │ └───────────────┘            │
│               Custom PCBA                │     │           Backpanel          │
└──────────────────────────────────────────┘     └──────────────────────────────┘

定制 PCBA 上的 PHY 通过 MDIO 和 RGMII 连接到 ARM CPU (Xilinx MPSoC 的一部分)。 背面板上的 PHY 根本未连接到 CPU、因此我们无法从 CPU 访问它、但已确认它工作正常。 定制 PCBA 上的 PHY 具有自举电阻器以在 RGMII 到 SGMII 桥接模式下工作、背板上的 PHY 具有自举电阻器以在 SGMII 到铜缆模式下工作。 我们将在 CPU 上运行 U-Boot 以配置 PHY。  

当我们 尝试从 ARM CPU 向主机 PC (连接到 RJ45)发送数据包时、它只会等待自动协商完成:

以太网@ff0c0000等待 PHY 自动协商完成……

寄存器0x1包含 0x7949、表示自动协商尚未完成。 不过、我们可以在主机 PC 上看到它已成功建立链路并且已完成自动协商。 寄存器0x6E 包含0x650、表明已为 RGMII 至 SGMII 桥配置了引导带寄存器、并禁用了 MIR_EN (RGMII 至 SGMII 桥接器需要此寄存器、如果为1、则会使用 SGMII 至 RGMII 桥接器)。 但是、当我们读取寄存器0x1DF 时、它会显示值0x43、其中 BRIDGE_MODE_RGMII_MAC 位设置为1、表示存在 SGMII 转 RGMII 桥接器。 数据表中似乎存在错误、因为第 9.4.8.4节说明了我们需要将0x43写入寄存器以获取 RGMII 转 SGMII 桥接器、但第 9.6.1.65节说明了 BRIDGE_MODE_RGMII_MAC (0x43中的4)必须为0。 尽管如此、两种模式目前都不适合我们。

在 PHY 的器件驱动程序中、我们已禁用其等待自动协商的部分(此 if 语句)、 然后、当我们将0x1DF 设置为0x43时、ARM CPU 会报告存在链路、当我们从 RJ45连接器断开主机 PC 的连接时、它也会报告不再存在链路。 但是、当它报告存在链路时、我们看不到主机 PC 上的 ARM CPU 发送的任何数据包。 当我们将0x1DF 设置为0x3时、它只会报告没有链路。 我们之所以进行此尝试、是因为我们不确定自定义 PCBA 上的 PHY 是否需要自动协商、因为这似乎已经由背板上的 PHY 管理。

在上述所有情况下、主机 PC 均显示成功链接。

我们的器件树配置如下所示:

&gem1 {
    phy-mode = "rgmii-id";
    phy-handle = <&phy0>;
    status = "okay";
    mdio: mdio@0 {
        #address-cells = <1>;
        #size-cells = <0>;
        status = "okay";
        reset-gpios = <&gpio 51 GPIO_ACTIVE_LOW>;
        reset-assert-us = <100>;
        reset-deassert-us = <280>;
        phy0: ethernet-phy@05 {
            #phy-cells = <1>;
            status = "okay";
            compatible = "ethernet-phy-ieee802.3-c45";
            reg = <0x05>;
            reset-gpios = <&gpio 51 GPIO_ACTIVE_LOW>;
            reset-assert-us = <100>;
            reset-deassert-us = <280>;
            tx-fifo-depth = <0x1>;
            rx-fifo-depth = <0x1>;
            /* ti,op-mode = <0x03>; */
            ti,max-output-impedance;
            ti,clk-output-sel = <0x01>;
            rx-internal-delay-ps = <2000>;
            tx-internal-delay-ps = <2000>;
        };
    };
};

我们似乎已经竭尽所能来获得成功的链路和自动协商、但似乎没有效果。 我们还能做些什么呢?

此致、
罗伊·梅杰

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

    尊敬的 Roy:

    非常感谢您清楚地解释了您看到的问题、我相信我与手头的问题是完全一致的。

    首先、我想确认的是、数据表中确实有一个拼写错误。 表9-14桥接模式自举表的值已翻转。 这已在最新版本的数据表中更正、目前正在查看发布过程。 对此深表歉意。 第9.4.8.4节也不正确、寄存器0x1DF = 0x43用于 SGMII 转 RGMII 桥接器;  实现 RGMII 至 SGMII 桥接模式寄存器0x1DF = 0x0003。

    若要确认、将 DP83869HM 设置为 RGMII 转 SGMII 桥接模式时的正确搭接设置为:

    引脚名称 自举名称 引脚编号 引脚搭接连接
    JTAG_TDO/GPIO_1 OPMODE_0 22 2.49KΩ Ω 上拉至 VDDIO
    RX_D3 OPMODE_1 36 2.49KΩ Ω 上拉至 VDDIO
    RX_D2 OPMODE_2 35 打开
    RX_CTRL 后视镜_EN 38 2.49KΩ Ω 上拉至 VDDIO

    寄存器0x6E 将告诉您 PHY 在上电时绑定到的值、但该寄存器不是动态的、这意味着 OPMODE 的变化不会反映在该寄存器中。 寄存器0x1DF 是动态的、如您所知、可以写入该寄存器以更改 OPMODE。

    我知道由于您对数据表持正确的怀疑态度、您已经尝试了此配置、但现在证实了这一点、您能再试一次并让我知道 系统的行为吗? 除了捆扎不正确外、目前可能还存在一些其他问题。  

     此致、

    阿尔瓦罗

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

    您好 Alvaro、

    谢谢、我们尝试了您的建议。 我们已将 RX_CTRL 自举电阻器设置为一个连接到 VDIO 的2.49K 上拉电阻器。 我们看到、寄存器0x1DF 现已按预期设置为0x0003。 但是、它仍然无法成功进行自动协商。 我们已读取每个寄存器的值。 请参阅以下列表:

    Register 0: 0x1140
    Register 1: 0x7949
    Register 2: 0x2000
    Register 3: 0xa0f1
    Register 4: 0x1e1
    Register 5: 0x0
    Register 6: 0x64
    Register 7: 0x2001
    Register 8: 0x0
    Register 9: 0x1300
    Register A: 0x0
    Register D: 0x401f
    Register E: 0x0
    Register F: 0xf000
    Register 10: 0x5c48
    Register 11: 0xa002
    Register 12: 0x0
    Register 13: 0x40
    Register 14: 0x29c7
    Register 15: 0x0
    Register 16: 0x0
    Register 17: 0x40
    Register 18: 0x6150
    Register 19: 0x4444
    Register 1A: 0x2
    Register 1E: 0x12
    Register 1F: 0x0
    Register 25: 0x480
    Register 2C: 0x141f
    Register 2D: 0x0
    Register 2E: 0x221
    Register 31: 0x10b0
    Register 32: 0xd0
    Register 33: 0x0
    Register 37: 0x1
    Register 39: 0x0
    Register 3A: 0x0
    Register 43: 0x7a0
    Register 4F: 0x146
    Register 55: 0x0
    Register 6E: 0x1650
    Register 86: 0x77
    Register 134: 0x1000
    Register 135: 0x0
    Register 170: 0xc0f
    Register 180: 0x752
    Register 181: 0xc850
    Register 182: 0x5326
    Register 183: 0xa01e
    Register 184: 0xe976
    Register 185: 0x19cf
    Register 190: 0x0
    Register 191: 0x0
    Register 192: 0x0
    Register 193: 0x0
    Register 194: 0x0
    Register 195: 0x0
    Register 196: 0x0
    Register 197: 0x0
    Register 198: 0x0
    Register 199: 0x0
    Register 1A4: 0x0
    Register 1A5: 0x0
    Register 1A6: 0x0
    Register 1A7: 0x0
    Register 1DF: 0x3
    Register 1E0: 0x417a
    Register 1EC: 0x1ffd
    Register C00: 0x1140
    Register C01: 0x6179
    Register C02: 0x2000
    Register C03: 0xa0f1
    Register C04: 0x20
    Register C05: 0xd801
    Register C06: 0x9
    Register C07: 0x2001
    Register C08: 0x0
    Register C10: 0x3348
    Register C18: 0x1ff
    Register C19: 0x8


    我们注意到、寄存器0x1 (BMSR)中的位2为低电平、表示 链路断开。 但是、寄存器0x37 (SGMII_AUTO_NEG_STS)的位1为高电平、指示 SGMII 自动协商已完成。  我们还注意到、寄存器0xC01 (FX_STS)中的位2为低电平、表明没有 SGMII 链路或 LP 链路未建立。 这是否意味着两个 PHY (SGMII)之间建立了成功链接、但定制 PCBA 上的 PHY 与 ARM CPU (RGMII)之间没有成功链接?

     从寄存器值中可以看出有什么其他值得注意的地方吗?

    此致、
    罗伊·梅杰

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

    尊敬的 Roy:

    感谢您的寄存器转储。 我没有得到这个,直到今天晚些时候,请允许我另一天回应。

    此致、

    阿尔瓦罗

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

    您好 Alvaro、

    同时、我们也尝试了测量 RGMII 接口。 对于 RX、我们测量2.5 MHz 的时钟;对于 TX、我们测量125 MHz 的时钟。 我们在 TX 和 RX 线路上没有看到任何数据。 RX 上的2.5 MHz 时钟也 似乎 指示 PHY 和 MAC (在 ARM CPU 端)之间的自动协商尚未完成。 此外、当我们读取 MAC 的一些寄存器时、我们看到自协商尚未完成、没有链路。

    希望这些信息对您有所帮助。

    此致、
    罗伊·梅杰

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

    尊敬的 Roy:

    为了使我们两个器件保持对齐、我将快速总结当前配置的工作方式、以便更合理地执行以下调试步骤。

    Xilinx MPSoC <-RGMII-> 869桥接器<-SGMII->以太网 PHY

    当以太网 PHY 建立链路时、应通过 SGMII 接口将链路功能传输到869桥接器。 接收到链路功能后、869桥会调整 RGMII 时钟(125MHz 为1000Mbps、25MHz 为100Mbps、2.5MHz 为10Mbps)。  在没有链路的情况下、默认 RGMII 时钟将为2.5MHz。

    ________________________________________________________________

    桥接模式下的寄存器0xC01告诉我们 SGMII 链路的状态、当前为低电平。 0xC06[1]提供了另一个提示,869桥接器和以太网 PHY 之间的自动协商失败。 如何为这些板加电? 可能是一个 PHY 在另一个 PHY 准备就绪之前"完成"其 SGMII 自动协商。

    对于869桥接器、寄存器0xC0[9]可用于重启 SGMII 自动协商。 寄存器0x31[6-5]可配置为延长 SGMII 自动协商计时器。

    对于以太网 PHY、拔下再插回以太网电缆(并实现链路)将重新开始自协商过程。

    我们可以试一下吗?

    此致、

    阿尔瓦罗

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

    尊敬的 Roy:

    感谢您的寄存器转储。 您查看范围内的 TX 波形来自 Xilinx SoC、而不是我们的 PHY。 您无法看到任何 RX_DATA 的事实告诉我们869网桥无法正常运行。  

    为869 PHY 添加复位开关和寄存器访问非常方便。 在869桥接寄存器转储中、在桥接器复位后、寄存器0x0 = 0x140、这是一个拼写错误吗? 这意味着自动协商已被禁用。

    我也想确认一下,在我之前的答复中,我提到问题可能是 SGMII 自动协商的时间。 根据寄存器转储、DP83869 PHY 正在链接、但869桥接器和869 PHY 之间的 SGMII 接口未建立。  这就是为什么您看到869 PHY 上存在链路和活动、但却没有看到 任何接收到的数据包。 现在电桥和 PHY 都有自己的复位开关、我们可以尝试 同时将两者从复位状态释放吗? 请重新阅读我之前的回复以了解更多详细信息。

    此致、

    阿尔瓦罗

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

    您好 Alvero、

    感谢您的快速响应。

    869电桥的寄存器0中的值0x140不是拼写错误。 每次从 GPIO 引脚进行硬复位时、似乎都会进入此状态。 您是否知道为什么会发生这种情况? 我们认为这种情况可能是自举电阻器的配置所致。 您能否检查869电桥上的自举电阻器是否正确? 原理图如下图所示:



    我们尝试手动同时复位两个 PHY 芯片、但没有任何变化。 我们认为它没有什么帮助、因为 自动协商的窗口似乎最多只有11ms、这对于手动完成它来说太精确了、当我们复位869桥时、自动协商将被禁用(寄存器0)。 我们明天将在两个 PHY 芯片之间添加电平转换器、以便我们可以同时从控制台复位这两个器件。

    此致、
    罗伊·梅杰

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

    尊敬的 Roy:

    感谢确认0x140值。 我看不出您的束带中有任何可能导致这一问题的东西。 出于好奇心、我们是否可以尝试让 LED[0..2]悬空、而不是下拉至地?

    我希望一直注意寄存器0xC01、在 RGMII 到 SGMII 桥接中、这应该会告诉我们 SGMII 部分的链路状态。 您能否探测这条线(SO[P/N ]和 SI[P/N ])以查看是否有任何信号正在传输? 这可以在探测交流耦合电容器(C1103和 C1102)时使用差分探头来完成。

    此致、

    阿尔瓦罗

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

    尊敬的 Roy:

    我相信您在修改和调试这个板方面做得很出色。 硬复位后的自动协商禁用非常奇怪。 我们肯定希望保持启用自动协商。 请告诉我您的环回实验的结果、我将在明天早上进行更深入的探讨。

    此致、

    阿尔瓦罗  

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

    您好 Alvaro、

    我们能够测量 SGMII 接口。 请查看下面随附的图片:

    SGMII RX 1

    SGMII RX 2

    SGMII TX 1

    SGMII TX 2


    此致、
    罗伊·梅杰

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

    您好 Alvaro、

    如前所述、我们还向869桥的 td_x_A 和 TX_x_B 线路上添加了一个 RJ45连接器。 今天、我们对它进行了一些测试。 我们在两个连接器之间连接了一个主机 PC、如以下方框图所示:



    首先、我们已在自定义 PCBA 上将 DP83869HM 配置为 RGMII 转铜缆 以太网模式、如 数据表9.4.8.1节所述。  我们现在可以将数据包从 Xilinx MPSoC 发送到主机 PC、反之亦然。 这说明 Xilinx MPSoC 与自定义 PCBA 上的 DP83869HM 之间的 RGMII 接口可按预期工作。


    接下来、我们在自定义 PCBA 到 SGMII 转铜缆 以太网模式下配置了 DP83869HM 、如 数据表的第9.4.8.7节所述。  现在、我们可以从主机 PC 的一个以太网端口发送数据包、在主机 PC 的另一个以太网端口上接收数据包。  这表明自定义 PCBA 上的 DP83869HM 与背板上的 DP83859HM 之间的 SGMII 接口可按预期工作。


    总之、这表明 RGMII 或 SGMII 接口没有问题、并证明我们所有的硬件都按预期工作、RGMII 到 SGMII 桥接模式下的 DP83869HM 除外。 在最终产品中、我们需要有一个 RGMII 转 SGMII 桥接器、以便通过 SGMII 中的 PHY 和背板上的铜线在 Xilinx MPSoC 和主机 PC 之间建立以太网连接。  

    我们尚未能尝试回送测试、但我们还认为这不再必要、因为已证明 RGMII 能够按预期运行。 你有什么其他建议,我们可以尝试使它工作?

    此致、
    罗伊·梅杰

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

    尊敬的 Roy:

    再说一次、您的调试非常出色。 显然、DP83869桥接模式有一些奇怪的东西。 明天我将尝试使用我们的 DP83869HMEVM 来检查在桥接模式下869的 SGMII 部分是否出现哪种脉冲。 但是、我无法将其连接到其他模式来重新创建您的设置。

    我看到很多客户在桥接模式下使用我们的869、我相信您的设备会正常工作。 我找到了另一个线程、除了进一步确认我们希望连接869桥的寄存器0xC01以确保正常运行外、我没有注意到任何对您有利的情况。 请给它一个阅读,看看你是否捕获任何东西.

    https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1178555/dp83869hm-rgmii-sgmii-bridge-mode-autonegotiation-not-working

    此致、

    阿尔瓦罗

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

    您好 Alvaro、

    该桥现在正在工作。 我们已在 OP_MODE_DECODGE 寄存器(寄存器0x1DF、值0x43)中将桥接模式设置为 SGMII 至 RGMII 桥接、并且我们已在器件驱动程序中的 BMSR 寄存器(寄存器0x1、位5)中忽略自动协商完成。

    此致、
    罗伊·梅杰

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

    您好 Alvaro、

    能否请您确认我们的解决方案是否正确? 因为在之前的一次回放中、您说明了对于 RGMII 至 SGMII 桥接器、我们必须将0x1DF 设置为0x3、但现在它可以用于0x1DF。

    此致、
    罗伊·梅杰

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

    尊敬的 Roy:

    自从你解决了自己的问题,我开始验证你的结果。  我使用下面的设置来确认几项。

    智能位(数据生成器)<以太网电缆(1000Mbps)-> DP83867SEVM <-SGMII-> DP83869HMEVM ->示波器探测 RX_CLK 信号。

    当寄存器0x1DF = 0x0043时、RX_CLK 频率为125 MHz (预期值)。 正确、寄存器0x43用作 RGMII 转 SGMII 桥接器。 这是非常令人困惑的,我道歉的头痛这已造成。 我们已注意到这一问题已修复。  

    此致、

    阿尔瓦罗