am335x,开发板上网口使用的是RGMII或MII接口,但是我们的PHY使用的是RMII接口。
我找到board_eth_init()函数中有
if (board_is_bone()) {
writel(MII_MODE_ENABLE, &cdev->miisel);
cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if =
PHY_INTERFACE_MODE_MII;
} else {
writel(RGMII_MODE_ENABLE, &cdev->miisel);
cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if =
PHY_INTERFACE_MODE_RGMII;
}
我已经改成了:
writel(RMII_MODE_ENABLE, &cdev->miisel);
cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if =
PHY_INTERFACE_MODE_RMII;
另外,根据所选用的PHY芯片,将am335x_evm.h中的 #define CONFIG_PHY_SMSC 改为 #define CONFIG_PHY_MICREL
现在网口还是不通的,没发出以太网报文。请问还有哪里需要修改呢?
Yaoming Qin:
请问您需要用网口做启动么?
Hui Yin:
回复 Yaoming Qin:
至少需要在u-boot里面能通过网口加载镜像文件。不然没法进一步调试,从串口加载个内核就得好几分钟,更不用说根文件系统了。
而且将来生产的时候,打算做成从串口加载一个SPL,然后其他加载和烧写FLASH都通过网口自动完成。
另外知道了u-boot里面怎么调通网口,待会儿调linux内核的时候也是个有价值的参考。
如果能从网口启动就更好了,生产时可以少连一个串口。
Yaoming Qin:
回复 Hui Yin:
uboot里面已经可以支持网口了,关于RMII的phy,你可能需要再调下phy的硬件设计等等
Hui Yin:
回复 Yaoming Qin:
说一下现在的进展,这个问题和RMII接口的时钟信号有关,以前是用AM335x提供50MHz时钟给PHY,网络不通。
后来试了用一个50M晶振单独给PHY提供时钟,网络就通了。看来是AM335x提供的50M时钟不好。
这个有什么办法改善吗?另外AM335x用的晶振是24M的,如果换成25M晶振会不会比较好?改动大不大?
Hui Yin:
回复 Hui Yin:
试了和很多设备对接,发现网络也不是完全不通,而是挑网口,和有的设备能连通,和有的设备连不通。
25M晶振也换上试了,问题没有改善。
如果用独立晶振给PHY提供时钟,就所有设备都能连通了。
Hui Yin:
回复 Gary Wu:
增加一个有源晶振又要增加好几块钱成本啊,不过也没别的办法了。