RTL8211 uboot 模式下4芯网线对接千兆如何协商成百兆

问题:RTL8211通过4芯网线对接千兆,UBOOT下ping不通,无法通过网络烧写,但内核起来时可以正常通信。

分析后发现,在UBOOT下,通过4芯网线对接百兆可以通信,但是对接千兆却不行,通过打印发现,4芯对接千兆时自协商结果居然是千兆,自然无法正常通信。那如何才能协商成百兆呢?

通过代码分析,发现uboot 代码是通过寄存器0A来判断speed是否为千兆

后来经过一些牛人的指导,才发现原来除了对方的协商能力,RTL8211本身协商能力寄存器09有一个bit9,是否建议千兆。

 

通过打印发现,REG09.BIT9这一位,通过8芯网线对接千兆时为1,4芯网线对接千兆时为0。如果不判断该位,只判断0A寄存器,4芯网线就会协商成千兆全双工,但因为只有4芯,所以通信不成功。加上该位判断后,自动协商成百兆,即可正常通信。

通过打印,在协商不成功时09和0A寄存器的值会变化,个人猜测,8211应该是在8对网线中的2组MDI都会去协商,如果2组都协商成功,BIT9才会置高。

另外,UBOOT下第一次ping不成功,第二次ping即可成功,通过分析发现第一次不成功时协商了多次没有协商成功,NOT LINK,因为这是8211芯片机制。个人解决办法是把协商此时的上限提高了,第一次ping就可以通了。

参考源码:(18条消息) miiphyutil.c-Linux文档类资源-CSDN文库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值