uboot 網絡不通問題解決一例1


平台:Hi3531

PHY:RTL8211

 

現象:在uboot中執行ping命令的時候,總是超時。

 

過程:

使用uboot自帶的phy操作命令mii讀出的數據全是0xff。這里要介紹一下uboot中的phy寄存器操作命令mii。

關於uboot中的mii命令可以參見common/cmd_mii.c。

注意:在使用mii命令之前應該執行一次ping或者其他的會發生聯網動作的命令(如tftp、dhcp)。

 

 

image

使用范例:

mii write 0 0 0x8000    向地址為0的phy芯片的0寄存器寫入0x8000

mii  read 0 0     讀取地址為0的phy芯片的寄存器0的值

mii dump  0 0     讀取地址為0的phy芯片的寄存器0的值。結果更具可讀性:

image

mii dump 0 1   讀取地址為0的phy芯片的寄存器1的值。結果更具可讀性:

image

 

 

接着上面的內容:

由於對uboot代碼不是很熟,剛開始走了些彎路,直接去分析uboot代碼了,因為這個版本的硬件跟上一個沒什么區別,使用的也是同一款phy芯片。然后有分析了是不是3531與rtl8211的接口工作模式不對(支持RGMII和MII,實際使用的是RGMII),是不是與RGMII接口相關的管腳復用功能出錯,是不是phy芯片的地址有問題(phy的地址是設計PCB板子的時候定死的),是不是RGMII的接口錯了(我的意思是:因為3531支持兩個GMAC,所以有RGMII0和RGMII1,實際使用的是RGMII0),是不是沒有有效的芯片復位

經過一番折騰,最后發現時3531配置rtl8211是使用的MDIO的管腳在修改硬件時忘記去掉了下拉電阻。具體情況是這個樣子:

3531的BOOTROMSEL和MDCK是復用的,剛開始BOOTROM_SEL是接了一個4.7k的電阻接地的,這種情況下不支持從fastboot啟動,為了調試方便,需要從fastbot啟動,需要將BOOTROM_SEL拉高,所以又在BOOTROM_SEL引腳上焊了一個0歐姆的電阻接到VCC3.3上,而沒有去掉那個4.7K的下拉電阻。這種情況他下可能導致MDCK的時鍾信號不正常。

解決辦法: 將那個4.7k的下拉電阻去掉,焊到剛才那個0歐姆電阻的位置上。

所以以后如果遇到在芯片基本沒動的情況下遇到的問題,最好先確認一下是不是硬件的問題(如地址、接口),如果剛開始就用示波器量一下MDCK的波形是不是正常就不是走彎路了。

在用mii命令讀phy寄存器時,如果讀到的全是ff,可能的問題:phy的地址、mdio接口。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM