在之前的文章,我們講解了STM32的網路外設部分,

?
文章有《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芯片暫存器分為3種型別
Basic:基礎暫存器
Extended:擴展暫存器
Vendor-spcififc:廠商特殊暫存器
其中在802.3協議2012版中有如下說明,

?
不同的手冊,對基礎暫存器有不同的說明,按照802.3-2012上圖的說明基礎暫存器是控制器暫存器(暫存器0)和狀態暫存器(暫存器1),在GMII(千兆網)介面中海油擴展狀態暫存器(暫存器15),
本文主要根據802.3-2012協議講解PHY的基礎暫存器,并不是根據某個具體芯片講解的,

?
暫存器0和暫存器1在協議檔案的中位置如下圖

?
上面提到的802.3-2012協議大家可以到ieee官網下載
https://standards.ieee.org/
或者通過百度網盤下載
鏈接:https://pan.baidu.com/s/1Nr_KHse32zysBKZ0btPceg
提取碼:xhin
01、控制暫存器(暫存器0)
暫存器0是PHY控制暫存器,通過ControlRegister可以對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兩位聯合實作對埠的速率控制功能,具體的對應關系詳見下圖

?
需要注意的是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兩位聯合實作對埠的速率控制功能,

?
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的狀態資訊,

?
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是否已確定有效鏈路已被連接已建立,
0:僅當PHY確定已建立有效鏈路時,才啟用從MII介面傳輸
bit6 MF Preamble Suppression
1:PHY能夠接受管理幀,而不管它們前面是否有前導碼模式,
0:PHY不能接受管理幀,除非它們前面有前導碼模式,
前導碼模式,
在官方檔案中22.2.4.5.2中有描述的,大家可以自行查看,

?
其實這個前導碼我們在之前也是講解到的,在文章《STM32網路之SMI介面》如下圖,建議沒有讀過這篇文章的同學讀一下,

?
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的狀態,

?
如上圖,暫存器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網路開發
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/275299.html
標籤:其他
上一篇:PHY暫存器
