新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于ARM9的UDP協(xié)議棧的設計與實現

        基于ARM9的UDP協(xié)議棧的設計與實現

        作者: 時間:2016-11-27 來源:網絡 收藏
          0 引 言

          隨著嵌入式技術和網絡技術的迅速發(fā)展,以太網接口在嵌入式系統(tǒng)中的應用越來越廣泛.以太網通信速度快.通用,可直接與Internet 相連接,提供更大范圍的遠程訪問.目前在工控嵌入式領域,網絡通信通常采用UDP 和TCP 協(xié)議.UDP 與TCP 相比,UDP 使用非連接的.不可靠的通信方式,因此網絡傳輸速度快,實時性相對較好.文中設計實用S3C2440.以太網控制器DM9000和經過自行裁剪的TCP / IP 協(xié)議棧,構成嵌入式系統(tǒng)的以太網接口,實現UDP 通信.

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

          1 系統(tǒng)的硬件介紹該系統(tǒng)采用優(yōu)龍科技公司YLP2440 作為開發(fā)的硬件系統(tǒng),YLP2440 采用三星S3C2440A作為CPU,最高主頻400MHz,帶有64MB SDRAM 和64MB NANDFlash 的外部存儲器,有兩個五線異步串行口,波特率高達115200bps,一個10M / 100M DM900AEP 網絡接口卡,帶有連接和傳輸指示燈.DM9000A 是一個全集成.功能強大.性價比高的快速以太網MAC 控制器,它帶有一個通用處理接口.EEPROM 接口.10/ 100MPHY 和SRAM,采用單電源供電,可兼容3. 3V.5V 的IO 接口電平.DM9000A 同樣支持MII (Media IndependentInterface,介質無關接口),它包含一系列可被訪問控制的狀態(tài)寄存器,這些寄存器是字節(jié)對齊的,在硬件或者軟件復位時被設置成初始化.

          硬件框圖如圖1 所示.

          2 以太網軟件的設計

          2. 1 以太網卡控制器的初始化

          首先DM9000A 自檢,讀取DM9000 的生產廠家ID和設備ID 與已經設定好的ID 進行比對,判斷DM9000網卡是否存在,初始化DM9000A,它的過程就是適當配置DM9000A 寄存器的過程,具體過程分為以下幾個步驟:

          (1)啟動DM9000A,設置CPCR[REG_1E] = 0×1,使DM9000 的GPIO3 為輸出,GPR[REG_1F] =0×0,使DM9000 的GPIO3 輸出為低以激活內部PHY.延時2ms 以上以等待PHY 上電.

         ?。?)進行兩次軟復位,設置DM9000 為正常工作模式,根據芯片設計要求,要想使芯片在上電之后工作正常就要進行兩次軟復位,設置為NCR[REG_00] =0×01,NCR[REG_00] =0×00,這兩步操作進行兩次.

        (3) 清除各種狀態(tài)標志位和中斷標志位,NSR[REG_01] =0x2c,ISR[REG_FE] =0x3f.

          (4)設置接收和發(fā)送控制寄存器,并且設置FIFO的大小,RCR[REG_05] =0×39.TCR[REG_02] =0×00.FCTR[REG_09] =0×38.

          (5)設置板子自身的MAC 地址.

         ?。?)再一次清除各種狀態(tài)標志位和中斷標志位,NSR[REG_01] =0x2c,ISR[REG_FE] =0x3f.

         ?。?)設置中斷屏蔽寄存器,打開接收中斷,IMR[REG_FF] =0×81.

          當進行了以上步驟的設置之后,DM9000A 芯片就處于正常工作狀態(tài)了.在以后進行通信的過程中,如果發(fā)生異常引起芯片重啟,則再一次進行同樣的設置.

          2. 2 以太網卡數據的發(fā)送和接收

          DM9000A 發(fā)送數據采用的是循環(huán)查詢模式,接收數據采用的是中斷模式,DM9000 內部有0x3FF 大小的SRAM 用于接收和發(fā)送數據緩存.在發(fā)送或接收數據包之前,數據是暫存在這個SRAM 中的.當需要連續(xù)發(fā)送或接收數據時,需要分別把DM9000 寄存器MWCMD 或MRCMD 賦予數據端口,這樣就指定了SRAM 中的某個地址,并且在傳輸完一個數據后,指針會指向SRAM 中的下一個地址,從而完成了連續(xù)訪問數據的目的.但當發(fā)送或接收一個數據后, 指向SRAM 的數據指針不需要變化時,則要把MWCMDX 或MRCMDX 賦予數據端口 .

          發(fā)送數據比較簡單,接收數據就略顯復雜,因為它是有一定格式要求的.在接收到的一包數據中的首字節(jié)如果為0×01,則表示這是一個可以接收的數據包;如果為0×0,則表示沒有可接收的數據包.因此在讀取其他字節(jié)時,一定要先判斷首字節(jié)是否為0×01.數據包的第二個字節(jié)為數據包的一些信息,它的高字節(jié)的格式與DM9000 的寄存器RSR 完全一致.第三個和第四個字節(jié)為數據包的長度.后面的數據就是真正要接收的數據了.

          2. 2. 1 UDP 協(xié)議棧的裁剪實現

          在系統(tǒng)中主要使用UDP 通信,只需要實現ARP協(xié)議.IP 協(xié)議,對TCP/ IP 協(xié)議進行部分的實現.UDP協(xié)議通信(即用戶數據報協(xié)議)與TCP 一樣都是屬于傳輸層協(xié)議,位于IP(網際協(xié)議)協(xié)議的頂層.UDP 相對于TCP 是一種簡單協(xié)議,提供的是最少的服務,編寫的代碼量也小,所需的程序和內存空間少,運行速度快.ARP 為IP 地址對應的硬件地址之間提供動態(tài)映射,發(fā)送終端把以太網數據幀發(fā)送到位于同一局域網上的另一臺主機時,是根據48bit 的以太網地址來確定目的接口的.設備驅動程序從不檢查IP 數據報中的目的IP 地址.IP 協(xié)議是TCP/ IP 協(xié)議中最為核心的協(xié)議,它提供不可靠.無連接的數據報傳送服務 .

          2. 2. 2 數據的發(fā)送過程

          數據發(fā)送過程如圖2 所示.發(fā)送終端在第一次發(fā)送數據的時候,要知道接收端的IP 地址和端口號,還要得到對方的物理MAC 地址,因為兩個終端最后通信是通過尋找對方的MAC 地址來進行的,因此首先得通過ARP 協(xié)議,把對方的IP 地址轉換為MAC 地址,得到了物理地址之后才能通信.如果長時間不能得到這個物理地址,則只能說明請求失敗,需要重新發(fā)送ARP 請求,ARP 的封裝過程如圖3(b)所示.

          2. 2. 3 數據包的封裝過程

          UDP 協(xié)議數據包的封裝在運輸層進行,打好包的UDP 數據將送往網絡層進行IP 協(xié)議的打包,UDP 要完成進程到進程的通信,把報文交付給正確的進程.當進程有報文要通過UDP 發(fā)送時,它就把這個報文連同一對套接字地址以及數據長度傳遞給UDP.UDP 收到數據后就加上UDP 首部,也就是UDP 數據包的封裝如圖3(c)所示.然后UDP 就把該用戶數據包連同IP 加上自己首部,在協(xié)議字段使用值17,指出該數據是從UDP 協(xié)議來的,這個過程就是IP 數據包的封裝過程如圖3(a)所示.這個IP 數據包再傳遞給數據鏈路層.數據鏈路層收到IP 數據包之后,加上自己的首部(可能還有尾部),再傳遞給物理層.物理層把這些位編碼為電信號或者光信號,然后把它發(fā)送到遠程的機器.


        上一頁 1 2 下一頁

        關鍵詞: ARM9UDP協(xié)議

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 高要市| 武陟县| 鄯善县| 郓城县| 菏泽市| 宜章县| 得荣县| 临高县| 盱眙县| 凯里市| 长丰县| 宁河县| 锡林郭勒盟| 独山县| 太仆寺旗| 巫山县| 涪陵区| 福贡县| 南投县| 徐水县| 博野县| 拉萨市| 遂平县| 长海县| 昌江| 南宁市| 宿迁市| 黄骅市| 柳州市| 滦平县| 陆良县| 梅河口市| 承德市| 济阳县| 伊宁县| 吴江市| 临潭县| 昌江| 通河县| 溧水县| 鄂州市|