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.

[参考译文] DP83825I:如何通过我们的 Linux 代码启动 DP83825

Guru**** 2390755 points


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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1461376/dp83825i-how-to-bring-up-dp83825-by-our-linux-code

器件型号:DP83825I

工具与软件:

嗨、团队:

您能解释一下我们如何通过 Linux 代码启动器件吗?

dp83822.c«phy«net«drivers - kernel/git/stable/linux.git - Linux 内核稳定树

1.初始状态时,我们需要先运行哪个命令?

dp83822_of_init 或 dp8382x_config_init

2.我们需要在初始化代码中修改什么寄存器?

谢谢!

LEO

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

    尊敬的先生

    我们将在 STM32H7R7L8H6H 平台上使用 LWIP 与 DP83825 PHY。 不过、我们只具有 DP83848的初始化代码、而不具有 DP83825的初始化代码。 因此、该器件无法执行 ping 操作、我们需要知道如何初始化 DP83825。

    我打印了 DP83825的寄存器、 您能否确认 DP83825现在是否工作正常? 或者、您可以提供任何调试说明来帮助我们了解为何器件仍然无法 ping 通?

    **打印 ETH 注册开始**
    ** Reg =0x00 value = 0x3100 **
    ** Reg =0x01 value = 0x786d **
    ** Reg =0x02 value = 0x2000 **
    ** Reg =0x03 value = 0xa140 **
    **寄存器=0x04值= 0x01**
    ** Reg =0x05 Value = 0xc1e1 **
    **寄存器=0x06值= 0x000D **
    ** Reg =0x07 Value = 0x2001 **
    ** Reg =0x08 value = 0x0000 **
    ** Reg =0x09 value = 0x0000 **
    ** Reg =0x0a value = 0x0100 **
    ** Reg =0x0B value = 0x0000 **
    ** Reg =0x0c value = 0x0000 **
    ** Reg =0x0d value = 0x0000 **
    ** Reg =0x0E value = 0x0000 **
    ** Reg =0x0F value = 0x0000 **
    ** Reg =0x10 value = 0x0615 **
    ** Reg =0x11 value = 0x0108 **
    ** Reg =0x12 value = 0x0000 **
    ** Reg =0x13 value = 0x0000 **
    ** Reg =0x17 value = 0x0065 **
    ** Reg =0x19 value = 0x8c00 **
    ** Reg =0x1f value = 0x0000 **
    ** Reg =0x4a0 value = 0xFFFF **

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

    尊敬的 David/Leo:  

    我可以看到、您将 DP83822驱动器改用 DP83825、用于该应用。 加载驱动程序后这个寄存器转储吗?

    我还想更好地了解这里使用的设置。 使用的是什么 xMII 接口? 此设置中的连接伙伴是什么?  

    我从寄存器转储中注意到的一点是 FIFO 下溢标志。 这通常指向时钟之间的 ppm 不匹配。 这可以通过测量 TX_CLK 和 PHY RX_CLK 进行检查。 它们彼此之间最多应在100ppm 之内。  

    此致!

    Vivaan

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

    您好、Vivaan

    感谢您的答复。
    寄存器转储在加载驱动程序后、初始代码位于下方。

     int32_t DP83848_Init(dp83848_Object_t *pObj)
     {
       uint32_t regvalue = 0, addr = 0;
       int32_t status = DP83848_STATUS_OK;
       uint32_t phyID, regValue;
    
       //phy address = 0
       pObj->IO.ReadReg(0x0, 0x02, &regvalue); //PHY_ID1_REG
       phyID = regvalue << 16;
       pObj->IO.ReadReg(0x0, 0x03, &regvalue); //PHY_ID2_REG
       phyID = (phyID | (regValue));
    
       /* Reset PHY. */
       status = pObj->IO.WriteReg(0x0, DP83848_BCR, 0x8000); //DP83848_BCR is 0x0
       if (status == 0)
       {
    	   status = pObj->IO.ReadReg(0x0, 0x01, &regValue );
           /* RMII configuration */
    	   status = pObj->IO.ReadReg(0x0, 0x17, &regValue );
    	   //status = pObj->IO.WriteReg(0x0, 0x17, 0x80| 0x1 );
    
    	   /* Disable Wake on Lan. */
    	   status = pObj->IO.ReadReg(0x0, 0x4a0, &regValue );
    	   regValue &= ~(0x80|0x1|0x20); //DP83822_WOL_EN|DP83822_WOL_MAGIC_EN|DP83822_WOL_SECURE_ON
    
    	   status = pObj->IO.WriteReg(0x0, 0x12, regValue);
    
           /* Set PHY link status management interrupt. */
    	   status = pObj->IO.ReadReg(0x0, 0x12, &regValue );
    	   regValue |= 0x20; //regValue |= DP83822_LINK_STAT_INT_EN; -- Enable interrupt on change of link status
    	   status = pObj->IO.WriteReg(0x0, 0x12, regValue);
    
    	   /* Enable/Disable link up+down interrupt. */
    	   status = pObj->IO.ReadReg(0x0, 0x11, &regValue ); //MII_DP83822_PHYSCR
    	   regValue |= 0x2; // DP83822_PHYSCR_INTEN
    	   regValue |= 0x1; // DP83822_PHYSCR_INT_OE
    	   status = pObj->IO.WriteReg(0x0, 0x12, regValue);
    
    	   /* Initialize AutoMDIX */
    	   status = pObj->IO.ReadReg(0x0, 0x19, &regValue ); //MII_DP83822_PHYSCR
           regValue |= 0x8000; //DP83822_MDIX_AUTO_EN
    	   status = pObj->IO.WriteReg(0x0, 0x12, regValue);
    #if 0
           /* Set the auto-negotiation then start it. */
    	   status = pObj->IO.WriteReg(0x0, 0x04, 0x100 |0x080 |0x040 | 0x20 | 0x01 );  //PHY_AUTONEG_ADVERTISE_REG
    	   	   	   //(PHY_100BASETX_FULLDUPLEX_MASK | PHY_100BASETX_HALFDUPLEX_MASK | PHY_10BASETX_FULLDUPLEX_MASK |PHY_10BASETX_HALFDUPLEX_MASK
    	   	   	   // | PHY_IEEE802_3_SELECTOR_MASK
    	   status = pObj->IO.WriteReg(0x0, 0x0, 0x1000U | 0x0200U );  //PHY_AUTONEG_ADVERTISE_REG
    	   //result = PHY_DP83825_WRITE(handle, PHY_BASICCONTROL_REG,
    	   //                                           (PHY_BCTL_AUTONEG_MASK | PHY_BCTL_RESTART_AUTONEG_MASK));
    #else
    	   status = pObj->IO.ReadReg(0x0, 0x0, &regValue );
           //regValue &= ~PHY_BCTL_ISOLATE_MASK;
    	   regValue &= ~0x400;
           status = pObj->IO.ReadReg(0x0, 0x0, &regValue );
           /* Disable the auto-negotiation and set user-defined speed/duplex configuration. */
    #endif
       }
       return status;
     }

    我正在使用一台带10/100M/1G 网卡的笔记本电脑、并已设置静态 IP (192.168.1.100)。 DP83825配置为 RMII 模式、禁用 DHCP、IP 地址192.168.1.101、网络掩码255.255.255.0和网关192.168.1.100。

    我将使用25MHz xtal 连接到 XI 引脚、因此 DP83825在主模式下运行、它将向 RMII_REF_CLK 输出50MHz

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

    您好、Vivaan

    您的意思是寄存器 RCSR 寄存器(0x17)= 0x65、它似乎是 RMII_RCSR Overflow_Status 标志。

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

    尊敬的 Vivaan:

    DP83825没有用于测量的 TX_CLK 和 RX_CLK 输出引脚。 我可以测量哪个信号引脚来代替 TX/RX_CLK? 此外、输入时钟25MHz 具有小于±100ppm 的容差。 参见 pic

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

    您好!  

    感谢您提供有关设置的所有说明性信息。

    初始化代码看起来没有问题。

    注意:uou 是指寄存器 Overflow_Status 寄存器(0x17)= 0x65、它似乎是 RMII_RCSR 标志。

    是的、我讨论的是寄存器0x17。 此寄存器中有错误。 上溢/下溢位应翻转以显示0x1欠载/上溢、而0x0为正常运行。 此变更已被注意到、并将在下周之前在即将发布的数据表修订版中予以修正。 基于此、我们可以得出结论、器件出现下溢而不是上溢。  

    我认为导致这个问题的原因是电阻器 R98、R101和 R102。 这些电阻器用于产生环回、不应用于正常运行。 我建议您在移除这些电阻的情况下再次尝试测试。 如果由于任何原因这样做而无法解决此行为、我将执行以下调试步骤。

    由于 PHY 设置为 RMII 主模式、因此我想再次检查可能导致此行为的某些因素。

    首先、我要验证输入时钟是否满足数据表中规定的以下要求。 由于无法在原理图中找到确切的晶体、因此请您确认是否满足这些要求。  

    其次、我想验证50MHz 输出时钟。 您能否在 MAC 接口输入端测量此时钟、并确保 ppm 低于 MAC 预期的限值? 解释 ppm 差异的常见问题解答可以解决此问题。 对于此应用、我认为 RMII 配置#1示例最能描述该情况。  

    此致!

    Vivaan

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

    您好、Vivaan

    感谢您的大力帮助。

    在检查环回测试重新后、问题来自 STM32 MCU 侧、并且在修改 STM32 MCU 的 MPU 设置之后。

    我们可以启动 DP83825。

    再次感谢。

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

    尊敬的 Vivaan:

    完成 IEEE 以太网合规性测试的寄存器设置是多少?

    谢谢!

    LEO

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

    尊敬的 Leo:  

    以下两个文档应具有完成 IEEE 合规性测试所需的所有信息

    https://www.ti.com/lit/an/snla385/snla385.pdf?ts = 1738870487769&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FDP83825I 

    本文档的第5节详细介绍了不同测试的寄存器设置

    https://www.ti.com/lit/an/snla266a/snla266a.pdf?ts = 1738870486977&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FDP83825I 

    如有任何问题、请告诉我。

    此致!

    Vivaan