欢迎点击蓝字关注我
扫二维码回复“加群”加入飞腾爱好者交流群
最近让新来小朋友做了一款E2000Q的板卡,使用了E2000Q上的两个RGMII资源,外接YT8521转出了电口。
但是他调试中遇到了一个比较奇怪的问题,两套YT8521的电路都一样,但是一路通一路不通。
也就是框图中MAC2(芯片RGMII0,系统对应eth1)那路网络不通,图中MAC3(芯片RGMII1,系统对应eth2)那路网络能测通。
〇、故障状态
把两路网线都插好。异常的情况下进入到系统,使用ethtools查看link状态。可以发现RGMII0那路是no link的状态,RGMII1那路是可以查到link状态的。
在系统下使用裕泰给的工具读取PHY的状态,需要读的地址为0xa001。
因为读写PHY数据需要先传入要读写的地址到PHY寄存器0x1E,再操作读写数据在PHY寄存器0x1F。所以我们要先给0x1E中配入地址0xa001,再去从0x1F里去取数据。
操作记录如下(工具我重命名为ioctl.dat了,裕泰给的叫ioctl):
可以看出来,正常的网口(上图右边eth2)bit[2:0]=000的工作模式为UTP TO RGMII,但是异常的网口(上图左边eth1)bit[2:0]=001工作模式为FIBER TO RGMII,说明PHY的工作模式就不对的。
那下面就开始进行排查。
一、原理检查
首先E2000芯片端接口,使用了MAC2、MAC3,引出了RGMII0和RGMII1信号,MDIO也没有接错。
RGMII0和RGMII1的两个PHY电路是一样的。YT8521端的配置电阻也没有问题,是配置的UTP<->RGMII。
电路这里没有啥问题。那上面读取PHY工作模式不知道为啥只有RGMII0是FIBER TO RGMII,和硬件配置的不一致。
二、layout走线检查
根据如下布线要求复查layout走线,也符合要求,没有发现有啥问题。
三、固件检查
E2000的固件中需要使用windows工具配置低速管脚配置,同时需要在linux下的打包工具配置芯片。
低速管脚配置,查看配置的是对的。
打包工具里查看rgmii配置,也是对的。
四、抛开系统排查
为了排除掉系统的影响,我们在uboot下进行了ping测试,这样对这个现象影响的就只有硬件和固件了。
但是发现也是RGMII0不通,RGMII1能ping通。
五、PHY工作模式配置排查
综合上面看,最终还是认为应该因为PHY的工作模式状态有异常导致的。
结合PHY的说明,PHY是在复位的时候去锁存配置,那复位拉起来的时候去生效了。
那怀疑,是不是这里复位有异常?因为这几个配置管脚是和E2000也连一起了的。是不是拉起的时候E2000的RGMII对PHY的这个配置有了一些影响呢。
随即展开对E2000的POR复位和PHY的RESET复位的排查。
板子上这两个复位是由FPGA控制的。现在他的处理方式是POR_N和RESET_N同时拉起,也就是E2000和YT8521同时解复位开始工作。这不是很合理。
因此修改FPGA,将PHY的复位RESET_N提前拉起来,提前拉起来100ms,之后再拉起来E2000的复位POR_N。
再进行测试,RGMII0也通了,问题解决了。
总结
原因是电源管理逻辑里,把E2000的复位POR_N和PHY的复位RESET_N,同时拉起来进行了解复位。导致E2000 RGMII0的IO引脚状态影响了PHY的工作模式配置,由设计的UTP TO RGMII变为了FIBER TO RGMII,导致PHY工作不符合设计需求,造成了E2000 RGMII0网络通信异常。
解决方案就是提前拉起PHY的复位RESET_N,100ms后再拉起E2000的复位POR_N。
这样也是符合逻辑的,就是外设应该先准备好工作状态,CPU再开始工作。希望通过这次问题,我们的小朋友再进行设计的时候能多加注意了。
欢迎点击“点赞、收藏、在看”,分享给更多人看到
扫二维码回复“加群”加入飞腾爱好者交流群
往期文章
欢迎飞腾爱好者加入微信交流群。 群内大家可以在群内交流遇到的问题,分享自己的调试心得。 希望大家共建飞腾友谊!