0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于ARM9和DM9000芯片解決UDP協(xié)議的通信問題

電子設(shè)計(jì) ? 來源:郭婷 ? 作者:電子設(shè)計(jì) ? 2018-12-04 08:25 ? 次閱讀

引 言

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

1 系統(tǒng)的硬件介紹

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

硬件框圖如圖1 所示。

基于ARM9和DM9000芯片解決UDP協(xié)議的通信問題

2 以太網(wǎng)軟件的設(shè)計(jì)

2. 1 以太網(wǎng)卡控制器的初始化

首先DM9000A 自檢,讀取DM9000 的生產(chǎn)廠家ID和設(shè)備ID 與已經(jīng)設(shè)定好的ID 進(jìn)行比對,判斷DM9000網(wǎng)卡是否存在,初始化DM9000A,它的過程就是適當(dāng)配置DM9000A 寄存器的過程,具體過程分為以下幾個(gè)步驟:

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

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

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

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

(5)設(shè)置板子自身的MAC 地址。

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

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

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

2. 2 以太網(wǎng)卡數(shù)據(jù)的發(fā)送和接收

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

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

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

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

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

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

基于ARM9和DM9000芯片解決UDP協(xié)議的通信問題

基于ARM9和DM9000芯片解決UDP協(xié)議的通信問題

2. 2. 3 數(shù)據(jù)包的封裝過程

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

2. 2. 4 數(shù)據(jù)的接收

系統(tǒng)接收數(shù)據(jù)采用的是中斷模式。當(dāng)網(wǎng)卡接收到數(shù)據(jù)時(shí),就觸發(fā)一個(gè)中斷,啟動中斷服務(wù)程序。在中斷服務(wù)程序中首先清除中斷標(biāo)志位,以防在接收數(shù)據(jù)的時(shí)候再次引發(fā)中斷,然后判斷寄存器MRMDX 的值,確定網(wǎng)卡是否接收到了數(shù)據(jù),如果接收到了數(shù)據(jù)就要進(jìn)行數(shù)據(jù)處理,也就是對數(shù)據(jù)包的解封,得到應(yīng)用程序發(fā)送來的數(shù)據(jù),如果沒有得到數(shù)據(jù)則說明網(wǎng)卡初始化失敗,重新初始化網(wǎng)卡。中斷接收程序的流程圖如圖4所示。

基于ARM9和DM9000芯片解決UDP協(xié)議的通信問題

在接收到以太網(wǎng)數(shù)據(jù)幀中,首先判斷數(shù)據(jù)類型字段,如果是ARP 協(xié)議,則進(jìn)入ARP 處理流程,如果是IP 協(xié)議,則進(jìn)入IP 協(xié)議流程.ARP 協(xié)議處理過程:

首先判斷ARP 包目的IP 地址是否與本地IP 地址一致,如果不一致,丟棄不處理;如果一致,再判斷ARP類型,操作類型字段為1 時(shí)表示ARP 請求,調(diào)用ARP發(fā)送函數(shù)發(fā)送ARP 響應(yīng)包。操作類型字段為2 時(shí),記錄下對方的MAC 地址,以后通信就是根據(jù)這個(gè)MAC傳送數(shù)據(jù)的。

IP 協(xié)議處理過程如下所述:首先判斷IP 包目的IP地址是否與本地IP 一致,如果不一致,丟棄不處理,如果一致,則再判斷協(xié)議類型,是否為UDP 數(shù)據(jù)包,是就進(jìn)入U(xiǎn)DP 處理過程,不是就進(jìn)入其他協(xié)議處理過程。

3 實(shí)驗(yàn)結(jié)果和分析

3. 1 ARP 通信測試

實(shí)驗(yàn)中測試了ARP 請求和UDP 通信,設(shè)置ARM開發(fā)板的IP 地址為219. 243. 50. 187,MAC 地址為0×52,0×54,0x4c,0×38,0xf7,0×42,PC 機(jī)的IP 地址為219. 243. 50. 188,MAC 地址為0×00,0×23,0x5A,0×15,0×73,0xF4.經(jīng)過測試當(dāng)開板向PC 發(fā)送ARP 請求時(shí),PC 能夠正確應(yīng)答響應(yīng)包,并且多次請求都能夠得到正確的響應(yīng),證明ARP 協(xié)議能夠穩(wěn)定運(yùn)行,實(shí)驗(yàn)結(jié)果如圖5 所示。

當(dāng)開發(fā)板得到了PC 機(jī)的MAC 地址之后,就可以與它進(jìn)行正常的UDP 通信了。在中斷程序之中判定協(xié)議類型,接收到的數(shù)據(jù)包是ARP 協(xié)議還是UDP 協(xié)議,當(dāng)接收的是ARP 協(xié)議,則進(jìn)行ARP 協(xié)議處理,得出圖5 的實(shí)驗(yàn)結(jié)果,當(dāng)?shù)玫降氖荱DP 協(xié)議,則進(jìn)行UDP 協(xié)議處理,得出的實(shí)驗(yàn)結(jié)果如圖6 所示。經(jīng)過長時(shí)間的通信可以發(fā)現(xiàn),傳輸?shù)臄?shù)據(jù)沒有出現(xiàn)誤碼,可以說明這種通信方式比較穩(wěn)定可行。

基于ARM9和DM9000芯片解決UDP協(xié)議的通信問題

3. 2 UDP 通信測試

在UDP 通信實(shí)驗(yàn)中,設(shè)置兩個(gè)數(shù)據(jù)終端的IP 地址和通信端口分別為219.243.50.187:6000,219.243.50.186:10005,然后發(fā)送數(shù)據(jù),用抓包工具sniffer 抓包的結(jié)果如圖6 所示。通過圖中結(jié)果可以看出,SrcIP 為219. 243. 50. 87,Src Port 為6000,DestIP 為219. 243.50. 186,Dst Port 為10005,這都與設(shè)置的相同.Protocol為0×800 表示為UDP 協(xié)議類型,而且能夠正確地接收到發(fā)送的數(shù)據(jù),并且經(jīng)過多次的實(shí)驗(yàn),結(jié)果都是正確的,這證明系統(tǒng)通信穩(wěn)定可靠,通過移植的協(xié)議棧能夠正常的工作,達(dá)到了預(yù)期的目標(biāo)。

4 結(jié)束語

文中實(shí)現(xiàn)了基于ARM9 和DM9000 芯片的UDP通信,成功地對TCP/ IP 協(xié)議棧裁剪移植實(shí)現(xiàn)UDP.ARP 等協(xié)議通信。詳細(xì)介紹了DM9000 網(wǎng)卡驅(qū)動程序過程,并且實(shí)現(xiàn)了網(wǎng)口接收發(fā)送數(shù)據(jù)的功能,通過對大量數(shù)據(jù)的傳輸實(shí)驗(yàn),證明了ARM9 和DM9000 構(gòu)成的通信系統(tǒng)性能的穩(wěn)定性。能夠較好地解決大量數(shù)據(jù)通過UDP 協(xié)議通信的問題.

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5046

    文章

    18821

    瀏覽量

    298585
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5288

    瀏覽量

    169672
  • 三星電子
    +關(guān)注

    關(guān)注

    34

    文章

    15796

    瀏覽量

    180667
收藏 人收藏

    評論

    相關(guān)推薦

    STM32+LWIP網(wǎng)絡(luò)協(xié)議棧移植(網(wǎng)卡采用DM9000)

    本篇文章主要講解如何在STM32F103工程里添加移植LWIP協(xié)議,最終完成TCP服務(wù)器、TCP客戶端的通信測試。 網(wǎng)卡采用的是DM9000,工程代碼中,采用STM32的FSMC接口來驅(qū)動DM
    的頭像 發(fā)表于 03-11 09:49 ?8030次閱讀
    STM32+LWIP網(wǎng)絡(luò)<b class='flag-5'>協(xié)議</b>棧移植(網(wǎng)卡采用<b class='flag-5'>DM9000</b>)

    DM9000芯片快速以太網(wǎng)控制器簡介

    ?DM9000 是一款完全集成的、性價(jià)比高、引腳數(shù)少、帶有通用處理器接口的單芯片快速以太網(wǎng)控制器。 自 帶一個(gè) 10/100M PHY 和 4K 雙字的 SRAM ,DM9000A 為適應(yīng)各種處理器提供了 8 位、16 位數(shù)據(jù)接
    的頭像 發(fā)表于 06-01 09:08 ?1.1w次閱讀
    <b class='flag-5'>DM9000</b>單<b class='flag-5'>芯片</b>快速以太網(wǎng)控制器簡介

    DM9000系列

    dm9000   1、總體介紹  該DM9000是一款完全集成的和符合成本效益單芯片快速以太網(wǎng)MAC控制器與一般處理接口,一個(gè)10/100M自適應(yīng)的PHY和4K DWORD值的SRAM 。它的目的
    發(fā)表于 05-17 10:17

    dm9000讀寫寄存器的問題

    )方式2的函數(shù)名為phy_read,估摸著意思是讀網(wǎng)卡芯片的寄存器,但我看DM9000的時(shí)候只看到一類寄存器,并沒有分成兩類,那么這兩種讀取方式有什么區(qū)別?{:36:}
    發(fā)表于 10-31 16:13

    【NUCLEO-F412ZG申請】合作式調(diào)度器構(gòu)建以及基于DM9000的LWIP移植及調(diào)試

    DM90005、移植LWIP協(xié)議棧,實(shí)現(xiàn)TCP/UDP通信,并通過上位機(jī)軟件同Demo板進(jìn)行數(shù)據(jù)傳輸。6、移植FreeRTOS,顯現(xiàn)串口守護(hù)任務(wù),進(jìn)行串口數(shù)據(jù)收發(fā)。7、實(shí)現(xiàn)NRF24L
    發(fā)表于 10-31 15:31

    U-Boot移植DM9000網(wǎng)卡分享!

    講的CS8900網(wǎng)卡了。DM9000網(wǎng)卡與CS8900網(wǎng)卡接口方式不一樣,經(jīng)過幾天的折騰,終于移植成功,現(xiàn)將筆記整理如下。一、移植環(huán)境1.u-boot版本1.1.62.開發(fā)板Jz2440(ARM9
    發(fā)表于 07-29 00:06

    如何在uboot使用命令打開DM9000?

    在使用開發(fā)板ping虛擬機(jī)的時(shí)候 發(fā)現(xiàn)了ERROR: resetting DM9000 -> not responding 這個(gè)錯(cuò)誤 DM9000沒有打開,我使用的是沒有默認(rèn)打開
    發(fā)表于 09-25 22:14

    DM9000/DM9010 pdf datasheet (E

    DM9000/DM9000A & 9010 10/100 Mbps Single Chip Ethernet Controller with General Processor
    發(fā)表于 12-25 21:57 ?8次下載

    dm9000/dm9000a linux驅(qū)動程序 (Ethe

    dm9000/dm9000a以太網(wǎng)卡芯片linux驅(qū)動程序 :dm9000/dm9000a Ethernet chips linux dri
    發(fā)表于 12-26 00:13 ?117次下載

    基于ARMDM9000的網(wǎng)卡接口設(shè)計(jì)與實(shí)現(xiàn)

    針對ARM CPU S3C2410的特點(diǎn),設(shè)計(jì)開發(fā)了外圍網(wǎng)卡接口平臺,通過驅(qū)動程序?qū)σ蕴W(wǎng)控制芯片DM9000的控制,實(shí)現(xiàn)了網(wǎng)絡(luò)數(shù)據(jù)傳輸功能。硬件方面主要涉及以太網(wǎng)網(wǎng)絡(luò)接口的設(shè)計(jì),軟件方
    發(fā)表于 10-09 16:16 ?144次下載

    DM9000的以太網(wǎng)藏文信息控制平臺

    DM9000的以太網(wǎng)藏文信息控制平臺 摘要:基于DM9000的以太網(wǎng)電路,單片機(jī)端移植精簡TCP/IP協(xié)議棧unIP,實(shí)現(xiàn)簡易的TCP服務(wù)器。對該簡易的TCP服務(wù)器進(jìn)行改造,把藏文網(wǎng)頁存儲
    發(fā)表于 04-13 12:47 ?5586次閱讀
    <b class='flag-5'>DM9000</b>的以太網(wǎng)藏文信息控制平臺

    單片機(jī)驅(qū)動DM9000網(wǎng)卡芯片詳細(xì)調(diào)試過程

    單片機(jī)驅(qū)動DM9000網(wǎng)卡芯片詳細(xì)調(diào)試過程
    發(fā)表于 11-02 11:03 ?0次下載

    基于ARM9UDP協(xié)議棧的設(shè)計(jì)與實(shí)現(xiàn)

    基于ARM9UDP協(xié)議棧的設(shè)計(jì)與實(shí)現(xiàn)
    發(fā)表于 01-19 21:22 ?9次下載

    使用單片機(jī)驅(qū)動DM9000網(wǎng)卡芯片的詳細(xì)調(diào)試過程資料免費(fèi)下載

    本文主要介紹單片機(jī)驅(qū)動DM9000E網(wǎng)卡芯片的詳細(xì)過程。從網(wǎng)卡電路的連接,到網(wǎng)卡初始化相關(guān)程序調(diào)試,再到ARP協(xié)議的實(shí)現(xiàn),一步一步詳細(xì)介紹調(diào)試過程。如果有時(shí)間也會把UDP和TCP通訊實(shí)
    發(fā)表于 08-27 17:30 ?14次下載
    使用單片機(jī)驅(qū)動<b class='flag-5'>DM9000</b>網(wǎng)卡<b class='flag-5'>芯片</b>的詳細(xì)調(diào)試過程資料免費(fèi)下載

    DM9000芯片快速以太網(wǎng)MAC控制器英文手冊

    電子發(fā)燒友網(wǎng)站提供《DM9000芯片快速以太網(wǎng)MAC控制器英文手冊.pdf》資料免費(fèi)下載
    發(fā)表于 07-16 17:30 ?0次下載