平台:hi3531
phy:rtl8211
現象:在uboot中執行ping命令的時候,總是超時。
過程:
使用uboot自帶的phy操作命令mii讀出的資料全是0xff。這裡要介紹一下uboot中的phy暫存器操作命令mii。
關於uboot中的mii命令可以參見common/cmd_mii.c。
注意:在使用mii命令之前應該執行一次ping或者其他的會發生聯網動作的命令(如tftp、dhcp)。
使用範例:
mii write 0 0 0x8000 向位址為0的phy晶元的0暫存器寫入0x8000
mii read 0 0 讀取位址為0的phy晶元的暫存器0的值
mii dump 0 0 讀取位址為0的phy晶元的暫存器0的值。結果更具可讀性:
mii dump 0 1 讀取位址為0的phy晶元的暫存器1的值。結果更具可讀性:
接著上面的內容:
由於對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介面。
uboot 網路不通問題解決一例1
平台 hi3531 phy rtl8211 現象 在uboot中執行ping命令的時候,總是超時。過程 使用uboot自帶的phy操作命令mii讀出的資料全是0xff。這裡要介紹一下uboot中的phy暫存器操作命令mii。關於uboot中的mii命令可以參見common cmd mii.c。注意 ...
uboot 網路不通問題解決一例1
平台 hi3531 phy rtl8211 現象 在uboot中執行ping命令的時候,總是超時。過程 使用uboot自帶的phy操作命令mii讀出的資料全是0xff。這裡要介紹一下uboot中的phy暫存器操作命令mii。關於uboot中的mii命令可以參見common cmd mii.c。注意 ...
巢狀Makefile問題解決一例
先看一下目錄結構 總控makefile如下 1 cflags wall2 cc gcc3 4 5 subdirs server client6 7 export cflags cc8 9 10 11 all subdirs 12 13 subdirs 14 make c 15 16 17 clean...