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.

[参考译文] MSP432E401Y:PHY 链路层事件

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1334633/msp432e401y-phy-link-layer-events

器件型号:MSP432E401Y

您好!

如何检测链路层事件、特别是链路建立/断开事件? 我们正在使用 simplelink_msp432e4_SDK_4_20_00_12。

此致、

-迈克

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

     C:\ti\simplelink_msp432e4_SDK_4_20_00_12\examples\rtos\MSP_EXP432E401Y\ns\httpserver 可能是最近的示例。

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

    此外、通过链路协商报告任何错误都将有所帮助。

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

    尊敬的 Mike:

     请参阅 EMACMSP432E4_processPhyInterrupt 函数。 可以使用此函数来检测链路状态。 此函数位于 C:\ti\simplelink_msp432e4_sdk_4_20_00_12\source\ti\drivers\emac\EMACMSP432e4.c 中。  

    /*
     *  ======== EMACMSP432E4_processPhyInterrupt ========
     */
    static void EMACMSP432E4_processPhyInterrupt()
    {
        uint16_t value;
        uint16_t status;
        uint32_t config;
        uint32_t mode;
        uint32_t rxMaxFrameSize;
    
        /*
         * Read the PHY interrupt status.  This clears all interrupt sources.
         * Note that we are only enabling sources in EPHY_MISR1 so we don't
         * read EPHY_MISR2.
         */
        value = EMACPHYRead(EMAC0_BASE, PHY_PHYS_ADDR, EPHY_MISR1);
    
        /* Read the current PHY status. */
        status = EMACPHYRead(EMAC0_BASE, PHY_PHYS_ADDR, EPHY_STS);
    
        /* Has the link status changed? */
        if (value & EPHY_MISR1_LINKSTAT) {
            /* Is link up or down now? */
            if (status & EPHY_STS_LINK) {
                EMACMSP432E4_private.linkUp = true;
            }
            else {
                EMACMSP432E4_private.linkUp = false;
            }
            /* Signal the stack for this link status change (from ISR) */
            signalLinkChange(EMACMSP432E4_private.hEvent,
                    EMACMSP432E4_private.linkUp, 1);
        }
    
        /* Has the speed or duplex status changed? */
        if (value & (EPHY_MISR1_SPEED | EPHY_MISR1_DUPLEXM | EPHY_MISR1_ANC)) {
            /* Get the current MAC configuration. */
            EMACConfigGet(EMAC0_BASE, (uint32_t *)&config, (uint32_t *)&mode,
                            (uint32_t *)&rxMaxFrameSize);
    
            /* What speed is the interface running at now? */
            if (status & EPHY_STS_SPEED) {
                /* 10Mbps is selected */
                config &= ~EMAC_CONFIG_100MBPS;
            }
            else {
                /* 100Mbps is selected */
                config |= EMAC_CONFIG_100MBPS;
            }
    
            /* Are we in full- or half-duplex mode? */
            if (status & EPHY_STS_DUPLEX) {
                /* Full duplex. */
                config |= EMAC_CONFIG_FULL_DUPLEX;
            }
            else {
                /* Half duplex. */
                config &= ~EMAC_CONFIG_FULL_DUPLEX;
            }
    
            /* Reconfigure the MAC */
            EMACConfigSet(EMAC0_BASE, config, mode, rxMaxFrameSize);
        }
    }

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

    尊敬的 Charles:

    感谢您为我介绍代码部分。  是否有办法收到有关以太网连接的通知或收集错误?

    此致、

    -迈克

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

    尊敬的 Mike:

     通过 PHY 寄存器可以看到、除了 EPHYSTAT 寄存器由 EMACMSP432E4_processPhyInterrupt 读取之外、我实际上没有任何寄存器在以太网连接级别收集错误 。 您在寻找哪些具体错误?

    /*读取当前 PHY 状态。 */
    状态= EMACPHYRead (EMAC0_BASE、PHY_PHY_ADDR、EPHY_STS);

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

    尊敬的 Charles:

    我希望当我们收到链路断开通知时、可以从 PHY 收集所有错误。  我没有想到任何具体的错误。

    此致、

    -迈克