88e1111 RGMII转SGMII不通

88e1111工作在RGMII转SGMII模式下如下图

img


如果phy 连接phy可以ping 通,phy连接mac则不能ping通。但是如果交换机配置为1000base-x,88e1111强制1000M,也能通。但是交换机在sgmii模式下则不通。

要把KD5886的MII接口设置为PHY MODE,88E111接PHY能工作,说明88E111要求对面是PHY mode。
确认一下交换机那个个MII接口能否设置为phy mode。
小端口交换机独立的MII接口大多可以工作在phy mode,方便接到CPU的MAC上,用于路由方案之类的。

该回答引用ChatGPT
根据您提供的情况,可能有以下原因:

1. 88e1111的RGMII转SGMII配置可能不正确,以至于不能正确转换为SGMII模式。可能需要检查配置是否正确并重新设置。

2. MAC或交换机的配置不正确,导致无法正确通信。可以尝试重新配置MAC和交换机。

3. SGMII接口可能存在问题,例如物理连接不良或信号干扰等。可以通过更换连接线或重新设计线路来解决。

请注意,可能还有其他原因导致这种情况发生,需要进行进一步的调试和分析。以下是88e1111的RGMII转SGMII代码,可以参考:


// RGMII to SGMII Configuration
gmii2rgmii_config_t gmii2rgmii_Config =
{
.tx_clk_pad_skew = 0x0,
.rx_clk_pad_skew = 0x0,
.tx_data_pad_skew = 0x0,
.rx_data_pad_skew = 0x0,
.rx_ctl_pad_skew = 0x0,
.tx_ctl_pad_skew = 0x0,
.tx_clk_dly = 0x0,
.rx_clk_dly = 0x0,
.tx_data_dly = 0x0,
.rx_data_dly = 0x0,
.tx_ctl_dly = 0x0,
.rx_ctl_dly = 0x0,
.tx_crossover = RGMII_TO_SGMII,
.rx_crossover = SGMII_TO_RGMII,
};
GMII2RGMII_Config(pHandle,&gmii2rgmii_Config);


希望这可以帮助您更好地解决这个问题。

需要确认的是两边的模式配对 是否能够对上
需要确认硬件连接
需要确认rgmii 2sgmii 是否已经成功

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这个问题涉及到的知识点比较多,需要仔细分析。根据您提供的信息,我理解您的情况是这样的:

您的系统中有一个88e1111的芯片,它的工作模式是RGMII转SGMII。

您有两种测试方案:

  • 将88e1111的SGMII口连接到一个PHY,在PHY处可以ping通。
  • 将88e1111的SGMII口连接到MAC,在MAC处不能ping通。

您还发现,当交换机的配置为1000base-x时,88e1111的SGMII口强制为1000M时,连接到MAC处也能够ping通。但是在SGMII模式下不行。

针对这个问题,有几个可能的原因:

  1. 物理层连接问题

交换机的配置为1000base-x时,88e1111的SGMII口改为了1000M,并且使用1000base-x自适应光模块与交换机相连。这意味着在1G速率下,您的物理层连接是没有问题的。但是在SGMII模式下,如果您使用的物理层接口配置有误,或者焊接有问题,就会导致MAC无法正常通信。您可以检查一下您的物理层连接是否正确。

  1. SGMII配置问题

在RGMII转SGMII模式下,设置SGMII参数是至关重要的。您需要根据芯片手册正确设置对应的寄存器,以确保SGMII口能够正常工作。这些寄存器包括PHY_MODE控制寄存器、SGMII控制寄存器等等。您可以检查一下您的SGMII配置是否正确。

  1. MAC配置问题

在MAC侧,您需要根据芯片手册正确配置寄存器,以使MAC能够正确地与SGMII口通信。这些寄存器包括MAC控制寄存器、PHY控制寄存器等等。您可以检查一下您的MAC配置是否正确。

在这里给出一些可能有用的代码:

SGMII配置:

/* 设置SGMII寄存器 */
#define SGMII_MODE_REG  0x10    // SGMII控制寄存器

/* SGMII mode */
#define SGMII_TX_CLK_DELAYED_MASK   0x8000  // TX时钟延迟控制
#define SGMII_RX_CLK_DELAYED_MASK   0x4000  // RX时钟延迟控制
#define SGMII_SPEED_1000            0x2000  // 1000M速率
#define SGMII_SPEED_100             0x1000  // 100M速率
#define SGMII_FULL_DUPLEX           0x0800  // 全双工
#define SGMII_PREAMBLES             0x0400  // SGMII前导码控制
#define SGMII_TX_EN                 0x0200  // SGMII TX使能
#define SGMII_RX_EN                 0x0100  // SGMII RX使能
#define SGMII_AN_EN                 0x0080  // SGMII AN功能使能
#define SGMII_LINK_UP               0x0040  // SGMII连接状态
#define SGMII_MODE_SGMII            0x0001  // SGMII模式

#define SGMII_SPEED_BOTH (SGMII_SPEED_1000 | SGMII_SPEED_100)

#define SGMII_DEF_CONF \
    SGMII_TX_CLK_DELAYED_MASK | SGMII_RX_CLK_DELAYED_MASK | \
    SGMII_SPEED_BOTH | SGMII_FULL_DUPLEX | SGMII_PREAMBLES | \
    SGMII_TX_EN | SGMII_RX_EN | SGMII_AN_EN | SGMII_MODE_SGMII

writel(SGMII_DEF_CONF, SGMII_MODE_REG);

MAC配置:

/* 设置MAC寄存器 */
#define MAC_CONFIG_REG 0x0   // MAC控制寄存器
#define PHY_IF_SEL     0x80  // PHY接口选择
#define FULL_DUPLEX    0x40  // 全双工
#define PROMISCUOUS    0x20  // 接收所有帧
#define CRC_CHECK      0x10  // CRC校验
#define LOOPBACK       0x08  // 回环模式
#define TX_ENABLE      0x04  // 传输使能
#define RX_ENABLE      0x02  // 接收使能
#define RESET          0x01  // 软件复位

#define MAC_DEF_CONF \
    PHY_IF_SEL | FULL_DUPLEX | \
    CRC_CHECK | TX_ENABLE | RX_ENABLE

writel(MAC_DEF_CONF, MAC_CONFIG_REG);

希望这些信息可以对您有所帮助。如果问题仍然无法解决,请提供更多详细信息和代码,以便我们更好地帮助您。
如果我的回答解决了您的问题,请采纳!