RTL8211E网口芯片在Uboot下调试问题
RTL8211E的原理图
原理图参考firefly的开发板,特别注意的是39号引脚RESET
外接的2.49K的电阻,这个是用来进行外部的电阻参考的。这个很关键,开始时46号引脚CLK_125
输出的频率不是125MHZ
,而是62.5MHZ
,刚好减少一半,后续在对外围电路进行检查时,发现主要是这个39号引脚焊成4.7k
的电阻了,刚好是2.49k
的近一半,因此导致这个频率减半。这个问题困扰了两天,刚开始以为是程序问题,后来排查另外一块板子的频率是对的。两相对比后才发现这个地方存在问题。
uboot下的驱动调试
要改RTL8211e的驱动也不复杂,只要在ubootimx/include/configs/mx6sabre_common.h
的文件里设置如下:
主要是开放REALTEK的驱动注释,并设置好PHY芯片的地址,此处参考原理图,设置为0
- 然后在板级文件的目录下对网口的相关引脚进行定义,并进行初始化的设置。文件目录为
board/freescale/mx6sabresd/mx6sabresd.c
,首先是定义引脚
- 其次是进行PHY芯片的复位,让主控能够识别到PHY芯片。
- 再者就是进行芯片的初始化的配置,可以利用mdio的协议进行PHY的寄存器的配置。
最后网络的驱动会通过boot.c一步步引导,最终调用以下函数进行网口的初始化。
问题排查
在完成上述设置,通电后,uboot能顺利读到PHY芯片,并能够通过mii dump 0 1
进行寄存器的状态读取。但是在进行ping
命令的测试时,则会出现error frame: 0x4ef44e80 0x00000884
的问题。
- 通过查阅代码看到,应该是进行通信时,读不到数据,那本能的想到时序异常的问题,进一步推测应该是
RX_delay
和Tx_delay
的问题,因此通过修改原理图中失能RX DELAY
和TX DELAY
。并改变对应的电阻,然后进行测试,变能进行ping通,并且通过DHCP指令获取ip。