飛騰愛好者技術交流群碼公眾號「烏拉大喵喵」
一、環境說明
板子是FT-2000/4的開發板:
韌體版本:
ft-2004c_u-boot-v2-Ver0.3_202112231001.tar.gz
ft2004c_v2.06_image_fix.rar
二、偵錯命令說明
偵錯PHY主要用到的命令是mii,先檢視下可用的命令:
mii device,縮寫mii dev,檢視網路控制器mac。
mii device,縮寫mii dev,用來切換mac控制器。
mii info,用來掃描當前網路控制器mac下的phy有哪些。
mii read/write是用來讀寫暫存器的。
mii dump,用來顯示暫存器狀態值,其中addr是通過mii info掃描,確定其PHY地址後,填入的。
三、MII命令使用
3.1 mii dev檢視網路控制器
首先通過命令看看設定了幾個網路控制器mac。因為FT-2000/4內有兩個網路控制器,理論上應該能看到2個mac。
FT2004C#mii dev
MII devices: 'ethernet0@2820c000' 'ethernet1@28210000'
Current device: 'ethernet0@2820c000'
能看出來是兩個mac控制器都在(ethernet0@2820c000、ethernet1@28210000),這個東西是哪裡設定的呢?是uboot的裝置樹裡設定的,如果改過裝置樹,比如註釋了ethernet1,那這裡就只能看到一個ethernet0了。
裝置樹位置:
3.2 mii info掃描PHY
飛騰板子上用了兩個AR8035的PHY晶片。
檢視當前mac下的phy有沒有:
FT2004C#mii dev
MII devices: 'ethernet0@2820c000' 'ethernet1@28210000'
Current device: 'ethernet0@2820c000'
可以看到當前使用的是第1個mac控制器。
Mii info掃描:
FT2004C#mii info
PHY 0x04: OUI = 0x1374, Model = 0x07, Rev = 0x02, 10baseT, HDX
能夠在這個mac下掃到一個地址為0x04的PHY,這個地址是通過PHY的管腳來配出來的。在mii info下能掃到這麼一個PHY,說明mac的MDIO是通的。要是這裡硬體上設計了一個PHY,但是這裡沒有掃到,那麼就要去查硬體了,要是PHY都沒掃到,後面測網路也白測。
切換mac後再看看其下面有沒有phy。
FT2004C#mii dev 'ethernet1@28210000'
上面命令是切換到第2個網路控制器。
FT2004C#mii dev
MII devices: 'ethernet0@2820c000' 'ethernet1@28210000'
Current device: 'ethernet1@28210000'
可以看到,已經切換到了第2個mac控制器。
FT2004C#mii info
PHY 0x04: OUI = 0x1374, Model = 0x07, Rev = 0x02, 10baseT, HDX
同樣,在這個mac下也看到了一個地址為0x04的PHY。
因為飛騰的RGMII控制器是每個單獨的MDIO介面,所以可以將板上的兩個PHY地址設成一樣的。
有些晶片是多個MAC共用一個mdio,這種情況的話就需要將PHY的地址設成不同的了,可以簡單的把MDIO介面理解為IIC。
3.3 mii dump轉儲暫存器資訊
現在把網線插到板子雙網路的上面的網口,從電路上是對應第一個mac下的phy網口。
檢視'ethernet0@2820c000'下PHY的link狀態。
使用mii dump命令可以檢視phy的0~5的6個暫存器(使用mii read命令不存在這個說法,所有暫存器都能看 )。因為我們的PHY地址是0x04,所以mii dump裡的addr我們填0x04,reg部分我們從0填到5就能看全所有的暫存器了。現在是插著網線的,所以可以看到「(0004:0004) 1. 2 = 1 link status」表示link成功了,拔掉網線這裡就=0了((0004:0000) 1. 2 = 0 link status)。這也同時印證了PHY的MDIO是通的。還是那句話,這裡的PHY link狀態都讀不到,那就去查硬體看看吧。MDIO都沒通,不用著急去ping包。
FT2004C#mii dev 'ethernet0@2820c000' FT2004C#mii dump 0x04 0 0. (1000) -- PHY control register -- (8000:0000) 0.15 = 0 reset (4000:0000) 0.14 = 0 loopback (2040:0000) 0. 6,13 = b00 speed selection = 10 Mbps (1000:1000) 0.12 = 1 A/N enable (0800:0000) 0.11 = 0 power-down (0400:0000) 0.10 = 0 isolate (0200:0000) 0. 9 = 0 restart A/N (0100:0000) 0. 8 = 0 duplex = half (0080:0000) 0. 7 = 0 collision test enable (003f:0000) 0. 5- 0 = 0 (reserved) FT2004C#mii dump 0x04 1 1. (796d) -- PHY status register -- (8000:0000) 1.15 = 0 100BASE-T4 able (4000:4000) 1.14 = 1 100BASE-X full duplex able (2000:2000) 1.13 = 1 100BASE-X half duplex able (1000:1000) 1.12 = 1 10 Mbps full duplex able (0800:0800) 1.11 = 1 10 Mbps half duplex able (0400:0000) 1.10 = 0 100BASE-T2 full duplex able (0200:0000) 1. 9 = 0 100BASE-T2 half duplex able (0100:0100) 1. 8 = 1 extended status (0080:0000) 1. 7 = 0 (reserved) (0040:0040) 1. 6 = 1 MF preamble suppression (0020:0020) 1. 5 = 1 A/N complete (0010:0000) 1. 4 = 0 remote fault (0008:0008) 1. 3 = 1 A/N able (0004:0004) 1. 2 = 1 link status (0002:0000) 1. 1 = 0 jabber detect (0001:0001) 1. 0 = 1 extended capabilities FT2004C#mii dump 0x04 2 2. (004d) -- PHY ID 1 register -- (ffff:004d) 2.15- 0 = 77 OUI portion FT2004C#mii dump 0x04 3 3. (d072) -- PHY ID 2 register -- (fc00:d000) 3.15-10 = 52 OUI portion (03f0:0070) 3. 9- 4 = 7 manufacturer part number (000f:0002) 3. 3- 0 = 2 manufacturer rev. number FT2004C#mii dump 0x04 4 4. (11e1) -- Autonegotiation advertisement register -- (8000:0000) 4.15 = 0 next page able (4000:0000) 4.14 = 0 (reserved) (2000:0000) 4.13 = 0 remote fault (1000:1000) 4.12 = 1 (reserved) (0800:0000) 4.11 = 0 asymmetric pause (0400:0000) 4.10 = 0 pause enable (0200:0000) 4. 9 = 0 100BASE-T4 able (0100:0100) 4. 8 = 1 100BASE-TX full duplex able (0080:0080) 4. 7 = 1 100BASE-TX able (0040:0040) 4. 6 = 1 10BASE-T full duplex able (0020:0020) 4. 5 = 1 10BASE-T able (001f:0001) 4. 4- 0 = 1 selector = IEEE 802.3 FT2004C#mii dump 0x04 5 5. (cde1) -- Autonegotiation partner abilities register -- (8000:8000) 5.15 = 1 next page able (4000:4000) 5.14 = 1 acknowledge (2000:0000) 5.13 = 0 remote fault (1000:0000) 5.12 = 0 (reserved) (0800:0800) 5.11 = 1 asymmetric pause able (0400:0400) 5.10 = 1 pause able (0200:0000) 5. 9 = 0 100BASE-T4 able (0100:0100) 5. 8 = 1 100BASE-X full duplex able (0080:0080) 5. 7 = 1 100BASE-TX able (0040:0040) 5. 6 = 1 10BASE-T full duplex able (0020:0020) 5. 5 = 1 10BASE-T able (001f:0001) 5. 4- 0 = 1 selector = IEEE 802.3
要是想看詳細的暫存器位描述,就查手冊就好了。
3.4 mii read write讀寫暫存器
我們來嘗試read、write一下。
mii read
mii write
這裡的可以填手冊裡有的地址,AR8035有0x00~0x1F這麼些暫存器。我們先使用read,看看讀上來的是啥。
FT2004C#mii read 0x04 0
1000
這裡是把整個暫存器的16位元都讀上來了,也就說我們要控制暫存器的某一位,需要自己在二進位制裡設定好,轉換完再配進去。
我們先看,這裡讀上來的0x1000。這裡需要注意的是,uboot顯示speed selection是bit6+bit13。所以要是看dump顯示和read的對應關係,這裡要注意一下。要是你直接從手冊暫存器表裡去查,那就沒這個注意事項了。
當然你也可以去讀其他的暫存器值,讀到後對應手冊去查暫存器含義就好了。
我們write下試試,就操作speed selection暫存器吧,這個代表速度選擇用控制暫存器。修改speed為2'b10 = 1000Mbps。即暫存器0的值為0x1040。設定完再讀一下看,是設定進去了。
MDIO這邊就這樣了。MDIO能操作是調網路的基礎。
3.5 網路測試ping
剩下就是ping測試了。
print一下環境變數,簡單的話就是預設環境變數不動,改PC機那邊的,改成和環境變數中serverip一樣的。
改完後從uboot這邊去ping PC機就好了。
或者改uboot那邊的ipaddr、gatewayip、serverip,改成你想要的。之後通過PC去ping板子。
歡迎飛騰愛好者加入微信交流群。
群內大家可以暢所欲言。
在群內不需要表露自己的公司和身份,可以群內交流遇到的問題,分享自己的偵錯心得。
希望大家共建飛騰友誼!
飛騰愛好者技術交流群碼公眾號「烏拉大喵喵」