• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于DM 9000A的嵌入式以太網(wǎng)接口設計與實現(xiàn)

      2011-03-15 14:30:46溫陽東
      關鍵詞:網(wǎng)絡接口寄存器以太網(wǎng)

      施 勇, 溫陽東

      (合肥工業(yè)大學電氣與自動化工程學院,安徽合肥 230009)

      目前,網(wǎng)絡技術在電子產(chǎn)品中的應用越來越廣,更多的嵌入式設備需要提供網(wǎng)絡接口,以方便與外部或上層網(wǎng)路設備的相互通信[1]。以太網(wǎng)是現(xiàn)在最為流行的局域網(wǎng)標準,在嵌入式系統(tǒng)中的應用已經(jīng)越來越廣泛。以太網(wǎng)接口不僅通信速度快,傳輸可靠,使用和配置方便,而且不受地域限制。以太網(wǎng)控制芯片是以太網(wǎng)接口的核心器件,其性能是影響網(wǎng)絡性能的關鍵因素之一,如何正確使用網(wǎng)絡控制器是設計以太網(wǎng)接口的關鍵。本文介紹了一種以高性能的以太網(wǎng)控制芯片DM 9000A和32位ARM處理器LPC2468為核心的嵌入式以太網(wǎng)接口的實現(xiàn)方法。

      1 DM 9000A芯片介紹

      DM 9000A[2]芯片是臺灣DAVICOM公司推出的一款高度集成、功能強大、引腳少、性價比高的單片快速以太網(wǎng)控制芯片,非常適用于嵌入式系統(tǒng)設計。

      DM 9000A主要特性是:集成10/100M物理層接口;內(nèi)部帶有16 K字節(jié)SRAM用作接收發(fā)送的FIFO緩存;支持8/16-bit 2種主機工作模式;支持802.3以太網(wǎng)傳輸協(xié)議;體積小,只有48個引腳;功耗非常低,單電源3.3 V工作,內(nèi)置3.3 V變2.5 V電源電路,I/O端口支持3.3~5.0 V的容差。

      DM 9000A實現(xiàn)以太網(wǎng)媒體介質(zhì)訪問層(MAC)和物理層(PHY)的功能,包括MAC數(shù)據(jù)幀的組裝/拆分與收發(fā)、地址識別、CRC編碼/校驗、M LT-3編碼器、接收噪聲抑制、輸出脈沖形成、超時重傳、鏈路完整性測試、信號極性檢測與糾正等。

      2 硬件接口設計

      LPC2468[3]是NXP公司2008年推出的含有以太網(wǎng)控制器的32位ARM 7TDM I-S處理器,運行頻率高達72 MHz,98 kB片內(nèi)SRAM,其中64 kB SRAM可供高性能CPU通過ARM局部總線訪問,16 kB SRAM用于以太網(wǎng)接口,也可作為通用SRAM來使用。該芯片的以太網(wǎng)模塊包含一個功能齊全的10 M b/s或100 M b/s以太網(wǎng)MAC(媒體訪問控制器),可以使用M II(媒體獨立接口)或RM II的片外以太網(wǎng)PHY通過片內(nèi)M IIM(媒體獨立接口管理)串行總線進行連接,實現(xiàn)以太網(wǎng)功能。為實現(xiàn)在嵌入式系統(tǒng)中增加以太網(wǎng)口,本設計硬件部分采用嵌入式處理器+ DM 9000A結(jié)構(gòu)[4],如圖1所示。

      圖1 LPC2468與DM 9000A硬件連接

      DM 9000A有8位和16位2種模式,本系統(tǒng)采用16位模式,DM 9000A的EECS引腳(pin21)懸空,默認為16模式,數(shù)據(jù)線SD0~SD15直接與LPC2468數(shù)據(jù)線的低16位D0~D15連接,并且該模式可以通過ISR寄存器的Bit[7]檢測。

      DM 9000A的 IO讀信號線 IOR、寫信號線IOW分別與LPC2468的讀信號線ARM-OE、寫信號線ARM-WE相連;片選信號CS與處理器的片選信號ARM-CS0相連,因此網(wǎng)絡控制器的端口地址IOaddress為0x83000000。讀寫信號與片選信號都是保持默認設置的低電平有效。隔離變壓器的主要作用是將嵌入式系統(tǒng)與外部線路相隔離,防止干擾和燒壞元器件,實現(xiàn)帶電的插拔功能。

      在DM 9000A中只有INDEX端口與DATA端口2個寄存器可以被CPU直接訪問,其它所有內(nèi)部控制和狀態(tài)寄存器都是通過這2個端口寄存器間接訪問的。網(wǎng)絡控制器CMD引腳決定了處理器訪問的是哪個端口寄存器:當CMD=0時,主機訪問的是INDEX端口寄存器;當CMD=1時,訪問的是DATA端口寄存器。設計中將CMD引腳與處理器的地址線 ARM-A2相連,則DM 9000A的2個外部接口端口地址分別為:

      INDEX端口地址=IOaddress+0x00,

      DATA端口地址=IOaddress+0x04。

      實際中INDEX端口寄存器保存的是訪問DA TA端口寄存器的內(nèi)部寄存器的地址,因此對DM 9000A控制或狀態(tài)寄存器訪問的命令順序是:①寫要訪問寄存器的地址到INDEX端口;②通過DATA端口來讀/寫數(shù)據(jù)。

      3 網(wǎng)絡接口的軟件設計

      以太網(wǎng)接口電路的工作原理是:在系統(tǒng)上電時,處理器通過總線對DM 9000A完成初始化后,DM 900A進入數(shù)據(jù)收發(fā)等待狀態(tài);當處理器要向以太網(wǎng)發(fā)送數(shù)據(jù)幀時,先通過上層協(xié)議函數(shù)對數(shù)據(jù)進行封裝,然后通過總線逐字節(jié)發(fā)送到DM 9000A的發(fā)送緩沖區(qū)中,將數(shù)據(jù)長度等信息填充到DM 9000A相應的寄存器中,使能發(fā)送命令后,DM 9000A自動將數(shù)據(jù)進行MAC組幀并發(fā)送出去;當接收到以太網(wǎng)數(shù)據(jù)幀時,處理器首先檢測幀的合法性,保存正確的數(shù)據(jù)幀,然后將正確的數(shù)據(jù)幀發(fā)送到上層協(xié)議進行處理。

      網(wǎng)絡接口的軟件設計主要有底層網(wǎng)卡驅(qū)動程序和上層通信協(xié)議2個部分[5]。網(wǎng)卡的驅(qū)動程序功能包括網(wǎng)卡芯片的初始化、以太網(wǎng)數(shù)據(jù)幀發(fā)送和接收。

      3.1 網(wǎng)絡接口模塊的驅(qū)動程序設計

      本設計的開發(fā)環(huán)境是ARM公司推出的ARM核微控制器集成開發(fā)工具ARM Developer Suite 1.2。在此開發(fā)環(huán)境下編寫DM 9000A.h頭文件和DM 9000A.c源文件作為網(wǎng)絡接口模塊的驅(qū)動程序。在DM 9000A.h頭文件中利用宏定義了各個端口的地址、片內(nèi)寄存器的片內(nèi)相對地址以及片內(nèi)寄存器各個位置上的信息,在DM 9000A.c源文件中直接調(diào)用宏定義即可。DM 9000A.c源文件主要函數(shù)有phy-read()、phy-w rite()、set-PH Y-mode()、InitNic()、DM 9000A-Init()、DM 9000A-Exception()、Send-Packet()、Rec-Packet()。

      3.1.1 驅(qū)動初始化

      為了啟動網(wǎng)絡控制器DM 9000A,使之處于數(shù)據(jù)接收發(fā)送就緒狀態(tài),必須對其進行初始化。首先是調(diào)用InitNic(void)函數(shù),讀取DM 9000A生產(chǎn)廠家序列號及產(chǎn)品序列號,然后調(diào)用初始化函數(shù)DM 9000A-Init(void)進行初始化[6]。主要是設置一些關鍵的寄存器,具體步驟如下:

      (1)設置通用寄存器GPR(REG.1FH)的Bit[0](PHYPD位)為0,啟動PHY。

      (2)設置網(wǎng)絡控制寄存器NCR(REG.00H)的Bit[0](RST位)為1,10μs后軟件復位。

      (3)設置NCR的Bit[2∶1](LBK位)為00,設置網(wǎng)絡工作模式為回環(huán)模式。

      (4)設置中斷屏蔽寄存器IMR(REG.FFH)的Bit[7]為1,使能指針自動跳回,當SRAM讀、寫指針超過SRAM的大小時,指針自動跳回起始位置。

      (5)寫6個字節(jié)的以太網(wǎng)節(jié)點地址到物理地址寄存器PAR(REG.10H~15H)中。

      (6)讀、寫1到網(wǎng)絡狀態(tài)寄存器NSR(REG. 01H)清除TX狀態(tài)標志,讀、寫1到中斷狀態(tài)寄存器ISR(REG.FEH)來清除中斷狀態(tài)標志。

      (7)設置IMR寄存器的Bit[0]/Bit[1]為使能接收/發(fā)送中斷。

      (8)設置接收控制寄存器RCR(REG.05H)的Bit[0](RXEN位)為1,使能接收功能。

      完成上述初始化步驟后,網(wǎng)絡控制器就可以正常啟動,收發(fā)數(shù)據(jù)包。

      3.1.2 數(shù)據(jù)包的發(fā)送

      DM 9000A內(nèi)部有16 kB的SRAM用來作為收發(fā)數(shù)據(jù)的緩沖區(qū),其中地址從0x0000H到0x0BFFH的前3 kB空間用來作為發(fā)送數(shù)據(jù)緩沖區(qū),在該數(shù)據(jù)緩沖區(qū)中可以同時保存2個完整的以太網(wǎng)幀。可將發(fā)送緩沖區(qū)看作2個獨立緩沖區(qū)——Index1和 Index2;將該幀數(shù)據(jù)的長度寫入長度寄存器TXPLH和TXPLL中;然后將發(fā)送控制寄存器TCR的bit[1]置位,啟動發(fā)送該幀數(shù)據(jù),DM 9000A自動對發(fā)送緩存區(qū)中的數(shù)據(jù)進行以太網(wǎng)組幀后,開始發(fā)送Index1中的數(shù)據(jù)。在發(fā)送Index1中數(shù)據(jù)同時,將下一幀數(shù)據(jù)寫入Index2中,當Index1中的數(shù)據(jù)發(fā)送完成后,將Index2中數(shù)據(jù)長度寫入長度寄存器,啟動網(wǎng)絡控制器發(fā)送Index2中的數(shù)據(jù),同時將要發(fā)送的下一幀數(shù)據(jù)寫入Index1。

      發(fā)送函數(shù)Send-Packet()用于發(fā)送以太網(wǎng)幀。輸入?yún)?shù)是結(jié)構(gòu)-pkst指針,程序如下所示:

      *STPTR為一個結(jié)構(gòu)本身類型的指針,用于指向前一個結(jié)構(gòu);length為以太網(wǎng)幀的長度; *DAPTR為指向要發(fā)送的以太網(wǎng)幀頭的起始地址。發(fā)送函數(shù)Send-Packet()的輸入?yún)?shù)值是要發(fā)送的數(shù)據(jù)鏈表。

      根據(jù)輸入?yún)?shù),獲得整個需要發(fā)送的數(shù)據(jù),然后發(fā)送,如果發(fā)送失敗(因為沖突等原因)則重發(fā)6次直到成功。要發(fā)送的數(shù)據(jù)鏈表結(jié)構(gòu)如圖2所示。

      圖2 要發(fā)送的數(shù)據(jù)鏈表結(jié)構(gòu)圖

      發(fā)送處理函數(shù)首先根據(jù)輸入?yún)?shù)計算出需要發(fā)送的幀長度;軟件把要發(fā)送的幀存入發(fā)送緩存塊中;然后判斷需要發(fā)送的字節(jié)數(shù)是否小于60,如果小于就設為60;最后設置發(fā)送寄存器,設置了發(fā)送寄存器后該幀自動被發(fā)送出去。發(fā)送完成后檢查狀態(tài)位是否發(fā)送成功,不成功就重新發(fā)送。其中設置發(fā)送寄存器函數(shù)比較復雜,首先檢查發(fā)送緩沖區(qū)塊是否為空;如果不為空,表明還有數(shù)據(jù)未發(fā)送,直接退出;如果為空,就將對應描述符數(shù)組的PACKET指針指向發(fā)送緩沖區(qū)塊的起始位置;最后MWCMD寄存器加“2”,檢測NSR寄存器完成標志位。發(fā)送數(shù)據(jù)包函數(shù)處理流程圖如圖3所示。

      3.1.3 數(shù)據(jù)包的接收

      接收到的數(shù)據(jù)先保存在DM 9000A內(nèi)部SRAM中地址從0x0C00~0x3FFF的13 K空間中,它是一個環(huán)形結(jié)構(gòu)。當使能數(shù)據(jù)接收功能后,DM 9000A就會自動接收數(shù)據(jù),一旦它接收完一幀數(shù)據(jù)后就會產(chǎn)生一個接收中斷。每個數(shù)據(jù)包的MAC頭有4個字節(jié)信息存放在 RX FIFO SRAM中,用寄存器MRCMDX(REG.F0H)和寄存器M RCMD(REG.F2H)獲取數(shù)據(jù)包的信息。接收到的數(shù)據(jù)包格式如圖4所示。

      圖3 發(fā)送數(shù)據(jù)包函數(shù)流程

      圖4 數(shù)據(jù)包格式

      圖4前4個字節(jié)為MAC頭,它包含了一個數(shù)據(jù)包的基本信息。第1個字節(jié)用于檢測是否接收到數(shù)據(jù)包,01H表示接收到數(shù)據(jù)包,00H表示未接收到數(shù)據(jù)包。第2個字節(jié)保存接收包的狀態(tài)信息,狀態(tài)信息的高字節(jié)與RSR寄存器相同,通過這個狀態(tài)信息來確認接收包的正確與否。第3、4字節(jié)是接收包的長度,其它字節(jié)是接收包的數(shù)據(jù)。

      寄存器MRCMDX被定義為地址不增加的存儲數(shù)據(jù)讀命令寄存器,只用于從RX FIFO SRAM中讀接收包準備標志“01”或最后字節(jié)的Bit[0]=1,而Bit[7:5]和Bit[4:2]分別表示IP/ TCP/UDP校驗的狀態(tài)和類型。接收數(shù)據(jù)包的流程如圖5所示。

      3.2 上層通信軟件設計

      為了實現(xiàn)嵌入式系統(tǒng)的網(wǎng)絡互連,在上述的驅(qū)動程序之上,系統(tǒng)還必須要實現(xiàn)TCP/IP網(wǎng)絡協(xié)議棧[7]。TCP/IP協(xié)議分為4層,即網(wǎng)絡接口層、網(wǎng)絡層、傳輸層和應用層,底層一般包含上層。數(shù)據(jù)包的發(fā)送是由上層協(xié)議函數(shù)調(diào)用下層協(xié)議函數(shù)來進行的。

      (1)以太網(wǎng)層的數(shù)據(jù)收發(fā)。以太網(wǎng)的數(shù)據(jù)接收函數(shù)Rec-Ethernet-Packed()由驅(qū)動的Rec-Packet()調(diào)用,它的輸入?yún)?shù)是以太網(wǎng)幀數(shù)據(jù)包的其實地址和網(wǎng)絡接口號。在 Rec-E thernet-Packed()中調(diào)用了結(jié)構(gòu)eip,該結(jié)構(gòu)在IP.H文件中定義了IP報的報頭。

      圖5 接收數(shù)據(jù)包函數(shù)流程

      首先Rec-Ethernet-Packed()函數(shù)通過傳遞函數(shù)參數(shù)獲知該幀的類型是IP報還是ARP報,然后分別調(diào)用IP處理函數(shù)和ARP接收處理函數(shù)。另外,在調(diào)用 IP處理函數(shù)之前還要進行ARP表的更新工作。其中,ARP表包含3個單元:生存時間(TTL)、IP地址、IP地址對應的MAC地址。ARP表項的添加和維護由ARP處理程序和以太網(wǎng)層的接收函數(shù)來完成。以太網(wǎng)接收函數(shù)流程圖如圖6所示。

      圖6 以太網(wǎng)接收函數(shù)流程

      數(shù)據(jù)包的接收與數(shù)據(jù)包的發(fā)送是一個相反的過程。上層的TCP處理函數(shù)或SOCKET接口函數(shù)都是通過調(diào)用Send-Ip-Frame()函數(shù)來發(fā)送IP報的,而Send-Ip-Frame()函數(shù)調(diào)用Send-Ip-To-LLC()函數(shù)來處理IP地址對應MAC地址,Send-Ip-To-LLC()函數(shù)再調(diào)用Send-ethernet-Frame()函數(shù),把對應的MAC地址寫入發(fā)送區(qū),最后調(diào)用驅(qū)動程序發(fā)送函數(shù)Send-Packet()。

      (2)IP層。IP協(xié)議處理主要針對IP協(xié)議層的處理,包括對接收到的IP報分類、根據(jù)上層的信息封裝和發(fā)送IP報等[8]。

      IP報發(fā)送函數(shù)Send-Ip-Frame()主要由上層協(xié)議的處理函數(shù)調(diào)用,負責IP層的數(shù)據(jù)封裝以及把數(shù)據(jù)傳遞給以太網(wǎng)層的發(fā)送函數(shù)。IP層的數(shù)據(jù)接收函數(shù)是IP-PROCESS(),它由以太網(wǎng)層的接受函數(shù)Rec-E thernet-Packed()調(diào)用,其輸入?yún)?shù)是IP幀數(shù)據(jù)包的起始地址和網(wǎng)絡接口號。IP-PROCESS()函數(shù)在執(zhí)行過程中,首先通過傳遞參數(shù)獲得該數(shù)據(jù)報的報頭長度和總長度(IP報頭+有限負載),然后向RECQ結(jié)構(gòu)數(shù)組填寫相關的信息,最后通過IP報中的協(xié)議字段來判斷有限負載中上層協(xié)議的類型進行處理。

      (3)TCP層。傳輸控制協(xié)議(TCP)是一種功能完備的面向連接的傳輸協(xié)議,具有流控制、傳輸確認和重傳機制[9]。在數(shù)據(jù)傳送之前必須先建立TCP連接,待所有數(shù)據(jù)傳送完畢后,再終止連接。TCP協(xié)議是一個比較復雜的協(xié)議,它與SOCKET接口關系非常密切。TCP完成接收處理而SOCKET負責發(fā)送處理。

      TCP協(xié)議的每個連接都由4個標志(服務器IP地址、服務器TCP端口、客戶機IP地址、客戶機TCP端口)作為它唯一標識。在進行數(shù)據(jù)傳輸前,服務器與客戶機之間必須使用TCP連接的建立過程,建立連接成功后,再進行數(shù)據(jù)傳輸。終止連接也要使用 TCP連接中斷過程關閉連接。TCP共有11種連接狀態(tài),正常連接和斷開的狀態(tài)變化如圖7所示。

      圖7 TCP連接狀態(tài)變化過程

      TCP接收處理函數(shù) Tcp-Process()的任務主要是把接收到的TCP報文連接分類,然后根據(jù)該連接所處的狀態(tài)調(diào)用狀態(tài)處理函數(shù)進行處理。首先判斷該TCP報是否過長,然后把TCP報(TCP報頭+有效負載)從接收緩存區(qū)(RECBUFF)復制到TCP接收緩沖區(qū)(Tcp-Packed)。接著檢查結(jié)構(gòu)體數(shù)組 TcpStatus中的 IP和PORT單元,查看是否有對應的連接已經(jīng)建立從而得到 TcpStatus的序號。如果有,則根據(jù)該TcpStatus得State發(fā)送到對應狀態(tài)處理函數(shù);否則,檢查TcpStatus的M yport單元,查看是否有監(jiān)聽對應的端口。若有,則發(fā)送到Tcp-Listen()函數(shù)處理;否則,證明該端口沒有被監(jiān)聽,或監(jiān)聽的連接數(shù)已經(jīng)滿了,就發(fā)送RST-ACK包給對方。

      4 結(jié)束語

      本文介紹的以ARM處理器LPC2468為核心,采用DM 9000A作為網(wǎng)絡接口芯片的嵌入式以太網(wǎng)接口方案,結(jié)構(gòu)簡單、運行穩(wěn)定、體積小、功耗低,能夠十分方便地實現(xiàn)嵌入式系統(tǒng)的網(wǎng)絡互連。本設計成功地運用于數(shù)據(jù)網(wǎng)關、微機保護裝置、無線基站等項目中,具有良好的效果。

      [1] 于 博,張崇巍.基于μC/OS-Ⅱ的多任務工業(yè)以太網(wǎng)測控節(jié)點設計[J].合肥工業(yè)大學學報:自然科學版,2009,32 (12):1812-1815.

      [2] 劉偉明,杜 林.基于DM 9000A和LPC2214的嵌入式以太網(wǎng)接口設計[J].電子測量技術,2008,(6):86-22.

      [3] 周立功.深入淺出ARM 7:基于LPC 2400[R].廣州:廣州致遠電子有限公司,2008:268-324.

      [4] 趙艷祥,師五喜,郭文成,等.基于ARM的以太網(wǎng)控制系統(tǒng)的設計與實現(xiàn)[J].科技廣場,2009,(5):205-206.

      [5] 韓 超,王可人.基于DM 9000的嵌入式系統(tǒng)的網(wǎng)絡接口設計與實現(xiàn)[J].工業(yè)控制計算機,2007,(4):17-18.

      [6] 賈東耀,彭樹林.嵌入式系統(tǒng)網(wǎng)絡接口與驅(qū)動設計[J].微型電腦應用,2008,(4):20-22.

      [7] 揚小輝,肖麗娜.基于ARM和以太網(wǎng)的遠程智能控制儀表的設計[J].工業(yè)控制網(wǎng)絡,2009,(5):22-24.

      [8] Scaglia S.The embedded Internet TCP/IP basics:im plementation and application[M].北京:北京航空航天大學出版社,2008:67-98.

      [9] 周立功.ARM嵌入式系統(tǒng)軟件開發(fā)實例:二[M].北京:北京航空航天大學出版社,2004:449-458.

      猜你喜歡
      網(wǎng)絡接口寄存器以太網(wǎng)
      變電站網(wǎng)絡接口物理防護系統(tǒng)設計與實現(xiàn)
      基于1500以太網(wǎng)養(yǎng)豬場的智能飼喂控制系統(tǒng)的設計與實現(xiàn)
      Lite寄存器模型的設計與實現(xiàn)
      計算機應用(2020年5期)2020-06-07 07:06:44
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      談實時以太網(wǎng)EtherCAT技術在變電站自動化中的應用
      電子制作(2017年24期)2017-02-02 07:14:44
      淺析CTC與GSM-R系統(tǒng)網(wǎng)絡接口及路由配置改進措施
      一種90W高功率以太網(wǎng)供電系統(tǒng)的設計
      電源技術(2015年7期)2015-08-22 08:48:48
      淺談EPON與工業(yè)以太網(wǎng)在貴遵高速公路中的應用
      網(wǎng)絡設置管理
      京滬高鐵GSM-R網(wǎng)絡接口監(jiān)測網(wǎng)關子系統(tǒng)的設計與實現(xiàn)
      新巴尔虎右旗| 湖南省| 峨眉山市| 潜山县| 肥东县| 卓尼县| 临泽县| 松潘县| 达孜县| 来凤县| 苏尼特右旗| 紫阳县| 界首市| 高唐县| 新乡市| 石渠县| 延寿县| 罗甸县| 海晏县| 西华县| 炉霍县| 禹城市| 宁德市| 定安县| 碌曲县| 宁德市| 栾川县| 都兰县| 余姚市| 佳木斯市| 天柱县| 连山| 岚皋县| 武强县| 锦州市| 金阳县| 昭觉县| 兰溪市| 四平市| 石柱| 甘德县|