那曲檬骨新材料有限公司

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

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

3天內不再提示

基于單片機ARM實現TCP/IP協議棧的設計

電子設計 ? 來源:單片機與嵌入式系統應用 ? 作者:廖日坤,紀越峰, ? 2021-05-26 11:24 ? 次閱讀

作者:廖日坤,紀越峰,黃小迅

隨著計算機網絡技術和電子信息技術的迅猛發展,Internet的使用越來越普及,信息家電和智能儀表等能夠接入Iriternet的非PC設備越來越多,將各類電子設備接入Internet的需求也越來越大。

電子設備接入Internet。有多種解決方案:在51系列單片機上運行經過裁剪的TCP/IP協議棧;使用一些ASIC實現TCP/IP的芯片,如Analog Devices推出的Internet Modem;也可使用嵌入式操作系統自帶的TCP/IP協議棧。在某些對網絡速度要求不高的領域,可用單片機實現TCP/IP;在對性能要求高的場合,可選擇后兩種方案。

1 嵌入式TCP/IP的硬件結構

圖1是嵌入式TCP/IP系統的硬件結構。其中CS8900A是Cirrus Logic的網絡控制器,芯片內部已設置幀過濾器自動拋棄無效幀,減輕CPU負荷,提高CPU對網絡的訪問效率。CS8900A工作機制主要是通過設置好其內部各寄存器的值,然后就可以自動開始工作。在網絡接口部分,由于是RJ45接口,所以須使用E2023傳輸線變壓器對網絡中的信號進行轉換。

pIYBAGCtwJWAaajIAADRxKleIs0466.png

通常TCP/IP協議棧需要大量的RAM來存儲需要被應答的TCP包。如果在規定時間內未被應答,則重發該TCP包;被應答以后釋放。為了減小RAM的使用量,當數據包需要重新發送時,如果能夠重新產生數據包所需的數據,則可不存儲需要被應答的TCP包。

因為網絡中數據非常多,如果把所有的數據都讀到內存中再判斷是否應丟棄幀,則顯然效率不高。所以邊讀取數據邊判斷而沒有一開始就把整個幀全部讀到內存中。在程序里定義了幀中各部分的相對地址,可以方便地對幀的各字節尋址。這樣的設計是基于提高訪問速度考慮的。

在CPU中幀的存放方式,定義PacketRAM變量為存放幀的首地址。圖2給出了CPU中TCP/IP的內存劃分,以及內存中幀的各個字節的定義和相對位置。

pIYBAGCtwUOAOiSUAABw3J5dJLA484.png

2 嵌入式TCP/IP的優化設計

TCP/IP一般采用C語言或混合匯編。使用可重入函數和一般指針(gellerc pointer)使得程序代碼增大,運行速度降低;使用函數指針時,需要手動重建調用樹(calltree),或將函數指針調用的函數設置為可重入函數。

2.1 嵌入式TCP/IP輸入輸出流程

與PC機TCP/IP協議一樣,嵌入式TCP/IP采用協議分層的結構:應用層、TCP層、IP層和網絡設備接口層。圖3描述了輸入和輸出數據包的流程以及需要調用的函數。

o4YBAGCtwUmATBBuAABu158xsIA842.png

輸出時,TCP層先查看unsend隊列,發現非空,將數據包插入隊列;發現為空,則查看對方窗口是否夠大(能夠接收這個數據包)。然后,填寫TCP頭部信息。IP層選擇網絡設備接口,目的IP和該接口的子網掩碼相“與”是否等于子網掩碼,然后調用這個接口的Output函數來發送。

輸入時,Timer()函數調用每個接口的Input函數。IP層判斷IP版本、IP校驗和,以及是否應轉發數據包,然后根據IP頭部的protocol字段將包傳給相應的高層處理。TCP層,須判斷TCP校驗和,并在現有的套接字中查找,判斷是否有套接字可接收這個數據包,判斷TCP序號是否為希望的,然后更新這個連接的狀態(包括釋放被應答的數據包和TCP狀態機的轉化等),調用該套接字的回調函數recv。

2.2 嵌入式TCP/IP的程序結構

Tliner函數功能是調用TCPTimer處理TCP數據包的重發等功能,調用每個接口的Input函數接收到達的數據包。Timer函數必須在短時間(一般為20ms)內被調用一次,否則接收數據包和TCP定時等功能將停止。

如圖4所示,程序主流程是一個大循環,在循環中處理發送數據包等應用層協議的同時,查詢變量bTimeOut,在定時中斷中將bTimerOut設置為真。應用層在程序流程中反復查詢bTimerOut是否為真,若為真則調用Timer(),然后設置bTimerOut為假。

pIYBAGCtwU-AZrXjAAA7AiMb5tc898.png

在使用嵌入式操作系統時,還要注意網絡設備驅動函數被重入的問題。以NE2K的以太網卡為例,拷貝數據包到網卡緩存前要先設置寄存器(如起始地址)。如果設置完寄存器以后中斷發生且放重入。則寄存器的設置被修改,中斷返回以后拷貝將出錯。

2.3 嵌入式TCP/IP運行速度優化

TCP/IP發送過程中主要的運算量集中在3部分:應用程序將數據拷貝到RAM;計算TCP校驗和;將RAM中的數據包拷貝到網絡設備的發送緩沖區。對于每個字節數據,兩次拷貝大致共使用12×2=24個指令周期;計算TCP校驗和使用16個指令周期。采用12MHz晶振,最高網絡傳輸速度為25KB/s。

為了提高速度可以采用快速CPU或提高晶振頻率。另外,盡量避免使用Reentrant函數。Reentrant類型的函數比一般函數速度要慢很多,但某些時候為了程序結構的需要必須使用Reentrant,這就需要在速度和結構之間作一個選擇。選擇的方法有:使用“指定存儲類型”的指針(memoryr-specific pointer);精簡協議棧去除運算量大但是用處不大的功能,目前TCP定時重發時間是固定的,也沒有擁塞窗口控制和IP層路由;防止數據包不必要的拷貝;優化計算校驗和與內存拷貝函數。

3 TCP/IP的嵌入式實現

TCP/IP協議實現一般以軟件方式嵌人到ROM中,然后通過網絡通信技術與專用嵌入式網關連接,運行TCP/IP協議,并提供TCP/IP到用戶的輕型網絡的連接和路由功能。

3.1 內存管理方法和無多余數據包拷貝的實現

嵌入式TCP/IP的內存管理可用鏈表方法,即根據數據包大小分配相應大小的內存塊。如圖5所示,鏈表將內存塊鏈接起來,used字段表示該內存塊是否正在使用,pStart和pEnd表示數據部分有效數據的開始地址和結束地址。

o4YBAGCtwVWASuzgAAA-f1F44bQ610.png

分配時,搜索內存鏈表找到一個沒有分配的比所需空間大的內存塊,截取所需的大小。該內存塊被截取以后可能還有較多剩余,這時將剩余部分從原內存塊中分離出來,成為一個新的內存塊,并插入鏈表。釋放時,將used置為假。如果pNext或pPre指向的鏈表單元也是空閑的,則將其與自己合并。以防止內存分片。在協議層之間傳送數據包只要傳送內存塊的起始地址即可。這種內存管理方法空間浪費小,但運算量相對較大。

3.2 整序、重發與窗口控制的實現

使用隊列緩存的方式來實現整序、重發和窗口控制。隊列的一個元素指向一個數據包,隊列的最大長度沒有限制。

對于整序,使用ooSeq隊列,如果發現接收的TCP包序號并不是希望的,但序號在接收窗口內,此時不能立刻接收這個包也不應丟棄,先將這個包放入ooSeq隊列。當一個希望的TCP包被接收以后,再查看ooseq隊列現在是否有TCP包成為了希望的數據包,如果有則將其取出并處理。

對于重發,使用unacked隊列,每個需要被應答的TCP數據包發送以后都要放入unacked隊列,直到被應答后才從隊列中刪除。TCP重發定時只針對unacked隊列第一個TCP包。如果定時超出,則重新發送;如果重發次數超出規定值,則報錯。

對于窗口控制,使用unsend隊列,如果發現對方的窗口過小無法接收這個數據包,則只發送部分數據,將多余部分放入unsend隊列,等待對方發來TCP包通知新的窗口大小時,再次判斷是否可以發送。在unsend隊列不為空的情況下,須發送的數據包都應插入unsend隊列。

3.3 捎帶應答的實現

捎帶應答是指,當對方一個需要應答的TCP包到達時,不馬上給予應答,而是等待一段較短的時間。如果在這段時間內有數據發送,則會捎帶給予應答,從而減少了包的發送數量。

若暫時沒有數據須發給對方或數據還未準備好,則等待一定的時間;如果在該時間內準備好了數據,則可使用捎帶應答。使用捎帶應答就不可能對每個幀都作確認,可用對某個幀的確認來代替對該幀之前所有幀的確認。

4 總 結

嵌入式系統中大量存在的是8/16位低速處理器,在進行Internet接入時,由于本身資源的限制,很難實現完整的TCP/IP協議。本文從既實現相應的功能又節省系統資源角度出發,對協議進行有針對性的模塊化裁剪和優化設計,可以在單片機ARM上嵌入TCP/IP協議簇實現嵌入式Internet接入。

經過優化設計的嵌入式TCP/IP,支持套接字形式的多個TCP連接;支持多個網絡設備;支持通過網關發送數據包和數據包轉發功能,響應ping命令;支持TCP包的整序、重發和窗口控制流量控制。實踐證明,這種設計方式靈活,能按用戶需求實現很多復雜的功能。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 變壓器
    +關注

    關注

    159

    文章

    7524

    瀏覽量

    136338
  • 單片機
    +關注

    關注

    6043

    文章

    44622

    瀏覽量

    638522
  • 控制器
    +關注

    關注

    112

    文章

    16445

    瀏覽量

    179444
收藏 人收藏

    評論

    相關推薦

    嵌入式TCP/IP協議單片機技術在網絡通信中的應用

    介紹了嵌入式TCP/IP協議單片機在網絡通信中的數據傳輸技術。將TCP/IP
    發表于 05-13 11:17 ?5523次閱讀

    基于 51 系列單片機TCP/ip協議C程序

    基于 51 系列單片機TCP/ip協議C程序
    發表于 01-06 21:28

    一種uIP TCP/IP協議在51系列單片機上的實現

    單片機,被應用在各個領域內。因此使用uIP這種免費的TCP/IP協議解決由51內核的單片機構建
    發表于 08-08 09:27

    協議介紹--TCP/IP

    協議介紹本協議開發人:楊文斌,聯系方式:qq:2929422782.參數說明1)本協議完全
    發表于 09-03 15:03

    怎么實現TCPIP協議單片機上的移植?

    本文實現TCPIP協議單片機上的移植,完成了系統的硬件電路和相關嵌入式軟件的設計,應用V
    發表于 06-03 07:08

    基于ARMTCP/IP協議LwlP是如何實現的?

    嵌入式網絡通信系統的硬件平臺由哪幾個部分組成?基于ARMTCP/IP協議LwlP是如何實現
    發表于 06-04 06:37

    TCP/IP協議單片機在網絡通信中的數據傳輸技術

    介紹了嵌入式TCP/IP協議單片機在網絡通信中的數據傳輸技術。將TCP/IP
    發表于 04-16 22:04 ?4465次閱讀
    <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>協議</b><b class='flag-5'>單片機</b>在網絡通信中的數據傳輸技術

    51+單片機TCP-IP+協議ZLIP源碼

    單片機上網技術,是當前的一個熱門技術。單片機上網技術中的一個重要部分是在單片實現 TCP/IP
    發表于 12-17 16:11 ?9次下載

    Microchip TCP/IP協議

    在Microchip單片機實現傳輸控制協議/網際協議(Transmission Control ProtocoUlnternet Protocol,
    發表于 04-20 16:04 ?5次下載
     Microchip <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>協議</b><b class='flag-5'>棧</b>

    Microchip的TCPIP協議的詳細中文資料免費下載

    在 Microchip 單片機實現傳輸控制協議 / 網際協議(Transmission Control Protocol/Internet Protocol,
    發表于 06-15 08:27 ?35次下載
    Microchip的<b class='flag-5'>TCP</b>和<b class='flag-5'>IP</b><b class='flag-5'>協議</b><b class='flag-5'>棧</b>的詳細中文資料免費下載

    Microchip TCP/IP精簡協議

    閃存 (僅 UDP)和集成 ≥ 16 KB 閃存(TCP/IP)的單片機提供更優化的(占用的閃存和 RAM空間較?。?b class='flag-5'>TCP/IP
    發表于 04-01 15:36 ?17次下載
    Microchip <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b>精簡<b class='flag-5'>協議</b><b class='flag-5'>棧</b>

    Microchip TCP/IP協議

    在 Microchip 單片機實現傳輸控制協議 / 網際協議(Transmission Control Protocol/Internet Protocol,
    發表于 04-02 14:28 ?22次下載
    Microchip <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>協議</b><b class='flag-5'>棧</b>

    基于PIC單片機TCP/IP協議實現

    電子發燒友網站提供《基于PIC單片機TCP/IP協議實現.ppt》資料免費下載
    發表于 10-20 10:03 ?2次下載
    基于PIC<b class='flag-5'>單片機</b>的<b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>協議</b><b class='flag-5'>棧</b><b class='flag-5'>實現</b>

    TCP/IP協議的設計與實現_中文

    電子發燒友網站提供《TCP/IP協議的設計與實現_中文.pdf》資料免費下載
    發表于 07-03 11:28 ?4次下載

    LwIP協議源碼詳解—TCP/IP協議實現

    電子發燒友網站提供《LwIP協議源碼詳解—TCP/IP協議實現.pdf》資料免費下載
    發表于 07-03 11:22 ?3次下載
    优博百家乐官网现金网平台| 顶级赌场是骗人的吗| 百家乐赌场游戏平台| 做生意门朝哪个方向好| 在线百家乐官网作| 鑫鑫百家乐官网的玩法技巧和规则| 长沙百家乐官网的玩法技巧和规则| 金彩百家乐官网的玩法技巧和规则| 百家乐官网特殊计| 微信百家乐官网群规则大全| 百家乐网站哪个好| 赌博百家乐判断决策| 小孟百家乐的玩法技巧和规则| 威尼斯人娱乐场网址| 德州扑克书籍| 金冠娱乐城官网| 真人百家乐官网来博| 百家乐官网筹码防伪定制| 百家乐官网庄家必赢诀窍| 澳门赌百家乐官网的玩法技巧和规则| 百家乐官网天下| 百家乐园云鼎娱乐平台| 威尼斯人娱乐城开户地址| 大发888注册优惠代码| 赌博拘留几天| 鸿利国际娱乐城| 百家乐官网注册送彩金平台| 百家乐官网英皇娱乐| 百家乐娱乐城博彩正网| 百家乐试玩| 瑞丰国际娱乐场| 星河百家乐官网现金网| 真人百家乐官网游戏网| 百家乐投注方向| 大发888的概述| 线上百家乐官网可靠吗| 百家乐官网必胜打| 七胜百家乐赌场娱乐网规则| 百家乐官网平游戏| 新濠百家乐娱乐城| 88真人娱乐城|