閆亞婧 ,祖靜,梁志劍,尤文斌
(中北大學 儀器科學與動態(tài)測試教育部重點實驗室,山西 太原 030051)
傳統(tǒng)的存儲裝置只能實現短距離的數據存儲,并且存儲速度非常有限,對于長距離、快速存儲的要求顯得無能為力[2]。隨著技術的不斷發(fā)展,越來越多的測試系統(tǒng)、控制機構等都需要實時地并且遠距離快速地傳輸數據。但是現在通用的數據傳輸接口如:USB接口、串行接口、并行接口等只能實現非常短距離的數據傳輸。利用以太網接口實現快速,長距離地數據傳輸并存儲是一種非常好的解決方法[3]。
該存儲裝置具有以太網接口,計算機通過自身的網卡及網線與該存儲設備相連。該存儲裝置的基本構成:雙絞線接口RJ45口,網絡變壓器,以太網接口芯片,單片機,電源模塊,串口讀數口。此處使用了一種以高性能的以太網控制芯片DM9000A,它是中國臺灣DAVICOM公司推出的一款高度集成、功能強大、少引腳、性價比高的單片快速以太網控制芯片。單片機用MSP430FG4618,網絡變壓器選用PH163539。系統(tǒng)框圖如圖1所示。
1.1.1 主要特性和總體結構
DM9000A的主要特性如下:
圖1 系統(tǒng)硬件連接框圖
支持8/16bit兩種主機工作模式;適用于10Base-T和100Base-T;
10/100 M自適應,適應不同的網絡速率要求;
內置16 KB的SRAM,用于收發(fā)緩沖,降低對主處理器的速度要求;
內部集成了一個 10/100M自適應PHY,可以連接到3類、4類、5類的10M無屏蔽雙絞線和5類的100M無屏蔽雙絞線。
通過HP認證的AUTO-Mdix(支持直接互連自動翻轉)功能;
與IEEE 802.3u兼容,支持IEEE802.3x全雙工,可同時收發(fā);
具有睡眠模式,可降低功耗;
采用48引腳LQFP封裝,縮小PCB面積。
該電路還集成了EEPROM接口,自舉時通過EEPROM接口輸入到芯片中,從而實現自動初始化。
DM9000A實現以太網媒體介質訪問層(MAC)和物理層(PHY)的功能,包括MAC數據幀的組裝/拆分與收發(fā)、地址識別、CRC編碼/校驗、MLT-3編碼器、接收噪聲抑制、輸出脈沖成形、超時重傳、鏈路完整性測試、信號極性檢測與糾正等[4]。
1.1.2 DM9000A接口連接
DM9000A可選擇EEPROM模式,將DM9000A的初始化程序以及MAC地址存入其中。本設計采用單片機直接對DM9000A進行初始化,并將MAC地址直接寫入DM9000A的內部寄存器,所以EECK,EEDIO引腳保持默認的懸空狀態(tài)。系統(tǒng)采用16位模式, 因此DM9000A的EECS引腳也保持默認的懸空狀態(tài)。這樣可以省去網卡的配置存儲器,減少硬件平臺的面積[5]。
數據線SD0-SD15直接與單片機的通用I/O口相連。DM9000A的讀信號線IOR、寫信號線IOW、片選信號CS分別與單片機的通用I/O引腳相連。DM9000A的INT中斷引腳連接到單片機的P1口作為中斷源。DM9000A的引腳連接如圖2所示。
圖2 DM9000A引腳連接
DM9000A上的復位引腳采用低電平復位,至少要保持20ms的復位時間,此處采用阻容電路對DM9000A進行復位。調節(jié)電阻值到10kΩ,電容值到 10μF。
單片機的復位同樣采用阻容復位電路,低電平復位。由于單片機復位后會對DM9000A進行初始化配置,DM9000A上電復位后至少5μs才可以對其初始化,因此單片機的復位時間必須保證比DM9000A的復位時間長,否則當DM9000A還處在復位中單片機對就DM9000A初始化配置會導致混亂。調節(jié)電阻值到87kΩ,電容值到10μF。
為了防止因RJ45口的損壞而導致整個裝置不可用,本設計還加入了串口模塊,可以直接利用串口進行讀寫,存儲數據。
DM9000A可與單片機以8 bit或16 bit的總線方式連接,并可根據需要以單工或全雙工等模式運行。
在系統(tǒng)上電后,單片機通過配置DM9000A內部寄存器,完成DM9000A的初始化。隨后,單片機通過編程控制進入低功耗模式。DM9000A自動進入省電模式,只有探測電路工作,耗電極少。此時系統(tǒng)處于等待接收狀態(tài)。DM9000A不斷發(fā)送連接脈沖,如果沒有數據則保持低功耗狀態(tài),一旦有信號出現,立即喚醒進入工作模式。當DM9000A內部的接收緩沖區(qū)接收到數據的時候就會通過中斷引腳發(fā)出中斷,單片機接收到中斷后喚醒,啟動數據接收程序接收數據。
單片機將相應的數據從DM9000A的接收FIFO通過寄存器讀回,按照TCP/IP協(xié)議的內容進行解包把原始有用數據提取出來,區(qū)分命令和數據,如果是命令則進行相應的處理,如果是數據則存如內部FLASH中。存儲完畢后單片機和DM9000A進入低功耗模式,系統(tǒng)恢復接收等待狀態(tài)。
當計算機發(fā)出讀數命令,單片機接收到此命令啟動發(fā)數程序,先將數據從內部Flash中讀出,再將數據打包成IP數據包,逐字節(jié)發(fā)送到DM9000A的數據發(fā)送緩存中,然后將數據長度等信息填充到DM9000A的相應寄存器內,隨后發(fā)送使能命令。DM9000A將緩存的數據和數據幀信息進行MAC組幀,并發(fā)送出去。發(fā)送完成后,系統(tǒng)恢復到等待接收狀態(tài),單片機和DM9000A進入低功耗模式。若不再進行任何操作則下電[6]。
DM9000A遵循自動協(xié)商(Auto-Negotiation)機制。具有這種功能的設備會主動與對方協(xié)商,并且等待對端返回協(xié)商結果,它不僅能夠協(xié)商兩端的工作速度是10M,還是100M,而且還可以協(xié)商兩端工作的雙工方式是半雙工還是全雙工。所以可自動檢測網絡連接情況,根據網速設置內部的數據收發(fā)速率為10 Mb/s或100 Mb/s,還能根據RJ45接口連接方式改變數據收發(fā)引腳的方向,因此無論外部網線是采用對等還是交叉方式,系統(tǒng)均能正常通信。
在DM9000A中只有INDEX端口與DATA端口兩個寄存器可以被處理器直接訪問,其它所有內部控制和狀態(tài)寄存器都是通過這兩個端口寄存器間接訪問的。網絡控制器CMD引腳決定了處理器訪問的是哪個端口寄存器:當CMD=0時,主機訪問的是INDEX端口寄存器;當CMD=1時,訪問的是DATA端口寄存器[7]。
實際中對DM9000A控制或狀態(tài)寄存器訪問的命令順序是:
(1)寫要訪問寄存器的地址到INDEX端口;
(2)通過DATA端口來讀/寫數據。
DM9000A與單片機的數據傳輸是通過單片機的通用I/O口連接,因此對寄存器進行讀寫控制的時候一定要注意加上時序。
在單片機編程中加入TCP/IP協(xié)議才能保證數據每時每刻傳輸的準確性。在傳輸層我們拋棄了復雜的TCP協(xié)議而使用簡單的UDP協(xié)議。雖然UDP是無連接的協(xié)議,它不保證數據包一定能夠到達目的主機,但是在本應用中存儲器跟主機通常位于同一內部局域網內,網絡環(huán)境良好,數據丟失的可能性很小,并且UDP容易實現,占用資源小[8]。UDP頭部包含了可選的校驗和字段,而校驗要涉及到偽報頭,為了簡化設計和減小開銷,我們不使用校驗,直接把該字段設為零,表示不使用校驗[9]。
DM9000A正常工作需要在上電后對內部寄存器進行初始化。該過程是通過單片機對DM9000A外部控制總線和數據總線的讀寫操作完成的。具體流程如下:
(1)激活PHY
設置GPR(REG_1F) CEPI00 bit[0]=0;
由于上電復位后,DM9000A恢復默認的休眠狀態(tài)以降低功耗,因此需要首先喚醒PHY。
(2)進行兩次軟復位,步驟如下:
設置NCR(REG_00)bit[2:0]=011;至少保持20μs;
清除NCR(REG_00)bit[2:0]=000;
設置NCR(REQ_00)bit[2:0]=011;至少保持20μs;
清除NCR(REG_00)bit[2:0]=000。
(3)配置NCR寄存器
設置NCR(REG_00)bit[2:1]=00;配置為正常模式。
通過改變該寄存器可以選擇設置內部或者外部PHY、全雙工或者半雙工模式、使能喚醒事件等網絡操作。
(4)清除發(fā)送狀態(tài)
設 置 NSR(REG_01)bit[5]=1, bit[3]=l ,bit[2]=l。(5)清除所有中斷標志
設置ISR(REG_FE) bit[1]=l bit[0]=l。
(6)設置IMR寄存器(REG_FF)PAR bit[7]=l;啟用RX/TX FIFO SRAM讀/寫地址指針自動返回功能。
(7)通過IMR寄存器(REG_FF)PRM bit[0]=1對RX中斷使能。此處發(fā)送中斷不使能,防止在發(fā)送數據時被中斷干擾。
(8)設置PAR寄存器(REG_10-15),寫入MAC地址。用戶自己定義MAC地址時必須注意,MAC地址的第一個字節(jié)必須為偶數,第一個字節(jié)為奇數的MAC地址為多播地址。如果把MAC地址的第一個字節(jié)定義為奇數,可能會引起網絡通信錯誤。
(9)設置RCR寄存器,使能數據接收功能。
以上步驟完成后,可以通過LED指示燈觀測DM9000A是否已成功完成初始化,就可以正常啟動和收發(fā)數據包了[10]。
軟件實現的主流程如圖3所示。
圖3 系統(tǒng)主流程
圖4為利用網絡調試助手的發(fā)送端向裝置發(fā)送十六進制數的過程。圖5為利用IAR軟件對單片機進行單步調試的結果。單片機內部Flash的存儲起點是4400H,程序中把UDP包頭去掉,因此只把所需要的數據保存下來。從圖中看出,發(fā)送的數據和單片機內部接收到的數據是一致的。
圖4 網絡調試助手的發(fā)送端
圖5 單片機內部Flash存儲結果
單片機對以太網卡的驅動,是通過以太網對電器進行控制的第一步,也是非常關鍵的一步。在單片機中簡單實現TCP/1P協(xié)議才能保證數據每時每刻傳輸的準確性。利用以太網控制電器設備,無需另外鋪設線路,降低了成本,是現代控制發(fā)展的一條新出路。該設計方案具有硬件連接簡單、功耗低、體積小、運行穩(wěn)定可靠等優(yōu)點。
[1]劉偉明,杜林.基于DM9000A和LPC2214的嵌入式以太網接口設計[J]. 電子測量技術,2008,31(6).86-89.
[2]楊鵬,趙琦,孔鑫,等.工業(yè)以太網的發(fā)展及其技術特點[J].微計算機信息,2006,2(1).32-33.
[3]蘇紹興,王瑞陽.工業(yè)以太網技術的發(fā)展及展望[J]. 溫州職業(yè)技術學院學報,2003,3(4):53-56.
[4]DAVICOM Semiconductor,Inc. DM9000A Ethernet Controller with General Processor Interface Data Sheet [S].USA:DAVICOM Semiconductor,Inc ,2005.
[5]DAVICOM Semiconductor,Inc.DM9000A 16/8Bit Ethernet Controller with GeneralProcessor Interface Application Notes V1.20[S].USA:DAVICOM Semiconductor,Inc,2005.
[6]蘇耀峰,王德剛, 魏急波. DM9000A原理及其與基帶信號處理平臺的結合應用[J]. 國外電子元器件,2007:53-56.
[7]謝希仁.計算機網絡[M].北京:電子工業(yè)出版社,2008.
[8]吳功宜.計算機網絡[M].北京:清華大學出版社,2007.
[9]劉波.基于ARM的嵌入式以太網網絡接口設計[J].電子工程,2006(1):39-42.