在U_boot下调试以太网的mdio总线
我这里调试的案例是通过的复旦微的FMQL45T900+88E1111来调试的,最开始我是直接参考复旦微的官方手册 (坑有点多,需要自己多做两次才能避开)直接使用FSBL+U_BOOT来测试 上板调试的时候发现网络不通。
pl工程采取的是vivado工程导入proces来开发的fsbl工程
U_boot工程是复旦微的原始psb工程移植的。
第一步:先验证环境
知识点1:在U_boot下的MDIO配置和解析命令
1、指令:mdio list 解析:列出当前所有的MDIO总线
并且显示当前设备挂载的驱动型号 设备号等详细
2、指令mdio read mdio总线 总线地址 寄存器地址
解析:列出当前mdio总线 下寄存器的值 ps:(多个寄存器:mdio read mdio总线 总线地址 开始寄存器地址 -结束寄存器地址。)
在这里的我phy地址为0x06
3、gmac
GMAC是为了满足千兆网传输而发展起来的,它是构成千兆网必备的条件之一。GMAC在七层ISO标准中属于数据链路层,它对逻辑链路和物理链路之间的通道进行控制和协调,可以连接各种不同物理媒介,不同物理媒介有不同的GMAC标准,GMAC的标准由IEEE802工作组制定。
4、设备树架构
在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。 引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,驱动开发者只需要修改设备树文件信息,不需要改写驱动代码。
所以在这里我们需要了解设备树的配置
下面是我在设备树下做的修改:
ps:在设备树下不能指定驱动
5、u_boot初始化PHY流程
下面是我手绘的一个u_boot相关结构图 经供参考:
6、mac->phy的传输方式
这里的设计采用是下面的架构
7、u_boot调试
到这里已经将整体的思路梳理清楚了然后读取相关寄存器来分析在什么环节出现了问题
我这里是参考IAR里面的裸机最后定位在了U_boot初始化88e1111的时候phy->rg45接口的时候配置问题。
在bsp工程的
u-boot-2018.07-fmsh\drivers\net\phy\marvell.c中的函数:static int m88e1111s_config(struct phy_device *phydev)
下加入下面代码:
reg=phy_read(phydev,MDIO_DEVAD_NONE,PHY_88E1111_ESST);
reg= 0x8484 ;
phy_write(phydev,MDIO_DEVAD_NONE,PHY_88E1111_ESST,reg);
reg=phy_read(phydev,MDIO_DEVAD_NONE,PHY_88E1111_ESST);
phy_reset(phydev);
phy_write(phydev, MDIO_DEVAD_NONE,
PHY_88E1111_ESCT_CFG, PHY_88E1111_ESCT_CFG_REG);
然后编译环境 ,上板调试。
调试完成。