硬汉嵌入式论坛

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

[以太网] 关于以太网软复位失败卡住的问题;

[复制链接]

3

主题

5

回帖

14

积分

新手上路

积分
14
发表于 2020-11-18 08:48:42 | 显示全部楼层 |阅读模式
如图所示,H743的以太网口每次都在ETH软复位的时候卡住,没有软复位成功。有人遇到过吗?求解;

  /* Ethernet Software reset */
  /* Set the SWR bit: resets all MAC subsystem internal registers and logic */
  /* After reset all the registers holds their respective reset values */
  SET_BIT(heth->Instance->DMAMR, ETH_DMAMR_SWR);

  /* Get tick */
  tickstart = HAL_GetTick();
  /* Wait for software reset */
  while (READ_BIT(heth->Instance->DMAMR, ETH_DMAMR_SWR) > 0U)
  {
    if(((HAL_GetTick() - tickstart ) > ETH_SWRESET_TIMEOUT))
    {
      /* Set Error Code */
      heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT;
      /* Set State as Error */
      heth->gState = HAL_ETH_STATE_ERROR;
      /* Return Error */
      return HAL_ERROR;
    }
  }
回复

使用道具 举报

3

主题

5

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2020-11-18 08:52:58 | 显示全部楼层
本帖最后由 漆黑 于 2020-11-18 08:54 编辑

一直是直接return error。以太网外部时钟是25Mhz,系统时钟是480M,只是修改了HSE和PLLCLK输入480M,别的CUBEMX默认的配置。百度了好久都没找到原因。

cube时钟配置

cube时钟配置
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107325
QQ
发表于 2020-11-18 11:45:39 | 显示全部楼层
复位前,先读ID正常吗
回复

使用道具 举报

3

主题

5

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2020-11-18 14:05:01 | 显示全部楼层
eric2013 发表于 2020-11-18 11:45
复位前,先读ID正常吗

ETH_PHY_IO_ReadReg(0x01, 0x03, &ustTmp[0]);

phy地址0x01,ID是寄存器3对吗?这个读不到值,全是00。是不是寄存器地址不对?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107325
QQ
发表于 2020-11-19 09:03:42 | 显示全部楼层
漆黑 发表于 2020-11-18 14:05
ETH_PHY_IO_ReadReg(0x01, 0x03, &ustTmp[0]);

phy地址0x01,ID是寄存器3对吗?这个读不到值,全是00 ...

通过iD寄存器读取

CMSIS-Driver驱动各种以太网PHY芯片,读取ID前建议加上软件复位
http://www.armbbs.cn/forum.php?m ... 5709&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

3

主题

5

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2020-11-19 10:03:00 | 显示全部楼层
eric2013 发表于 2020-11-19 09:03
通过iD寄存器读取

CMSIS-Driver驱动各种以太网PHY芯片,读取ID前建议加上软件复位

之前的官方工程模板估计有问题,现在换了您的V7的模板,ETH通信OK了。但有个问题,现在的板子是743XIH6+88E6071,直接用你的phy驱动没通,把MDC/MDIO引脚断掉了就通了,现在在定位这个的问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107325
QQ
发表于 2020-11-19 14:01:42 | 显示全部楼层
漆黑 发表于 2020-11-19 10:03
之前的官方工程模板估计有问题,现在换了您的V7的模板,ETH通信OK了。但有个问题,现在的板子是743XIH6+8 ...

好,有什么问题了再交流。
回复

使用道具 举报

3

主题

5

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2021-1-26 19:32:38 | 显示全部楼层
eric2013 发表于 2020-11-19 14:01
好,有什么问题了再交流。

现在又有个问题,我发送二层MAC包,源mac目的mac,协议号,然后跟个私有的数据包。协议号我用08 00 或者FF 08都行,但是协议号用00 00就收不到完整的包,显示收到的包是14个字节,只是src dst 00 00 ,后面的没了,是被lwip扔掉了吗?可以收协议号00 00的二层包吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107325
QQ
发表于 2021-1-27 08:23:23 | 显示全部楼层
漆黑 发表于 2021-1-26 19:32
现在又有个问题,我发送二层MAC包,源mac目的mac,协议号,然后跟个私有的数据包。协议号我用08 00 或者F ...

这种玩法,我测试过RL-TCPnet V7.X自带的原始数据收发API,就是下面这个,没问题

回复

使用道具 举报

3

主题

5

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2021-1-27 08:37:59 | 显示全部楼层
本帖最后由 漆黑 于 2021-1-27 16:33 编辑
eric2013 发表于 2021-1-27 08:23
这种玩法,我测试过RL-TCPnet V7.X自带的原始数据收发API,就是下面这个,没问题

现在问题是我任意的ETHTYPE都可以收发,就是ethtype是00 00 的时候low level input那一层收到的包长度是0x0E,现在不知道是哪一层把他后面的payload扔掉了。PS:单片机可以发ethtype是00 00的包给电脑,只是不能收。
已解决。数据包在mac层被丢掉了。
在mac初始化配置之前加一句即可:
MAC_Config.AutomaticPadCRCStrip = DISABLE;
HAL_ETH_SetMACConfig(Emac.h, &MAC_Config);

mac收包流程

mac收包流程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-26 12:07 , Processed in 0.240324 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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