新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于OMAP平臺的TCP/IP開發及實現

        基于OMAP平臺的TCP/IP開發及實現

        作者: 時間:2014-05-20 來源:網絡 收藏

        處理TCP層函數,判斷接收包的類型,如果是TCP包,則調用TCP接收函數,TCP接收函數用指定條件進行過濾,找到該包所屬的連接或完成一個新連接的被動打開,根據TCP的狀態轉換則完成11種狀態的轉移,并且實現了多路數據同時、雙向的傳輸。

        本文引用地址:http://www.104case.com/article/247106.htm

        TCP的發送函數包括主動打開、主動關閉(由上層調用完成新連接的主動打開,或主動關閉一個已建立的連接)和發送控制包(用于TCP連接的建立與終止,會在TCP接收函數中調用,從而實現TCP的轉換)三個函數。

        TCP層還實現了兩個定時器,TCP重傳定時器函數可提供服務可靠性的有效保障;TCP保活定時器能夠避免資源的浪費。

        3.2 程序特點分析

        (1)簡單性:4.4BSD-Lite版的完整內核實現大約有15 000行,而本程序源代碼約有1 400行,更適合嵌入式系統的應用。

        (2)可重用性:本程序分層清晰。對于不同的嵌入式系統,可能使用的CPU和以太網卡不同,這就需要針對其特點的以太網層設計,而ARP、IP、UDP、TCP則不需要改動。

        (3)可拓展性:協議是底層網絡協議,本程序留有很好的接口,可在其上構件更高層的網絡協議,包括H.323協議、ftp、telnet。

        4 在平臺上的移植

        4.1 單片以太網控制器LAN91C96

        LAN91C96是SMSC公司生產的專門用于嵌入式產品的10Mbps以太網控制器,具有性能優良,功耗低及尺寸小的特點,如圖4所示。

         

         

        6KB的RAM:用來存放數據包。

        MMU:對RAM進行有效管理,為接收和發送包在RAM中分配存儲空間。

        ARBITE:使MMU和RAM與CPU、CSMA很好地連接。

        CSMA/CD模塊:集成了IEEE 802.3 MAC層協議,負責監聽網絡情況和地址過濾。若目的地址是LAN91C96的地址、廣播地址或多播地址,則接收此數據包,否則拋棄。

        ENDEC:負責與10Mbps為以太網物理媒體的連接。

        LAN91C96 采用地址映射方式,通過訪問Innovator為的指定地址對其存儲器訪問。LAN91C96的寄存器在Innovator內存中的地址分配為:0x08000300-0x0800030F。寄存器共有4組(BANK0-BANK3),使用相同的地址,通過BANK_SELECT寄存器選擇。

        4.2 移植過程

        先實現該網卡芯片的驅動程序,再用它替換PC模擬器的以太網層,程序驅動主要包括以下三個部分:

        (1)初始化:主要為Lan91C96的各寄存器填入正確的初始值使其正常工作。

        (2)接收:如圖5所示,由CSMA(載波偵聽模塊)接收到符合地址要求的后,MMU(存儲器管理單元)為其請求在RAM中分配存儲空間并分配一個編號,DMA 將其存入RAM。接著在接收數據的前面封裝STATUS的化COUNT字節信息,如果CRC檢測正確,則將其編號放入接收FIFO,如果接收FIFO不為空,則RCV_INT(接收中斷標識)被設置。檢查接收中斷寄存器狀態,如果就接收中斷,對應其編號,上層協議便可以取出數據了,取出后,將該數據編號從 FIFO中清除。

         

         

        狀態字可以從RCR寄存器中讀取,它反應了接收過程出現的各種措施,如CRC錯誤、接收幀過長等,數據包的編號從FIFO_PORTS寄存器中獲得,而數據指針可從POINTER寄存器中獲得,數據信息從DATA寄存器中得到,根據這些信息將接收數據包復制到CPU內存,供上層使用,接收函數的主要流程如圖6。

         

         

        (3)發送:圖7描述了發送數據包FIFO中的排隊過程,首先MMU在RAM中分配一定字節的存儲空間,然后,將分配結果寄存器中的編號放入PNR 寄存器,寫數據指針寄存器POINTER并將上層數據封裝后拷入DATA寄存器,根據其編號放入發送FIFO,排隊的包將自動發出,發出包的編號接著進入發送完成FIFO。如果發送成功,則存儲空間自動釋放;否則釋放存儲空間并將其重新排隊。

         

         

        5 實驗結果

        5.1 內存資源占用量

        運行該協議棧需要3MB內存,而Innovator體32MB SDRAM 和32MB Flash,內存占用率為:3M/64M=4.7%,完全適用于嵌入式系統。

        5.2 數據傳輸可靠性

        TCP 利用以下機制糾錯。數據的傳輸過程中的誤碼:檢驗和機制與重傳機制,數據的重復,在接收端會自動舍棄已經接收過的數據包,并且不發ACK,故不會發生一個數據包接收多次的情況,數據包的丟失,接收端在接收完一段數據后,會計算下一個預期數據的序號,如果不符合就不發ACK,從而導致發端重發,避免了數據包的丟失,經測試,在未發生擁塞情況下,傳輸的誤碼率幾乎為0。

        5.3文件最大平均傳輸速率

        下面就本程序所實現的利用TCP進行文件傳輸功能,給出不同情況下的最大傳輸速率,實驗環境為10Mbps以太網。

        理想狀態下的理論最大吞吐量:假定發送方傳輸兩個背對背、滿長度的TCP數據,接收方為其發出兩個ACK,每包中用戶數據量為1460位,總數據量為1538位,故最大的用戶數據吞吐量為:

         

         

        本實驗測得文件的平均傳輸速率隨著TCP連接數的增多有如圖8所示的曲線變化,前半段隨著連接數的增加成線性增長,后半段由于出現了網絡擁塞,整體的平均速率反而有所下降。

         

         

        實驗結果與理論最大吞吐量有所差距,原因在于:

        (1)理論上只是一種理想的狀態,現實中難以達到。

        (2)受CPU處理速度及文件傳輸過程的讀、寫文件操作的限制。

        (3)本程序采用的數據傳輸機制是當收到上一個包的ACK之后再發送下一個數據包,這樣避免了對接收數據的排序,提高了可靠性,但數據的傳輸速度會受到制約。

        tcp/ip相關文章:tcp/ip是什么



        上一頁 1 2 下一頁

        關鍵詞: OMAP TCP/IP

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 沙河市| 彭水| 凉城县| 仪陇县| 遂昌县| 刚察县| 巫山县| 囊谦县| 温泉县| 锦州市| 潮安县| 湄潭县| 桂平市| 惠来县| 衡东县| 东平县| 石家庄市| 萨嘎县| 汨罗市| 汶上县| 沽源县| 揭阳市| 定西市| 桂东县| 赞皇县| 长垣县| 西昌市| 镇赉县| 齐河县| 长沙市| 安国市| 宁晋县| 绩溪县| 庆云县| 长岛县| 泰和县| 当涂县| 静安区| 延吉市| 兴隆县| 北流市|