硬汉嵌入式论坛

 找回密码
 立即注册
查看: 657|回复: 4
收起左侧

[以太网] 使用CUBEMX 6.6.1 生成LWIP软件无法ping成功

[复制链接]

9

主题

39

回帖

66

积分

初级会员

积分
66
发表于 2023-9-30 14:59:56 | 显示全部楼层 |阅读模式
各路大神,小弟最近在使用SMT32H730进行实现以太网功能,无法ping通。PHY芯片采样LAN8720A,尝试了各种办法均以失败告终,各位帮我看下
CUBEMX 6.6.1版本,LWIP用的是V2.1.2

MPU配置如下
下载 (1).png
下载 (2).png
下载 (3).png
下载 (4).png

ETH配置
下载 (5).png
下载 (6).png

LWIP配置如下
下载 (7).png

下载 (8).png

下载 (9).png

下载 (10).png

下载 (11).png

下载 (12).png

KEIL工程配置

下载 (13).png


附件MDK工程与CUBE工程如下

链接:https://pan.baidu.com/s/1LWTYSi52Q5y6xbfzYXsXbw
提取码:ab12




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106831
QQ
发表于 2023-9-30 15:22:16 | 显示全部楼层
8720的ID正常读取没,先保证可以正常读取。
回复

使用道具 举报

9

主题

39

回帖

66

积分

初级会员

积分
66
 楼主| 发表于 2023-10-1 00:21:24 | 显示全部楼层
eric2013 发表于 2023-9-30 15:22
8720的ID正常读取没,先保证可以正常读取。

硬汉哥好,您的意思是LAN8742_Init这个函数初始化返回的状态吗?我单步调试发现
int32_t LAN8742_Init(lan8742_Object_t *pObj)
{
   uint32_t tickstart = 0, regvalue = 0, addr = 0;
   int32_t status = LAN8742_STATUS_OK;
   
   if(pObj->Is_Initialized == 0)
   {
     if(pObj->IO.Init != 0)
     {
       /* GPIO and Clocks initialization */
       pObj->IO.Init();
     }
   
     /* for later check */
     pObj->DevAddr = LAN8742_MAX_DEV_ADDR + 1;
   
     /* Get the device address from special mode register */  
     for(addr = 0; addr <= LAN8742_MAX_DEV_ADDR; addr ++)
     {
       if(pObj->IO.ReadReg(addr, LAN8742_SMR, &regvalue) < 0)
       {
         status = LAN8742_STATUS_READ_ERROR;
         /* Can't read from this device address
            continue with next address */
         continue;
       }
     
       if((regvalue & LAN8742_SMR_PHY_ADDR) == addr)
       {
         pObj->DevAddr = addr;
         status = LAN8742_STATUS_OK;
         break;
       }
     }
   
                 pObj->DevAddr = 0;
     if(pObj->DevAddr > LAN8742_MAX_DEV_ADDR)
     {
       status = LAN8742_STATUS_ADDRESS_ERROR;
     }
     
     /* if device address is matched */
     if(status == LAN8742_STATUS_OK)
     {
       /* set a software reset  */
       if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, LAN8742_BCR_SOFT_RESET) >= 0)
       {
         /* get software reset status */
         if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &regvalue) >= 0)
         {
           tickstart = pObj->IO.GetTick();
           
           /* wait until software reset is done or timeout occured  */
           while(regvalue & LAN8742_BCR_SOFT_RESET)
           {
             if((pObj->IO.GetTick() - tickstart) <= LAN8742_SW_RESET_TO)
             {
               if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &regvalue) < 0)
               {
                 status = LAN8742_STATUS_READ_ERROR;
                 break;
               }
             }
             else
             {
               status = LAN8742_STATUS_RESET_TIMEOUT;
               break;
             }
           }
         }
         else
         {
           status = LAN8742_STATUS_READ_ERROR;
         }
       }
       else
       {
         status = LAN8742_STATUS_WRITE_ERROR;
       }
     }
   }
      
   if(status == LAN8742_STATUS_OK)
   {
     tickstart =  pObj->IO.GetTick();
     
     /* Wait for 2s to perform initialization */
     while((pObj->IO.GetTick() - tickstart) <= LAN8742_INIT_TO)
     {
     }
     pObj->Is_Initialized = 1;
   }
   
   return status;
}

返回的Status = LAN8742_STATUS_RESET_TIMEOUT,应该是初始化失败了。另外网线的灯没亮,初始化成功的话是不是网线的灯会闪烁起来。感谢您的回复
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106831
QQ
发表于 2023-10-2 07:09:26 | 显示全部楼层
ajianyes 发表于 2023-10-1 00:21
硬汉哥好,您的意思是LAN8742_Init这个函数初始化返回的状态吗?我单步调试发现
int32_t LAN8742_Init(l ...

这个是PHY芯片还没有正常运行,你的8720有硬件复位GPIO控制没,有的话,先硬件复位,然后等待1秒后再初始化网络试试
回复

使用道具 举报

9

主题

39

回帖

66

积分

初级会员

积分
66
 楼主| 发表于 2023-10-2 21:03:31 | 显示全部楼层
eric2013 发表于 2023-10-2 07:09
这个是PHY芯片还没有正常运行,你的8720有硬件复位GPIO控制没,有的话,先硬件复位,然后等待1秒后再初始 ...

有硬件复位的GPIO,非常感谢硬汉哥的回复。我试试看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 15:37 , Processed in 0.201264 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表