OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4908|回复: 1

stm32H723+freertos+lwip 网卡能识别但是无法通信?

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-5-17
在线时间
6 小时
发表于 2023-2-22 19:00:24 | 显示全部楼层 |阅读模式
20金钱
用的lan8720a的PHY芯片。原理图如下:

能识别到网卡:

但是ping不通,lan8720a初始化正常:
HAL_StatusTypeDef LAN8720_Init(ETH_HandleTypeDef *heth)
{
    uint32_t phyreg = 0;
    uint32_t TIME_Out = 0;

    HAL_GPIO_WritePin(ETH_RST_PORT, ETH_RST_PIN, GPIO_PIN_RESET);
    delay_ms(100);
    HAL_GPIO_WritePin(ETH_RST_PORT, ETH_RST_PIN, GPIO_PIN_SET);
    delay_ms(100);

    if(HAL_ETH_WritePHYRegister(heth, LAN8720A_PHY_ADDRESS, PHY_BCR, PHY_RESET) != HAL_OK)
    {
        return HAL_ERROR;
    }
    delay_ms(PHY_RESET_DELAY);
    if((HAL_ETH_WritePHYRegister(heth, LAN8720A_PHY_ADDRESS, PHY_BCR, PHY_AUTONEGOTIATION)) != HAL_OK)
    {
      return HAL_ERROR;   
    }     
    delay_ms(0xF);
    do
    {     
      if(HAL_ETH_ReadPHYRegister(heth, LAN8720A_PHY_ADDRESS, PHY_BSR, &phyreg) != HAL_OK)
      {
        return HAL_ERROR;
      }
      TIME_Out++;
      if(TIME_Out > LAN8720_TIMEOUT)
      {
        return HAL_TIMEOUT;
      }
    } while (((phyreg & PHY_AUTONEGO_COMPLETE) != PHY_AUTONEGO_COMPLETE));

    mprintf(DBG_L, "LAN8720A timeout = %d / 131071\r\n", TIME_Out);
    return HAL_OK;   
}

代码其余部分已验证,无误。
晶振正常起振;
R98已经取掉;

搞了三天了,头大。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-5-17
在线时间
6 小时
 楼主| 发表于 2023-2-23 16:25:50 | 显示全部楼层
结帖:
过程:由于PC端能识别到网卡,所以PHY芯片和PC通信正常,问题出在PHY芯片和MCU之间的通信,PHY能够正常读写寄存器代表SMI接口无误,示波器查看晶振正常起振25MHz,又有REFCLKO引脚正常输出50MHz,时序无误,示波器查看RMII接口的RXD0和RXD1有正常方波信号从PHY芯片发出,代码中断查看,底层未收到数据包,即数据未正常解析,查看原理图发现是RXD0和RXD1接反了。
原因:lan8742A更换为LAN8720A时,用的不同的封装图来画图,是硬件工程师疏忽导致。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 17:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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