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.

[参考译文] DP83867CS:以太网在1000Mbps 速度下无法正常工作、与其他速度一样、也需要有关 BIST 的帮助

Guru**** 2481465 points
Other Parts Discussed in Thread: DP83867E, DP83867CR

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/650940/dp83867cs-ethernet-is-not-working-at-1000mbps-speed-where-as-other-speeds-it-is-working-need-help-on-bist-too

器件型号:DP83867CS
主题中讨论的其他器件:DP83867CR

大家好、

请注意、我们正处于项目的关键阶段。

我们有基于 ZYNC-ZC702的定制板、我们在其中连接了两  个 DP83867E PHY 连接到两个 macs、GEM0和 GEM1。 我们已将两个 PHY 配置为 RGMII 模式。

但在两个 MAC 中、只有一个 MAC、GEM0以1000Mbps 的速度运行、而其他 GEM1仅以10Mbps 和100Mbps 的速度运行

GEM1、

1. 仅在10/100Mbps 下工作

2.如果我对 eth1执行 ifconfig,它会将自己配置为完全双路、1000Mbps 和自动协商模式

在 Linux 上:

在1000Mbps 时、GEM1无法通过 DHCP 获取 IP。 我通过运行 Wireshark 验证了该接口是否未发送数据包、这基本上意味着 MAC 无法正常工作

在运行 Linux 时、在工作和非工作 MAC 实例的自动协商完成后、我附加了 phy 寄存器内容的转储

请注意、在附加的存档 post_auto_neg.zip 中、

   post_auto_neg_eth0.log - PHY 寄存器的寄存器转储、用于工作 MAC 的后自动协商

   post_auto_neg_eth1.log -对于不工作的 MAC、PHY 寄存器的 regdump 后自动协商
根据两个 PHY 的寄存器转储差分、我解释说、

寄存器0x08

1 >接收到的页面是消息页面。

寄存器0x09

1 >广播1000Base-T 全双工能力。

寄存器0x0A

1 >检测到手动主/从配置故障。

2 >本地接收器不正常。

3 >远程接收器不正常。

4 >链路伙伴不支持1000Base-T 全双工。

5 >链路伙伴不支持1000Base-T 半双工。
请注意、这两个 PHY 都是 DP83867CR 、需要在 RGMII 接口中进行配置。

在 Xilinx 裸机上:

为了进一步调试、我尝试执行 BIST 测试。 我附上了相同的伪代码、请告诉我这些步骤是否正确。

使用 BIST 时、结果如下、

字节计数4098错误字节计数128

上述结果是开启了自协商功能。 Auto-neg 将 phy 设置为1000Mbps、全双工链路和链路启动

请注意、我无法禁用自动协商位。 即使在清零 BMCR 的第12位后、自协商也不会被禁用。 即使该位未置位、SGMII_EN 位11也会置位。

以下是我们的设置:

我们使用的 I/O 电压为2.7V、以下是自举寄存器值

以下是用于设置的寄存器、格式为

===================================================================================================================================

模式2中的自举引脚:
G1LED_0、6.2K、1.6K
G1LED_1、6.2K、1.6K
G1LED_2、6.2K、1.6K
G1ETH_RXD0、6.2K、1.6K
G1ETH_GPIO1、6.2K、1.6K

G2LED_0、6.2K、1.6K
G2LED_1、6.2K、1.6K
G2LED_2、6.2K、1.6K
G2ETH_GPIO1、6.2K、1.6K

模式1中的自举引脚:
G1ETH_RXD2、开路、1.6K
G1ETH_GPIO0、开路、1.6K

G2ETH_RXD2、开路、1.6K
G2ETH_GPIO0、开路、1.6K

模式4中的自举引脚:
G1ETH_RXCTRL、960、1.6K
G2ETH_RXCTRL、960、1.6K
G2ETH_RXD0、960、1.6K

========================================================================================

e2e.ti.com/.../2821.post_5F00_auto_5F00_neg.zipe2e.ti.com/.../5165.psudo_5F00_bist.c

此致、

  Abhijit

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

    以下日志表示未正确与您的链接合作伙伴进行通信。

    a.您是否查看过硬件原理图? 您能分享给我吗?
    b.支持的 IO 电压为3.6/2.5/1.8。 在2.7V 时、您违反了规范。

    此致。
    GET


    寄存器0x0A

    1 >检测到手动主/从配置故障。

    2 >本地接收器不正常。

    3 >远程接收器不正常。

    4 >链路伙伴不支持1000Base-T 全双工。

    5 >链路伙伴不支持1000Base-T 半双工。
    请注意、这两个 PHY 都是 DP83867CR、需要在 RGMII 接口中进行配置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Geet、您好!

    非常感谢您的快速回复。

    请在网上找到我的回复

    [报价用户="Geet Modi">您好、

    以下日志表示未正确与您的链接合作伙伴进行通信。

    a.您是否查看过硬件原理图? 您能分享给我吗?

    是的、我们已查看原理图。 请查找随附的 schematic.e2e.ti.com/.../5751.rpcoc_2D00_bb_2D00_ti_2D00_review.pdf


    b.支持的 IO 电压为3.6/2.5/1.8。 在2.7V 时、您违反了规范。

    由于 ZYNC7000处理器的 I/O 电压要求、VDDIO 电压升高。 这是早期的3.3V、但由于 Zync 发出警告、RGMII 在3.3V 时可能无法工作、因此我们必须将其更改为2.7V。 我们 已在此处向 TI 验证了这些更改

    但为了提醒您注意、工作 phy 也具有相同的设计。

    PHY 以10Mbps/100Mbps 的速率工作、这是否意味着第4、5、7或8行的 Tx/Rx 线路(不是10/100Mbps x 1000Mbps 的一部分)可能会出现接口问题?

    此致。
    GET


    寄存器0x0A

    1 >检测到手动主/从配置故障。

    2 >本地接收器不正常。

    3 >远程接收器不正常。

    4 >链路伙伴不支持1000Base-T 全双工。

    5 >链路伙伴不支持1000Base-T 半双工。
    请注意、这两个 PHY 都是 DP83867CRR、需要在 RGMII 接口中进行配置。

    [/报价]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、我们还查看了随附的寄存器 dumpe。 在其中一个 phy 中、0x013显示设置了 AutoNeg_ERR。 看起来 phy 无法协商由 Link 合作伙伴提供的功能。

    建议在100M 模式下的 phy 链接上使用同一个与1G 模式下的其他 PHY 协同工作的链接伙伴。

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

    Geet、您好!

    我们使用开关连接两个 PHY。 我们在 PHY 之间交换了端口、我们还更改了电缆。

    您能告诉我 BIST 是否对调试有帮助吗? 如果是、则该过程是什么。 我没有找到执行 BIST 的步骤、但我尝试了从数据表中解释的方式。

    RJ45上的线路编号4、5、7或8是否存在问题?

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

    您好!

    我不知道从以太网 PHY 的角度来看、BIST 是什么意思。 我们有可用的内部回送测试,但不确定它们在这种情况下有何帮助?

    鉴于这两个 phy 原理图完全相同、建议您注意两者之间的组装或布线差异。

    您能否尝试通过交叉电缆将两个 PHY 相互连接?

    此致、

    GET

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

    Geet、您好!

    BIST 内置自检功能、其中以不同的回送设置生成伪随机数据包、并对错误字节进行计数

    BIST 是 此处介绍的诊断方法之一。 这可以帮助我们在 PHY 出现错误的时间点。

    我们的硬件团队已经验证了布线和组装方面、无论我们计划以何种方式使用不同的电路板旋转来测试相同的东西、但这可能需要一些时间

    我们将按照您的建议连接两个 PHY 测试、但我不清楚这对您有何帮助。

    只是为了澄清、在连接多个 PHY 时是否存在任何问题。

    需要注意的另一点是、两个 PHY 的 MDIO/MDC 线路连接到正在工作的 MAC。 即 GEM0、它是否会导致问题。

    我们是否可以怀疑10/100Mbps 的 TX/RX 线不在图片中?

    RGMII 接收/发送延迟在这个问题上是否起作用?

    感谢你的帮助

    此致、

    Abhijit

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

    BIST:好的,我也猜是一样的,但我想确定。 是的、您可以尝试这样做。 您可以在 phy 2 (有问题)和其他 phy 上执行模拟回送。

    在从 MAC 到两个物理层的 MDIO 上:这是交换机上的正常配置,不会影响链路。

    RGMII Tx/Rx Delay (RGMII Tx/Rx 延迟):再说一次,这些延迟仅在数据传输期间起作用,一旦成功连接,数据传输将是下一步。


    是的、在其他电路板上尝试它可能是一个好主意、只需隔离组装问题。 此外,您可能还需要尝试先关闭 phy 的电源。


    在两个千兆位 phy 之间:假设您的设置显示 AUTO_NEG 错误。 我认为这可能有助于将两个 PHY 连接到已知配置、如果它们显示了任何不同的行为。 此外、您还可以尝试使用强制千兆模式(一个在主设备中、另一个在从设备中)并尝试链接它们。

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

    Geet、您好!

    网上提供的 BIST 文档非常少。 如前所述、我使用 BIST 进行了测试、但它在10/100Mbps 时也显示错误、这应该是正常情况。 您能否在与您共享的伪代码中验证寄存器写入序列? 或者、由于这是固有的重要功能、TI 必须使用它、并且 TI 可能提供流程图、您能否共享此类文档?

    e2e.ti.com/.../3247.psudo_5F00_bist.c

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

    有关如何使用环回模式、请参阅以下应用手册。

    此致、
    GET


    www.ti.com/.../snla246a.pdf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Geet、您好!

    如果我执行回送、我必须修改 MAC 代码、否则我将如何验证接收到的数据。 我是否必须在驱动程序级别 ping 和比较接收和传输的缓冲器??相同的过程是什么?

    TI 如何从软件中验证 phy?

    如果我转到 BIST、MAC 不涉及任何代码更改、它将由 phy 本身进行验证。 我认为 BIST 的目的只是调试这种类型的问题、如果我错了、请告诉我。

    "MII 环回使用 BMCR (寄存器地址0x0000)进行配置。 所有其他回送
    使用 BOSCH (寄存器地址0x0016)启用模式。' 这意味着我仍然可以在 BIST 模式下回送、我正在执行此操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PHY 具有内部 PRBS (数据包发生器)。 请参阅以下过程以使用它来检查连接性。

    a.通过 MDI 连接2个 PHY、并在第一个 PHY 中设置 PRBS (0x0016 = 0xF000)。
    b.在第二个 PHY 上、读取 PRBS 校验器寄存器(0x0016、0x0017、0x0071、0x0072)

    或者、您可以在第二个 PHY (0x0016 = 0x0020)上执行反向回送、并在第一个 PHY 上读取校验器寄存器。 这有助于检查发送和接收路径。 数据表中提到了执行反向环回的过程。

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

    我没有回答您最后的问题。 您仍有问题或已解决?

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

    Geet、您好!

    很抱歉耽误你的回答。

    请找到 BIST 测试的寄存器写入序列、其中工作 phy (在地址3)和非工作 phy (在地址2)均使用直电缆连接。

    为 PHY 和错误计数启用 PRBS、并且仅为地址2处的 phy 打印接收到的字节

    进入 main()  

    准备 BIST 3..

    /* PHY@3:设置 RGMII 模式*/
    扩展写入:PHY @3 0x32=0xD3

    /* PHY@3:手动设置 MDI 连接*/
    正常写入:PHY @3 0x10=0x5808

    /* PHY@3:将 RGMII Rx 延迟设置为0x8、将 Tx 延迟设置为0xA */
    扩展写入:PHY @3 0x86=0xa8

    /* PHY@3:
    Duplex:Full
    速度:1000BaseT
    AutoNeg:打开
    *
    正常写入:PHY @3 0x0=0x1140

    /*PHY@3:执行软复位*/
    正常写入:PHY @3 0x1f=0x4000
    /*PHY@3:正在等待复位完成...*/
    正常写入:PHY @3 0x16=0xc000
    正常写入:PHY @3 0x16=0xc000
    正常写入:PHY @3 0x16=0xc000

    /*PHY@3:无回路 ...*/
    正常写入:PHY @3 0x16=0xc000

    /* PHY@3:开始 PRB 生成之前的 Regdump */
    <<<<<<<<<<<<<<<<<<<<<<<<<<<< 寄存器转储>>>>>>>>
    DP_PHYIDR1 0x2000
    DP_RGMIICT 0xD3
    DP_PHYCR 0x5808
    DP_RGMIIDCTL 0xa8
    DP_BMCR 0x1140
    DP_BOSCH 0xc000
    DP_LOOPCR 0xe721
    ================================================================================================================
    准备 BIST 2..

    /* PHY@2:设置 RGMII 模式*/
    扩展写入:PHY @2 0x32=0xD3

    /* PHY@2:手动设置 MDI 连接*/
    正常写入:PHY @2 0x10=0x5808

    /* PHY@2:将 RGMII Rx 延迟设置为0x8、将 Tx 延迟设置为0xA */
    扩展写入:PHY @2 0x86=0xa8

    /* PHY@2:
    Duplex:Full
    速度:1000BaseT
    AutoNeg:打开
    *
    正常写入:PHY @2 0x0=0x1140

    /*PHY@2:执行软复位*/
    正常写入:PHY @2 0x1f=0x4000
    /*PHY@2:正在等待复位完成...*/
    正常写入:PHY @2 0x16=0x8000
    正常写入:PHY @2 0x16=0xc000
    正常写入:PHY @2 0x16=0xc000
    /*PHY@2:No loopback ...*/
    正常写入:PHY @2 0x16=0xc000

    /* PHY@2:开始 PRB 生成之前的 regdump */
    <<<<<<<<<<<<<<<<<<<<<<<<<<<< 寄存器转储>>>>>>>>
    DP_PHYIDR1 0x2000
    DP_RGMIICT 0xD3
    DP_PHYCR 0x5808
    DP_RGMIIDCTL 0xa8
    DP_BMCR 0x1140
    DP_BOSCH 0xc000
    DP_LOOPCR 0xe721
    ================================================================================================================

    在 PHY@3上启动 BIST
    [1]忙位0x0
    正常写入:PHY @3 0x16=0xd000
    [2]忙位0x1
    在 PHY@2..上启动 BIST
    [1]忙位0x0
    正常写入:PHY @2 0x16=0xd000
    [2]忙位0x1
    正在检查 PHY@2..上的状态寄存器
    在检查锁0x16:0xd000之前转储 BIST 相关寄存器
    0x71:0x0
    0x72:0x0
    0x17:0x240
    扩展写入:PHY @2 0x72=0x1
    正常写入:PHY @2 0x16=0xc000
    忙位0x0、锁定状态0x0
    打印 BIST 相关寄存器后锁定检查
    在检查锁0x16:0xc000之前转储 BIST 相关寄存器
    0x71:0x0
    0x72:0x0
    0x17:0x40
    字节计数0错误字节计数0
     
    请告诉我、当 PRBS 本身未生成时、如何通过物理层验证 PRBS 数据?

    需要注意的另一点是、我们能够从 Xilinx 执行采样示例以使用 MII 回送进行回送、但如果我们执行数字回送、也会失败。 即 BOSCH |=(1 << 2)。 请即使在我们按照数据表中的顺序执行操作时也说明这种行为的原因。 即使对于正常工作的 PHY、回路也会失败

    您能否确认数字回路的序列? 我对 TI 寄予厚望、希望能帮助解决这一微不足道的问题。

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

    以下是过程。

    此致、
    GET



    BIST/PRBS 检查

    在 RGMII 时钟移位模式(根据 E2E 线程)和强制 MDI 模式(链路伙伴应处于 MDIX 模式0x0010 = 0x5828)的初始设置之后、检查链路(1G、全双工)

    PRBS 错误计数的过程:
    1.在 DUT1上启动 PRBS:
    0x0016 = 0xD000
    2.在 DUT2上启用 PRBS 校验器:
    0x0016 = 0xC000
    3.检查 DUT2中的 PRBS 锁定
    0x0017.11应为1、0x0017.10应为0
    4.锁定 PRBS 计数
    0x0072.0 = 1
    5.读取接收到的字节计数:
    0x0071.[15:0]
    6.读取接收错误计数:
    0x0072.[7:0]
    7.清除 PRBS 计数
    0x0072.1 = 1
    8.复位后读取新的计数:
    0x0071 = 0x0001


    在 DUT1上的单数据包生成模式下、发送正确的帧
    0x0016 = 0x1000 (用于1518字节单数据包)
    0x0016 = 0x3000 (用于64字节单数据包)

    在连续模式下发送 PRBS
    0x0016 = 0x7000/0xF000 (要在0x007B 十六进制中设置的数据包大小)


    数字环回

    1。 0x00FE = 0xE720
    2. 0x0000 = 0x0140 (自协商被禁用)
    3. 0x0010 = 0x5008 (强制 MDI 模式)
    4. 0x0016 = 0xD004 (启用连续数据包 PRBS 生成、启用数字回送)
    5. 检查链路应该已打开
    6. 0x0017.11应为1、0x0017.10应为0
    7. 按照 PRBS 校验器的步骤读取接收到的字节计数
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Geet、您好!

    非常感谢您的善意回应。 我能够在数字回路模式下测试 BIST。 请允许我将答案标记为已解决。

    但以下是观察结果、
    数字回路 BIST 测试显示工作中和非工作中的 PHY 的错误计数均为零、这表示 PHY 在数字块之前正常
    2.非工作 phy 的模拟回路显示为39字节17696的错误
    3.因为链路尚未准备好进行工作 phy 的模拟回路
    我们已经使用 RJ45的100欧姆端接来终止工作 phy

    只需更改我在代码中执行的操作是0x0016 = 0xD008

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

    尊敬的 Abhijit:

    您能否确认用例中的以下指示:
    1. PHY 不工作的链路状态? 您能读取0x0011吗?
    2.不起作用的 PHY 的 RGMII I/F 上的 RX_CLK 频率?
    3.来自 MAC 的 TX_CLK 时钟频率?
    4.两个 PHY 上的自举配置状态寄存器(读取0x006E 和0x006F)


    您是否还可以尝试以下过程:
    1.通过 CAT5e 电缆将 DUT1连接到 DUT2。 检查链路是否在1000M 模式下启动(0x0011 = 0xBC02/0xAC02)
    2.在 DUT2上启用反向回送(0x0016 = 0x0020)。 无需其他配置即可实现反向回送
    3. DUT1 MAC 上的启动数据包
    4.检查回送后接收到的数据包中是否有任何错误

    然后,您可以交换功能(DUT2的数据包和 DUT1的反向回送)并进行检查
    这将确保以1G 速度在两个 PHY 上的 MAC 和 MDI 接口正常运行。


    此致、
    Anmol