飛騰CPU FT-2000/4 uboot下PHY偵錯記錄

2023-04-24 21:00:45

飛騰愛好者技術交流群碼公眾號「烏拉大喵喵」


 

一、環境說明

板子是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板子。

 


 

歡迎飛騰愛好者加入微信交流群。

群內大家可以暢所欲言。

在群內不需要表露自己的公司和身份,可以群內交流遇到的問題,分享自己的偵錯心得。

希望大家共建飛騰友誼!

飛騰愛好者技術交流群碼公眾號「烏拉大喵喵」