找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

M487 网口 DHCP 获取IP地址失败的问题

[复制链接]
本帖最后由 578886174@qq.co 于 2025-12-22 09:50 编辑



使用EMAC_TxRx例程


地址修改为0
#define EMAC_PHY_ADDR      0UL    /*!<  PHY address, this address is board dependent \hideinitializer */


没有成功获取到IP地址

[2025-12-22 09:45:52.048]# RECV ASCII>
EMAC sample code start


[2025-12-22 09:45:55.208]# RECV ASCII>
DHCP DISCOVER...


[2025-12-22 09:45:55.473]# RECV ASCII>
DHCP DISCOVER retry: 1


[2025-12-22 09:45:55.741]# RECV ASCII>
DHCP DISCOVER retry: 2


[2025-12-22 09:45:55.990]# RECV ASCII>
DHCP DISCOVER retry: 3


[2025-12-22 09:45:56.271]# RECV ASCII>
DHCP DISCOVER retry: 4


[2025-12-22 09:45:56.520]# RECV ASCII>
DHCP DISCOVER retry: 5


[2025-12-22 09:45:56.801]# RECV ASCII>
DHCP DISCOVER retry: 6


[2025-12-22 09:45:57.049]# RECV ASCII>
DHCP DISCOVER retry: 7


[2025-12-22 09:45:57.314]# RECV ASCII>
DHCP DISCOVER retry: 8


[2025-12-22 09:45:57.581]# RECV ASCII>
DHCP DISCOVER retry: 9


[2025-12-22 09:45:57.833]# RECV ASCII>
DHCP DISCOVER retry: 10


[2025-12-22 09:45:58.112]# RECV ASCII>
DHCP DISCOVER retry: 11


[2025-12-22 09:45:58.365]# RECV ASCII>
DHCP DISCOVER retry: 12


[2025-12-22 09:45:58.627]# RECV ASCII>
DHCP DISCOVER retry: 13


[2025-12-22 09:45:58.892]# RECV ASCII>
DHCP DISCOVER retry: 14


[2025-12-22 09:45:59.156]# RECV ASCII>
DHCP DISCOVER retry: 15


[2025-12-22 09:45:59.424]# RECV ASCII>
DHCP failed, use static IP 192.168.10.10


企业微信截图_20251222095020_8720.png (121.8 KB, 下载次数: 6)

企业微信截图_20251222095020_8720.png

企业微信截图_20251222094842_mcu.png (159.28 KB, 下载次数: 6)

企业微信截图_20251222094842_mcu.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
chrishu 发表于 3 天前 | 只看该作者
你重新插拔一下网线之类的看看。都不行的话,将程序里的固定IP改成和电脑统一网段,连接在同一个路由器上,再用电脑去ping一下。
还是不行,得看一PHY初始化是否正确EMAC_PhyInit。
然后检查PHY的连接
回复 支持 反对

使用道具 举报

板凳
匿名  发表于 昨天 10:36
int32_t EMAC_PhyInit(void)
{
    uint32_t u32Reg;
    uint32_t u32Delay;

    g_EMAC_i32ErrCode = 0;

    /* Reset Phy Chip */
    EMAC_MdioWrite(PHY_CNTL_REG, EMAC_PHY_ADDR, PHY_CNTL_RESET_PHY);
       
    /* Wait until PHY reset complete.
       Report error if the reset status is not cleared for more than 0.1 second */
    u32Delay = SystemCoreClock / 10;
    while (--u32Delay)
    {
        u32Reg = EMAC_MdioRead(PHY_CNTL_REG, EMAC_PHY_ADDR) ;

        if ((u32Reg & PHY_CNTL_RESET_PHY) == 0UL)
        {
            break;
        }
    }
    if(u32Delay == 0)
    {
        goto error;
    }

    u32Delay = SystemCoreClock;  // Wait 1 second. Report error if link valid is not set
    while (!(EMAC_MdioRead(PHY_STATUS_REG, EMAC_PHY_ADDR) & PHY_STATUS_LINK_VALID))
    {
        if (--u32Delay == 0)      /* Cable not connected */
        {
            goto error;
        }
    }

    /* Configure auto negotiation capability */
    EMAC_MdioWrite(PHY_ANA_REG, EMAC_PHY_ADDR, PHY_ANA_DR100_TX_FULL |
                   PHY_ANA_DR100_TX_HALF |
                   PHY_ANA_DR10_TX_FULL |
                   PHY_ANA_DR10_TX_HALF |
                   PHY_ANA_IEEE_802_3_CSMA_CD);
    /* Restart auto negotiation */
    EMAC_MdioWrite(PHY_CNTL_REG, EMAC_PHY_ADDR, EMAC_MdioRead(PHY_CNTL_REG, EMAC_PHY_ADDR) | PHY_CNTL_RESTART_AN);

    /* Wait for auto-negotiation complete
       Report error if auto-negotiation is not complete in 2 seconds */
    u32Delay = SystemCoreClock * 2;
    while (!(EMAC_MdioRead(PHY_STATUS_REG, EMAC_PHY_ADDR) & PHY_STATUS_AN_COMPLETE))
    {
        if (--u32Delay == 0)
        {
            goto error;
        }
    }

    /* Check link valid again. There're some PHY chips need to re-check link valid
       bit set after auto-t-negotiation complete before check partner capability.
       Report error if link valid is not set after 1 second */
    u32Delay = SystemCoreClock;
    while (!(EMAC_MdioRead(PHY_STATUS_REG, EMAC_PHY_ADDR) & PHY_STATUS_LINK_VALID))
    {
        if (--u32Delay == 0)
        {
            goto error;
        }
    }

    /* Check link partner capability */
    u32Reg = EMAC_MdioRead(PHY_ANLPA_REG, EMAC_PHY_ADDR) ;

    if (u32Reg & PHY_ANLPA_DR100_TX_FULL)
    {
        EMAC->CTL |= EMAC_CTL_OPMODE_Msk;
        EMAC->CTL |= EMAC_CTL_FUDUP_Msk;
    }
    else if (u32Reg & PHY_ANLPA_DR100_TX_HALF)
    {
        EMAC->CTL |= EMAC_CTL_OPMODE_Msk;
        EMAC->CTL &= ~EMAC_CTL_FUDUP_Msk;
    }
    else if (u32Reg & PHY_ANLPA_DR10_TX_FULL)
    {
        EMAC->CTL &= ~EMAC_CTL_OPMODE_Msk;
        EMAC->CTL |= EMAC_CTL_FUDUP_Msk;
    }
    else
    {
        EMAC->CTL &= ~EMAC_CTL_OPMODE_Msk;
        EMAC->CTL &= ~EMAC_CTL_FUDUP_Msk;
    }
    return 0;

error:
    EMAC->CTL &= ~EMAC_CTL_OPMODE_Msk;
    EMAC->CTL &= ~EMAC_CTL_FUDUP_Msk;
    return EMAC_TIMEOUT_ERR;
}
EMAC_PhyInit用的是官方例程的EMAC_TxRx
程序是由官方例程修改的,只改了地址EMAC_PHY_ADDR修改为0
还有哪些需要修改的呢?
我试了一下DHCP不行,但是能接收到UDP广播的数据,硬件应该配置成功了吧
回复 支持 反对

使用道具

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU