車載以太網(wǎng)基礎(chǔ)篇之Ethernet Driver
前言
首先,請(qǐng)問大家?guī)讉€(gè)小小問題,你清楚:
- 你知道Eth Driver模塊的主要作用是什么嗎?
- EthDriver與以太網(wǎng)控制器,以太網(wǎng)收發(fā)器,都有哪些關(guān)系呢?
- Eth Driver的常見函數(shù)接口有哪些呢?
- Eth Driver一般存在區(qū)別其他驅(qū)動(dòng)特有的特性呢?
今天,我們就來一起探索并回答這些問題。為了便于大家理解,以下是本文的主題大綱:
正文
正如前文《車載以太網(wǎng)基礎(chǔ)篇之EthIf》所述,Eth Driver將作為配置以太網(wǎng)的底層驅(qū)動(dòng),不僅能夠被EthIf來進(jìn)行調(diào)用,同時(shí)能夠滿足Eth收發(fā)器驅(qū)動(dòng)的調(diào)用需求,因?yàn)橛斜匾钊肓私庀萝囕d以太網(wǎng)驅(qū)動(dòng)(Eth Driver)在整個(gè)AUTOSAR層級(jí)中所扮演的重要作用。
如下圖1所示,Ethernet If模塊不僅會(huì)直接控制Ethernet Driver,如果存在Ethernet Switch驅(qū)動(dòng)或者Ethernet Transiver驅(qū)動(dòng)時(shí),那么就會(huì)間接控制Ethernet Driver模塊,總而言之,以太網(wǎng)驅(qū)動(dòng)不僅能夠完成以太網(wǎng)數(shù)據(jù)的正常收發(fā),同時(shí)也能夠?qū)崿F(xiàn)針對(duì)以太網(wǎng)網(wǎng)關(guān)或者以太網(wǎng)收發(fā)器的直接配置。
AUTOSAR層次關(guān)系
按照AUTOSAR標(biāo)準(zhǔn)文檔規(guī)范,有關(guān)Eth Driver模塊在整個(gè)AUTOSAR軟件架構(gòu)的具體位置描述如下圖2所示:
如上圖所示,可以得出如下幾個(gè)基本結(jié)論:
- 一個(gè)以太網(wǎng)協(xié)議棧中可以存在多家供應(yīng)商的以太網(wǎng)控制器,同時(shí)針對(duì)每家供應(yīng)商的控制器進(jìn)行單獨(dú)控制,互不影響;
- 同一供應(yīng)商的以太網(wǎng)控制器可以存在多個(gè),但使用的以太網(wǎng)控制器驅(qū)動(dòng)可以僅使用同一套;
- 上述三家不同供應(yīng)商的以太網(wǎng)驅(qū)動(dòng)作為標(biāo)準(zhǔn)AUTOSAR MCAL的一部分,能夠完全實(shí)現(xiàn)與底層硬件的解耦;
模塊主體功能
Eth Driver作為車載以太網(wǎng)協(xié)議棧最為重要的底層構(gòu)件,小T將帶領(lǐng)大家從以下幾個(gè)層面初步了解認(rèn)識(shí)以太網(wǎng)驅(qū)動(dòng):
- 以太網(wǎng)各個(gè)不同驅(qū)動(dòng)內(nèi)部的索引關(guān)系如何設(shè)定?
- 以太網(wǎng)驅(qū)動(dòng)如何進(jìn)行數(shù)據(jù)發(fā)送;
- 以太網(wǎng)驅(qū)動(dòng)如何進(jìn)行數(shù)據(jù)接收;
- 以太網(wǎng)驅(qū)動(dòng)特性如QoS,硬件時(shí)間戳,Offloading都具備什么功能?
- 在以太網(wǎng)驅(qū)動(dòng)常見的通信協(xié)議如MDIO,DMA如何在驅(qū)動(dòng)中發(fā)揮作用?
?
驅(qū)動(dòng)索引規(guī)則
如下圖3所示,每個(gè)以太網(wǎng)驅(qū)動(dòng)彼此都是獨(dú)立的,同時(shí)其索引編號(hào)是從0開始,但是每個(gè)驅(qū)動(dòng)內(nèi)部的bufidx均可以從0開始,彼此之間互不干擾。
數(shù)據(jù)發(fā)送過程
上層應(yīng)用如果需要通過Eth Driver將數(shù)據(jù)發(fā)送出去,那么就需要通過EthIf模塊間接調(diào)用Eth Driver的發(fā)送函數(shù)Eth_Transmit來完成數(shù)據(jù)的發(fā)送。
其中EthIf模塊的數(shù)據(jù)發(fā)送功能分為兩者模式,一種是Polling模式,另外一種就是Interrupt模式,一般而言都優(yōu)先采用中斷模式來滿足系統(tǒng)實(shí)時(shí)性要求。
如下圖4為Polling模式,在Polling模式中可以看到在EthIf_MainfunctionTx函數(shù)中會(huì)去輪詢是否發(fā)送成功的標(biāo)志,這個(gè)也是Polling模式的典型特征。
Polling模式
Interrupt模式
如下圖5所示為以太網(wǎng)數(shù)據(jù)發(fā)送的中斷模式,中斷模式相比Polling模式可以看出并沒有使用到EthIf_MainfunctionTx函數(shù),而是使用Eth模塊的中斷函數(shù)來確認(rèn)發(fā)送是否成功。
數(shù)據(jù)接收功能
同理相比數(shù)據(jù)發(fā)送功能,EthIf模塊的數(shù)據(jù)接收功能也可以分為Polling模式與中斷模式兩種,如下圖9所示為EthIf模塊的數(shù)據(jù)接收Polling模式。
如下圖6所示,如果EthIf模塊數(shù)據(jù)接收采用Polling模式,那么就需要使用到EthIf_MainfunctionRx函數(shù),在該函數(shù)中去調(diào)用EthIf_RxIndication來告知上層數(shù)據(jù)已成功被接收,使用該模式會(huì)大大降低數(shù)據(jù)接收效率,一般接收優(yōu)先采用中斷模式。
Polling模式
Interrupt模式
如下圖7所示為EthIf模塊的數(shù)據(jù)接收中斷功能,在該模式中可以看到通過Eth模塊通過中斷函數(shù)來進(jìn)而告知上層數(shù)據(jù)已被接收。
驅(qū)動(dòng)特性簡介
以太網(wǎng)驅(qū)動(dòng)相比其他驅(qū)動(dòng)而言,存在很多諸多獨(dú)有的特性,小T將會(huì)帶領(lǐng)大家來了解這些特性,爭取對(duì)這些特性有個(gè)基本的認(rèn)識(shí),以便我們對(duì)以太網(wǎng)驅(qū)動(dòng)有個(gè)較為全面的了解,應(yīng)用它時(shí)也會(huì)更加得心應(yīng)手。
以下列舉了以太網(wǎng)驅(qū)動(dòng)(網(wǎng)卡)常見的三種特性:Offloading 特性,硬件TimeStamp特性,QoS特性。
Offloading特性
“Offload"顧名思義表示卸載的意思,那么給誰卸載以及卸載什么呢?其實(shí)該特性存在的目的就是為了給CPU卸載,卸載的方式如將CRC計(jì)算交給硬件來做,或者分包組包的動(dòng)作也放在硬件中來處理,從而減小這部分在以太網(wǎng)協(xié)議棧中的占用時(shí)間,降低軟件運(yùn)行延遲造成的性能不足以及CPU loading過高等問題。
在AUTOSAR規(guī)范中針對(duì)以太網(wǎng)驅(qū)動(dòng)(Eth Driver)發(fā)送或者接收?qǐng)?bào)文的CRC進(jìn)行了Offloading的特別說明如下:
- 對(duì)于IPV4幀,如果EthCtrlEnableOffloadChecksumIPv4設(shè)置成TRUE,那么就可以O(shè)ffloading CRC;
- 對(duì)于ICMP幀,如果 EthCtrlEnableOffloadChecksumICMP設(shè)置成TRUE,那么就可以O(shè)ffloading CRC;
- 對(duì)于TCP幀,如果 EthCtrlEnableOffloadChecksumTCP 設(shè)置成TRUE,那么就可以O(shè)ffloading CRC;
- 對(duì)于UDP幀,如果 EthCtrlEnableOffloadChecksumUDP設(shè)置成TRUE,那么就可以O(shè)ffloading CRC;
值得注意的是這些CRC計(jì)算都僅會(huì)在硬件中完成,對(duì)于接收方而言,CRC校驗(yàn)檢測(cè)會(huì)通過硬件來完成,如果CRC校驗(yàn)不通過,那么就會(huì)丟棄該接收到的幀。
硬件TimeStamp特性
如之前文章《cantsyncc》與《StbM》所述,大家相比CAN時(shí)間同步有了一個(gè)基本的認(rèn)識(shí)與了解,與CAN時(shí)間同步對(duì)比,以太網(wǎng)時(shí)間同步協(xié)議采用的IEEE1588或者IEEE802.1AS的PTP(Precise Time Protocal)協(xié)議,該協(xié)議需要確認(rèn)使用的網(wǎng)卡(MAC)是否本身支持。
該協(xié)議使用到通過底層硬件MAC來打上對(duì)應(yīng)的以太網(wǎng)報(bào)文收發(fā)的時(shí)間戳,能夠最大限度的降低軟件時(shí)間戳所帶來的不確定性,將時(shí)間同步精度能夠做到微秒甚至是納微秒級(jí)別。
AUTOSAR規(guī)范中定義的EthTsync模塊使用的是雙步端延時(shí)PTP時(shí)間同步協(xié)議,如下為基于該協(xié)議的Time Master與Time Slave兩者之間的交互關(guān)系,后期也會(huì)針對(duì)EthTsync模塊進(jìn)行單一講解,敬請(qǐng)關(guān)注。
如上圖8所示,如果是基于單步模式下的以太網(wǎng)端延時(shí)機(jī)制的PTP時(shí)間同步,那么虛線標(biāo)注的部分則不會(huì)有,如果是基于雙步模式下的以太網(wǎng)端延時(shí)機(jī)制的PTP時(shí)間同步,那么虛線標(biāo)注的部分必須要有。
值得注意的是在IEEE802.1AS存在一個(gè)GrandMaster概念,需要通過BMCA(Best Master Clock Algorithm)來實(shí)現(xiàn),不過由于汽車內(nèi)部屬于靜態(tài)網(wǎng)絡(luò),因此只會(huì)存在唯一的GrandMaster,無需使用到BMCA動(dòng)態(tài)分配確認(rèn)算法。
以太網(wǎng)硬件實(shí)現(xiàn)PTP協(xié)議有如下兩種方式:
- 以太網(wǎng)MAC控制器支持PTP協(xié)議,常見雙步模式;
- 有些TI的PHY層也可以支持PTP,不過一般是單步模式,如果使用AUTOSAR標(biāo)準(zhǔn)的EthTsync模塊,要提前確認(rèn)是否支持雙步模式;
QoS特性
Qos是IEEE 802.1P協(xié)議,該協(xié)議運(yùn)行在以太網(wǎng)第二層,用來保證在以太網(wǎng)數(shù)據(jù)轉(zhuǎn)發(fā)擁堵時(shí)通過優(yōu)先級(jí)方式來保證重要的數(shù)據(jù)包能夠及時(shí)發(fā)送出去。
普通的以太網(wǎng)二層報(bào)文是不包含優(yōu)先級(jí)字段的,IEEE802.1P是IEEE802.1Q(VLAN標(biāo)簽技術(shù))標(biāo)準(zhǔn)的擴(kuò)充技術(shù),彼此之間協(xié)同工作,802.1Q雖然定義了標(biāo)簽字段,但是并沒有定義與使用優(yōu)先級(jí),而使用802.1P協(xié)議補(bǔ)充之后便可以正常使用優(yōu)先級(jí),正如IEEE 802.1P與IEEE802.1Q兩者協(xié)同定義的標(biāo)簽字段如下圖9所示:
以太網(wǎng)幀通過QoS特性來通過802.1Q標(biāo)簽中的802.1P用戶優(yōu)先級(jí)(COS)來進(jìn)行標(biāo)記,其優(yōu)先級(jí)具備8級(jí),從優(yōu)先級(jí)0至優(yōu)先級(jí)7,如下圖10所示:
通訊協(xié)議介紹
在使用車載以太網(wǎng)驅(qū)動(dòng)的過程中,我們經(jīng)常性會(huì)碰到如下三種常見的通訊協(xié)議,這三種通訊協(xié)議對(duì)于車載以太網(wǎng)正常工作,非常重要:
- MII接口通訊協(xié)議,用于以太網(wǎng)MAC層與物理層收發(fā)器PHY之間的數(shù)據(jù)傳輸協(xié)議;
- MDIO通訊協(xié)議,用于以太網(wǎng)MAC層控制PHY的狀態(tài)設(shè)置與獲取協(xié)議;
- DMA通訊協(xié)議,用于以太網(wǎng)MAC層與CPU之間的數(shù)據(jù)搬運(yùn)通訊協(xié)議,提高數(shù)據(jù)搬運(yùn)效率,降低CPU負(fù)載;
MII接口通訊協(xié)議基礎(chǔ)介紹
MII接口時(shí)IEEE802.3定義的以太網(wǎng)行業(yè)標(biāo)準(zhǔn),該標(biāo)準(zhǔn)就是為了解決,以太網(wǎng)MAC層與PHY之間的兼容性,保證即使更換了不同類型的MAC,PHY始終能夠正常工作。
MII接口隨著技術(shù)的發(fā)展與進(jìn)步,目前已經(jīng)衍生出了多種增強(qiáng)型MII接口,常用的就有MII,RMII,SMII,SSMII,SSSMII,GMII,RGMII,SGMII ,其中對(duì)于車載以太網(wǎng)最為常用的還是RGMII接口。
具體的通訊協(xié)議介紹不在本文中進(jìn)行展開,該接口的選擇只要軟件上MCAL配置使用對(duì)應(yīng)的MII接口類型,其余都是硬件行為,硬件上保證接口正常連接即可,如下圖11所示,介紹了MII接口在以太網(wǎng)硬件連接上的所處關(guān)系:
MDIO協(xié)議基礎(chǔ)介紹
首先,MDIO是Management Data Input/Output的縮寫,且該接口協(xié)議在IEEE802.3中也有所體現(xiàn),是一種專門用于管理MAC與PHY之間的串口數(shù)據(jù)接口,基本功能如下:
- 讀取PHY相關(guān)寄存器的值;
- 獲取PHY的Link及其他工作狀態(tài)等;
- 設(shè)置對(duì)應(yīng)PHY的工作模式等;
除此之外,MDIO協(xié)議接口是一種實(shí)時(shí),半雙工,串行的數(shù)據(jù)接口,由兩個(gè)線組成,一個(gè)叫做MDIO線,另外一根則是MDC線。
MDIO線負(fù)責(zé)數(shù)據(jù)的傳輸,MAC與PHY之間可以雙向傳輸,寫寄存器時(shí)由MAC驅(qū)動(dòng),讀寄存器由PHY驅(qū)動(dòng),先傳高位(MSB),再傳低位(LSB),且該P(yáng)in腳需要上拉1.5kΩ-10kΩ范圍內(nèi)的電阻。
MDC線負(fù)責(zé)傳遞時(shí)鐘同步信號(hào),只能單向通過MAC驅(qū)動(dòng),且只能在MDC上升沿對(duì)MDIO線上的數(shù)據(jù)進(jìn)行采樣,該MDC允許最大的時(shí)間頻率一般都通過PHY決定。
一個(gè)MDIO接口可支持32個(gè)PHY地址,該接口有32個(gè)寄存器地址,其中前16個(gè)寄存器已經(jīng)在標(biāo)準(zhǔn)中定義,其余16個(gè)則有各個(gè)器件廠商自行定義。
根據(jù)IEEE802.3協(xié)議中將MDIO協(xié)議分為兩種幀格式,分別為Clause 22與Clause 45,其中Clause 22主要用于千兆以下的以太網(wǎng)PHY,而Clause 45則用于千兆以上的以太網(wǎng)PHY。
接下來就針對(duì)Clause 22與Clause 45兩者協(xié)議的基本使用與區(qū)別做個(gè)簡要說明:
Clause 22讀數(shù)據(jù)幀格式如下:
Clause 22寫數(shù)據(jù)幀格式如下:
Clause 45 地址幀格式如下:
Clause 45 讀數(shù)據(jù)幀格式如下:
Clause 45 寫數(shù)據(jù)幀格式如下:
如下圖17,小T根據(jù)上述Clause 22與Clause 45的幀格式定義,列舉了兩者之間的幀格式的定義說明以及區(qū)別聯(lián)系,這樣便于大家對(duì)兩者格式的使用有個(gè)基本認(rèn)識(shí)。
DMA協(xié)議基礎(chǔ)介紹
DMA協(xié)議對(duì)于使用過它的朋友而言,特別是做底層驅(qū)動(dòng)開發(fā)的朋友應(yīng)該不會(huì)陌生,DMA就是為了在不需要CPU干預(yù)的前提下來實(shí)現(xiàn)外設(shè)與內(nèi)存之間的搬運(yùn)或者內(nèi)存與內(nèi)存之間的搬運(yùn),那么以太網(wǎng)DMA也是如此,就是為了實(shí)現(xiàn)以太網(wǎng)外設(shè)與內(nèi)存之間的數(shù)據(jù)交換。
本文不會(huì)對(duì)DMA協(xié)議本身做過多的解釋說明,旨在說明DMA在以太網(wǎng)數(shù)據(jù)收發(fā)過程中如何起作用,通過如下的兩張圖來了解認(rèn)識(shí)DMA在以太網(wǎng)數(shù)據(jù)收發(fā)過程中的用途。
以太網(wǎng)DMA發(fā)送
如下圖18所示,Tx ringbuffer作為DMA描述符,DMA在以太網(wǎng)發(fā)送過程中的作用表現(xiàn):
以太網(wǎng)DMA接收
如下圖19所示,Tx Ringbuffer作為DMA描述符,DMA在以太網(wǎng)接收過程中的作用表現(xiàn):
常用函數(shù)總結(jié)
為了便于大家更好的使用Eth Driver這個(gè)模塊,小T整理了關(guān)于車載以太網(wǎng)驅(qū)動(dòng)這部分常用的函數(shù)接口與功能說明,如下圖19所示:
文章來源:http://www.zghlxwxcb.cn/news/detail-436714.html
更多精彩內(nèi)容,敬請(qǐng)關(guān)注公號(hào)“ADAS與ECU之吾見”?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-436714.html
到了這里,關(guān)于車載以太網(wǎng)基礎(chǔ)篇之Eth Driver的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!