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.

[参考译文] TDA4VM:如何配置 MDIO phy 地址是第45 (c45)条访问?

Guru**** 2543980 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1020179/tda4vm-how-to-configure-a-mdio-phy-address-is-clause-45-c45-access

器件型号:TDA4VM

您好,专家:

我将 Marvel 88Q2220 T1 PHY 芯片用于 CPSW9G PHY。

据我所知、该芯片仅支持第45条访问

因此我尝试使用 enetphy.c 中的"EnetPhy_readC45Reg ()"来读取标准寄存器。

它返回一些错误消息:

1. MDIO_readRegC45:PHY 3未配置为进行 C45访问

2. EnetPhyMidoDflt_readC45:PHY 3:无法读取 C45 reg:-12

3. EnetPhy_readC45Reg:PHY 3:无法读取 MMD 1 reg 3:-12

您似乎需要首先将每个 phy 配置为 C45访问或 C22访问!

如果是、如何在代码中设置此配置?

非常感谢

Gibbs

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

    您好、Gibbs、

    是的、您需要配置 PHY 以进行 C45访问。 您必须向 PHY 制造商咨询。

    此致

    葡萄园

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

    您好、Vineet  

    谢谢您的回复。

    听从您的意见

    >> 是的、您需要配置 PHY 以进行 C45访问。  

    我的问题是"如何为 C45访问配置 tda4 MDIO?

    是否有示例代码?

    我只在 enetphy.c 中使用此函数,但它返回  MDIO_readRegC45:没有为 C45访问配置 PHY 3

    EnetPhy_readC45Reg (hPhy、 (0x01U)、 (0x0003U)、 &val);
    我是否错过了什么?
    非常感谢
    Gibbs

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

    您好、Gibbs、

    如果您看到 EnetPhy_readC45Reg ()的代码,它将首先读取 PHY 并检查是否启用了第45条支持。 如果未启用、则会返回您提到的错误。

    c45EnMask = CSL_MDIO_getClause45EnableMask (mdioRegs);

    因此、首先您需要通过与制造商(Marvell)进行通信来在 PHY 中启用它、他们可能会要求您通过使用 MDIO 写入特定于供应商的寄存器来启用它。 请参阅 enet/tools/debug_gels/cpsw_phyaccess_rain.c、了解如何执行该操作。

    我们没有在 PHY 中启用 C45支持的示例、因为 EVM 上没有支持 C45的 TI PHY。

    如果您已经启用了它、但您仍然没有看到设置了该值、请告知我们。

    此致

    葡萄园

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

    您好、Vineet

    我向我们的供应商核实 、C45是 Marvel 88Q2220的默认工作模式。

    您不需要对此 phy 芯片进行额外设置。

    因此我尝试检查"c45EnMask"标志、它返回0。

    检查以下步骤:

    1. mdio.c、函数"mdio_open"

    Enet_FEAT_is_EN (hMod->features、 MDIO_feature_CLAUSE45)= true、它启用  CSL_MDIO_setClause45EnableMask

    #if ENET_CFG_IS_ON(MDIO_CLAUSE45)
                if (ENET_FEAT_IS_EN(hMod->features, MDIO_FEATURE_CLAUSE45))
                {
                    ENETTRACE_INFO("[mdio.c] Mdio_open() ENET_CFG_IS_ON MDIO_CLAUSE45 ON\n");
                    CSL_MDIO_setClause45EnableMask(mdioRegs, mdioCfg->c45EnMask);
                }
    #endif

    2. mdio.c、函数"mdio_readRegC45 ()"

    enet_is_bit_set (c45EnMask、 phyAddr)返回 false! 为什么?

    static int32_t Mdio_readRegC45(CSL_mdioHandle mdioRegs,
                                   uint32_t userCh,
                                   uint32_t mmd,
                                   uint8_t phyAddr,
                                   uint16_t reg,
                                   uint16_t *val)
    {
        bool isComplete;
        uint32_t c45EnMask;
        int32_t status;   
    
        c45EnMask = CSL_MDIO_getClause45EnableMask(mdioRegs);
        ENETTRACE_INFO("[mdio.c] Mdio_readRegC45()-> c45EnMask = 0x%x\n", c45EnMask);
    
        if (ENET_IS_BIT_SET(c45EnMask, phyAddr))
        {
            ENETTRACE_INFO("[mdio.c] Mdio_readRegC45()-> c45EnMask bit set\n");
    
            /* Wait for any ongoing transaction to complete */
            do
            {
                isComplete = CSL_MDIO_isPhyRegAccessComplete(mdioRegs, userCh);
            }
            while (isComplete == FALSE);
    
            /* Initiate register read */
            status = CSL_MDIO_phyInitiateRegReadC45(mdioRegs, userCh, phyAddr, mmd, reg);
            ENETTRACE_ERR_IF(status != CSL_PASS,
                             "failed to initiate PHY %u C45 MMD %u register %u read: %d\n",
                             phyAddr, mmd, reg, status);
    
            /* Wait for register read transaction to complete */
            if (status == CSL_PASS)
            {
                do
                {
                    isComplete = CSL_MDIO_isPhyRegAccessComplete(mdioRegs, userCh);
                }
                while (isComplete == FALSE);
            }
    
            /* Get the value read from PHY register once transaction is complete */
            if (status == CSL_PASS)
            {
                status = CSL_MDIO_phyGetRegReadVal(mdioRegs, userCh, val);
                ENETTRACE_ERR_IF(status == CSL_ETIMEOUT,
                                 "C45 register read %u was not acknowledged by PHY %u: %d\n",
                                 reg, phyAddr, status);
                ENETTRACE_ERR_IF(status == CSL_EFAIL,
                                 "failed to read PHY %u C45 MMD %u register %u: %d\n",
                                 phyAddr, mmd, reg, status);
            }
        }
        else
        {
            ENETTRACE_INFO("[mdio.c] Mdio_readRegC45()-> c45EnMask bit not set\n");
            ENETTRACE_ERR("PHY %u is not configured for C45 access\n", phyAddr);
            status = ENET_EPERM;
        }
    
        return status;
    }

    c45EnMask 始终返回0

    Gibbs

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

    您好、Gibbs、

    很抱歉耽误你的时间。

    我需要在内部进行检查、然后返回给您寄存器读取不起作用的原因。 请给我2周时间。

    此致

    葡萄园

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

    葡萄园

    明白了  

    非常感谢

    Gibbs

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

    您好、Gibbs、

    此问题是否仍在您的结尾? 需要检查的一点是、这是 Marvel 88Q2220的通用 MDIO 问题还是特定于 C45的问题?

    需要检查的东西很少

    1. PHY 是否已初始化并正常工作? 您是否能够发送和接收数据包?

    2.您能否通过在此 PHY 中启用第22条支持并查询 PHY 寄存器来进行检查? 排除 C45特定问题?

    此致

    葡萄园

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

    您好,罗伊:

    我们非常确定 88Q2220在我们的电路板上运行良好、因为 Marvel FAE 帮助我们进行一些硬件返工、并使用一些 MDIO  

    用于检查的诊断工具。 您可以与 Rio 核实、他知道如何进行此测试。 

    由于 MDIO 通信问题、PHY 无法初始化、即使我们对88Q2220使用 C22/C45协议也是如此


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

    您好、Gibbs、

    在这种情况下,您是否能够从88Q2220读取状态和控制寄存器等基本寄存 器? 您读取了哪些值? 我不是责怪另一个 PHY、而是希望区分基本 MDIO 和 C45特定问题。

    此致

    葡萄园

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

    您好,Vineet:

    >>在这种情况下、您是否能够从 88Q2220读取状态和控制寄存器等基本寄存器  

    我们只需读取基本寄存器0x02/0x03即可读取器件 ID

    漫威  诊断工具可以使用 C22/c45协议读取

    phy2
    vendor id
    P2R14=0x002b	
    device id
    P2R14=0x0b20	
     
     
    phy4
    vendor id
    P4R14=0x002b	
    device id
    P4R14=0x0b20