網(wǎng)絡控制器DM9000A在嵌入式系統(tǒng)中的應用_第1頁
網(wǎng)絡控制器DM9000A在嵌入式系統(tǒng)中的應用_第2頁
網(wǎng)絡控制器DM9000A在嵌入式系統(tǒng)中的應用_第3頁
網(wǎng)絡控制器DM9000A在嵌入式系統(tǒng)中的應用_第4頁
網(wǎng)絡控制器DM9000A在嵌入式系統(tǒng)中的應用_第5頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、網(wǎng)絡控制器dm9000a在嵌入式系統(tǒng)中的應用時間:2008-08-15 10:38:00來源:電子產(chǎn)品世界作者:賈東耀廣州聚暉電子公司彭樹林新太科技股 份有限公司目前,網(wǎng)絡技術(shù)在電了產(chǎn)品中的應用越來越廣,更多的嵌入式設備需要提供網(wǎng)絡接口, 以方便與外部互聯(lián)通訊。現(xiàn)在流行的大多數(shù)嵌入式cpu(如arm、ppc)都捉供了此類接口, 但對于一些相對復雜的嵌入式系統(tǒng)來說,可能需要擴展以太網(wǎng)口,以滿足網(wǎng)絡通訊需要。木 文介紹一種新款網(wǎng)絡接口芯片dm9000a,它可以很方便的實現(xiàn)與嵌入式cpu的接口,實 現(xiàn)擴展以太網(wǎng)口的功能。dm9000adm9000a是中國臺灣davicom公司推出的一款高速以太網(wǎng)接口

2、芯片,其基本特征 是:集成10/100m物理層接口;內(nèi)部帶有16k字節(jié)sram用作接收發(fā)送的fifo緩存;支 持8/16bit兩種主機工作模式;通過hp認證的auto-mdix(支持直接互連自動翻轉(zhuǎn))功能; 支持tcp/ip加速(ipv4 check sum offload)減輕cpu負擔,提高整機效能;10ns i/o讀寫 時間。dm9000a以太網(wǎng)控制器遵循ieee頒布的802.3以a網(wǎng)傳輸協(xié)議。該電路還集成/ eeprom接口,自舉時通過eeprom接口輸入到芯片中,從而實現(xiàn)自動初始化。硬件接口設計dm9000a可以很方便的與目詢主流的嵌入式cpu以8位或16位的總線方式連接, 本文設計

3、的系統(tǒng)cpu為at91rm9200,它是一個采用arm核的32位微處理器。二者的 接口設計如圖lodm9000aat91rm9200sdodo1rsd15d15cs«mcs3iow«nweior*nobresetnresetcida2i mtpd8eedio"t"dido10k93c46skeecscs圖1 dm9000a與at9irm9200硬件連接系統(tǒng)上電時,at91rm9200通過總線配置dm9000a內(nèi)部網(wǎng)絡控制寄存器(ncr)、 中斷寄存器(isr)等,完成dm9000a的初始化。隨后,dm9000a進入數(shù)據(jù)收發(fā)等待狀態(tài)。 當at91rm920

4、0向以太網(wǎng)發(fā)送數(shù)據(jù)時,先將數(shù)據(jù)打包成udp或ip數(shù)據(jù)包,并通過16 bit 總線發(fā)送到dm9000a的數(shù)據(jù)發(fā)送緩存中,然后將數(shù)據(jù)長度等信息填充到dm9000a的和應 寄存器內(nèi),使能發(fā)送。當dm9000a接收到外部網(wǎng)絡送來的以太網(wǎng)數(shù)據(jù)時,首先檢測數(shù)據(jù)幀 的合法性,如果幀頭標志冇誤或存在crc校驗錯誤,則將該幀數(shù)據(jù)丟棄。否則將數(shù)據(jù)幀緩 存到內(nèi)部ram,并通過中斷標志位通知at91rm9200,由at91rm9200對dm9000a接 收到的數(shù)據(jù)進行處理。linux驅(qū)動實現(xiàn)linux網(wǎng)絡驅(qū)動體系結(jié)構(gòu)在linux操作系統(tǒng)屮的設備駁動,根據(jù)各類外圍i/o設備的不同,分為三類,即字符設 備(如鍵盤、lcd

5、)驅(qū)動、塊設備(如破盤、cf卡)驅(qū)動和網(wǎng)絡設備(如網(wǎng)卡)驅(qū)動。linux 網(wǎng)絡設備驅(qū)動程序結(jié)構(gòu)上由四部分組成(圖2):網(wǎng)絡協(xié)議接口,網(wǎng)絡設備接口,設備駁動功 能層及網(wǎng)絡設備介質(zhì)。圖2 linux網(wǎng)絡驅(qū)動體系結(jié)構(gòu)設計開發(fā)linux網(wǎng)絡驅(qū)動程序時,最主耍的工作就是完成設備驅(qū)動功能層。類似于對 字符設備和塊設備的處理,為了屏蔽網(wǎng)絡環(huán)境中物理網(wǎng)絡設備的多樣性,linux利川面向?qū)?彖的思想對所有的網(wǎng)絡物理設備進行抽彖,定義了一個統(tǒng)一的接口。對于所有網(wǎng)絡碩件的訪 問都是通過接口進行的,接口向用戶提供了一個對于所冇類型的網(wǎng)絡帔件一致化的操作集 合。linux內(nèi)核提供的統(tǒng)一網(wǎng)絡設備結(jié)構(gòu)為net_device

6、,此結(jié)構(gòu)體位于網(wǎng)絡驅(qū)動層的核心地 位。net_device中冇很多供系訪問和協(xié)議層調(diào)用的設備方法,其中包括:dev->open:打開設備。open方法應當注冊網(wǎng)絡設備需耍的任何系統(tǒng)資源(i/o 口, irq, dma等),打開破件,進行設備要求的其他設置。devstop:停止設備。該函數(shù)應當恢復在打開時進行的操作。 dev->hard_start_xmit:發(fā)送報文。 dev->tx_timeout:發(fā)送超時調(diào)用的方法,它應當處理這個問題并恢復報文發(fā)送。 dev->set_mac_address:修改網(wǎng)絡的%更件mac地址。網(wǎng)絡驅(qū)動就是要實現(xiàn)這些具體的設備方法。設備初始

7、化網(wǎng)絡的初始化是設備工作的第一步。當系統(tǒng)加載網(wǎng)絡驅(qū)動模塊的時候,就會調(diào)用初始化 過程。首先利川函數(shù)request_mem_region映射dm9000a的數(shù)據(jù)、地址端口,通過 dmfe_probe函數(shù)檢測網(wǎng)絡物理設備是否存在,檢測dm9000a內(nèi)部串行nic的值是否正 確,然后再對設備進行資源配置,構(gòu)造設備的net_device數(shù)據(jù)結(jié)構(gòu)。包括一些低層硬件拮 息:base_addr(網(wǎng)絡接口的i/o基地址),irq(安排的中斷號)等。打開設備和關(guān)閉設備open方法在網(wǎng)絡設備被激活的吋被調(diào)用,具體dm9000a的破件初始化工作放到這里 來做。對于dm9000a需要完成的初始化包括:對dm9000a

8、內(nèi)部上電,軟件復位,通過 ncr寄存器設置網(wǎng)絡工作模式,可以選擇設置內(nèi)部或者外部phy、全雙工或者半雙工模式、 使能喚醒事件等網(wǎng)絡操作,對rx/tx中斷使能,使能數(shù)據(jù)接收功能。調(diào)用request_irq() 申請中斷號登記中斷處理函數(shù),調(diào)用netif_cairicr_on偵測連接狀態(tài)。啟動定吋器,調(diào)用ne(if_stail_queuc激活設備發(fā)送隊列。這里對dm9000a的中斷設計做了一個特殊處理:通常at91rm9200提供最多32個 中斷源,默認提供7個外部中斷源,但對于較復雜的嵌入式系統(tǒng),可能會而臨中斷源不夠用 的情況。山于at91rm9200的pio可以實現(xiàn)功能復用,因此可以把多余的i

9、o引腳配置為 可用的中斷源。故本系統(tǒng)中,設計dm9000a中斷源與at91rm9200外部i/o 口 pd8引 腳相連。一個pio端口的32個引腳共享一個中斷id,只需要在中斷狀態(tài)寄存器中區(qū)分具 體哪個引腳引起中斷,然后轉(zhuǎn)向特定的中斷處理函數(shù)執(zhí)行操作,就可以實現(xiàn)中斷處理。close所做的ii作和open相反,主要釋放open獲得的資源,以減少系統(tǒng)負擔。數(shù)據(jù)包發(fā)送數(shù)據(jù)包的發(fā)送和接收是實現(xiàn)linux網(wǎng)絡驅(qū)動程序中兩個最關(guān)鍵的過程,對這兩個過程 處理的好壞將直接影響到驅(qū)動程序的整體運行質(zhì)量。數(shù)據(jù)傳輸通過hard_s(an_xmit函數(shù)實現(xiàn),首先把存放在套接字緩沖區(qū)中的數(shù)據(jù)發(fā)送到 網(wǎng)絡芯片dm9000

10、a內(nèi)部的tx fifo sram中,該緩沖區(qū)是由數(shù)據(jù)結(jié)構(gòu)sk_buff表示,把 耍傳送的數(shù)據(jù)長度寫入dm9000a中的傳輸包長度寄存器txpll和txplh中。然后使能 傳輸。如果數(shù)據(jù)發(fā)送成功,則會觸發(fā)一次中斷。實際中會出現(xiàn)多個數(shù)據(jù)幀傳輸,需??紤]做并發(fā)處理。在發(fā)送時檢測傳輸隊例暫時滿載 時就耍通過netif_stop_queue來暫停,當發(fā)送完成觸發(fā)中斷處理時,調(diào)用netif_wake_qucue 函數(shù)來重新啟動傳輸隊例。網(wǎng)絡傳輸由于系統(tǒng)忙或碩件的問題發(fā)生延遲,則會調(diào)用傳送超時處理函數(shù)tx.timeout, 對碩件復位操作。數(shù)據(jù)包接收數(shù)據(jù)包的接收是通過中斷處理,當有數(shù)據(jù)到達時,就產(chǎn)生中斷信號

11、,網(wǎng)絡設備驅(qū)動功能 層就調(diào)用數(shù)據(jù)包接收程序來處理數(shù)據(jù)包的接收,然后網(wǎng)絡協(xié)議接口層調(diào)用netif_rx函數(shù)把 接收到的數(shù)據(jù)包傳輸?shù)骄W(wǎng)絡協(xié)議的上層進行處理。dm9000a接收緩存區(qū)中的每幀數(shù)據(jù)由4字節(jié)長的首部、有效數(shù)據(jù)和crc校驗序列構(gòu) 成。首部4字節(jié)依次是01h、以太網(wǎng)幀狀態(tài)、以太網(wǎng)幀長度低字節(jié)和長度高字節(jié),數(shù)據(jù)包 接收程序首先檢測如果第一個字節(jié)是01h,則說明有數(shù)據(jù);如來是00h,則說明無數(shù)據(jù), 需要進行-復位。然后調(diào)用函數(shù)dev_alloc_skb屮請塊sk_buff結(jié)構(gòu)緩沖區(qū),從dm9000a 讀出數(shù)據(jù)放置到緩沖區(qū)里,根據(jù)獲収的長度信息,判斷是否讀完一幀。如果讀完,接著讀下 幀,直到遇到首字節(jié)是00h的幀,說明接收數(shù)據(jù)己讀完。接下來填充sk_buff中的一些 信息,使之成為規(guī)范的sk_buff結(jié)構(gòu),最后調(diào)用netif_rx()w數(shù)將接收到的數(shù)據(jù)傳輸?shù)骄W(wǎng)絡 協(xié)議的上層。結(jié)語該設計成功用于某網(wǎng)絡測試設備的主控模塊上,可以通過以a網(wǎng)接入internet,從而實 現(xiàn)從internet上監(jiān)控嵌入式設備。參考文獻:1. davicom corporation,dm9000a application notes vi.20, 20052. lessandro rubini,jonathan

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論