Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15530221
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: 嵌入式

2009-11-01 17:20:33

51单片机控制RTL8019AS实现以太网通讯

摘要:介绍以太网的帧协议和以太网控制芯片RTL8019AS的结构特性;介绍51单片机控制RTL8019AS实现以太网通讯的硬件设计方案;采用C51语言实现ARP协议(地址解析协议),并进行了系统的调试与验证。

    关键词:RTL8019AS Ethernet 51单片机 TCP/IP协议

互联网络硬件、软件的迅猛发展,使得网络用户呈指数增长,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集与控制设备在逐步地走向网络化,以便共享网络中庞大的信息资源。在电子设备日趋网络化的背景下,利用廉价的51单片机来控制RTL8019AS实现以太网通讯具有十分重要的意义。

1 以太网(Ethernet)协议

一个标准的以太网物理传输帧由七部分组成(如表1所示,单位:字节)。

1 以太网的物理传输帧结构表

PR

SD

DA

SA

TYPE

DATA

FCS

同步位

分隔位

目的地址

源地址

类型字段

数据段

帧校验序列

7

1

6

6

2

461500

4

除了数据段的长度不定外,其他部分的长度固定不变。数据段为461500字节。以太网规定整个传输包的最大长度不能超过1514字节(14字节为DASATYPE),最小不能小于60字节。除去DASATYPE14字节,还必须传输46字节的数据,当数据段的数据不足46字节时需填充,填充字符的个数不包括在长度字段里;超过1500字节时,需拆成多个帧传送。事实上,发送数据时,PRSDFCS及填充字段这几个数据段由以太网控制器自动产生;而接收数据时,PRSD被跳过,控制器一旦检测到有效的前序字段(即PRSD),就认为接收数据开始。

2 RTL8019AS以太网控制器简介

由台湾Realtek公司生产的RTL8019AS以太网控制器,由于其优良的性能、低兼的价格,使其在市场上10Mbps网卡中占有相当的比例。

2.1 主要性能

1)符号Ethernet IIIEEE802.310Base510Base210BaseT)标准;

2)全双工,收发可同时达到10Mbps的速率;

3)内置16KBSRAM,用于收发缓冲,降低对主处理器的速度要求;

4)支持8/16位数据总线,8个中断申请线以及16I/O基地址选择;

5)支持UTPAUIBNC自动检测,还支持对10BaseT拓扑结构的自动极性修正;

6)允许4个诊断LED引脚可编程输出;

7100脚的PQFP封装,缩小了PCB尺寸。

2.2 内部结构

RTL8019AS内部可分为远程DMA接口、本地DMA接口、MAC(介质访问控制)逻辑、数据编码解码逻辑和其他端口。内部结构如图1所示。

远程DMA接口是指单片机对RTL8019AS内部RAM进行读写的总线,即ISA总线的接口部分。单片机收发数据只需对远程DMA操作。本地DMA接口是把RTL8019AS与网线的连接通道,完成控制器与网线的数据交换。

MAC(介质访问控制)逻辑完成以下功能:当单片机向网上发送数据时,先将一帧数据通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令;当RTL8019AS完成了上帧的发送后,再开始此帧的发送。RTL819接收到的数据通过MAC比较、CRC校验后,由FIFO存到接收缓冲区;收满一帧后,以中断或寄存器标志的方式通知主处理器。FIFO逻辑对收发数据作16字节的缓冲,以减少对本地DMA请求的频率。

2.3 内部RAM地址空间分配

RTL8019AS内部有两块RAM区。一块16K字节,地址为0x40000x7fff;一块32字节,地址为0x00000x001fRAM按页存储,每256字节为一页。一般将RAM的前12页(即0x40000x4bff)存储区作为发送缓冲区;后52页(即0x4c000x7fff)存储区作为接收缓冲区。第0页叫Prom页,只有32字节,地址为0x00000x001f,用于存储以太网物理地址。

要接收和发送数据包就必须通过DMA读写RTL8019AS内部的16KB RAM。它实际上是双端口的RAM,是指有两套总线连接到该RAM,一套总线RTL8019AS读或写该RAM,即本地DMA;另一套总线是单片机读或写该RAM,即远程DMA

2.4 I/O地址分配

RTL8019AS具有32位输入输出地址,地址偏移量为00H1FH。其中00H0FH16个地址,为寄存器地址。寄存器分为4页:PAGE0PAGE1PAGE2PAGE3,由RTL8019ASCRCommand Register命令寄存器)中的PS1PS0位来决定要访问的页。但与NE2000兼容的寄存器只有前3页,PAGE3RTL8019AS自己定义的,对于其他兼容NE2000的芯片如DM9008无效。远程DMA地址包括10H17H,都可以用来做远程DMA端口,只要用其中的一个就可以了。复位端口包括18H1FH8个地址,功能一样,用于RTL8019AS复位。

3 接口电路设计

下面介绍51系列单片机与RTL8019AS的接口电路,实现的网络接口采用UTP(无屏蔽双绞线)RJ-45接口。

2给出了89C52单片机控制RTL8019AS实现以太网通讯的接口电路框图。用到的主要芯片有80C52RTL8019AS93C4664×16bitEEPROM)、74HC5738位锁存)、6225632K字节的RAM)。为分配好地址空间,采用对93C46进行读(或写)操作来设置RTL8019AS的端口I/O基地址和以太网物理地址。

93C46是采用4线SPI串行接口的Serial EEPROM,容量为1Kbit64×16bit),主要保存RTL8019AS的配置信息。00H03H的地址空间用于存储RTL8019AS内配置寄存器CONFIG14的上电初始化值;地址04H11H存储网络节点地址即物理地址;地址12H7FH内存储即插即用的配置信息。RTL8019AS通过引脚EECSEESKEEDI控制93C46CSSKDI引脚,通过EEDO接收93C46DO引脚的状态。RTL8019AS复位后读取93C46的内容并设置内部寄存器的值,如果93C46中内容不正确,RTL8019AS就无法正常工作。先通过编程器如ALL07把配置好的数据写入93C46,再焊入电路。

93C46进行数据配置:数据00H写入93C46的地址00H内;93C46地址04H0AH中存放的是物理地址,可以写入设置所需的物理地址值,或不修改,采用原始值为物理地址。通过编程器读出04H0AH的原始值为52544CC59906,即所采用的物理地址。

这样,RTL8019AS复位后读取93C46中配置好的内容,对应设置配置寄存器CONFIG1的值为00HCONFIG1的低4IOS30用于选择I/O基地址。IOS30设置值均为0时,RTL8019AS选择的端口I/O基地址为300H

RTL8019AS的地址为20位,那么用到RTL8019AS的地址空间为00300H0031FH,用二进制表示00300H0031FH,可以发现第19位到第5位是固定的:000000000011000RTL8019 AS20根地址线SA0SA19如表2连接。

2 RTL8019AS地址线的连接表

SA19SA10

接地

SA9SA8

接单片机P2口的P2.7,即地址总线ADDR15

SA7SA5

接地

SA4SA0

对应为地址总线的ADDR0ADDR4

通过ADDR15I/OWI/OR来划分RTL8019AS62256的地址空间。ADDR1562256CE脚,低电平时选择62256;高电平时选择RTL8019AS的地址空间80C52单片机的地址为16位,按图2的电路框图连接RTL8019AS的地址空间。定义reg00reg1f来对应端口00300H0031FH

#define reg00 XBYTE[0x8000]/*300H*/

#define reg01 XBYTE[0x8001]/*301H*/

#define reg1f XBYTE[0x801F]/*31FH*/

读写操作、复位操作对应的引脚按表3连接。

3 RTL8019ASISA总线接口引脚与单片机的连接表

Pin29

IORB

读信号,接到单片机的WR引脚(P3.6)。

Pin30

IOWB

写信号,接到单片机的RD引脚(P3.7)。

Pin33

RSTDRV

RESET信号,接单片机的T0P3.4)。

Pin34

AEN

地址有效信号,接地。

Pin96

IOCS16

采用电阻下拉该引脚,复位时刻脚为低电平,选择8位模式。

Pin36Pin43

SD0SD7

8位数据总线,接单片机的P0口。(只用到8位数据总线,SD8SD15不接。)

采用10BASE-T布线标准通过双绞线进行以太网通讯,而RTL8019AS内置了10BASE-T收发器,所以网络接口的电路比较简单。外接一个隔离LPF滤波器0132TPIN±为接收线,TPOUT±为发送线,经隔离后分别与RJ-45接口的RX±TX±端相连。

时钟电路通过T1T2接口一个20MHz晶振以及2个电容,实现全双工方式。

LED0LED1各接一发光二极管以反映通讯状态:LED0表示LED_COL,即通讯有冲突;LED1表示LED_RX,即接收到网上的信息包。

4 程序设计

所有程序采用Framclin C51语言编制,可读性强,移植性好,开发简易。

4.1 复位RTL8019AS

80C52P3.4连接RTL8019ASRESDRV来进行复位操作。RSTDRV为高电平有效,至少需要800ns的宽度。给该引脚旋加一个1μs以上的高电平就可以复位。施加一个高电平后,然后施加一个低电平。复位过程将执行一些操作,至少需要2ms的时间,推荐等待更久的时间之后如100ms之后才对它操作,以确保完全复位。

4.2 初始化RTL8019AS

初始化页0与页1的相关寄存器,页2的寄存器是只读的,不可以设置,页3的寄存器不是NE2000兼容的,不用设置。

1CR=0x21,选择页0的寄存器;

2TPSR=0x45,发送页的起始页地址,初始化为指向第一个发送缓冲区的页即0x40

3PSTART=0x4cPSTOP=0x80,构造缓冲环:0x4c0x80

4BNRY=0x4c,设置指针;

5RCR=0xcc,设置接收配置寄存器,使用接收缓冲区,仅接收自己地址的数据包(以及广播地址数据包)和多点播送地址包,小于64字节的包丢弃,校验错的数据包不接收;

6TCR=0xe0,设置发送配置寄存器,启用CRC自动生成和自动校验,工作在正常模式;

7DCR=0xc8,设置数据配置寄存器,使用FIFO缓存,普通模式,8位数据DMA

8IMR=0x00,设置中断屏蔽寄存器,屏蔽所有中断;

9CR=0x61,选择页1的寄存器;

10CURR=0x4dCURRRTL8019AS写内存的指针,指向当前正在写的页的下一页,初始化时指和0x4c+1=0x4d

11)设置多址寄存器MAR0MAR5,均设置为0x00

12)设置网卡地址寄存器PAR0PAR5

13CR=0x22,选择页1的寄存器,进入正常工作状态。

2 89C52单片机控制RTL8019AS实现以太网通讯的接口电路框图

   
4.3
发送帧

将待发送的数据按帧格式封装,通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令,完成帧的发送。需要设置以太网目的地址、以太网源地址、协议类型,再按所设置的协议类型来设置数据段。之后启动远程DMA,数据写入RTL8019ASRAM,再启动本地DMA,将数据发送网上。

RTL8019AS无法将整个数据包通过DMA通道一次存入FIFO,则在构成一个新的数据包之前必须先等待前一数据包发送完成。为提高发送效率,设计将12页的发送缓存区分为两个6页的发送缓存区,一个用于数据包发送,另一个用于构造端的数据包,交替使用。

5 软件的调试与验证

调试环境包括RTL8019AS实验板、PC机(带网卡)以及网线。

C51语言编程,实现TCP/IP协议中ARP数据帧的收发。

实验中,单片机首先构造一个ARP请求包发送给PC机,PC机收到后会发送一个ARP应答包给单片机,单片机收到该应签包后再发一个ARP请求包给PCF机,如此不断循环,来测试系统的性能。在PC机上采用Sniffer软件如Windump软件来监视(或截获)PC机网卡接收ARP包的情况,取得了满意的效果。

阅读(1398) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~