GD32F307RCT6,以太网初始化时不能完成软复位(SWR位一直为1)

[复制链接]
5811|7
 楼主| 麻花油条 发表于 2021-9-2 16:16 | 显示全部楼层 |阅读模式

最近在调GD32F307RCT6单片机的以太网功能模块,遇到下列问题无法解决:

1. 如图1和图2所示,以太网初始化过程有一个步骤是要等到ENET_DMA_BCTL寄存器的SWR位由硬件自动清零。我使用的是:\GD32F30x_Demo_Suites_V2.1.0\GD32307C_EVAL_Demo_Suites\Projects\22_ENET\Projects\Raw_tcpudp这个SDK包里面的官方例程,但代码跑起来后SWR位一直不能清零(如下图3所示),然后超时返回之后就会卡死在一个while循环里无法往下执行了。

2.在图3处可以使用ENET_DMA_BCTL &= ~ENET_DMA_BCTL_SWR;进行手动清零,但这样虽然以太网初始化流程可以走完,但后续跟PHY模块通信时不能成功。


这个问题已经困扰我三天了,请问有没有哪位大神也遇到过同样的问题已经解决了的?


103743lfo1kpzwv20dysfr.png.thumb.jpg


图1

103410e2h4rbqu2d80jrjz.png.thumb.jpg


图2

103526mx25h7zk33b2w4ok.png.thumb.jpg


图3


七毛钱 发表于 2021-9-2 16:26 | 显示全部楼层

以太网外部时钟设置的是多少,与系统时钟的设置是否有关
海滨消消 发表于 2021-9-2 16:27 | 显示全部楼层
你写的这个型号是不是有问题:GD32F307CBT6
duo点 发表于 2021-9-2 16:28 | 显示全部楼层
没有你的板子,不能确定问题
ALMLX 发表于 2022-5-7 11:23 | 显示全部楼层
在F450上遇到了一样的问题,楼主最后怎么解决了吗?
wuhj126 发表于 2023-11-14 10:49 | 显示全部楼层
F427遇到同样问题,大佬说下最后咋调通PHY的,还有哪些坑呢?谢谢!
我把enet_deinit()中的rcu_periph_reset_disable(RCU_ENETRST)处理注释后,ENET_DMA_BCTL & ENET_DMA_BCTL_SWR成功清0,但继续初始化PHY,发现ENET_MAC_PHY_CTL又写不了值。
在enet_software_reset()重新调用rcu_periph_reset_disable(RCU_ENETRST),不管ENET_DMA_BCTL & ENET_DMA_BCTL_SWR为置位态,继续初始化PHY,ENET_MAC_PHY_CTL能写入值,但读写都没反应,PHY侧测不到MDC时钟。
zhldq 发表于 2023-12-1 16:27 | 显示全部楼层
wuhj126 发表于 2023-11-14 10:49
F427遇到同样问题,大佬说下最后咋调通PHY的,还有哪些坑呢?谢谢!
我把enet_deinit()中的rcu_periph_rese ...

我这边遇到的问题也是不复位,改了之后下面phy_config也是不通过。排查后发现是系统的RCU_SYSCFG时钟没开。
vitaminch 发表于 2024-6-14 15:54 | 显示全部楼层
遇到同样问题, 怎么解啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

312

主题

1809

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部