飛騰CPU FT-2000/4 uboot下PHY調(diào)試記錄

原文在我公眾號(hào)上:
https://mp.weixin.qq.com/s/u-TtdPD9fOtlugJVGCUeaA

板子是FT-2000/4的開發(fā)板:

固件版本:
ft-2004c_u-boot-v2-Ver0.3_202112231001.tar.gz
ft2004c_v2.06_image_fix.rar
二、調(diào)試命令說明
調(diào)試PHY主要用到的命令是mii,先查看下可用的命令:

mii device,縮寫mii dev,查看網(wǎng)絡(luò)控制器mac。
mii device,縮寫mii dev,用來切換mac控制器。
mii info,用來掃描當(dāng)前網(wǎng)絡(luò)控制器mac下的phy有哪些。
mii read/write是用來讀寫寄存器的。
mii dump,用來顯示寄存器狀態(tài)值,其中addr是通過mii info掃描,確定其PHY地址后,填入的。
三、MII命令使用
3.1 mii dev查看網(wǎng)絡(luò)控制器
首先通過命令看看配置了幾個(gè)網(wǎng)絡(luò)控制器mac。因?yàn)镕T-2000/4內(nèi)有兩個(gè)網(wǎng)絡(luò)控制器,理論上應(yīng)該能看到2個(gè)mac。


FT2004C#mii dev
MII devices: 'ethernet0@2820c000' 'ethernet1@28210000'
Current device: 'ethernet0@2820c000'
能看出來是兩個(gè)mac控制器都在(ethernet0@2820c000、ethernet1@28210000),這個(gè)東西是哪里設(shè)置的呢?是uboot的設(shè)備樹里配置的,如果改過設(shè)備樹,比如注釋了ethernet1,那這里就只能看到一個(gè)ethernet0了。
設(shè)備樹位置:


3.2 mii info掃描PHY
飛騰板子上用了兩個(gè)AR8035的PHY芯片。


查看當(dāng)前mac下的phy有沒有:
FT2004C#mii dev
MII devices: 'ethernet0@2820c000' 'ethernet1@28210000'
Current device: 'ethernet0@2820c000'
可以看到當(dāng)前使用的是第1個(gè)mac控制器。
Mii info掃描:
FT2004C#mii info
PHY 0x04: OUI = 0x1374, Model = 0x07, Rev = 0x02,??10baseT, HDX
能夠在這個(gè)mac下掃到一個(gè)地址為0x04的PHY,這個(gè)地址是通過PHY的管腳來配出來的。在mii info下能掃到這么一個(gè)PHY,說明mac的MDIO是通的。要是這里硬件上設(shè)計(jì)了一個(gè)PHY,但是這里沒有掃到,那么就要去查硬件了,要是PHY都沒掃到,后面測網(wǎng)絡(luò)也白測。

切換mac后再看看其下面有沒有phy。
FT2004C#mii dev 'ethernet1@28210000'
上面命令是切換到第2個(gè)網(wǎng)絡(luò)控制器。
FT2004C#mii dev
MII devices: 'ethernet0@2820c000' 'ethernet1@28210000'
Current device: 'ethernet1@28210000'
可以看到,已經(jīng)切換到了第2個(gè)mac控制器。
FT2004C#mii info
PHY 0x04: OUI = 0x1374, Model = 0x07, Rev = 0x02,??10baseT, HDX
同樣,在這個(gè)mac下也看到了一個(gè)地址為0x04的PHY。
因?yàn)轱w騰的RGMII控制器是每個(gè)單獨(dú)的MDIO接口,所以可以將板上的兩個(gè)PHY地址設(shè)成一樣的。
有些芯片是多個(gè)MAC共用一個(gè)mdio,這種情況的話就需要將PHY的地址設(shè)成不同的了,可以簡單的把MDIO接口理解為IIC。
3.3 mii dump轉(zhuǎn)儲(chǔ)寄存器信息
現(xiàn)在把網(wǎng)線插到板子雙網(wǎng)絡(luò)的上面的網(wǎng)口,從電路上是對應(yīng)第一個(gè)mac下的phy網(wǎng)口。

查看'ethernet0@2820c000'下PHY的link狀態(tài)。
使用mii dump命令可以查看phy的0~5的6個(gè)寄存器(使用mii read命令不存在這個(gè)說法,所有寄存器都能看 )。因?yàn)槲覀兊腜HY地址是0x04,所以mii dump里的addr我們填0x04,reg部分我們從0填到5就能看全所有的寄存器了?,F(xiàn)在是插著網(wǎng)線的,所以可以看到“(0004:0004) 1. 2 ???=???? 1 ?? link status”表示link成功了,拔掉網(wǎng)線這里就=0了((0004:0000) 1. 2 ???=?????0??? link status)。這也同時(shí)印證了PHY的MDIO是通的。還是那句話,這里的PHY link狀態(tài)都讀不到,那就去查硬件看看吧。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
要是想看詳細(xì)的寄存器位描述,就查手冊就好了。

3.4 mii read write讀寫寄存器
我們來嘗試read、write一下。
mii read???? ? ? ? ? ? ??
mii write??
這里的可以填手冊里有的地址,AR8035有0x00~0x1F這么些寄存器。我們先使用read,看看讀上來的是啥。
FT2004C#mii read 0x04 0
1000

這里是把整個(gè)寄存器的16位都讀上來了,也就說我們要控制寄存器的某一位,需要自己在二進(jìn)制里配置好,轉(zhuǎn)換完再配進(jìn)去。
我們先看,這里讀上來的0x1000。這里需要注意的是,uboot顯示speed selection是bit6+bit13。所以要是看dump顯示和read的對應(yīng)關(guān)系,這里要注意一下。要是你直接從手冊寄存器表里去查,那就沒這個(gè)注意事項(xiàng)了。

當(dāng)然你也可以去讀其他的寄存器值,讀到后對應(yīng)手冊去查寄存器含義就好了。

我們write下試試,就操作speed selection寄存器吧,這個(gè)代表速度選擇用控制寄存器。修改speed為2'b10 = 1000Mbps。即寄存器0的值為0x1040。配置完再讀一下看,是配置進(jìn)去了。

MDIO這邊就這樣了。MDIO能操作是調(diào)網(wǎng)絡(luò)的基礎(chǔ)。
3.5 網(wǎng)絡(luò)測試ping
剩下就是ping測試了。
print一下環(huán)境變量,簡單的話就是默認(rèn)環(huán)境變量不動(dòng),改PC機(jī)那邊的,改成和環(huán)境變量中serverip一樣的。
改完后從uboot這邊去ping PC機(jī)就好了。

或者改uboot那邊的ipaddr、gatewayip、serverip,改成你想要的。之后通過PC去ping板子。

個(gè)人資料推廣:?
最近將多年來收集到的教學(xué)視頻、國內(nèi)外圖書、源碼等整理整合拿出來,
涉及 arm、Linux、python、信號(hào)完整性、FPGA、DSP、算法、stm32、
單片機(jī)、制圖、電子模塊、kali、出版社圖書等。
資料目前約 1.5TB+。初、中、高不同階段工程師,都能有提升自己的資料。?


分享,讓技術(shù)更偉大!歡迎轉(zhuǎn)發(fā)!?
歡迎飛騰愛好者加入微信交流群。
群內(nèi)大家可以暢所欲言。在群內(nèi)不需要表露自己的公司和身份,可以群內(nèi)交流遇到的問題,分享自己的調(diào)試心得。
希望大家共建飛騰友誼!
