[hi3516] EPHY_CLK输出作为PHY时钟

如题:做了两块板子,一块DEMO板,千兆PHY;一块百兆PHY,PHY是KSZ8081RNACA。

第一种情况:DEMO板,千兆PHY


DEMO板的EPHY_CLK接PHY的时钟输入,
1)在SecureCRT中,启动Uboot,不启动应用程序的情况下

用示波器量EPHY_CLK时钟为50MHz;
2)ping下网关192.168.1.1,可以ping通,在量EPHY_CLK时钟变为25MHz了,程序启动后可以正常获取IP地址。




第二种情况:单内存,百兆PHY


这样接的话,软件上改下PHY地址和RMII模式,默认也是100M,
1)和第一种情况下描述的1)、2)情况一样,不同的是ping网关192.168.1.1是ping不通的。

2)在Uboot中把EPHY_CLK时钟输出改为50M后,重新烧录Uboot,启动Uboot后,不管ping不ping网关,都是50M,而且网关是可以ping通的,但是启动Kernel和filesys后,是获取不到IP的。

内核可能要改下,等软件改完在试下。。

换种接法,把CPU的RMII_CLK接到PHY的时钟输入管脚就可以了。
另外EPHY_CLK和RMII_CLK管脚都是复用的。


请问这是怎么回事呢?
有没有能解释的大神啊?

作为一个不搞软件的来说,有些启动过程不是很了解,跟软件工程师研究了一下,搞清楚一些,我自己解释下好了!

1、只启动Uboot时,不ping网关的话,网口是没有初始化的。
所以3516内部关于网卡的寄存器都有默认的初始值,查手册P387的PERI_CRG51寄存器,可以看出,初始值是0x0A,那么EPHY_CLK的上电输出时钟的就是50M的。
在ping网关后,网卡初始化,会把EPHY_CLK设置成25M,所以时钟就从50M变成25M了。
至于在启动过程中对EPHY_CLK又做了哪些操作,就先不管了,都是软件设置的了。

2、RMII跑50M的,PHY是KSZ8081RNACA的话,那么PHY的时钟输入也是50M的。
如果用EPHY_CLK的话,ping网关后,被设置成25M了,所以是ping不通的;如果把EPHY_CLK输出改成50M的,就可以ping的通。

3、接2,把EPHY_CLK设置,50M,启动内核和应用程序之后,获取不到IP是因为启动过程中该EPHY_CLK又被设置成25M了,但是用的RMII是50M的,所以是获取不到IP的。
如果在把EPHY_CLK启动过程中被改成25M的语句注释掉,就可以获取到IP了。

以上就是总结,希望对大家有所帮助!

猜你喜欢

转载自blog.csdn.net/qingzhuyuxian/article/details/84959577