目錄
wol?
以太網(wǎng)
MAC
PHY
RMII
通信配置
總結
wol?
Wake-on-LAN簡稱WOL,WOL(網(wǎng)絡喚醒)?是一種標準網(wǎng)絡協(xié)議,它的功效在于讓已經(jīng)進入休眠狀態(tài)或關機狀態(tài)的計算機,透過局域網(wǎng)(多半為以太網(wǎng))的另一端對其發(fā)令,使其從休眠狀態(tài)喚醒、恢復成運作狀態(tài),或從關機狀態(tài)轉(zhuǎn)成引導狀態(tài)。WoL 技術通過將魔術數(shù)據(jù)包從服務器傳輸?shù)教囟ㄓ嬎銠C來運行?;脭?shù)據(jù)包是一個特殊的數(shù)據(jù)包,其中包含目標計算機的媒體訪問控制 (MAC) 地址和網(wǎng)絡廣播地址以及 WoL 配置。WoL 通常從具有 IP 地址管理軟件的服務器廣播。
WoL 的目的是遠程在設備上執(zhí)行喚醒操作。它可以幫助網(wǎng)絡管理員自動執(zhí)行不需要任何手動干預的定期喚醒計劃。
消息通常由在連接到同一局域網(wǎng)的設備上執(zhí)行的程序發(fā)送到目標計算機。
以太網(wǎng)連接(包括家庭和工作網(wǎng)絡、無線數(shù)據(jù)網(wǎng)絡和 Internet 本身)都基于計算機之間發(fā)送的幀。 WoL 是使用一種特殊設計的稱為魔術包的幀來實現(xiàn)的,魔術包被發(fā)送到網(wǎng)絡中的所有計算機,其中包括要被喚醒的計算機。 魔術分組包含目的地計算機的 MAC 地址、內(nèi)置在計算機中的每個網(wǎng)絡接口卡(“NIC”)或其它以太網(wǎng)設備中的標識號,其使得它能夠在網(wǎng)絡上被唯一地識別和尋址。 具有 LAN 喚醒功能的已關機或關閉的計算機將包含能夠在系統(tǒng)關機時以低功耗模式“偵聽”傳入數(shù)據(jù)包的網(wǎng)絡設備。 如果接收到指向設備 MAC 地址的魔術包,網(wǎng)卡會向計算機的電源或主板發(fā)出信號,以啟動系統(tǒng)喚醒,其方式與按下電源按鈕的方式相同。
魔術分組在數(shù)據(jù)鏈路層(OSI 模型中的第 2 層)上被發(fā)送,并且當被發(fā)送時,使用網(wǎng)絡廣播地址被廣播到給定網(wǎng)絡上的所有附接的設備;不使用 IP 地址(OSI 模型中的第 3 層)。
由于 LAN 喚醒是基于廣播技術構建的,因此通常只能在當前網(wǎng)絡子網(wǎng)內(nèi)使用。 不過,也有一些例外情況,LAN 喚醒實際上可以在任何網(wǎng)絡上運維,只要配置和硬件適當,包括通過互聯(lián)網(wǎng)進行遠程喚醒。為了使 LAN 喚醒工作,網(wǎng)絡接口的某些部分需要保持打開狀態(tài)。
功耗控制(MCU ARM-cortex M3內(nèi)核):
待機模式特點:
以太網(wǎng)
以太網(wǎng) 不是一種具體的網(wǎng)絡,而是一種網(wǎng)絡技術標準,既包含了數(shù)據(jù)鏈路層的內(nèi)容,也包含了一些物理層的內(nèi)容。例如:規(guī)定了網(wǎng)絡拓撲結構、訪問控制方式、傳輸速率等。
以太網(wǎng)中的所有主機,共享一個通信信道,當一臺主機給目標主機發(fā)送數(shù)據(jù)后,處于同一個局域網(wǎng)的所有主機都能夠收到,它們都會對比自己的 MAC 地址和數(shù)據(jù)中的目的 MAC 地址,除了目標主機的對比是相等的之外,其余主機的對比都是不相等的,所以其余主機都會丟棄,只有目標主機會將其解包并向上交付。
以太網(wǎng)電路的基本構成
對于上面框圖三個部分,并不是每個部分都是獨立的芯片,一般有幾種情況:
- CPU內(nèi)部集成了MAC和PHY,難度較高
- CPU內(nèi)部集成MAC,PHY采用獨立芯片(主流方案目前用的最多)
- CPU不集成MAC和PHY,MAC和PHY采用獨立芯片或者集成芯片(高端采用)
PHY整合了大量模擬硬件,而MAC是典型的全數(shù)字硬件,芯片面積及模擬/數(shù)字混合架構是為什么先將MAC集成進微控制器而將PHY留在片外的原因。更靈活,密度更高的芯片技術已經(jīng)可以實現(xiàn)MAC和PHY的單芯片整合。
常用的CPU內(nèi)部集成MAC,PHY采用獨立的芯片方案,CPU和MAC集成在一起,PHY芯片通過MII接口與CPU上的MAC互聯(lián)。
對于這種方案,其硬件方案比獨立的相對于更簡單,PHY與MAC之間有以下兩個重要的硬件接口
MDIO總線接口,主要是完成CPU對于PHY芯片的寄存器配置
MII總線接口,主要是完成數(shù)據(jù)收發(fā)相關的業(yè)務
當我們的PHY芯片發(fā)送數(shù)據(jù),接受到MAC層發(fā)送過來的數(shù)字信號,然后轉(zhuǎn)換成模擬信號,通過MDI接口傳輸出去。但是我們的網(wǎng)線傳輸?shù)木嚯x又很長,有時候需要送到100米甚至更遠的地址,那么就會導致信號的流失。而且外網(wǎng)線與芯片直接相連的話,電磁感應和靜電,也很容易導致芯片的損壞,所以就要使用網(wǎng)絡變壓器,其主要作用是
傳輸數(shù)據(jù),它把PHY送出來的差分信號用差模耦合的線圈耦合濾波以增強信號,并且通過電磁場的轉(zhuǎn)換耦合到不同電平的連接網(wǎng)線的另外一端
隔離網(wǎng)線連接的不同網(wǎng)絡設備間的不同電平,以防止不同電壓通過網(wǎng)線傳輸損壞設備
還能使芯片端與外部隔離,抗干擾能力大大增強,而且對芯片增加了很大的保護作用,保護PHY免遭由于電氣失誤而引起的損壞(如雷擊)
MAC
MAC(Media Access Control),即媒體訪問控制子層協(xié)議,該部分有兩個概念:MAC可以是一個硬件控制器以及MAC通訊協(xié)議。該協(xié)議位于OSI七層協(xié)議中數(shù)據(jù)鏈路層的下半部分,主要是負責控制與連接物理層的物理介質(zhì)。
MAC硬件框圖
MAC 地址用來標識數(shù)據(jù)鏈路層中相連的節(jié)點。長度為 6 個字節(jié) 48 位,一般用十六進制數(shù)字加上冒號的形式來表示。例如:52:54:00:56:6a:47 。
PHY
什么是phy
PHY(英語:Physical),中文可稱之為端口物理層,是一個對OSI模型物理層的共同簡稱。而以太網(wǎng)是一個操作OSI模型物理層的設備。一個以太網(wǎng)PHY是一個芯片,可以發(fā)送和接收以太網(wǎng)的數(shù)據(jù)幀(frame)。不同于NIC(網(wǎng)卡),PHY沒有自己的MAC地址。 ?
也就是說,PHY是網(wǎng)絡結構中的最底層,物理層。PHY芯片是實現(xiàn)物理層這一層功能的芯片。網(wǎng)絡設備之間就是通過PHY芯片相互連接的(介質(zhì)是網(wǎng)線或者光纖)。
PHY的主要功能就是將數(shù)字信號轉(zhuǎn)成模擬信號,然后在網(wǎng)線或者光纖傳輸。因為模擬信號和數(shù)字信號的不同,加上不同設備之間的傳輸環(huán)境復雜,因此,大部分的PHY都是單獨做到一個芯片內(nèi)的。
因此,在一般的網(wǎng)絡設備電路設計中,需要為PHY芯片設計電路。PHY的芯片廠家為了滿足大部分的應用場景,會在PHY上面提供很多接口協(xié)議,以供設計人員使用。比如,一顆PHY可能會支持網(wǎng)線傳輸,又或者支持光纖傳輸,然后在連接數(shù)據(jù)鏈路層這邊,會提供很多的MII接口以供選擇。
發(fā)送數(shù)據(jù):對于PHY來說,并沒有幀的概念,對它來說,不管是地址、數(shù)據(jù)還是CRC,都會將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)流,在按照物理層的編碼規(guī)則把數(shù)據(jù)編碼,最終轉(zhuǎn)換成模擬信號發(fā)送出去
接收數(shù)據(jù):從外部接收數(shù)據(jù)時,模擬信號先轉(zhuǎn)成數(shù)字信號,再經(jīng)過解碼得到數(shù)據(jù), 經(jīng)過MII送到MAC
CSMA/CD:可以檢測到網(wǎng)絡上是否有數(shù)據(jù)在傳送,如果有數(shù)據(jù)在傳送中就等待,一旦檢測到網(wǎng)絡空閑,再等待一個隨機時間后將送數(shù)據(jù)出去。如果兩個碰巧同時送出了數(shù)據(jù),那樣必將造成沖突。這時候,沖突檢測機構可以檢測到?jīng)_突,然后各等待一個隨機的時間重新發(fā)送數(shù)據(jù)。
MDI
MDI口是快速以太網(wǎng)100BASE-T定義的與介質(zhì)有關接口(Media Dependent Interface)。MDI是指通過收發(fā)器發(fā)送的100BASE-T信號,即100BASE-TX、FX、T4或T2信號。將集線器連接網(wǎng)絡接口卡時,其發(fā)送和接收對通常是相互連接的。集線器之間連接時,通常需要一條跨接電纜,其中的發(fā)送和接收對是反接的。MDI是正常的UTP或STP連接,而MDI-X連接器的發(fā)送和接收對是在內(nèi)部反接的,這就使得不同的設備(如集線器-集線器或集電器-交換機),可以利用常規(guī)的UTP或STP電纜實現(xiàn)背靠背的級聯(lián)。
PHY是IEEE 802.3規(guī)定的一個標準模塊,SOC可以通過MDIO對PHY進行配置或者讀取phy相關狀態(tài),PHY內(nèi)部寄存器必須滿足
PHY芯片的寄存器地址空間是5位,一般由外部硬件連接決定。
地址空間031共32個寄存器,IEEE定義了015這16個寄存器的功能,16-31這16個寄存器由廠商自行實現(xiàn)。也就是說不管哪個廠商的PHY芯片,其中0~15這16個寄存器是一模一樣的。
僅靠這 16個寄存器完全可以驅(qū)動起PHY芯片,至少能保證基本的網(wǎng)絡數(shù)據(jù)通信。因此 Linux 內(nèi)核有通用 PHY 驅(qū)動,按道理來講,不管你使用的哪個廠家的 PHY 芯片,都可以使用 Linux 的這個通用 PHY 驅(qū)動來驗證網(wǎng)絡工作是否正常。事實上在實際開發(fā)中可能會遇到一些其他的問題導致 Linux 內(nèi)核的通用 PHY 驅(qū)動工作不正常,這個時候就需要驅(qū)動開發(fā)人員去調(diào)試了。而且除了Linux平臺,單片機平臺也會和phy通信,所使用的功能和芯片也是根據(jù)需求所定,所以在實際開發(fā)中需要做不同的適配,下面會講到極海32和裕泰8512的配置通信。
phy芯片的接口介紹
MAC與PHY之間通過兩個接口連接,分別為SMI接口和MII接口。
MII叫做介質(zhì)獨立接口,以太網(wǎng)MAC通過該接口發(fā)出數(shù)據(jù)幀經(jīng)過PHY后傳輸?shù)狡渌W(wǎng)絡節(jié)點上,同時其他網(wǎng)絡節(jié)點的數(shù)據(jù)先經(jīng)過PHY后再由MAC接收;
SMI叫做是串行管理接口,以太網(wǎng)MAC通過該接口可以訪問PHY的寄存器,通過對這些寄存器操作可對PHY進行控制和管理。
MII(Media Independent Interface)即媒體獨立接口,MII接口是MAC與PHY連接的標準接口。它是IEEE-802.3定義的以太網(wǎng)行業(yè)標準。MII接口提供了MAC與PHY之間、PHY與STA(Station Management)之間的互聯(lián)技術。媒體獨立表明在不對MAC硬件重新設計或替換的情況下,任何類型的PHY設備都可以正常工作.它包括一個數(shù)據(jù)接口,以及一個MAC和PHY之間的管理接口。MII接口有MII、RMII、SMII、SSMII、SSSMII、GMII、SGMII、RGMII等。這里簡要介紹其中的MII和RGMII。
MII接口主要包括以下三個部分:
- 從MAC層到PHY層的發(fā)送數(shù)據(jù)接口
- 從PHY層到MAC層的接收數(shù)據(jù)接口
- 從MAC層和PHY層之間寄存器控制和信息獲取的MDIO接口
MII的MAC層定義接口
MII的時鐘為25MHz,傳輸速率為10/100Mbps。其特性如下:
- 支持10Mb/s和100Mb/s的數(shù)據(jù)速率
- 100M工作模式下,參考時鐘是25MHz;10M工作模式下,信號參考時鐘是2.5MHz
- 支持全雙工、半雙工兩種工作模式
- 發(fā)送和接收數(shù)據(jù)時采用,4bit方式
SMI是MAC內(nèi)核訪問PHY寄存器接口,它由兩根線組成,雙工,MDC為時鐘,MDIO為雙向數(shù)據(jù)通信,原理上跟I2C總線很類似,也可以通過總線訪問多個不同的phy。
MDC/MDIO基本特性:
兩線制:MDC(時鐘線)和MDIO(數(shù)據(jù)線)。
時鐘頻率:2.5MHz
通信方式:總線制,可同時接入的PHY數(shù)量為32個
通過SMI接口,MAC芯片主動的輪詢PHY層芯片,獲得狀態(tài)信息,并發(fā)出命令信息。
SMI幀格式
RMII
RMII 精簡介質(zhì)獨立接口。RMII降低了以太網(wǎng)外設與外部 PHY在 10/100Mbit/s下微控制器的引腳數(shù)。根據(jù)IEEE 802.3U標準,MII有16個數(shù)據(jù)和控制信號的引腳。RMII將引腳減少為7個。
RMII 在MAC 和 PHY之間實例化。有助于將MAC 的 MII 轉(zhuǎn)換為RMII。RMII具有一特性:
1、單獨的2位寬的發(fā)送和接收數(shù)據(jù)路徑
2、10-Mbit/s 和100-Mbit/s 的運行速率
3、參考時鐘為50MHz
4、從外部提供相同的參考時鐘給MAC和外部以太網(wǎng)PHY
RMII接口框圖
通信配置
以下的配置說的是極海32與裕泰8512通信的簡單流程,附部分代碼,
首先需要初始化配置RMII模式相關的gpio,并選擇以太網(wǎng)外部接口為RMII
//MCU引腳
/* * ETH_RESET# PB6
* ETH_INT PB15
* ETH_MDIO PA2
* ETH_MDC PC1
* ETH_RMII_REF_CLK PA1
* ETH_RMII_CRS_DV PA7
* ETH_RMII_RXD0 PC4
* ETH_RMII_RXD1 PC5
* ETH_RMII_TX_EN PB11
* ETH_RMII_TXD0 PB12
* ETH_RMII_TXD1 PB13
*/
//接口gpio初始化函數(shù)
etherent_gpio_config()
{
/* Configure ETH_MDIO */
configStruct.pin = ETH_MDIO_PIN;
configStruct.mode = GPIO_MODE_AF_PP;
GPIO_Config(ETH_MDIO_PORT, &configStruct);
... ... ... ...
}
/Select an Ethernet external interface/
GPIO_ConfigPinRemap(GPIO_REMAP_MACEISEL_RMII);
YT8512 產(chǎn)品使用說明書
查看PHY芯片產(chǎn)品說明書及MCU產(chǎn)品手冊和硬件原理圖配置外部中斷
EINT_ClearStatusFlag(EINT_LINE_15);
EINT_InitStructure1.line = EINT_LINE_15;
EINT_InitStructure1.mode = EINT_MODE_INTERRUPT;
EINT_InitStructure1.trigger = EINT_TRIGGER_FALLING;
EINT_InitStructure1.lineCmd = ENABLE;
EINT_Config(&EINT_InitStructure1);
NVIC_EnableIRQRequest(EINT15_10_IRQn, 1, 1);
根據(jù)MCU手冊,配置以太網(wǎng)外設
etherent_mac_dma_config()
{
/* Enable ETHERNET clock */
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_ETH_MAC | RCM_AHB_PERIPH_ETH_MAC_TX |
RCM_AHB_PERIPH_ETH_MAC_RX);
/* Reset ETH on AHB Bus */
ETH_Reset();
/* Software reset */
ETH_SoftwareReset();
/* Wait for software reset */
while (ETH_ReadSoftwareReset() == SET);
/* ETH Config Struct *///使用默認值配置ETH_Config_T成員。
ETH_ConfigStructInit(D_InitStructure);
/* ETH Config MAC */
ETH_InitStructure.autoNegotiation = ETH_AUTONEGOTIATION_ENABLE; //選擇外部PHY的自協(xié)商模式
ETH_InitStructure.xxxxx .
................
.................
/* ETH Config DMA */
ETH_InitStructure.receiveStoreForward = ETH_RECEIVESTOREFORWARD_ENABLE; // /*!<啟用接收存儲和轉(zhuǎn)發(fā)模式*
ETH_InitStructure.xxxxx
.................
.................
}
//配置以太網(wǎng)外設參數(shù)
ETH_Config(D_InitStructure, YT8512_PHY_ADDRESS) //這個函數(shù)調(diào)用廠商的eth外設庫函數(shù),主要是配置以太網(wǎng)參數(shù)以及PHY的初始化配置
上述配置成功后就能與PHY進行通信了,然后就可以去配置PHY的寄存器。要實現(xiàn)wol功能,就需要去配置PHY的MAC地址,地址自定義,寫進PHY的MAC地址寄存器。
根據(jù)手冊得到3個MAC寄存器,這里要注意,地址前面標注為“EXT”,表示這3個寄存器為外部擴展寄存器,而對于擴展寄存器的操作在手冊中另有說明,如下
MII_reg0x1e 和MII_reg0x1f 寄存器描述
所以根據(jù)訪問方式去配置 PHY 的MAC寄存器,如下
//寫PHY擴展寄存器的方式
static void apm_phy_wr_ext(uint16_t reg,uint16_t val)
{
//配置PHY MAC地址
ETH_WritePHYRegister(YT8512_PHY_ADDRESS,REG_DEBUG_ADDR_OFFSET,reg);
ETH_WritePHYRegister(YT8512_PHY_ADDRESS,REG_DEBUG_DATA,val);
apm_phy_wr_ext(PHY_MAC_ADDRESS_ADDR1,0x2db2);//04
ETH_WriteDelay(ETH_REG_WRITE_DELAY);
apm_phy_wr_ext(PHY_MAC_ADDRESS_ADDR2,0xe87c);//05
ETH_WriteDelay(ETH_REG_WRITE_DELAY);
apm_phy_wr_ext(PHY_MAC_ADDRESS_ADDR3,0xd769);//06、
}
然后需要配置PHY WOL相關寄存器,如下:
開啟wol機制:
觸發(fā)方式:
配置phy中斷:
//開啟WOL機制
//0x4000
//0x4004
apm_phy_wr_ext(PHY_MACHINING_ADDRESS_ADDR1,0x06);
ETH_WriteDelay(ETH_REG_WRITE_DELAY);
//選擇中斷觸發(fā)方式為1ms的脈沖,通過讀取兩次0x13寄存器清除中斷(0x13寄存器清零,中斷信號變高)
apm_phy_wr_ext(PHY_MACHINING_ADDRESS_ADDR2,0x02ef);//03
//配置中斷為WOL中斷 //0x12 ETH_WritePHYRegister(YT8512_PHY_ADDRESS,PHY_INTERRUPT_ADDRESS,0x40);
清除中斷:
//讀取兩次PHY_MII_REG 0X13 寄存器 清除中斷 ETH_ReadPHYRegister(YT8512_PHY_ADDRESS,PHY_INTERRUPT_EVENT_ADDRESS);
APM_EVAL_DelayMs(50);
ETH_ReadPHYRegister(YT8512_PHY_ADDRESS,PHY_INTERRUPT_EVENT_ADDRESS);
配置流程到這里就基本結束了,驗證就是通過遠程網(wǎng)絡工具發(fā)送配置的Mac地址,然后看有沒有觸發(fā)配置的MCU外部中斷。
總結
MAC 就是以太網(wǎng)控制器,屬于OSI的數(shù)字鏈路層。 phy 屬于OSI的物理層(Physical layer),所以叫phy。文章來源:http://www.zghlxwxcb.cn/news/detail-770535.html
CPU Mac與phy通信通過MII接口,數(shù)據(jù)的傳輸通過MDIO數(shù)據(jù)線。通過配置phy的相關寄存器實現(xiàn)不同的功能。文章來源地址http://www.zghlxwxcb.cn/news/detail-770535.html
到了這里,關于WOL喚醒配置(以太網(wǎng)、PHY、MAC)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!