基於ARM LPC2210的乙太網RTL8019AS驅動系統設計

2020-12-24 電子產品世界
Author:tiger-john

WebSite:blog.csdn.net/tigerjb

本文引用地址:http://www.eepw.com.cn/article/201611/316897.htm

Email:jibo.tiger@gmail.com

開發環境硬體環境:LPC2200

作業系統:UC/OS-II作業系統

編譯環境:ADS1.2

Update-Time: 2011年2月28日星期四

Tiger聲明:本人鄙視直接複製本人文章而不加出處的個人或團體,

但不排斥別人轉載tiger-john的文章,只是請您註明出處並和本人

聯繫或留言給我。3Q

---------------------------------------------------------

一.系統硬體概述

1.1.ARM LPC2210晶片簡介

LPC2210是Philips公司推出的微處理器,帶有16 KBRAM,76個通用I/O口,12個獨立外部中斷引腳,集成有8通道的10位A/D,能夠基於晶片設計複雜的系統。

1.2.RTL8019AS晶片簡介

?RTL8019AS是臺灣Realtek半導體公司生產的乙太網控制器,其性能包括:支持EthernetII和IEEE802.3標準;支持8/16位數據總線;內置16 KWord的SRAM;全雙工,收發同時達到10 Mb/s;支持BNC,AUI,UTP介質。RTLS019AS可提供100腳的TQFP封裝,減少了PCB面積,更適合於嵌入式系統

1.3.HR901170A晶片簡介

HR901170A是漢仁電子有限公司生產的RJ45接口連接器(帶網絡變壓器/濾波器),該連接器滿足IEEES02.3和IEEE902.3ab標準,能夠較好地抑制電磁幹擾。通過HR901170A系統就可以連接到乙太網上。

註:RTL8019AS與網絡介質之間的連接由Rj45接頭HR901170A完成。

二RTL8019AS晶片工作原理

2.1RTL8019AS寄存器及其映射方式

?RTL8019AS寄存器採用內存映射的方式。映射地址根據具體的硬體連接方式不同而不同。在LPC2210開發板中RTL8019AS在CPU的存儲空間上映射的基地址為0X83400000。

?LPC2210通過16位DMA方式實現對RTL8019AS雙口RAM的訪問,另外使用P0.8控制RTL8019AS晶片復位,使用乙太網接口時必須將P0.8設置為輸出模式,並且將跳線器JP8_NET_RST短接。RTL8019AS晶片中的中斷輸出與P0.9(EINT3)相連,當需要使用RTL8019AS中斷時必須將P0.9設置為EINT3功能,並且將跳線器JP8_NET_INT短接。

2.2RTL8019AS內部結構及工作原理

1>RTL8019AS晶片內部具有一個16Kbytes的雙口RAM作為數據FIFO,它從邏輯上可劃分為64個256位元組的頁,每一個頁面包括16個寄存器,每個寄存器均是8位。在不同的頁面下,同一個埠對應不同的寄存器。

2>一般將RAM的前12頁(即0X4000~0X4bff)存儲區作為發送緩衝區;後52頁(即0x4c00~0x7fff)存儲區作為接收緩衝區;頁的地址就是地址的高8位(即0x40~0x4b;0x4c~0x7f);第0頁叫Prom頁,只有32位元組,地址為0x000~0x001f,用於存儲乙太網物理地址。

說明:

?寄存器和內置RAM是網卡功能實現的載體,驅動程序也是通過對它們的操作完成CPU所指令的任務。驅動程序所涉及的寄存器主要在Page0和Page1。

?至於內置RAM,在Jumper模式下我們只需要關心其收發緩存部分。偏移地址從0x4000開始至0x7FFF的16KB RAM區域構成8019的收發緩存,它以256位元組為單位劃分為64頁(Page),頁地址為0x40 ~ 0x7F,發送和接收緩存所分配的頁數可以由驅動程序設定。一種比較常見的分配方式為[0x40,0x4C)用作發送,[0x4C,0x80)用作接收,這也是本例所採用的配置。

3>接收和發送數據包是通過DMA讀寫RTL8019AS內部的16K B RAM,它是雙埠的RAM,即有兩套總線連接到該RAM。

如圖2:

?一套總線是RTL8019AS讀或寫該RAM,即本地DMA;

?另一套總線是LPC2210讀或寫該RAM,即遠程DMA。

4>本地DMA大部分工作由RTL8019AS自動完成,驅動程序只需要在初始化RTL8019AS時設置緩衝環的大小(最大不超過64KB),即寄存器PSTRT和PSTOP的值,同時使PSTART=BNRY(邊界寄存器)=CURR+1(當前頁面指針寄存器)。

5>遠程DMA操作由外部微處理器完成,RTL8019AS有遠程讀(Remote Read),遠程寫(Remote Write)和包發送(Send Packet)三種工作模式,由命令寄存器(CR)中的RD0,RD1和RD2位控制。其中遠程讀和遠程寫的工作相似,都是先賦值遠程DMA的起始地址寄存器(RSAR0,RSAR1)和遠程DMA字節計數器(RBCR0,RBCR1),然後在RTL8019AS的遠程DMA埠讀寫即可。包發送操作用於數據發送,只需要發送一個包發送命令,就可以在RTL8019AS的遠程DMA埠讀取RAM中接收的數據。當執行這個指令時,RTL8019AS就自動設置了起始地址寄存器和字節計數器,邊界寄存器(BNRY)指向下一個數據幀。

------------------------------------------------------------------------------------

關於具體的寄存器功能請大家查看RTL8019AS的數據手冊。

三乙太網驅動系統設計說明

3.1乙太網驅動系統概述

乙太網RTL8019AS驅動系統的內容是完成對晶片初始化,接收數據包和發送數據包模塊的編寫。發送數據包時,驅動程序把要發送的數據按指定格式寫入晶片並啟動發送命令,RTL8019AS會自動把數據轉換成物理幀格式在物理信道上傳輸。反之,當接收數據報時,RTL8019AS收到物理信號後將其還原成數據,按指定格式存放在RAM中,以便主機程序取用。驅動程序通過控制RTL8019AS內部寄存器以及DMA埠,來實現晶片初始化,接收數據報和發送數據報的任務。

3.2 RTL8019AS乙太網驅動系統的組成

?晶片初始化模塊:初始化模塊是針對乙太網RT8019AS進行的初始化設置,使其能正常晶片復位,設置晶片寄存器及啟動晶片。

?發送數據報模塊:所有的數據發送都要通過該模塊發送

?接收數據報模塊:查詢是否有新數據包並接收進緩衝區

?寫數據子模塊:把數據寫入RTL8019AS晶片中

?讀數據子模塊:從RTL8019AS中把數據讀出

?設置晶片物理地址子模塊:將物理地址寫入RTL8019AS(PAR0~PAR5)寄存器中。

?頁面切換模塊:頁面切換功能,可選擇0,1,2三頁,第四頁作為晶片保留。

四.晶片初始化模塊

4.1晶片初始化模塊的功能

初始化LPC2210與設備相關的控制管腳和初始化RTL8019AS相關控制寄存器

4.2晶片初始化模塊的組成

1>選擇引腳:

使用P0.8引腳控制RTL8019AS晶片復位時,要將P0.8設置為輸出模式

2>復位晶片

?設置P0.8為輸出高電平,控制RTL8019AS硬體復位

?向RTL8019AS的0x1f號寄存器寫入00使RTL8019AS軟體復位。

3>使RTL8019AS晶片停止

配置命令寄存器(CR):配置CR寄存中的RD2,RD1,RD0三位為100使DMA為停止模式,配置STA,STP位為01。使8019晶片停止,為進行寄存器設置做準備。

4>設置RTL8019寄存器

設置RTL8019AS晶片寄存器,主要完成對以下幾個寄存器的初始化:

?RBCR0,RBCR1:配置遠程DMA字節計數寄存器

?PSTART:配置接收緩衝區的起始頁地址

?PSTOP:配置接收緩衝區的結束頁的地址

?TPSR:配置發送緩衝區的起始地址

?BNRY:配置邊界寄存器(讀指針)

?CURR:配置當前的接收結束頁地址(寫指針)

1)設置遠程DMA字節計數寄存器(RBCR0,RBCR1):初始化遠程DMA字節計數器為0

2)設置接收配置寄存器(RCR)和傳輸配置寄存器(TCR)

在配置寄存器時,要與外部網絡斷開(因此設置接收配置寄存器的MON位,和傳輸配置寄存器的LOOPBACK,與外網斷開)。

3)設置數據配置寄存器(DCR):設置FT1,FT0位為10進行FIFO的選擇;設置ARM位為0,使其不發送命令包;設置LS位為1,使其為正常模式;LAS位必須為0;設置BOS位為1,使其為大端格式(即高字節在低地址中);設置WTS位為1,使其為字長度的DMA傳送(16位元組DMA傳送)

4)初始化接收緩衝區容量為:0x4c~0x7f(PSTART=0X4C,PSTOP=0x80)共52個頁。

?設置頁面起始寄存器(PSTART):初始化頁面接收緩衝環的起始地址為0x4c。

?設置頁面終止寄存器(PSTOP):初始化頁面接收緩衝環的結束地址為0X80。

5)初始化發送緩衝區容量為:0x40~0x4b(TPSR=0X40,BNRY=0X4C)共12頁,可存儲兩個最大乙太網數據包。(每一頁256位元組,256*12=3072,而一個乙太網最大數據包為1518)。

?設置頁面邊界寄存器(BNRY讀指針):初始化頁面最後一次頁面接收緩衝環的地址為0X4C。

?設置頁面傳輸起始寄存器(TPSR):初始化傳輸包的頁面開始地址為0x40。

6)初始化中斷狀態寄存器和中斷屏蔽寄存器。

?設置中斷狀態寄存器(ISR):清除所有中斷標誌位。

?設置中斷允許寄存器(IMR):初始化使能OVW(溢出中斷)和PRX(接收包無錯誤中斷).

7)設置當前頁面寄存器(CURR):設置當前頁面地址為0x4d

註:該寄存器指出首先接收緩衝器頁面地址。這個寄存器用來對數據包的接收(為寫頁指針)。

8)設置組播地址寄存器(MR0~MR7):初始化組播地址為0。

說明:組播地址寄存器用於提供為CRC邏輯提供,組播地址的過濾位。

9)設置晶片物理地址:

調用寫數據子模塊將實際地址寫入MAC地址寄存器(PAR0~PAR05)中。

這些寄存器用於記錄本乙太網節點的MAC地址,並用於對比接收包的目標地址是否一致而決定接收還是放棄。

10)設置傳輸配置寄存器(TCR)和接收配置寄存器(RCR)為正常模式,與外部網絡連接

5>設置晶片啟動

6>配置中斷狀態寄存器(ISR)清除所有中斷標誌位

4.3晶片初始化模塊的接口

晶片初始化模塊調用了寫數據子模塊,頁面切換子模塊和設置晶片物理地址子模塊

?設置晶片物理地址子模塊:將物理地址寫入RTL8019AS晶片中。

?寫數據子模塊:將數據寫入RTL8019AS晶片中

?頁面切換子模塊:可選擇Page0,Page1,Page3三個頁面。

4.3晶片初始化模塊程序

/****************************Copyright(c)********************

**西安郵電學院

**graduate school

**XNMS實驗室

**Author:冀博

**Time:2011年2月21日

**http://blog.csdn.net/tigerjb

**

****************************Copyright(c)********************/

/**********************************************************

**函數原型:voidInitNic()

**入口參數:無

**返回值:無

**說明:對晶片的工作寄存器進行設置,各個寄存器的用法可參考文檔和

**絡晶片的數據手冊

**********************************************************/

void InitNic(uint8 num)

{

uint8i;

uint8j;

//使P0.8引腳為輸出

IODIR=IODIR|NET_RST;

//向P0.8引腳寫1,硬體復位

IOCLR=NET_RST;

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

IOSET=NET_RST;

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

IOCLR=NET_RST;

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

//軟體復位

WriteToNet(0x1f,0x00);

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

//使晶片處於停止模式,這時進行寄存器設置

WriteToNet(0x00,0x21);

//延時10毫秒,確保晶片進入停止模式

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

page(0);

//設置遠程DMA起始地址寄存器(RBCR0,RBCR1)為0

WriteToNet(0x0a,0x00);

WriteToNet(0x0b,0x00);

//設置接收配置寄存器(RCR)和傳輸寄存器(TCR)

WriteToNet(0x0c, 0xe0);

WriteToNet(0x0d, 0xe2);

//設置數據配置寄存器DCR

WriteToNet(0x0e,0xcb);

//初始化接受緩衝區容量為0X4C~0X7F(PSTART=0X4C,PSTOP=0X80)

WriteToNet(0x01,0x4c);

WriteToNet(0x02,0x80);

//初始化發送緩衝區容量為0X40~0x4b(TPSR=0X40,bnry=0x4c)

WriteToNet(0x03,0x4c);

WriteToNet(0x04,0x40);

/*初始化中斷寄存器(ISR和IMR)清除所有中斷標誌位,使能OVW和PRX中斷

*/

WriteToNet(0x07,0xff);

WriteToNet(0x0f,0x11);

//初始化當前頁面寄存器CURR=BNRY+1

page(1);

WriteToNet(0x07,0x4d);

//初始化組播地址寄存器(MR0~MR5)

WriteToNet(0x08,0x00);

WriteToNet(0x09,0x00);

WriteToNet(0x0a,0x00);

WriteToNet(0x0b,0x00);

WriteToNet(0x0c,0x00);

WriteToNet(0x0d,0x00);

WriteToNet(0x0e,0x00);

WriteToNet(0x0f,0x00);

//將物理地址寫入MAC(PAR0~PAR5)寄存器中

SetMacID(NetPort[num].My_Mac);

page(0);

/*設置傳輸配置寄存器(TCR)和接收配置寄存器(RCR),將晶片設置成正常模式,跟外部網絡連接

*/

WriteToNet(0x0c,0xcc);

WriteToNet(0x0d,0xe0);

//啟動晶片開始工作

WriteToNet(0x00,0x22);

//清除所有中斷標誌位

WriteToNet(0x07,0xff);

}

相關焦點

  • 基於Submerge Frame方法的CAN-乙太網網關
    本方案以philips公司的基於arm7tdmi內核的晶片lpc2294為cpu構建網關,lpc2249支持實時仿真和跟蹤,帶有256kb高速flash存儲器,採用lqfp144封裝,功耗極低,並帶有32位定時器,8路10位adc
  • 基於lpc1768的系統時鐘設計
    基於lpc1768的系統時鐘設計 工程師周亮 發表於 2018-11-15 16:11:12 #define XTAL_FREQ 12000000 #define VECT_TAB_OFFSET
  • 基於ARM 的指紋識別門禁系統的設計
    論文在以ARMS3C2410為核心和嵌入式作業系統Linux的基礎上,設計開發了基於指紋識別的乙太網門禁控制系統。  本文具體內容主要有以下幾個方面:  (1)系統整體方案概述和設計:根據系統功能要求,設計指紋識別乙太網門禁系統,重點闡述了其中關鍵模塊的硬體設計。
  • 基於ARM的煤礦瓦斯湧出量預測系統的設計
    基於嵌入式的瓦斯湧出量預測系統便於在井下不同的開採區安裝,對當前開採區傳感器數據進行處理分析,並預測出該開採區的瓦斯湧出量信息,各個開採區之間不但彼此可以相互通信,而且可以與上位機進行實時交互。1 總體設計  瓦斯傳感器將被測物理量瓦斯湧出量轉換成電信號,經過A/D轉換採樣,轉換成數位訊號,在ARM處理器中處理。
  • stm32屬於arm嗎_arm和stm32的區別
    ARM處理器本身是32位設計,但也配備16位指令集,一般來講比等價32位代碼節省達35%,卻能保留32位系統的所有優勢。ARM處理器的三大特點是:耗電少功能強、16位/32位雙指令集和合作夥伴眾多。ARM的話,一般人們說ARM都是指的片上系統,如果把ARM當單片機用,性價比是不夠高的。 stm32屬於arm嗎?  此前的arm7能效低,arm9的硬體和編程太複雜,所以為了滿足消費電子的要求而改進arm7,代號為cortex-m,這樣st或nxp等廠家以這個新的核心來加自己的外設就得到了stm32或lpc系列的單片機了。
  • 乙太網口信號質量測試分析 DAC驅動偏置機理的探討
    即使對於應用比較成熟的乙太網物理層設計而言,DAC驅動電流的基準偏置,差分信號線對的走線,乃至於匹配電阻的位置,都有可能影響到其物理層的信號質量並通過接口技術指標測試暴露出來。但根據系統容差設計原則,晶片設計人員通常會將Slew Rate調整在4nS左右,確保上下區間調整地最大容限。)。如何改進需要信號的發送接收回路進行一個系統的分析了。通過對網口技術指標的量測分析,目前最主要的問題在於信號的邊沿比較緩,並且存在不單調的問題,最可能的原因是傳輸迴路容性負載過大以及驅動不足。可以從這兩個方面入手解決。
  • 10G乙太網系統中的並行CRC編解碼器的設計
    而當並行深度很大的情況下(10G乙太網接人系統使用64比特並行數據通路),遞推過程就顯得過於煩瑣而缺乏實用性。為此,本文提出了矩陣法、代入法和流水線法等三種算法,解決了深度並行情況下CRC算法的實現問題。利用本文提出的算法,可以得出64比特並行CRC計算的邏輯表達式,並用於10G乙太網接入系統的設計。設M/(x)為信息多項式,G(x)為生成多項式。
  • 採用工業乙太網實現遠程開放型實驗室系統的構建
    採用工業乙太網實現遠程開放型實驗室系統的構建 電子設計 發表於 2018-11-21 08:01:50 引 言 隨著高等教育的迅速發展
  • 基於物聯網的嬰兒實時監控系統的設計
    基於物聯網的嬰兒實時監控系統的設計 莫偉健等 發表於 2015-12-02 11:16:58   隨著社會的發展,父母越來越重視孩子在嬰幼兒時期的成長發育,在照看嬰兒方面需要投入更多的時間和精力
  • 一種高可用性的冗餘工業實時乙太網設計
    1 引言 基於TCP/IP協議的工業乙太網以其高通信速率和低應用成本被大量應用到工業通信中。乙太網協議和TCP/IP協議本身未定義冗餘通信,因此以提高可靠性為目標的乙太網冗餘通信研究受到了極大關注。乙太網高可用性自動化網絡標準IEC CDV 62439提出了「冗餘至網絡"和「冗餘至節點"兩類乙太網冗餘方案。前一類方案只提供線路和交換機冗餘,節點本身沒有冗餘通道。比較典型的應用有STP、RSTP和MSTP。它們採用物理環網連接交換機和網橋。正常工作時阻斷一個方向的通道防止「廣播風暴」。
  • 一種基於CPCI總線的高性能乙太網卡設計
    0 引 言本文引用地址:http://www.eepw.com.cn/article/248083.htm基於PCI總線的乙太網控制器是現在以致將來網絡應用方面的一個主要發展方向
  • 基於物聯網的照明控制系統―ARM客戶端軟體設計
    基於物聯網的照明控制系統以ZigBee、單片機、傳感器、C#和PHP程序設計為主要技術手段,包括照明控制單元、ZigBee無線傳輸層(含網關)、PC展示及控制層3個層次的現場控制單元、CC2430無線傳輸網絡、ARM網關硬體單元、ARM網關客戶端軟體、基於C#的服務端軟體、基於PHP的展示軟體等6個子系統,用於實現一套模擬城市照明控制系統。
  • 帶乙太網口的中西文VFD字符顯示器
    摘要:介紹一種帶乙太網口的中西文VFD字符顯示器,根據乙太網該字符顯示器為單位內部、公共場所的監控系統發布信息提供了完整的方案。 關鍵詞:字庫 Rabbit2000微處理器 乙太網 VFD顯示器在一些單位內部、醫院和公共場所的監控系統中,常要發布流動的信息。
  • 汽車乙太網技術及測試介紹
    近期,信而泰推出汽車乙太網測試方案,該方案通過專有的BigTao硬體測試平臺及協議和流量仿真軟體平臺Renix,可以針對汽車乙太網中的ECU終端、車載網關進行全面的2-7層功能和性能測試,包括AVB/TSN等協議測試,全面滿足汽車乙太網測試需求,助力國內汽車乙太網建設。
  • 乙太網驅動的流程淺析(四)-乙太網驅動probe流程
    我們繼續沿著上一篇的乙太網思路來繼續分析,目的是為了學習乙太網這塊從應用層到底層的整塊加載和匹配流程。
  • 基於ARM Cortex-A8處理器的工業機器人示教器設計
    該示教器以TI的ARM Cortex-A8處理器AM3359為核心,擴展了2GB DDR3 SDRAM、4GB NAND Flash、8.4英寸LCD屏和觸控螢幕、1000Mbps乙太網通信接口、USB接口、搖杆、按鍵等外圍電路,並基於嵌入式Linux系統和Qt開發框架,對示教器軟體進行了模塊化設計。該示教器已經成功應用於6軸機器人本體。
  • 基於LabVIEW和DataSocket技術實現網絡化測控系統的設計
    基於LabVIEW和DataSocket技術實現網絡化測控系統的設計 安幼林,楊鎖昌 發表於 2021-01-06 09:43:46 隨著分布式自動測控技術的不斷發展,網絡化測控系統的研究和應用也受到關注。
  • 基於LPC2119的USB-CAN轉換器設計
    本文引用地址:http://www.eepw.com.cn/article/201611/318181.htm  為了更好的將USB的通用性和CAN的專業性結合起來,通過計算機的USB接口接入CAN專業網絡,實現系統控制的便利性和應用的高效性,本文講述了一種基於ARM7處理器實現USB接口與CAN總線的實例,通過其可以在PC實現對CAN總線上設備的監控。
  • 基於ADAM5510-E/TCP實現動力系統訓練模擬器的設計
    基於ADAM5510-E/TCP實現動力系統訓練模擬器的設計 楊佔錄;王宗亮; 發表於 2020-12-16 18:05:00   作者:楊佔錄;王宗亮;劉海光
  • 簡化您的乙太網設計,第1部分:乙太網PHY基礎知識和選擇過程
    本文引用地址:http://www.eepw.com.cn/article/202004/411746.htm在技術文章系列「簡化您的乙太網設計」的第1部分中,我們將介紹乙太網物理層基礎知識,幫助您選擇合適的終端應用物理層。我們還將提供TI物理層選擇流程圖,幫助您簡化物理層選擇過程。什麼是乙太網物理層?