衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于嵌入式Linux的網絡接口設計

科技綠洲 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-06-22 11:42 ? 次閱讀

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
收藏 人收藏

    評論

    相關推薦

    嵌入式linux管理網絡的工具有哪些

    嵌入式linux下使用networkmanager工具來實現wifi網絡連接,本人使用的是友善之臂的nanopi S2開發板,已經移植好networkmanager工具。關于Netw
    發表于 11-05 08:19

    嵌入式網絡編程+嵌入式Linux系統

    D2.25嵌入式網絡編程+嵌入式Linux系統一、Linux操作系統安裝與使用(命令)二、Linux
    發表于 12-22 07:10

    嵌入式LInux網絡編程

    嵌入式LInux網絡編程 嵌入式工程師、嵌入式講師、10多年嵌入式開發實戰經...
    發表于 12-22 08:17

    基于嵌入式Linux視頻的網絡監控系統設計

    基于嵌入式Linux視頻的網絡監控系統設計 摘要:介紹了一種采用Browser/Server結構、在視頻服務器上內置一個嵌入式Web服務器、基于
    發表于 10-13 14:39 ?734次閱讀
    基于<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>視頻的<b class='flag-5'>網絡</b>監控系統設計

    嵌入式Linux

    嵌入式Linux隨著Linux的迅速發展,嵌入式Linux現在已經有許多的版本,包括強實時的嵌入式
    發表于 06-17 00:36 ?961次閱讀

    基于嵌入式Linux演示使用PWM接口

      PWM(Pulse-width modulation)接口嵌入式設備最為常用的接口之一,常用于電機驅動,蜂鳴器,脈沖計數等嵌入式領域,因此本文就基于
    發表于 09-18 15:24 ?4次下載

    嵌入式Linux下CAN接口調試

    CAN(Controller Area Network)總線是嵌入式設備最為常用的接口之一,常用于汽車以及工業自動化等嵌入式領域,因此本文就基于嵌入式
    發表于 04-29 16:40 ?3301次閱讀

    嵌入式】基于ARM的嵌入式Linux開發總結

    --arm-linux進程編程嵌入式知識點復習六 --arm-linux網絡編程嵌入式知識點復習七 --
    發表于 10-19 18:32 ?26次下載
    【<b class='flag-5'>嵌入式</b>】基于ARM的<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>開發總結

    嵌入式linux和物聯網,嵌入式Linux或RTOS:用于物聯網

    的應用是受設備支持,文件系統,網絡連接和UI支持的可用性推動的。它是針對嵌入式系統的Linux的定制版本,因此具有更小的尺寸和最小的功能,并且需要的處理能力也更少。根據嵌入式系統要求,
    發表于 11-01 16:33 ?15次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>和物聯網,<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>或RTOS:用于物聯網

    嵌入式linux和物聯網,嵌入式Linux或RTOS:用于物聯網

    的應用是受設備支持,文件系統,網絡連接和UI支持的可用性推動的。它是針對嵌入式系統的Linux的定制版本,因此具有更小的尺寸和最小的功能,并且需要的處理能力也更少。根據嵌入式系統要求,
    發表于 11-01 17:37 ?16次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>和物聯網,<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>或RTOS:用于物聯網

    嵌入式Linux(基礎篇)】從標準Linux嵌入式Linux + 嵌入式Linux知識架構

    主要介紹了GNU/Linux的誕生,標準Linux是如何應用在嵌入式系統中的,最后講述了嵌入式Linux知識架構。
    發表于 11-02 09:51 ?34次下載
    【<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>(基礎篇)】從標準<b class='flag-5'>Linux</b>到<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b> + <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>知識架構

    嵌入式Linux network

    文章目錄前言網絡通信簡介服務器程序客戶端程序運行微信公眾號前言這是前篇:嵌入式Linux i.MX開發板嵌入式Linux NFS
    發表于 11-02 10:51 ?15次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b> network

    嵌入式Linux路線

    嵌入式linux開發環境搭建、嵌入式linux開發模型、linux內核移植和文件系統、嵌入式
    發表于 11-02 11:51 ?18次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>路線

    Qt基于networkmanager嵌入式linux的wifi網絡連接

    嵌入式linux下使用networkmanager工具來實現wifi網絡連接,本人使用的是友善之臂的nanopi S2開發板,已經移植好networkmanager工具。關于Netw
    發表于 11-02 11:51 ?13次下載
    Qt基于networkmanager<b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>的wifi<b class='flag-5'>網絡</b>連接

    嵌入式網絡編程+嵌入式Linux系統

    嵌入式網絡編程+嵌入式Linux系統一、 Linux操作系統安裝與使用(命令)二、 Linux
    發表于 11-02 14:51 ?23次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>網絡</b>編程+<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>系統
    百家乐官网国际娱乐场| 桑植县| 澳门金莎娱乐城| 汤原县| 澳门百家乐官网洗码提成查询| 壹贰博百家乐官网娱乐城| 钱柜百家乐官网的玩法技巧和规则| 澳门百家乐公试打法| 互联网百家乐的玩法技巧和规则| 大发888常见断续| 太阳城娱乐城网站| 百家乐官网跟路技巧| 繁体子24画的有| 百家乐娱乐网官网网| 大发888真钱游戏祖比| 清丰县| 大发888娱乐官方网站| 南汇区| 老虎百家乐官网的玩法技巧和规则 | 仪征市| 怎么赢百家乐官网的玩法技巧和规则 | 澳门百家乐心德| 威尼斯人娱乐城游戏| 梁平县| 博彩网百家乐官网的玩法技巧和规则 | 专业百家乐官网分析| 百家乐官网任你博赌场娱乐网规则 | 连环百家乐| 百家乐官网真人游戏赌场娱乐网规则| 百家乐赌博合作| 大发888体育和娱乐| 百家乐官网客户端下载| 百樂坊百家乐官网的玩法技巧和规则 | 联兴棋牌| 闲和庄百家乐官网赌场娱乐网规则 | 百家乐官网赌场牌路分析| 介绍百家乐赌博技巧| 易发国际| 最新百家乐官网的玩法技巧和规则| 缅甸百家乐娱乐场开户注册| 肇州县|