《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設計應用 > 基于AT91RM9200的以太網(wǎng)接口模塊設計
基于AT91RM9200的以太網(wǎng)接口模塊設計
現(xiàn)代電子技術(shù)
何玉朝1,2,程耕國1,2,張 瀛1,2 1.冶金自動化與
摘要: 主要介紹基于AT91RM9200處理器的以太網(wǎng)接口模塊設計,給出基于網(wǎng)絡芯片RTL8019AS的系統(tǒng)外圍接口相關(guān)器件選型。在硬件設計的基礎上,給出了詳細的編程思想、工作流程以及部分關(guān)鍵代碼。在此設計方案下,完全可以實現(xiàn)通過以太網(wǎng)進行通信,達到嵌入式模塊之間實時控制的目的。
Abstract:
Key words :

摘 要:主要介紹基于AT91RM9200處理器的以太網(wǎng)接口模塊設計,給出基于網(wǎng)絡芯片RTL8019AS的系統(tǒng)外圍接口相關(guān)器件選型。在硬件設計的基礎上,給出了詳細的編程思想、工作流程以及部分關(guān)鍵代碼。在此設計方案下,完全可以實現(xiàn)通過以太網(wǎng)進行通信,達到嵌入式模塊之間實時控制的目的。
關(guān)鍵詞:AT91RM9200;以太網(wǎng);RTL8019AS;嵌入式模塊


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ù)潮流。


l AT91RM9200簡介
    AT91RM9200是Atreel公司開發(fā)的基于ARM920T核的高性能,低功耗16/32位RISC微處理器,內(nèi)部集成豐富的外設資源與外設接口,從而為低功耗,低成本,高性能的計算機應用提供了一個單片解決方案。適用于要求外設資源豐富,功耗低,工作穩(wěn)定的工業(yè)控制等方面。
    AT91RM9200微處理器最高主頻為180 MHz,其雙向、32位外部數(shù)據(jù)總線支持8/16/32位數(shù)據(jù)寬度,26位地址總線可以對最大64 MB空間進行尋址。片內(nèi)集成了非常豐富的外圍功能模塊,包括內(nèi)存管理單元(MMU)、內(nèi)部包含16 KB的SRAM和128 KB的ROM,16 KB的數(shù)據(jù)緩存以及16 KB的指令緩存。其外部總線接口控制器(EBI),支持SDRAM,靜態(tài)存儲器,Burst FLASH以及Compact FLASH。為了提高系統(tǒng)性能還擴展了以下外設;增強的時鐘發(fā)生器與電源管理控制器(PMC);系統(tǒng)定時器(ST);實時時鐘(RTC);高級中斷控制器(AIC);4個32位PIO控制器;20通道的外設數(shù)據(jù)控制器(PDC);10/100兆Base-T型以太網(wǎng)卡接口;4個通用同步/異步串行收發(fā)器(UASRT)以及JTAG/ICE接口等。


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器件工作時鐘。
2.3 復位電路設計
    AT91RM9200有2個獨立的復位信號,即系統(tǒng)復位信號NRST與調(diào)試復位信號NTRSI,都是低電平有效。系統(tǒng)上電后,AT91RM9200必須執(zhí)行一個上電復位,在過渡狀態(tài)下,它的強制復位信號為低,直到電源電壓和振蕩器工作頻率穩(wěn)定為止。此外,NRST和NTRST還可以手動復位,以方便用戶調(diào)試程序。該設計中選用的復位芯片是MAX811,再加上一個手動按鍵,當工作電壓低于3 V或手動復位輸入引腳被拉低時處理器復位。
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ù)會丟失。設計中使用兩片數(shù)據(jù)寬度為16位的SDRAM并為一個具有32位數(shù)據(jù)寬度的SDRAM模塊,以充分發(fā)揮微處理器32位數(shù)據(jù)寬度的高性能。設計所使用的芯片是HY57V561620,其存儲容量為32 MB,工作電壓為3.3 V,采用54引腳TSOP封裝,16位數(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是一種國際標準測試協(xié)議,主要用于芯片內(nèi)部測試及對系統(tǒng)進行仿真、調(diào)試,是開發(fā)、調(diào)試嵌入式系統(tǒng)的一種簡潔高效的手段。它有兩種接口標準:14針接口和20針接口。該設計中選擇20針接口標準。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)絡互連。該系統(tǒng)已在視頻監(jiān)控光端機上得到成功應用,傳輸速度相當于PC機的10兆網(wǎng)口。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。