1.1 嵌入式網絡簡介
1.1.1 嵌入式下的網絡硬件接口
提起網絡,我們一般想到的硬件就是“網卡”,現在網卡已經是通過一個芯片來完成了,嵌入式網絡硬件分為兩部分:MAC和PHY,大家都是通過看數據手冊來判斷一款SOC是否支持網絡,如果一款芯片數據手冊說自己支持網絡,一般都是說的這款SOC內置MAC,MAC類似I2C控制器、SPI控制器一樣的外設。
但是光有MAC還不能直接驅動網絡,還需要另外一個芯片:PHY,因此對于內置MAC的SOC,其外部必須搭配一個PHY芯片。內部沒有MAC的SOC芯片,就需要使用外置的MAC+PHY一體芯片了,這里就要牽扯出常見的兩個嵌入式網絡硬件方案了。
1.SOC內部沒有網絡MAC外設
對于內部沒有MAC的SOC芯片,可以使用外置 MAC+PHY一體的網絡芯片來實現網絡功能。比如三星linux開發板里面用的最多的DM9000,DM9000對SOC提供了一個SRAM接口,SOC會以SRAM的方式操作DM9000。
有些外置的網絡芯片更強大,內部甚至集成了硬件TCP/IP協議棧,對外提供一個SPI接口,比如W5500。這個一般用于單片機領域,單片機通過SPI接口與W5500進行通信,由于W5500內置了硬件TCP/IP協議棧,因此單片機就不需要移植軟件協議棧,直接通過SPI來操作W5500,簡化了單片機聯網方案。
這種方案的優點就是讓不支持網絡的SOC能夠另辟蹊徑,實現網絡功能,但是缺點就是網絡效率不高,因為一般芯片內置的MAC會有網絡加速引擎,比如網絡專用DMA,網絡處理效率會很高。而且此類芯片網速都不快,基本就是10/100M。另外,相比PHY芯片而言,此類芯片的成本也比較高,可選擇比較少。
SOC與外部MAC+PHY芯片的連接如圖1-1所示:
圖1-1 主控SOC與外置MAC+PHY芯片連接
2.SOC內部集成網絡MAC外設
我們一般說某個SOC支持網絡,說的就是他內部集成網絡MAC外設,此時我們還需要外接一個網絡PHY芯片。。
目前幾乎所有支持網絡的SOC都是內置MAC外設,比如STM32F4/F7/H7系列、NXP的I.MX系列,內部集成網絡MAC的優點如下:
1)內部MAC外設會有專用的加速模塊,比如專用的DMA,加速網速數據的處理。
2)網速快,可以支持10/100/1000M網速。
3)外接PHY可選擇性多,成本低。
內部的MAC外設會通過MII或者RMII接口來連接外部的PHY芯片,MII/RMII接口用來傳輸網絡數據。另外主控需要配置或讀取PHY芯片,也就是讀寫PHY的內部寄存器,所以還需要一個控制接口,叫做MIDO,MDIO很類似IIC,也是兩根線,一根數據線叫做MDIO,一根時鐘線叫做MDC。
SOC內部MAC外設與外部PHY芯片的連接如圖1-2所示:
圖1-2 內部MAC與外部PHY之間的連接
大家在做項目的時候,如果要用到網絡功能,強烈建議大家選擇內部帶有網絡MAC外設的主控SOC!I.MX6ULL就有兩個10M/100M的網絡MAC外設,正點原子ALPHA開發板板載了兩顆PHY芯片,型號為LAN8720。因此,本章節只講解SOC內部MAC+外置PHY芯片這種方案。
1.1.2 MII/RMII接口
前面我們說了,內部MAC通過MII/RMII接口來與外部的PHY芯片連接,完成網絡數據傳輸,本節我們就來學習一下什么是MII和RMII接口。
1.MII接口
MII全稱是Media Independent Interface,直譯過來就是介質獨立接口,它是IEEE-802.3定義的以太網標準接口,MII接口用于以太網MAC連接PHY芯片,連接示意圖如圖1-3所示:
圖1-3 MII接口
MII接口一共有16根信號線,含義如下:
TX_CLK:發送時鐘,如果網速為100M的話時鐘頻率為25MHz,10M網速的話時鐘頻率為2.5MHz,此時鐘由PHY產生并發送給MAC。
TX_EN:發送使能信號。
TX_ER:發送錯誤信號,高電平有效,表示TX_ER有效期內傳輸的數據無效。10Mpbs網速下TX_ER不起作用。
TXD[3:0]:發送數據信號線,一共4根。
RXD[3:0]:接收數據信號線,一共4根。
RX_CLK:接收時鐘信號,如果網速為100M的話時鐘頻率為25MHz,10M網速的話時鐘頻率為2.5MHz,RX_CLK也是由PHY產生的。
RX_ER:接收錯誤信號,高電平有效,表示RX_ER有效期內傳輸的數據無效。10Mpbs網速下RX_ER不起作用。
RX_DV:接收數據有效,作用類似TX_EN。
CRS:載波偵聽信號。
COL:沖突檢測信號。
MII接口的缺點就是所需信號線太多,這還沒有算MDIO和MDC這兩根管理接口的數據線,因此MII接口使用已經越來越少了。
2.RMII接口
RMII全稱是Reduced Media Independent Interface,翻譯過來就是精簡的介質獨立接口,也就是MII接口的精簡版本。RMII接口只需要7根數據線,相比MII直接減少了9根,極大的方便了板子布線,RMII接口連接PHY芯片的示意圖如圖1-4所示:
圖1-4 RMII接口
TX_EN:發送使能信號。
TXD[1:0]:發送數據信號線,一共2根。
RXD[1:0]:接收數據信號線,一共2根。
CRS_DV:相當于MII接口中的RX_DV和CRS這兩個信號的混合。
REF_CLK:參考時鐘,由外部時鐘源提供, 頻率為50MHz。這里與MII不同,MII的接收和發送時鐘是獨立分開的,而且都是由PHY芯片提供的。
除了MII和RMII以外,還有其他接口,比如GMII、RGMII、SMII、SMII等,關于其他接口基本都是大同小異的,這里就不做講解了。正點原子ALPAH開發板上的兩個網口都是采用RMII接口來連接MAC與外部PHY芯片。
1.1.3 MDIO接口
MDIO全稱是Management Data Input/Output,直譯過來就是管理數據輸入輸出接口,是一個簡單的兩線串行接口,一根MDIO數據線,一根MDC時鐘線。驅動程序可以通過MDIO和MDC這兩根線訪問PHY芯片的任意一個寄存器。MDIO接口支持多達32個PHY。同一時刻內只能對一個PHY進行操作,那么如何區分這32個PHY芯片呢?和IIC一樣,使用
器件地址即可。同一MDIO接口下的所有PHY芯片,其器件地址不能沖突,必須保證唯一,具體器件地址值要查閱相應的PHY數據手冊。
因此,MAC和外部PHY芯片進行連接的時候主要是MII/RMII和MDIO接口,另外可能還需要復位、中斷等其他引腳。
1.1.4 RJ45接口
網絡設備是通過網線連接起來的,插入網線的叫做RJ45座,如圖1-5所示:
圖1-5 RJ45座子
RJ45座要與PHY芯片連接在一起,但是中間需要一個網絡變壓器,網絡變壓器用于隔離以及濾波等,網絡變壓器也是一個芯片,外形一般如圖1-6所示:
圖1-6 網絡變壓器
但是現在很多RJ45座子內部已經集成了網絡變壓器,比如最常用的HR911105A就是內置網絡變壓器的RJ45座。內置網絡變壓器的RJ45座和不內置的引腳一樣,但是一般不內置的RJ45座會短一點。
因此,大家在畫板的時候一定要考慮你所使用的RJ45座是否內置網絡變壓器,如果不內置的話就要自行添加網絡變壓器部分電路!同理,如果你所設計的硬件是需要內置網絡變壓器的RJ45座,肯定不能隨便焊接一個不內置變壓器的RJ45座,否則網絡工作不正常!
RJ45座子上一般有兩個燈,一個黃色(橙色),一個綠色,綠色亮的話表示網絡連接正常,黃色閃爍的話說明當前正在進行網絡通信。這兩個燈由PHY芯片控制,PHY芯片會有兩個引腳來連接RJ45座上的這兩個燈。內部MAC+外部PHY+RJ45座(內置網絡變壓器)就組成了一個完整的嵌入式網絡接口硬件,如圖1-7所示:
圖1-7 嵌入式網絡硬件接口示意圖
1.1.5 PHY芯片基礎知識
PHY是IEEE 802.3規定的一個標準模塊,前面說了,SOC可以對PHY進行配置或者讀取PHY相關狀態,這個就需要PHY內部寄存器去實現。PHY芯片寄存器地址空間為5位,地址 031共32個寄存器,IEEE定義了015這16個寄存器的功能,16~31這16個寄存器由廠商自行實現。
也就是說不管你用的哪個廠家的PHY芯片,其中0~15這16個寄存器是一模一樣的。僅靠這16個寄存器是完全可以驅動起PHY芯片的,至少能保證基本的網絡數據通信,因此Linux內核有通用PHY驅動,按道理來講,不管你使用的哪個廠家的PHY芯片,都可以使用Linux的這個通用PHY驅動來驗證網絡工作是否正常。
事實上在實際開發中可能會遇到一些其他的問題導致Linux內核的通用PHY驅動工作不正常,這個時候就需要驅動開發人員去調試了。但是,隨著現在的PHY芯片性能越來越強大,32個寄存器可能滿足不了廠商的需求,因此很多廠商采用分頁技術來擴展寄存器地址空間,以求定義更多的寄存器。
這些多出來的寄存器可以用于實現廠商特有的一些技術,因此Linux內核的通用PHY驅動就無法驅動這些特色功能了,這個時候就需要PHY廠商提供相應的驅動源碼了,所以大家也會在Linux內核里面看到很多具體的PHY芯片驅動源碼。
不管你的PHY芯片有多少特色功能,按道理來講,Linux內核的通用PHY驅動是絕對可以讓你這PHY芯片實現基本的網絡通信,因此大家也不用擔心更換PHY芯片以后網絡驅動編寫是不是會很復雜。
IEEE802.3協議英文原版中的 “22.2.4 Management functions”章節,此章節對PHY的前16個寄存器功能進行了規定,如圖1-8所示:
圖1-8 IEEE規定的前16個寄存器
關于這16個寄存器的內容協議里面也進行了詳細的講解,這里就不分析了。大家可以找個具體的PHY芯片數據手冊對比看一下,比如百M網絡最常用的LAN8720A這個PHY,大家可以看一下LAN8720前面幾個寄存器結構是否和圖1-8中的一樣。
關于嵌入式Linux的網絡接口設計就講到這里。
-
嵌入式
+關注
關注
5092文章
19177瀏覽量
307655 -
Linux
+關注
關注
87文章
11345瀏覽量
210389 -
網絡接口
+關注
關注
0文章
87瀏覽量
17291
發布評論請先 登錄
相關推薦
評論