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:设置 PHY 电平(MII)环回时出现问题

Guru**** 2409930 points
Other Parts Discussed in Thread: DP83869HM, DP83867IS

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1127893/dp83869hm-issue-setting-up-phy-level-mii-loopback

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

大家好、  

我 正在尝试在 PHY 中设置 MII 级环回以确认 MAC<->PHY 之间的通信。 通过 MAC 和 PCS 级别(均在 MAC 内部)、而不是 MII 级别(MAC 外部)的测试、我能够成功执行环回测试。 我正在寻找一些建议或线索、以了解可能缺失/出错的原因。

 我们的硬件:

  • Intel Cyclone 10 GX FPGA
  • NIOS II 工艺(软内核、在 FPGA 结构中实例化)
  • TI DP83869HM PHY

我们的软件/工具:

  • Quartus Prime Pro 19.4.
  • 用于 Eclipse 的 NIOS II 软件构建工具19.4
  • 英特尔以太网数据包生成器/以太网数据包监控器19.4 IP
  • Intel 三速以太网19.4 IP

我们的设置/设置:

  • SGMII->Copper 模式(OP_MODE_DE解码= 0x0046)
  • 千兆位速度
  • 自动协商被禁用(文档建议针对回送禁用此功能)
  • 全双工

我们的文档:

  • 三速以太网 Intel FPGA IP 用户指南(UG-01008 - 2021.10.04)
  • DP83869HM 数据表- 2018年12月修订
  • Intel Cyclone 10 LP FPGA 三速以太网和 Intel 板载 PHY 芯片参考设计
    • 第4页、图1提供了系统的基本图。 但是、我们还有一个额外的多路复用器、可在连接到链路伙伴时允许"正常"流量流动
  • 如何配置 DP838xx 进行以太网合规性测试

我们尝试使其正常工作的东西

  • 我们已确认能够通过 从寄存器读回数据/观察示波器上的数据来对 MAC/PCS/PHY 中的所有寄存器(包括扩展寄存器)进行 R/W 检查
  • 我们已确认所有 MAC/PCS/PHY 设置在速度、双工和自动协商方面相互匹配
  • 我们已确认 MAC 和 PC 级环回工作正常。 可以在以太网数据包监控寄存器和 MAC 寄存器中查看统计信息
  • 我们已确认、我们准确遵循"英特尔 Cyclone 10 LP FPGA 三速以太网和英特尔板载 PHY 芯片参考设计"软件包中的 PHY 回路设置步骤
    • 在.zip 中包含的.TCL 脚本中可以找到详细步骤本身
  • 已尝试将专有0xC6寄存器设置为0x10。
    • 该寄存器对它的功能没有任何说明。 但在"如何为以太网合规性测试配置 DP838xx "文档第13页中、这是一个必要的步骤。 不清楚是否需要将其设置为环回
  • 已尝试将 LOOPCR (0xFE)设置为0xE720。
    • 该寄存器没有关于其功能的说明、仅在"DP83869HM 数据表"的第27页中简要介绍。 不清楚是否需要为 MII 回送设置此参数。
  • 尝试通过在 PHY_CONTROL (0x10)寄存器中设置"FORCE_LINK_STSACH"来强制 BMSR (0x01)寄存器中的 LINK_STS1启动。
    • 注意:当我们尝试数字回送(不起作用)时、LINK_STS1为高电平。  对于 MII 回送、该位是否应为高电平?

在这个帖子中 、用户说"我们将 寄存器0x00的位14设置 为1、并 将0x0004写入寄存器0x16。 测试结果成功"。 在下一个回复中、TI 员工表示"MII 和模拟/数字回路的配置正确。" 我们尝试了这些设置、并确认它们在我们的案例中不起作用。  这些步骤中是否还有其他未完成的步骤?

下面是我们当前的实施方案:

#include <stdio.h>
#include <system.h>
#include <io.h>
#include <altera_eth_tse_regs.h>

typedef volatile struct tse_pcs_struct
{
    unsigned int control;
    unsigned int status;
    unsigned int phy_id1;
    unsigned int phy_id2;
    unsigned int dev_ability;
    unsigned int partner_ability;
    unsigned int an_expansion;
    unsigned int device_next_page;
    unsigned int partner_next_page;
    unsigned int master_slave_cntl;
    unsigned int master_slave_stat;
    unsigned int reserved1;
    unsigned int reserved2;
    unsigned int reserved3;
    unsigned int reserved4;
    unsigned int extended_status;
    unsigned int scratch;
    unsigned int rev;
    unsigned int link_timer1;
    unsigned int link_timer2;
    unsigned int if_mode;
} tse_pcs;

// Offsets from MAC Base
#define MAC_REV 0x00
#define MAC_SCRATCH 0x01
#define MAC_CMD_CFG 0x02
#define MAC_MAC_0 0x03
#define MAC_MAC_1 0x04
#define MAC_FRM_LEN 0x05
#define MAC_PAUSE_QUANT 0x06
#define MAC_RX_SEC_EMPTY 0x07
#define MAC_RX_SEC_FULL 0x08
#define MAC_TX_SEC_EMPTY 0x09
#define MAC_TX_SEC_FULL 0x0A
#define MAC_RX_ALMOST_EMPTY 0x0B
#define MAC_RX_ALMOST_FULL 0x0C
#define MAC_TX_ALMOST_EMPTY 0x0D
#define MAC_TX_ALMOST_FULL 0x0E
#define MAC_MDIO_ADDR0 0x0F
#define MAC_MDIO_ADDR1 0x10
#define MAC_HOLDOFF_QUANT 0x11
#define MAC_TX_IPG_LENGTH 0x17
#define MAC_TX_CMD_STAT 0x3A
#define MAC_RX_CMD_STAT 0x3B

// Offsets from Packet Gen Base
#define PKT_GEN_NUM_PKT 0x00
#define PKT_GEN_CONFIG_REG 0x01
#define PKT_GEN_RAND_SEED0 0x02
#define PKT_GEN_RAND_SEED1 0x03
#define PKT_GEN_SRC_ADDR0 0x04
#define PKT_GEN_SRC_ADDR1 0x05
#define PKT_GEN_DEST_ADDR0 0x06
#define PKT_GEN_DEST_ADDR1 0x07
#define PKT_GEN_OPERATION 0x08
#define PKT_GEN_PKT_TX_CNT 0x09

// Offsets from Packet Monitor Base
#define PKT_MON_NUM_PKT 0x00
#define PKT_MON_RX_OK 0x01
#define PKT_MON_RX_ERROR 0x02
#define PKT_MON_BYTE_RX_CNT0 0x03
#define PKT_MON_BYTE_RX_CNT1 0x04
#define PKT_MON_CYCLE_RX_CNT0 0x05
#define PKT_MON_CYCLE_RX_CNT1 0x06
#define RX_CTRL_STATUS 0x07

// Offsets for PCS Registers
#define ETH_PCS_BASE 0x10002200
#define PCS_CTRL_REG 0x00
#define PCS_IF_MODE_REG 0x14

// Offsets for PHY Registers
#define ETH_PHY_BASE 0x10002280
#define PHY_BMCR 0x00
#define PHY_BMSR 0x01
#define PHY_REGCR 0x0D
#define PHY_ADDAR 0x0E
#define PHY_CONTROL 0x10
#define PHY_STATUS 0x11
#define PHY_BIST 0x16
#define PHY_GEN_CTRL 0x1F
#define PHY_LOOPCR 0xFE
#define OP_MODE_DECODE 0x1DF

#define NUM_PKTS_TX_RX 1000

np_tse_mac *mac_registers = ((void*) ETH_TSE_0_BASE);
tse_pcs *pcs_registers = ((void*) ETH_PCS_BASE);

int main()
{
    alt_u32 selector = 0;

    // Step 1a - Configure MAC
    IOWR(ETH_TSE_0_BASE, MAC_CMD_CFG, 0x003B); // tx/rx enable, gigE, promiscuous mode
    IOWR(ETH_TSE_0_BASE, MAC_MAC_0, 0x17231C00); // Set upper portion of MAC address
    IOWR(ETH_TSE_0_BASE, MAC_MAC_1, 0x0000CB4A); // Set lower portion of MAC address
    IOWR(ETH_TSE_0_BASE, MAC_FRM_LEN, 1518); // Set dframe length
    IOWR(ETH_TSE_0_BASE, MAC_PAUSE_QUANT, 0xFFFF); // Set pause quant to max
    IOWR(ETH_TSE_0_BASE, MAC_RX_SEC_EMPTY, 4080);
    IOWR(ETH_TSE_0_BASE, MAC_RX_SEC_FULL, 16);
    IOWR(ETH_TSE_0_BASE, MAC_TX_SEC_EMPTY, 4080);
    IOWR(ETH_TSE_0_BASE, MAC_TX_SEC_FULL, 16);
    IOWR(ETH_TSE_0_BASE, MAC_RX_ALMOST_EMPTY, 8);
    IOWR(ETH_TSE_0_BASE, MAC_RX_ALMOST_FULL, 8);
    IOWR(ETH_TSE_0_BASE, MAC_TX_ALMOST_EMPTY, 8);
    IOWR(ETH_TSE_0_BASE, MAC_TX_ALMOST_FULL, 3);
    IOWR(ETH_TSE_0_BASE, MAC_MDIO_ADDR0, 0);
    IOWR(ETH_TSE_0_BASE, MAC_MDIO_ADDR1, 0);
    IOWR(ETH_TSE_0_BASE, MAC_TX_IPG_LENGTH, 12);
    IOWR(ETH_TSE_0_BASE, MAC_TX_CMD_STAT, 0); // OMIT_CRC = 0, TX_SHIFT16 = 0
    IOWR(ETH_TSE_0_BASE, MAC_RX_CMD_STAT, 0); // RX_SHIFT16 = 0

    IOWR(ETH_TSE_0_BASE, MAC_CMD_CFG, 0x203B); // Reset MAC using same values as above
    while ( (IORD(ETH_TSE_0_BASE, MAC_CMD_CFG) & 0x2000) == 0x2000)
    {
        // do nothing. Wait for MAC reset to complete
    }
    IOWR(ETH_TSE_0_BASE, MAC_CMD_CFG, 0x003B); // re-enable Tx/Rx lines (reset disables these)

    // Step 1b - Configure PCS ------------------------------------------------
    IOWR(ETH_PCS_BASE, PCS_CTRL_REG, 0x0140); // disable AN, gigE
    IOWR(ETH_PCS_BASE, PCS_IF_MODE_REG, 0x0009); // disable SGMII AN, gigE, full duplex

    // Step 1c - Configure PHY ------------------------------------------------
    IOWR(ETH_TSE_0_BASE, MAC_MDIO_ADDR1, 0); // set mdio address 1 to PHY 0

    IOWR(ETH_PHY_BASE, PHY_REGCR, 0x001F); // Set OP_MODE_DECODE
    IOWR(ETH_PHY_BASE, PHY_ADDAR, OP_MODE_DECODE);
    IOWR(ETH_PHY_BASE, PHY_REGCR, 0x401F);
    IOWR(ETH_PHY_BASE, PHY_ADDAR, 0x0046);

    IOWR(ETH_PHY_BASE, PHY_REGCR, 0x001F); // set LOOPCR - Data sheet says this needs to be done. No description on what it does
    IOWR(ETH_PHY_BASE, PHY_ADDAR, PHY_LOOPCR);
    IOWR(ETH_PHY_BASE, PHY_REGCR, 0x401F);
    IOWR(ETH_PHY_BASE, PHY_ADDAR, 0xE720);

    IOWR(ETH_PHY_BASE, PHY_BMCR, 0x0140); // Set BMCR - AN disabled, gigE (need to turn off AN before enabling MII Loopback mode)
    IOWR(ETH_PHY_BASE, PHY_CONTROL, 0x5008); // Set MDI Mode - 0x5028 = MDI-X, 0x5008 = MDI (need to turn off Auto MDI-x before enabling MII Loopback mode)
    IOWR(ETH_PHY_BASE, PHY_BMCR, 0x4140); // Enable MII Loopback
    IOWR(ETH_PHY_BASE, PHY_GEN_CTRL, 0x4000); // SW Reset - preserves register values

    // Step 2 - Configure packet generator ------------------------------------
    IOWR(ETH_GEN_DW_0_BASE, PKT_GEN_NUM_PKT, NUM_PKTS_TX_RX); // set number of pkts to be sent
    IOWR(ETH_GEN_DW_0_BASE, PKT_GEN_CONFIG_REG, 0x0BB8); // Set # pkts, fixed pkt length of 1500, incremental pattern
    IOWR(ETH_GEN_DW_0_BASE, PKT_GEN_RAND_SEED0, 0x12345678); // Set random seed lower (can be anything, chose value from .tcl script)
    IOWR(ETH_GEN_DW_0_BASE, PKT_GEN_RAND_SEED1, 0x00009ABC); // Set random seed upper (can be anything, chose value from .tcl script)
    IOWR(ETH_GEN_DW_0_BASE, PKT_GEN_SRC_ADDR0, 0x17231C00); // Set src mac address lower (pulled MAC address from TI docs)
    IOWR(ETH_GEN_DW_0_BASE, PKT_GEN_SRC_ADDR1, 0x0000CB4A); // Set src mac address upper (pulled MAC address from TI docs)
    IOWR(ETH_GEN_DW_0_BASE, PKT_GEN_DEST_ADDR0, 0x17231C00); // Set dest mac address lower (pulled MAC address from TI docs)
    IOWR(ETH_GEN_DW_0_BASE, PKT_GEN_DEST_ADDR1, 0x0000CB4A); // Set dest mac address upper (pulled MAC address from TI docs)

    // Step 3 - Configure packet monitor --------------------------------------
    IOWR(ETH_MON_DW_0_BASE, PKT_MON_NUM_PKT, NUM_PKTS_TX_RX); // set number of pkts to be received

    // Step 4 - Configure muxers ----------------------------------------------
    IOWR(ST_MUX_2_TO_1_DW_0_BASE, 0, 0x01); // Set mux 0 to a 1 (data coming in from mux 1)
    IOWR(ST_MUX_2_TO_1_DW_1_BASE, 0, 0x00); // Set mux 1 to a 0 (data coming in from pkt generator)

    // Step 5 - Turn on packet monitor ----------------------------------------
    IOWR(ETH_MON_DW_0_BASE, RX_CTRL_STATUS, 0x01);

    // Step 6 - Turn on packet generator --------------------------------------
    IOWR(ETH_GEN_DW_0_BASE, PKT_GEN_OPERATION, 0x01);


    while(!selector)
    {
        // do nothing until we pause and change selector to 1
    }

    alt_u32 rx_OK = IORD(ETH_MON_DW_0_BASE, PKT_MON_RX_OK);
    alt_u32 tx_ERROR = IORD(ETH_MON_DW_0_BASE, PKT_MON_RX_ERROR);
    alt_u32 last_bmcr = IORD(ETH_PHY_BASE, PHY_BMCR);
    alt_u32 last_bmsr = IORD(ETH_PHY_BASE, PHY_BMSR);
    last_bmsr = IORD(ETH_PHY_BASE, PHY_BMSR); // need to be read 2x for valid link up read
    alt_u32 last_phy_ctrl = IORD(ETH_PHY_BASE, PHY_CONTROL);
    alt_u32 last_phy_sts = IORD(ETH_PHY_BASE, PHY_STATUS);

    while(1)
    {
        // do nothing
    }

    return 0;
}

请参阅上述代码、了解我们为启用 MII 级环回所采取的确切步骤。 通过检查 MAC 统计寄存器、我们可以看到所有数据包都正常发送、但 MAC 不接收任何本应环回的帧。 这向我们表明、数据并未像我们预期的那样在 PHY 中环回。

总的来说、我们感觉缺少了一些步骤/知识来使其正常工作。 我们的设置是否缺少任何内容?  欢迎并感谢您提供任何帮助或建议!

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

    您好、Neil、

    首先、我想了解更多与设置相关的内容。

    1. DP83869HM 的链路伙伴是否连接在铜侧?
    2. 我看到 SGMII 自动协商被禁用。 在正常功能模式期间、SGMII 自动协商是否被禁用? 在 MAC 上、在环回测试期间是否启用/禁用 SGMII 自动协商?

    我建议我们首先调试 PHY PCS 环回/数字环回。 请分享您的想法。

    --
    此致、
    Gokul。

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

    你好、Gokul、

    1) 1)在我们的设置中、没有任何元件连接到铜侧。

    2) 2)我们已按照文档的指示专门为此回路设置禁用了 SGMII 自动协商。  

      2A)在正常运行模式期间(无环回、铜侧通过以太网电缆连接到链路伙伴)、启用 SGMII 自动否定功能。

      2B)在 MAC 侧、对于环回设置、SGMII 自动协商被禁用。

    最后、我们希望所有级别的回送都能为我们工作。 首先、我们希望使用 MII、因为它是进入 PHY 的最允许的环路

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

    您好、Neil、

    您能否在 MAC 和 PHY 上同时启用 SGMII 自动协商并检查回送是否正常工作、请在这种情况下检查 MII 回送和 PC 回送。

    --
    此致、
    Gokul。

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

    你好、Gokul、  

    我们打开了 SGMII 自动协商功能、并尝试运行 MII、PC 和数字回送中的每一个。 我们的结果如下:

    MII 环回

    我们在数据包监控器中没有收到任何数据包。 因此、回送不会按预期进行。

    从 PHY_STATUS 寄存器获取的值:

    • AN =未完成
    • 速度= 10Mbps
    • LINK_STATUS_2 =关闭

    PCS 环回

    PCS 环回具有3种不同的模式。 在其中的每一个中、我们都没有在数据包监控器中接收到任何数据包。 因此、回送不会按预期进行。

    1. 进入扰频器模式之前的环路
      1. AN =未完成
      2. 速度= 10Mbps
      3. LINK_STATUS_2 = UP
    2. 扰频器之后、MLT3编码器之前的环路
      1. AN =未完成
      2. 速度= 10Mbps
      3. LINK_STATUS_2 =关闭
    3. MLT3编码器之后的环路
      1. AN =未完成
      2. 速度= 10Mbps
      3. LINK_STATUS_2 = UP

    数字环回

    我们在数据包监控器中没有收到任何数据包。 因此、回送不会按预期进行。

    从 PHY_STATUS 寄存器获取的值:

    • AN =未完成
    • 速度= 10Mbps
    • LINK_STATUS_2 =关闭

    请注意、在数字回送中、如果我们禁用了自动协商并指定1000Mbps、我们会看到链路正常(但仍然没有数据到数据包监控器)。

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

    您好、Neil、

    让我在我们的实验室中解决这个问题、并在下周中旬之前回复您。

    --
    此致、
    Gokul。

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

    你好、Gokul、  

    您在实验室中的测试结果是什么?

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

    您好、Neil、

    很抱歉耽误你的答复。 我能够使用 MII 环回成功地进行数据传输。 以下是我使用的设置。

    • 0x0000 = 0x4140
    • 0x0010 = 0x5008
    • 0x00FE = 0xE720
    • 0x0016 = 0x0004

    我尚未禁用 SGMII 自动协商、但仍能使其正常工作。

    请尝试相同的操作吗?

    但是,我无法使其他环回工作。 我正在与设计团队合作、以解决这些问题、从而解决延迟问题。

    --
    此致、
    Gokul。

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

    你好、Gokul、  

    我们尝试了上述步骤、但仍然无法成功实现环回。 我们观察到与以前相同的行为、即数据包由发生器发出(我们看到它们通过 MAC 发出)、但检查器未接收到数据包(我们看不到它们进入 MAC)。

    我对您分享的步骤有几个问题

    1. 0x0000 = 0x4140使能 MII 回送、而0x0016 = 0x0004使能数字回送。  我们为什么要设置两种不同的回送模式?
    2. 与上述问题相关-您的成功环回测试是否真正处于 MII 模式? 还是数字回路?
    3. 上面列出的步骤的顺序是否与我们应该写入寄存器的顺序相匹配?
    4. 您能否共享已用于成功运行 MII 环回的代码?
    5. 最后、我想再次检查您是否在 DP83869HM 上成功完成了环回测试
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Neil、

    SGMII 链路连接取决于铜侧的链路连接。 数字回送是一种诱骗 PHY 假设铜侧已连接的方法。 如果您不打算使用数字回送、请连接链路伙伴并确保铜侧链路处于1G 模式。

    完成上述脚本后、能否在0x0001寄存器中检查 DP83869HM 的链路状态?

    我已在 DP83869HM EVM 上以相同的顺序使用了这些寄存器。

    我目前不是用于验证此内容的确切脚本。 请给我一个时间、直到星期一向您发送相同的脚本。

    --
    此致、
    Gokul。

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

    你好、Gokul、  

    感谢您解释数字回送如何影响链路状态。 出于好奇、铜侧为什么需要有一个环回链路? 我的理解是、由于我们不是在与外界对话、因此我们不需要建立这个链接。

    运行您共享的上述寄存器集(启用数字回送)、我们会看到寄存器0x0001的 LINK_STS 和寄存器0x0011的 LINK_STATUS_2都设置为"链接启动"。 但是、我们仍然没有看到任何数据包返回到 MAC/数据包检测器中。

    数据表中对 LINK_STS 和 LINK_STATUS_2的描述不多。 您能解释一下这些差异吗?

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

    您好、Neil、

    SGMII 侧需要通过铜侧链路进行链路。 这是因为 PHY 等待铜侧的速度分辨率以在 SGMII 侧启动链路。

    我认为 0x0001和0x0011之间的区别是0x0001是锁存低电平状态、而0x0011是实时状态、但我不确定。 让我检查一下并返回给您。

    您能不能告诉我、这些是您到目前为止的观察结果

    1. 在环回中、铜侧链路已启动、但 SGMII 显示链路已关闭。 是这样吗?
    2. 如果没有环回、SGMII 链路就会启动。 在这种情况下、数据传输未完成。

    如果观察到这些情况、很奇怪 SGMII 在一种情况下是连接的、而在另一种情况下是连接的。

    --
    此致、
    Gokul。

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

    你好、Gokul、  

    所有结果都使用您在上面共享的寄存器。

    我的第一个问题是 哪个位可以准确地确定 SGMII 链路是否已启动? 该 link_STS、link_status_2或其他位吗?

    1) 1)在环回模式下、LINK_STS 和 LINK_STATUS_2都显示为"链接启动"。

    2) 2)没有环回、LINK_STS 和 LINK_STATUS_2都显示为"链接启动"。 在这种情况下,我们会看到一些数据传输(通过 telnet 建立 TCP 连接)。 但是、在接收到少数包含"损坏数据包"错误的消息后、此连接很快就会终止。 此损坏的数据包错误向我们表明、我们刚刚从队列中提取的缓冲区缺少其结束标记、因此长度无效。

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

    您好、Neil、

    链路状态和链路状态2表示铜缆上的链路。 有关 SGMII 侧链路的信息、请参阅寄存器0x0C01。

    --
    此致、
    Gokul。

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

    你好、Gokul、  

    感谢您为我解释 LINK_STS 和 LINK_STATUS_2、非常有帮助!

    我刚刚再次运行测试、结果如下:

    1) 1)在环回模式下、LINK_STS 和 LINK_STATUS_2都显示为"链接启动"。 SGMII 链路处于"链路断开"状态

    2) 2)没有环回、LINK_STS 和 LINK_STATUS_2都显示为"链接启动"。  SGMII 链路为"链路断开"。 在这种情况下、我们确实会在连接终止之前看到一些数据传输。

    我有一个关于 FX_STS 寄存器中此 SGMII Link Up 位的后续问题。 在数据表中、它指示该位在  RGMII-SGMII 模式和  SGMII-RGMII  模式下有效。 我们以  SGMII 铜线模式运行。  在本例中、该位是否仍然指示有效的 SGMII 链路?

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

    您好、Neil、

    0x0C01应在 SGMII-Cu 模式下在 SGMII 端显示链路状态。 0x037还有关于 SGMII 状态的一些信息。

    在 SGMII 方面似乎存在一些问题。 在 DP83869和 MAC 上启用 Autoneg 后、是否可以共享0x0C00至0x0C08的寄存器日志?
    另请分享您的电路板原理图以供查看。

    --
    此致、
    Gokul。

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

    你好、Gokul、  

    我再次运行代码、结果如下。 请注意、我已经添加了一些其他寄存器来帮助提供上下文。

    last_bmcr             0x4140
    last_bmsr             0x794d
    last_phy_ctrl         0x5008
    last_phy_sts          0xac02
    last_pcs_ctrl         0x1140
    last_pcs_if_mode      0x3
    last_bist_cntrl       0x4
    last_phy_gencfg2      0x29c7
    last_fx_ctrl          0x1140
    last_fx_status        0x6149
    last_fx_phyid1        0x2000
    last_fx_phyid2        0xa0f1
    last_fx_anadv         0x20
    last_fx_lpabl         0x0
    last_fx_anexp         0x0
    last_fx_locnp         0x2001
    last_fx_lpnp          0x0
    last_phy_sgmii_an_sts 0x2

    BMSR 指示链路已启动、自协商未完成。 但是、PHY_STS 指示链路已启动、自动协商已完成。  这两个位是否是指不同的自动协商?

    FX_STS 指示自动协商未完成

    PHY_SGMII_AN_STS 指示自动协商未完成

    这是我们的原理图副本。 请注意、原理图"保护"部分下的电阻器 R37-44已删除。 它们是该板先前修订版的一个赝像。

    e2e.ti.com/.../6472.Ethernet-Page.pdf

    你知道 Gokul,我下周将离开办公室。 但是、我的同事将在我缺席的情况下继续与您合作。

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

    你好、Gokul、  

    我还有几个问题要问您。

    在上述说明中、设置 LOOPCR 寄存器后没有软件重启(保留寄存器值)。 但是、在 DP83867IS 数据表的第83页中、它表示" 更改[LOOPCR]寄存器值后、需要通过控制寄存器(CTRL)的位14 (地址0x001F)进行软件复位。 不建议使用该寄存器的其他值。"  

    • 83869器件中的这种说法是否已不再正确?
    • 这是我们应该做的事情吗?

    我的第二个问题是有关启用 MII 回送的问题。 在上面给出的指令中、我们设置寄存器0x0000 = 0x4140。 该指令启用 MII 回送、并在同一步中禁用自动协商。 但是、在 DP83869的第27页中、它说"为了保持所需的运行模式、在选择近端回送模式之前、应该禁用自协商功能。 此约束不适用于外部回送模式。"

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

    你好、Gokul、  

    我们刚刚在实验室中运行了另一组测试、我想与您分享测试结果。

    我们运行了一个构建,在该构建中,我们能够建立到 telnet 服务器的连接。 连接后、我们读取0x0C01寄存器的值、并向我们指示该链路已断开。 在这种情况下、我们知道已经建立了牢固的连接(我们可以在 Wireshark 上看到流量)、因此 SGMII 自动协商必须完成、并且该链路应该已启动。 这向我们表明、该寄存  器实际上并不反映 SGMII 链路的状态。

    您能帮您解释一下吗?

    请注意、在同一实验中、我们观察到寄存器0x37的值(SGMII_AUTO_NEG_STATUS)、它向我们指示在这种情况下 SGMII 自动协商已按预期完成。

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

    您好、Neil、

    我将与我们的设计团队核实这一点、并在一天之内与您联系。

    --
    此致、
    Gokul。

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

    您好、Neil、

    我很抱歉耽误你的回应。

    我检查了设计、看起来在0x37和0xC01中都可以使用 SGMII 自动协商完成。 但是、在 SGMII-Cu 模式下、0xC01中的链路状态始终连接到0。 我们必须依靠 在上述寄存器之一中完成的 SGMII 自动协商。

    --
    此致、
    Gokul。