首先調試檢查硬件,再調試軟件
首先仔細閱讀phy和主芯片datesheet ,尤其着重閱讀mii寄存器,它是mac和phy交換信息的媒介。
硬件注意:關於phy的芯片需要注意的有幾點:1、mdio接口和rgmii或者mii接口是否正確。2、電源是否穩定,晶振是否起振並且頻率匹配。3、phy地址的配置是否正確,不能是0地址,因為0地址默認是所以芯片的地址。4、phy芯片輸出時鍾是否正確。4、phy和主芯片rgmii接口電平是否匹配。5、phy間的線序是否正確以及線路是否完好。6、mac和phy間的數據速率是否匹配即都是千兆百兆或10兆。
關於主芯片mac部分接口注意:1、rgmii或者mii以及mdio接口是否正確。2、mdio時序是否正確。3、rgmii時鍾是否正確。
需要了解自協商過程以及mac->phy->phy->mac中間的連接,如果有一個斷了就不能正確通信,因此首先得確保每段連接的接口物理和時序是正確的:對於phy間就是自協商成功,對於mac和phy間就是rgmii的時序正確即確保都是相同的數據速率(千兆百兆或10兆)。
mii寄存器解讀:Status Register 0x01以及Extended Status Register 0x0F是用來顯示phy自身能力以及當前狀態的寄存器,因此有些值是默認的不能修改的,Link Partner Ability Register 0x05是用來顯示連接伙伴能力的寄存器,而最終的協商結果是在Control Register 0x00的6、13 SPEED SELECTION和8 DUPLEX MODE位中的,因此程序中讀取phy連接速度時應該讀取該寄存器的值,而不是自身能力寄存器的值。海思的uboot中就出現了該錯誤。
注意mdio接口是主從接口可以一拖多,所以地址尤為重要,00地址是廣播地址,不能使用該地址,uboot mii命令的使用,其可以驅動mdio接口,可以用此來調試phy芯片寄存器!!關於其應用可以在common/cmd_mii.c 文件結尾出看到,或者此博文中http://www.cnblogs.com/pengdonglin137/p/3682637.html
關於RGMII時序問題,rgmii的發送和接收時鍾一直是125Mhz,不過在100M和10M模式時,數據的采樣頻率會延遲一些時鍾,因此在mac端的數據要保持一些時鍾,否則時序會出錯!!
關於phy芯片的配置,正常情況下phy寄存器因為是mii標准寄存器,所以用原廠自帶uboot配置就可以,除非自己調試phy芯片自帶的功能,才配置其特殊功能寄存器,比如回環測試等。
在調試ar8031時可以通過loopback來測試環路是否通,有本地回環測試和遠端回環測試,這樣分別檢查本地和遠端回路是否聯通,這樣很容易發現哪邊不通,具體看ar8031手冊2.5.2,來通過mii配置寄存器。100M loopback: register 0x0 = 0xA100是錯誤的應該是6100。
本地回環測試就是ping自己的ip地址,這樣數據就會接收回來。
遠端回環測試
軟件方面注意:需要分兩部分來調試:1、phy芯片mii標准寄存器的配置以及phy工作原理,以及主芯片mac部分的寄存器配置和時鍾配置是否正確,phy接口配置正確,mdio部分配置是否正確。
2、詳細了解uboot下mac和phy驅動架構。3、在uboot代碼中跟蹤調試。
下面介紹uboot-2010.06中hi3531的mac phy驅動架構以及工作流程。
未完待續。。。。
http://blog.csdn.net/xiaoaid01/article/details/51104837