天天看點

PHY寄存器

在之前的文章,我們講解了stm32的網絡外設部分。

PHY寄存器

文章有《stm32網絡電路設計》《stm32網絡之mac控制器》《stm32網絡之dma控制器》《stm32網絡之中斷》。

stm32隻有網絡外設時不能進行網絡通信的,因為stm32隻提供了smi接口,mii和rmii接口。我們還需要與之通信的外部網絡晶片,簡稱phy晶片。我熟悉的phy型号有:rtl8201f,rtl8201e,rtl8201g,dp83848,yt8512c等,原計劃講解rtl8201f的,但是内容太多,先把phy寄存器拿出來講一下。

為什麼stm32不內建phy呢?

phy(portphysical layer),中文可稱之為端口實體層。

1、phy晶片是模拟晶片,需要将網線的差分信号轉換成數字信号,如果內建,則晶片面積增加,如果要降低功耗,還要高的晶片制造技術,這會直接将晶片成本拉高。

2、并不是所有的stm32使用者都需要使用到網絡,內建phy會增加成本。

是以,stm32不內建phy不是技術問題,而是各方面考慮的結果。

難道沒有內建phy的mcu嗎?

有的,ti的lm3s8962。

PHY寄存器

我們說回phy寄存器,外部phy晶片寄存器分為3種類型

basic:基礎寄存器

extended:擴充寄存器

vendor-spcififc:廠商特殊寄存器

其中在802.3協定2012版中有如下說明。

PHY寄存器

不同的手冊,對基礎寄存器有不同的說明,按照802.3-2012上圖的說明基礎寄存器是控制器寄存器(寄存器0)和狀态寄存器(寄存器1),在gmii(千兆網)接口中海油擴充狀态寄存器(寄存器15)。

本文主要根據802.3-2012協定講解phy的基礎寄存器,并不是根據某個具體晶片講解的。

PHY寄存器

寄存器0和寄存器1在協定文檔的中位置如下圖

PHY寄存器

上面提到的802.3-2012協定大家可以到ieee官網下載下傳

https://standards.ieee.org/

或者通過百度網盤下載下傳

連結:https://pan.baidu.com/s/1nr_khse32zysbkz0btpceg

提取碼:xhin

01、控制寄存器(寄存器0)

寄存器0是phy控制寄存器,通過controlregister可以對phy的主要工作狀态進行設定

PHY寄存器

bit15 rset

bit15為1時表示,phy複位。bit15控制的是phy複位功能,在該位置寫入1實作對phy的複位操作。複位後該端口phy的其他控制、狀态寄存器将恢複到預設值,每次phy複位應該在0.5s的時間内完成,複位過程中bit15保持為1,複位完成之後該位應該自動清零。一般要改變端口的工作模式(如速率、雙工、流控或協商資訊等)時,在設定完相應位置的寄存器之後,需要通過reset位複位phy來使配置生效。

在複位過程完成之前,不需要phy接受對控制寄存器的寫事務,而在複位過程完成之前,對控制寄存器中除bit15以外的位的寫操作可能無效。

bit14 loopback

loopback是一個調試以及故障診斷中常用的功能,bit14置1之後,phy和外部mdi的連接配接在邏輯上将被斷開,從mac經過mii/gmii(也可能是其他的mac/phy接口)發送過來的資料将不會被發送到mdi上,而是在phy内部(一般在pcs)回環到本端口的mii/gmii接收通道上。

通過loopback功能可以檢查mii/gmii以及phy接口部分是否工作正常,對于端口不通的情況可用于故障定位。需要注意的是,很多時候phy設定loopback後端口可能就linkdown了,mac無法向該端口發幀,這時就需要通過設定端口forcelink up才能使用loopback功能。

bit13 speed selection(lsb)

bit13和bit6兩位聯合實作對端口的速率控制功能,具體的對應關系詳見下圖

PHY寄存器

需要注意的是speedselection隻有在自動協商關閉的情況下才起作用,如果自動協商設定為enable狀态,則該設定不起作用;

并且,對speedselection的修改設定,往往需要複位端口才能配置生效。是以在設定該位置的時候需要檢查自動協商的設定并通過bit15複位端口。

bit12 auto-negotiation enable

自動協商(an)開關。設定為1表示打開an功能,端口的工作模式通過和連接配接對端進行自動協商來确定。如果設定為0則自動協商功能關閉,端口的工作模式通過controlregister相應位置的配置決定。必須注意的是,對于1000base-t接口,自動協商必須打開。

bit11 power down

端口工作開關:設定為1将使端口進入powerdown(低功耗狀态)模式,正常情況下phy在powerdown模式其mii和mdi均不會對外發送資料。powerdown模式一般在軟體shutdown端口的時候使用,需要注意的是端口從powerdown模式恢複,需要複位端口以保證端口可靠的連接配接。

bit10 isolate

隔離狀态開關:改位置1将導緻phy和mii接口之間處于電氣隔離狀态,除了mdc/mdio接口的信号外,其他mii引腳處于高阻态。ieee802.3沒有對isolate時mdi接口的狀态進行規範,此時mdi端可能還在正常運作。isolate在實際應用中并沒有用到。并且,值得注意的是,由于目前很多百兆的phy晶片其mac接口主流的都是smii/s3mii,8個端口的接口是互相關聯的,一個端口設定isolate可能會影響其他端口的正常使用,是以在使用中注意不要随意更改bit10的狀态。

bit9 restart auto-negotiation

重新啟動自動協商開關:bit9置1将重新啟動端口的自動協商程序,當然前提是auto-negotiationenable是使能的。一般在修改端口的自動協商能力資訊之後通過bit9置1重新啟動自動協商來使端口按照新的配置建立link。

bit8 duplex mode

雙工模式設定:bit8置1端口設定為全雙工,置0則端設定為半雙工,和speedselection的設定一樣,duplexmode的設定隻有在自動協商關閉的情況下才起作用,如果自動協商設定為enable狀态,則該設定不起作用,端口的雙工模式根據an結果來定。對duplexmode的修改配置也需要複位端口才能生效。

bit7 collision test

沖突信号(col)測試開關:在需要對col信号進行測試時,可以通過bit7置1,這時phy将輸出一個col脈沖以供測試。實際測試操作中也可以将端口配置為半雙工狀态,通過發幀沖突來測試col信号,是以該配置實用價值不大。

bit6 speed selection(msb)

和bit13兩位聯合實作對端口的速率控制功能。

PHY寄存器

bit5 unidirectional enable

當第12位為1或第8位為0時,該位為忽略了。

當第12位為0且第8位為1:

1:從mii接口啟用傳輸,不管phy是否确定已建立有效鍊路

0:僅當phy确定已建立有效鍊路時,才啟用從mii接口傳輸

bits 4:0 reserved

保留位,它們應寫入為零,讀取時應忽略;但是,phy應傳回這些位中的值零。

02、狀态寄存器(寄存器1)

寄存器1是phy狀态寄存器,主要包含phy的狀态資訊。

PHY寄存器

bit15 100base-t4

phy使用100base-t4信令規範執行鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bit14 100base-x full duplex

phy使用100base-x信令規範執行全雙工鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bit13 100base-x half duplex

phy使用100base-x信令規範執行半雙工鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bit12 10mb/s full duplex

phy具有以10mb/s的速度運作時執行全雙工鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bit11 10mb/s half duplex

phy具有以10mb/s的速度運作時執行半雙工鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bit10 100base-t2 full duplex

phy具有使用100base-t2信令規範執行全雙工鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bit9 100base-t2 half duplex

phy具有使用100base-t2信令規範執行半雙工鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bit8 externded status

1:使能寄存器15

0:不使能寄存器15

bit7 unidirectional ability

1:phy有能力編碼和傳輸來自phy的資料通過mii接口,而不管phy是否已确定有效鍊路已被連接配接已建立。

bit6 mf preamble suppression

1:phy能夠接受管理幀,而不管它們前面是否有前導碼模式。

0:phy不能接受管理幀,除非它們前面有前導碼模式。

前導碼模式。

在官方文檔中22.2.4.5.2中有描述的。大家可以自行檢視。

PHY寄存器

其實這個前導碼我們在之前也是講解到的,在文章《stm32網絡之smi接口》如下圖,建議沒有讀過這篇文章的同學讀一下。

PHY寄存器

bit5 auto-negotiation complete

an完成狀态訓示位:bit5訓示的是端口an程序是否完成的狀态位。在anenable的情況下,bit5=1表示自動協商程序已經成功結束,此時phy的其他和link狀态相關的寄存器才是正确可靠的。如果an程序沒有完成,則這些狀态資訊可能是錯誤的。在調試以及異常故障處理時,可以通過該位寄存器的狀态判斷an是否成功,進而進一步的檢查an相關的設定是否正确,或者晶片的an功能是否正常等。

bit4 remote fault

遠端錯誤訓示位:bit4=1代表連接配接對端(linkpartner)出錯,至于出錯的具體類型以及錯誤檢測機制在規範中并沒有定義,由phy的制造商自由發揮,一般的廠商都會在其他的寄存器(register16-31由廠商自行定義)訓示比較詳細的錯誤類型。在與端口相關的故障查證中,remotefault是一個重要的訓示資訊,通過互聯雙方的remotefault資訊(可能要加上其他的具體錯誤訓示),可以幫助定位故障原因。

bit3 auto-negotiation ability

1:phy使能自動協商

0:phy不使能自動協商

bit2 link status

link狀态訓示位:bit2=1代表端口linkup,0則代表端口linkdown。實際應用中一般都是通過bit2來判斷端口的狀态。而且,一般的mac晶片也是通過輪詢phy的這個寄存器值來判斷端口的link狀态的(這個過程可能有不同的名稱,比如bcm叫做linkscan,而marvell叫做phypolling。)如前所述,在anenable的情況下,linkstatus的資訊隻有在auto-negotiationcomplete訓示已經完成的情況下才是正确可靠的,否則有可能出錯。

bit1 jabber detect

1:檢測到抖動(戳刺)狀态

0:沒有檢測到抖動(戳刺)狀态

bit0 extended capability

1:phy提供了擴充的功能集,可通過擴充的寄存器集進行通路。

0:沒有提供擴充寄存器。

03、寄存器15

寄存器15主要模式千兆網模式下,phy的狀态。

PHY寄存器

如上圖,寄存器15主要描述,千兆網模式下phy的狀态,具體含義和寄存器1的相關位差不多。

bit15 1000base-x full duplex

phy使用1000base-x信令規範執行全雙工鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bit14 1000base-x half duplex

phy使用100b0ase-x信令規範執行半雙工鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bit13 1000base-t full duplex

phy具有使用1000base-t信令規範執行全雙工鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bit12 1000base-t half duplex

phy具有使用1000base-t信令規範執行半雙工鍊路傳輸和接收的能力。1:具有能力;0:不具有能力。

bits 11:0 reserved

保留位,讀取的時候忽略。

04

其他寄存器

除去基礎寄存器,802.3-2012協定也提到了其他寄存器,這裡簡單說明下,不做重點講解。

寄存器2、3:晶片id寄存器

寄存器2、3分别是phyid寄存器,從核心代碼知道,寄存器2(phyid1)為高16位,而寄存器3(phyid2)為低16位。它們作為phy晶片的辨別,一般被認為作用不大,以前有過同一主cpu搭配不同的phy組合不同的闆卡,使用同一份核心,這裡就可以用phyid來做差別。

寄存器4:自動協商通告寄存器

該寄存器儲存着phy本身具備的特性、能力。如phy支援流控、百兆全雙工/半雙工、十兆全雙工/半雙工,等。

當設定為自動協商使能情況下通過flp在mdi上進行通告。如果不使能,則此寄存器的配置無效。

寄存器5:自動協商對端能力通告寄存器

該寄存器和寄存器4類似,它表示對端(交換機或pc)具備的特性、能力。同樣要注意是的隻有在自動協商使能情況下該寄存器資訊才有效。由于此寄存器表示的是對端的狀态,是以一般情況下寄存器的值被設計為隻讀,但有的晶片如dm9000的流控位5.10fcs是可讀寫的。

該寄存器主要用來了解對端的情況,在出現問題時,可以了解對方的資訊,進而大緻定位範圍。而不用一味地找自身原因。萬一真的是對端的交換機出現故障,此寄存器就是有力的現場證據。

點選檢視本文所在的專輯,stm32f207網絡開發

phy