淺談AT91RM9200在以太網(wǎng)接口模塊應用
0 引 言
在Internet飛速發(fā)展的今天,網(wǎng)絡已經(jīng)滲透到生活的方方面面,與網(wǎng)絡的結(jié)合已經(jīng)成為嵌入式系統(tǒng)發(fā)展的必然趨勢。目前,ARM微處理器已經(jīng)在多個領(lǐng)域中得到應用,各種基于ARM微處理器的設備應用數(shù)量已經(jīng)遠遠超過了通用計算機,基于ARM微處理器的開發(fā)應用正成為數(shù)字時代的技術(shù)潮流。ARM(Advanced RISC Machines)是微處理器行業(yè)的一家知名企業(yè),設計了大量高性能、廉價、耗能低的RISC處理器、相關(guān)技術(shù)及軟件。技術(shù)具有性能高、成本低和能耗省的特點。適用于多種領(lǐng)域,比如嵌入控制、消費/教育類多媒體、DSP和移動式應用等。
l AT91RM9200簡介
AT91RM9200是基于ARM920T核的高性能、低功耗16/32位RISC(精簡指令集計算機)微處理器。其內(nèi)部集成豐富的外設資源,適用于要求外設資源豐富、功耗低、工作嚴格穩(wěn)定的工業(yè)控制和野外儀器等方面。 從而為低功耗,低成本,高性能的計算機應用提供了一個單片解決方案。適用于要求外設資源豐富,功耗低,工作穩(wěn)定的工業(yè)控制等方面。
AT91RM9200處理器主要具有如下特點:1)低功耗:VDDCORE電流為30.4mA,待機模式電流為3.1mA.2)雙向、32位外部數(shù)據(jù)總線支持8位、16位、32位數(shù)據(jù)寬度讀寫,支持SDRAM、static Memory、Burst Flash、Compact FLASH和NAND Flash,滿足采集站對于數(shù)據(jù)的采集和處理要求。3)提供一系列符合工業(yè)標準的外設接口,如:USART、SSC、SPI、USB及I2C等。4)具有20通道外圍數(shù)據(jù)控制器(PDC或DMA),可以數(shù)據(jù)的傳輸更快,同時可以減輕CPU的負擔,以便實時響應其它的處理。5)支持USB 2.0(12Mbps)主機端口,可以方便在野外采集時另接存儲器,以便持續(xù)采集。 6)支持以太網(wǎng)10/100,可以很方便的實現(xiàn)采集之間的快速通信。
2 最小系統(tǒng)設計
硬件系統(tǒng)設計是嵌入式系統(tǒng)設計的基礎,ARM系統(tǒng)硬件平臺主要分為兩部分:一部分為基于ARM處理器的最小系統(tǒng);另一部分為外圍擴展電路。系統(tǒng)只有在硬件最小系統(tǒng)調(diào)試穩(wěn)定的基礎上,才能靈活、輕松地擴展出其他外圍應用,所以最小系統(tǒng)是保證微處理器可靠工作所必須的基本電路。基于AT91RM9200微處理器的最小系統(tǒng)由微處理器、電源電路、時鐘電路、復位電路、JTAG接口、存儲器模塊、串行調(diào)試接口等電路組成。
2.1 電源電路設計
在系統(tǒng)中AT91RM9200需要1.8 V和3.3 V電源,另外,大部分外圍器件需要3.3 V電源,小部分外圍器件還需要5 V電源,假設輸入電壓為5 V直流穩(wěn)壓電源。為了得到可靠的3.3 V電壓,此處選用的電壓轉(zhuǎn)換芯片是NCPlll7ST33T3,它的輸入電壓為5 V,輸出電壓為3.3 V,最大輸出電流為0.8 A.同樣,為了得到可靠的1.8 V電壓,選用NCPlll7STl8T3,它的輸入電壓為5 V,輸出電壓為1.8 V,最大輸出電流為0.8 A.由于3.3 V和1.8 V屬于NCPlll7系列的2個固定輸出電壓,所以設計比較簡單,只需要在電路中與芯片并聯(lián)2個典型值為10 tLF、的濾波電容即可。
2.2 時鐘電路設計
時鐘電路為AT91RM9200和其他外設電路提供工作時鐘。處理器內(nèi)部帶有鎖相環(huán)電路,所以外接頻率比較低的晶體振蕩器,該設計用晶體振蕩器Y1(20 MHz)作為系統(tǒng)的主時鐘振蕩器。處理器內(nèi)部還帶有實時時鐘電路,還需要外接32.768 kHz的晶體振蕩器。振蕩器產(chǎn)生的主時鐘和慢時鐘經(jīng)過微處理器內(nèi)部2個鎖相環(huán)后,產(chǎn)生系統(tǒng)所需的各種主時鐘、外設時鐘以及USB器件工作時鐘。振蕩器(英文:oscillator)是用來產(chǎn)生重復電子訊號(通常是正弦波或方波)的電子元件。其構(gòu)成的電路叫振蕩電路。能將直流電轉(zhuǎn)換為具有一定頻率交流電信號輸出的電子電路或裝置。種類很多,按振蕩激勵方式可分為自激振蕩器、他激振蕩器;按電路結(jié)構(gòu)可分為阻容振蕩器、電感電容振蕩器、晶體振蕩器、音叉振蕩器等;按輸出波形可分為正弦波、方波、鋸齒波等振蕩器。廣泛用于電子工業(yè)、醫(yī)療、科學研究等方面。
2.3 復位電路設計
AT91RM9200有2個獨立的復位信號,即系統(tǒng)復位信號NRST與調(diào)試復位信號NTRSI,都是低電平有效。系統(tǒng)上電后,AT91RM9200必須執(zhí)行一個上電復位,在過渡狀態(tài)下,它的強制復位信號為低,直到電源電壓和振蕩器工作頻率穩(wěn)定為止。此外,NRST和NTRST還可以手動復位,以方便用戶調(diào)試程序。
2.4 存儲器模塊設計
存儲器模塊包括NOR FLASH存儲器和SDRAM存儲器。
NOR FLASH存儲器用于存儲系統(tǒng)運行所需的程序和重要數(shù)據(jù),即使掉電,程序和數(shù)據(jù)也不會丟失。該設計中所用芯片是Atmel公司生產(chǎn)的AT49BNl614T,以保持與AT91RM9200的兼容性,其存儲容量為2 MB,工作電壓為3.3 V,采用56引腳TSOP封裝,具有16位數(shù)據(jù)寬度。AT91RM9200需要以下引腳與之對應相連:A[1:21],D[0:15],NCSO/BFCS,NRST,BFRDY,BFWE,BFOE.
SDRAM存儲器的作用是存放系統(tǒng)運行時的程序和數(shù)據(jù),掉電后該部分程序和數(shù)據(jù)會丟失。SDRAM:Synchronous Dynamic Random Access Memory,同步動態(tài)隨機存儲器,同步是指 Memory工作需要同步時鐘,內(nèi)部的命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準;動態(tài)是指存儲陣列需要不斷的刷新來保證數(shù)據(jù)不丟失;隨機是指數(shù)據(jù)不是線性依次存儲,而是自由指定地址進行數(shù)據(jù)讀寫。SDRAM從發(fā)展到現(xiàn)在已經(jīng)經(jīng)歷了四代,分別是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM.(顯卡上的DDR已經(jīng)發(fā)展到DDR5) 設計中使用兩片數(shù)據(jù)寬度為16位的SDRAM并為一個具有32位數(shù)據(jù)寬度的SDRAM模塊,以充分發(fā)揮微處理器32位數(shù)據(jù)寬度的高性能。AT91RM9200需要以下引腳與HY57V561620對應相連:D[0:31],A[2:11],A[13:14],NBS0,N:BSl,NBS2,NBS3,SDCKE,SDCK,SDCS,RAS,CAS,SDWE.這里特別注意:A12引腳不使用。
2.5 JTAG接口電路設計
JTAG是英文"Joint Test Action Group(聯(lián)合測試行為組織)"的詞頭字母的簡寫,該組織成立于1985 年,是由幾家主要的電子制造商發(fā)起制訂的PCB 和IC 測試標準。JTAG 建議于1990 年被IEEE 批準為IEEE1149.1-1990 測試訪問端口和邊界掃描結(jié)構(gòu)標準。該標準規(guī)定了進行邊界掃描所需要的硬件和軟件。自從1990 年批準后,IEEE 分別于1993 年和1995 年對該標準作了補充,形成了現(xiàn)在使用的IEEE1149.1a-1993 和IEEE1149.1b-1994.JTAG 主要應用于:電路的邊界掃描測試和可編程芯片的在線系統(tǒng)編程JTAG也是一種國際標準測試協(xié)議(IEEE 1149.1兼容),主要用于芯片內(nèi)部測試?,F(xiàn)在多數(shù)的高級器件都支持JTAG協(xié)議,如DSP、FPGA器件等。標準的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。 相關(guān)JTAG引腳的定義為:TCK為測試時鐘輸入;TDI為測試數(shù)據(jù)輸入,數(shù)據(jù)通過TDI引腳輸入JTAG接口;TDO為測試數(shù)據(jù)輸出,數(shù)據(jù)通過TDO引腳從JTAG接口輸出;TMS為測試模式選擇,TMS用來設置JTAG接口處于某種特定的測試模式;TRST為測試復位,輸入引腳,低電平有效。GND JTAG調(diào)試接口設計是否標準,直接影響到硬件平臺是否能夠連接ARM仿真器。所以在設計時,有以下幾點需要注意:
(1)盡可能按照標準的20針接口設計。如果設計成14針接口,一定要嚴格按照14針接口對應于20針接口的對應關(guān)系來設計。
(2)nTRST和nRESET、引腳不用時,要用10 kΩ的電阻拉高,否則JTAG上這兩個引腳的信號不確定,會造成ARM調(diào)試器不能正常連接目標系統(tǒng)。
(3)JTAG上輸出的信號都要用10 kΩ的電阻拉高。
2.6 UART、串行接口電路設計
AT91RM9200的UASRT作為同步/異步串行接口,在調(diào)試狀態(tài)下作為調(diào)試串口;在正常工作狀態(tài)下為一般串行口使用,可以通過RS 232實現(xiàn)與其他設備的通信。該設計中的UART、接口芯片是MAX3232,其工作電壓為3.3 V,16引腳SOIC封裝。其最為簡單且常用的是三線制接法,即地線,接收數(shù)據(jù)線和發(fā)送數(shù)據(jù)線三腳對應相連。
在完成以上幾部分電路設計后,基于AT91RM9200的嵌入式系統(tǒng)就具有了安全可靠的工作條件,也為下面的擴展以太網(wǎng)接口設計打下了良好的基礎。
3 以太網(wǎng)接口設計
在ARM系統(tǒng)中,以太網(wǎng)接口是與遠程機進行通信及調(diào)試的基礎,還可以進行內(nèi)部局域網(wǎng)和互聯(lián)網(wǎng)間的通信。而基于ARM的系統(tǒng)若沒有以太網(wǎng)接口,其應用價值就會大打折扣。因此,就整個嵌入式系統(tǒng)而言,以太網(wǎng)接口電路是必不可少的,但同時也是相對復雜的。
從硬件的角度看,以太網(wǎng)接口電路主要由MAC控制器和物理層接口(PHY)兩大部分構(gòu)成。該設計中所用到的以太網(wǎng)接口芯片RTL8019AS,其內(nèi)部結(jié)構(gòu)包含這兩部分。RTL8019AS是一款高集成度的以太網(wǎng)控制芯片,具有8/16位總線模式,集成了IEEE802.3協(xié)議標準的MAC層和PHY層的性能,與NE2000相兼容,支持以太網(wǎng)全雙工通信方式;支持UTP,AUI和BNC自動檢測,支持16位I/O基本地址選項和額外I/O地址輸入/輸出完全解碼方式;支持存儲器瞬時讀寫,收發(fā)可同時達到10 Mb/s的速率,內(nèi)置16 KB的SRAM,可以方便地與微處理器進行連接。它支持多種嵌入式處理器芯片,內(nèi)置有FIFO緩存器用于發(fā)送和接收數(shù)據(jù)。
3.1 以太網(wǎng)接口工作原理
使用RTL8019AS作為以太網(wǎng)的物理層接口,它的基本工作原理是:在收到由主機發(fā)來的數(shù)據(jù)包后,偵聽網(wǎng)絡線路。如果線路忙,它就等到線路空閑為止,否則,立即發(fā)送該數(shù)據(jù)幀。在發(fā)送過程中,首先為數(shù)據(jù)包添加幀頭(包括前導字段和幀開始標志),然后生成CRC校驗碼,最后將此數(shù)據(jù)幀發(fā)送到以太網(wǎng)上。
在接收過程中,它將從以太網(wǎng)收到的數(shù)據(jù)包在經(jīng)過解碼、去幀頭和地址校驗等步驟后緩存在片內(nèi)。在CRC校驗通過后,它會根據(jù)初始化配置情況,通知RTL8019AS收到了數(shù)據(jù)包。最后,用某種傳輸模式(I/O模式、Memory模式、DMA模式)傳到ARM系統(tǒng)的存儲區(qū)中。
3.2 硬件電路設計
用RTL8019AS芯片設計的以太網(wǎng)控制器相關(guān)電路,可以通過RJ45連上以太網(wǎng),在判斷網(wǎng)卡芯片是否工作正常時,有兩個依據(jù),一是看狀態(tài)指示LED是否有閃爍;二是用專用網(wǎng)絡監(jiān)聽工具軟件進行監(jiān)聽。在本設計中用兩個LED指示燈表示接收和發(fā)送狀態(tài),當有網(wǎng)絡連接且收發(fā)數(shù)據(jù)包時,LED閃爍。此外,網(wǎng)卡芯片單獨不能工作,還必須有一個網(wǎng)絡變壓器在RJ45接口和網(wǎng)卡芯片中間進行電平轉(zhuǎn)換,該設計中所用的電平轉(zhuǎn)換器是20F001N.另外要特別注意,由于RTL8019AS的復位引腳是高電平有效,而AT91RM9200的NRST引腳是低電平有效,所以不能直接將兩個引腳進行連接。該設計所用的解決方法是:在兩引腳間加上一個共發(fā)射極的三極管,利用它的反相作用,來達到兩個復位引腳間的電平匹配。同時,為了提高數(shù)據(jù)的傳輸速率,需要將網(wǎng)卡芯片設計成16位的數(shù)據(jù)通道,這就要求將RTL8019AS的IOCSl6B引腳用電阻上拉來達到設計目的。RTL8019AS與AT91RM9200進行連接還需要以下引腳:NOE,NEW,NCS2,D[O:15],一條中斷線IRQ0以及地址線A[O:4](設計RTL8019AS的I/O基地址為300H,所以只需要SA[O:4]接A[O:4],而A[5:19]只需要接地即可)。至此,硬件電路已經(jīng)設計完畢,整個電路的結(jié)構(gòu)框圖如圖1所示。
4 軟件設計
4.1 以太網(wǎng)口初始化
初始化第一步是復位以太網(wǎng)口。以太網(wǎng)口復位分為硬件復位和軟件復位。硬件復位通過給RTL8019AS的RESET引腳發(fā)送一個復位脈沖;軟件復位通過寫端口達到復位,也就是給18~1F之間的任意一個寄存器寫入任意一個數(shù),就使得以太網(wǎng)口復位。第二步是設置一些寄存器的初始值,寄存器保存本機的物理地址,只有和寄存器保存的物理地址相同的以太網(wǎng)幀才被接收(RCR寄存器中PRO=O)。
以太網(wǎng)口第一次復位必須是硬件復位,硬件復位以后要經(jīng)過大約10 ms的等待才能對以太網(wǎng)口操作,特別是發(fā)送和接收操作。
4.2 以太網(wǎng)口存儲及初始化
RTL8019AS內(nèi)部RAM地址范圍從0x0000~0x7FFFF,其中0x4000~Ox7FFF用作接收和發(fā)送緩沖區(qū)。緩沖區(qū)是按頁管理的,256 b為一頁,這樣接收發(fā)送緩沖頁面是0x40~0x7F.發(fā)送緩沖區(qū)的起始頁在TPSR寄存器中設置,接收緩沖區(qū)的起始頁在PSTART寄存器中設置,PSTART實際上也表明了發(fā)送緩沖區(qū)的結(jié)束頁。接收緩沖區(qū)的結(jié)束頁是PSTOP.所以發(fā)送緩沖區(qū)的頁從TPSR到PSTART-1,接收緩沖區(qū)的頁從PSTART到PSTOP-1.一般設置如下:
使發(fā)送緩沖區(qū)可以容納下兩個最大以太網(wǎng)幀(最大為1 514 B),第一個幀放在SEND_START_PAGEO起始頁,第二個幀放在SEND_START_PAGE1起始頁,剩下的緩沖區(qū)都作為接收緩沖區(qū)。
RTL8019AS內(nèi)部RAM是雙口 RAM,因為它要支持兩個獨立的操作:一個是用戶CPU讀取RAM中的內(nèi)容,對這個操作RTL8019AS提供一個讀寫口,也就是寄存器中的Remote DMA Port;另一個是RTL8019AS內(nèi)部控制電路把從網(wǎng)絡接收的數(shù)據(jù)寫入RAM中,這時RAM稱為Local DMA.RTL8019AS通過Local DMA寫入RAM是不需要用戶干涉的,它通過Remote DMA Port讀寫RAM.
讀RAM見RTLReadRam函數(shù),代碼如下:
這個函數(shù)表示從address開始讀取size個字節(jié)的內(nèi)容到buff指向的內(nèi)存中。設置CR寄存器指令為:writereg(cr,(0x00 | er_remote_read | cr_start_com-mand));然后從Remote DMA Port讀取size次,就得到所需的數(shù)據(jù)。
寫RAM函數(shù),操作基本上和讀RAM函數(shù)差不多,只要將最后一步的讀size次改成寫size次就可以。
4.3 發(fā)送數(shù)據(jù)包
發(fā)送數(shù)據(jù)包的基本步驟如下:
(1)首先將發(fā)送的起始頁,一般是發(fā)送緩沖區(qū)內(nèi)的頁(Ox40~Ox4b),寫入StartPage變量中。將要發(fā)送的數(shù)據(jù)寫入地址為StartPage《8開始的緩沖區(qū)中,然后等待上一次發(fā)送結(jié)束。對于過大或者過小的數(shù)據(jù)包,不發(fā)送;對于過小的幀,在發(fā)送時要填充。
TPSR為發(fā)送起始寄存器,將StartPage寫入TPSR寄存器,高字節(jié)寫入TBCRH(TBCRl),低字節(jié)寫入TBCRL(TBCRO)。當寫發(fā)送命令時,RTL8019AS將從TPSR《8地址開始發(fā)送size個字節(jié)的數(shù)據(jù)。
(2)發(fā)送數(shù)據(jù)幀:發(fā)送緩沖區(qū)可以存儲2個最大的以太網(wǎng)幀,一個起始頁為SEND_START_PAGEO,另一個起始頁SEND_START_PAGEl,兩個交替使用。發(fā)送數(shù)據(jù)幀時,CR寄存器設置為:writereg(cr,((prepage&OxCO)|cr_abort_compile_dma|cr_txp |cr_start_command]));發(fā)送數(shù)據(jù)包函數(shù)代碼如下:
4.4 接收數(shù)據(jù)包
接收數(shù)據(jù)包的步驟如下:
(1)接收緩沖操作。當RTL8019AS接收到一個數(shù)據(jù)包后,自動將接收的數(shù)據(jù)包放到CURR頁。如果一頁放不下,則CURR加1;如果CURR=接收結(jié)束頁,則CURR自動變成接收開始頁,繼續(xù)寫入接收的數(shù)據(jù)。
(2)用戶讀取接收數(shù)據(jù)包。RTL8019AS通過Local DMA把接收的數(shù)據(jù)寫入接收緩沖區(qū),并自動改變CURR和識別緩沖區(qū)的界限,這些都不需要用戶干預。
當一個無錯的數(shù)據(jù)接收完畢,則觸發(fā)中斷處理函數(shù)。然后讀取數(shù)據(jù)包到分配的內(nèi)存,可以從接收字節(jié)計數(shù)器中得知讀取數(shù)據(jù)。這里要處理一種情況:如果接收的數(shù)據(jù)包存儲不是連續(xù)的,在這種情況下要分2次才能讀取1個完整的數(shù)據(jù)包,判斷是否存儲不連續(xù)的條件是:
bnry>Head[1]&&Head[1]!=RECEIVE_START_PAGE
其中:bnry是這個包的起始頁;Head[1]是下一個包的起始頁。
接收數(shù)據(jù)包函數(shù)與發(fā)送數(shù)據(jù)包函數(shù)相似,只需要修改相應寄存器配置即可。然后將接收的數(shù)據(jù)寫入網(wǎng)絡接口層的輸入隊列,如果寫入失敗則釋放內(nèi)存。寫入后上層協(xié)議將提取這個數(shù)據(jù)包。最后網(wǎng)卡通過中斷控制器向ARM響應中斷,中斷完畢清除中斷標志。
5 結(jié) 語
ARM微處理器正以其極好的性價比和極低的功耗,與其他體系結(jié)構(gòu)的微處理器進行激烈的競爭,其應用將進一步深入到各行各業(yè)??梢灶A測,在將來的一段時期內(nèi),ARM微處理器將成為32位微處理器市場的統(tǒng)治者。了解、學習、掌握和應用ARM微處理器技術(shù)很有必要,也非常重要。在ARM系統(tǒng)采用高性能的以太網(wǎng)控制器,系統(tǒng)通信和調(diào)試快速、可靠,具有很高的實時性。該設計構(gòu)造一個基于以太網(wǎng)的嵌入式系統(tǒng)的應用,該接口模塊的主要任務是完成與外界的信息交互,以達到網(wǎng)絡監(jiān)控的目的。在實際應用中,它運行穩(wěn)定,能夠十分方便地實現(xiàn)網(wǎng)絡互連。