stm32h7的RMII通讯时钟出错,求教!
最近在调stm32h743的网口。手上有一块原子的阿波罗开发板。在stm32cube上都调好了。ping通了。
把工程搞到自己的板子上。发现同样的配置,ping的时候大概率出错。
检查了半天。怀疑不一样的地方在于。自己的板子没有外置晶振。
我再原子的板子上试了一下。把晶振调成内部的。就也ping不通了。
这个是正常的现象吗,细节原因有没有懂的分析一下,有没有办法补救一下啊。 1. 先看看PHY时钟 , 不晓得你是主控提供的还是PHY提供的, 多看看手册中关于strap引脚的配置; 2. 看看到主控的MAC_REF_CLK正常不, 3. 看看MDIO配置接口和RMII其他数据线是否OK 本帖最后由 Himem 于 2022-3-22 06:21 编辑
网络时钟记得对频率稳定要求 ±50ppm,
协商速率改成10Mbps试试 angler12 发表于 2022-3-21 21:18
1. 先看看PHY时钟 , 不晓得你是主控提供的还是PHY提供的, 多看看手册中关于strap引脚的配置; 2. 看看到主控 ...
(引用自2楼)
phy的时钟是一个单独的25M晶振提供的。现在不太清楚为什么MCU的晶振选择会影响到RMII的通讯 用开发板调了一下分频系数。用内部时钟也可以通了。又试了一下自己的板子,一样的系数也不行。
发现一个奇怪的现象,自己的板子在debug的时候总是会在汇编指令bkpt停下。找了网上的说法,该配的都配了。头疼啊! achild 发表于 2022-3-22 10:04
phy的时钟是一个单独的25M晶振提供的。现在不太清楚为什么MCU的晶振选择会影响到RMII的通讯 ...
(引用自4楼)
那就看看PHY给主控的REF_CLK Himem 发表于 2022-3-22 06:16
网络时钟记得对频率稳定要求 ±50ppm,
协商速率改成10Mbps试试
(引用自3楼)
自动协商调成了10Mbps之后,暂时是通了
25MHz,PHY 芯片那里要倍频到 50MHz,这个 50MHz 还要提供给 MCU 时钟频率问题,内部晶振时钟频率应该是16M,RMII速度为10M/100M,对应时钟为5M和50M,内部时钟分频没法获得这个频率的时钟 jiulong855@.163 发表于 2022-3-22 16:53
时钟频率问题,内部晶振时钟频率应该是16M,RMII速度为10M/100M,对应时钟为5M和50M,内部时钟分频没法获得 ...
(引用自9楼)
现在总结下来,感觉还是phy的这个25M时钟差点意思,原子的开发板,一样的配置是可以通100M的。 好奇怪啊,网口热插拔,ping不通了,查了一圈,在ethernetif.c里面有个ethernet_link_thread任务专门检查网口状态的,检查了一下,确实也能检测出网口状态,但就是热插拔之后ping不同。看了一圈,突然发现这个任务发现link_down的时候,调用了HAL_ETH_Stop_IT。而link_up的时候没有看到开中断。试着加了一下,然后就热插拔了。这个是stm32cube的bug吗。
mark一下,stm32cube里面没有留网络状态设置接口。只能手动在初始化里面添加写网卡寄存器的指令。 这个问题我也踩了坑,发现MCU输出的晶振 容易丢包,最好老老实实用外部晶振,ping很正常
页:
[1]