松茂电子论坛

首页 » 松茂电子技术论坛 » 单片机交流区 » 51系列 » 用51单片机控制RTL8019AS实现以太网通讯
枫碟丽 - 2008-6-28 10:36:48
[color=black][/color]
[b][color=black]1 以太网(Ethernet)协议[/color][/b][color=black]一个标准的以太网物理传输帧由七部分组成(如表1所示,单位:字节)。

[b]表1 以太网的物理传输帧结构表[/b][/color]
[table=98%][tr][td=1,1,14%][color=black]PR[/color][/td][td=1,1,14%][color=black]SD[/color][/td][td=1,1,14%][color=black]DA[/color][/td][td=1,1,14%][color=black]SA[/color][/td][td=1,1,14%][color=black]TYPE[/color][/td][td=1,1,15%][color=black]DATA[/color][/td][td=1,1,15%][color=black]FCS[/color][/td][/tr][tr][td=1,1,14%][color=black]同步位[/color][/td][td=1,1,14%][color=black]分隔位[/color][/td][td=1,1,14%][color=black]目的地址[/color][/td][td=1,1,14%][color=black]源地址[/color][/td][td=1,1,14%][color=black]类型字段[/color][/td][td=1,1,15%][color=black]数据段[/color][/td][td=1,1,15%][color=black]帧校验序列[/color][/td][/tr][tr][td=1,1,14%][color=black]7[/color][/td][td=1,1,14%][color=black]1[/color][/td][td=1,1,14%][color=black]6[/color][/td][td=1,1,14%][color=black]6[/color][/td][td=1,1,14%][color=black]2[/color][/td][td=1,1,15%][color=black]46~1500[/color][/td][td=1,1,15%][color=black]4[/color][/td][/tr][/table][color=black][/color]
[b][color=black]2 [/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS以太网控制器简介[/color][/b]
[color=black]由台湾Realtek公司生产的[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS以太网控制器,由于其优良的性能、低兼的价格,使其在市场上10Mbps网卡中占有相当的比例。[/color]
[color=black]2.1 主要性能[/color]
[color=black](1)符号Ethernet II与IEEE802.3(10Base5、10Base2、10BaseT)标准;[/color]
[color=black](2)全双工,收发可同时达到10Mbps的速率;[/color]
[color=black](3)内置16KB的SRAM,用于收发缓冲,降低对主处理器的速度要求;[/color]
[color=black](4)支持8/16位数据总线,8个中断申请线以及16个I/O基地址选择;[/color]
[color=black](5)支持UTP、AUI、BNC自动检测,还支持对10BaseT拓扑结构的自动极性修正;[/color]
[color=black](6)允许4个诊断LED引脚可编程输出;[/color]
[color=black](7)100脚的PQFP封装,缩小了PCB尺寸。[/color]
[color=black]2.2 内部结构[/color]
[url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS内部可分为远程DMA接口、本地DMA接口、MAC(介质访问控制)逻辑、数据编码解码逻辑和其他端口。内部结构如图1所示。[/color]
[color=black]远程DMA接口是指单片机对[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS内部RAM进行读写的总线,即ISA总线的接口部分。单片机收发数据只需对远程DMA操作。本地DMA接口是把[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS与网线的连接通道,完成控制器与网线的数据交换。[/color]
[color=black]MAC(介质访问控制)逻辑完成以下功能:当单片机向网上发送数据时,先将一帧数据通过远程DMA通道送到[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS中的发送缓存区,然后发出传送命令;当[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS完成了上帧的发送后,再开始此帧的发送。RTL819接收到的数据通过MAC比较、CRC校验后,由FIFO存到接收缓冲区;收满一帧后,以中断或寄存器标志的方式通知主处理器。FIFO逻辑对收发数据作16字节的缓冲,以减少对本地DMA请求的频率。[/color]
[color=black]2.3 内部RAM地址空间分配[/color]
[url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS内部有两块RAM区。一块16K字节,地址为0x4000~0x7fff;一块32字节,地址为0x0000~0x001f。RAM按页存储,每256字节为一页。一般将RAM的前12页(即0x4000~0x4bff)存储区作为发送缓冲区;后52页(即0x4c00~0x7fff)存储区作为接收缓冲区。第0页叫Prom页,只有32字节,地址为0x0000~0x001f,用于存储以太网物理地址。[/color]
[color=black]要接收和发送数据包就必须通过DMA读写[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS内部的16KB RAM。它实际上是双端口的RAM,是指有两套总线连接到该RAM,一套总线[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS读或写该RAM,即本地DMA;另一套总线是单片机读或写该RAM,即远程DMA。[/color]
[color=black]2.4 I/O地址分配[/color]
[url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS具有32位输入输出地址,地址偏移量为00H~1FH。其中00H~0FH共16个地址,为寄存器地址。寄存器分为4页:PAGE0、PAGE1、PAGE2、PAGE3,由[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS的CR(Command Register命令寄存器)中的PS1、PS0位来决定要访问的页。但与NE2000兼容的寄存器只有前3页,PAGE3是[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS自己定义的,对于其他兼容NE2000的芯片如DM9008无效。远程DMA地址包括10H~17H,都可以用来做远程DMA端口,只要用其中的一个就可以了。复位端口包括18H~1FH共8个地址,功能一样,用于[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS复位。[/color]
[b][color=black]3 接口电路设计[/color][/b]
[color=black]下面介绍51系列单片机与[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS的接口电路,实现的网络接口采用UTP(无屏蔽双绞线)RJ-45接口。[/color]
[color=black]图2给出了89C52单片机控制[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS实现以太网通讯的接口电路框图。用到的主要芯片有80C52、[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS、[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black](64×16bit的EEPROM)、[/color][url=http://www.qooic.com/detail-74HC573.html][color=black]74HC573[/color][/url][color=black](8位锁存)、[/color][url=http://www.qooic.com/detail-62256.html][color=black]62256[/color][/url][color=black](32K字节的RAM)。为分配好地址空间,采用对[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black]进行读(或写)操作来设置[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS的端口I/O基地址和以太网物理地址。[/color]
[url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black]是采用4线SPI串行接口的Serial EEPROM,容量为1Kbit(64×16bit),主要保存[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS的配置信息。00H~03H的地址空间用于存储[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS内配置寄存器CONFIG1~4的上电初始化值;地址04H~11H存储网络节点地址即物理地址;地址12H~7FH内存储即插即用的配置信息。[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS通过引脚EECS、EESK、EEDI控制[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black]的CS、SK、DI引脚,通过EEDO接收[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black]的DO引脚的状态。[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS复位后读取[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black]的内容并设置内部寄存器的值,如果[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black]中内容不正确,[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS就无法正常工作。先通过编程器如ALL07把配置好的数据写入[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black],再焊入电路。[/color]
[color=black]对[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black]进行数据配置:数据00H写入[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black]的地址00H内;[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black]地址04H~0AH中存放的是物理地址,可以写入设置所需的物理地址值,或不修改,采用原始值为物理地址。通过编程器读出04H~0AH的原始值为52544CC59906,即所采用的物理地址。[/color]
[color=black]这样,[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS复位后读取[/color][url=http://www.qooic.com/detail-93C46.html][color=black]93C46[/color][/url][color=black]中配置好的内容,对应设置配置寄存器CONFIG1的值为00H,CONFIG1的低4位IOS3~0用于选择I/O基地址。IOS3~0设置值均为0时,[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS选择的端口I/O基地址为300H。[/color]
[url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS的地址为20位,那么用到[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS的地址空间为00300H~0031FH,用二进制表示00300H~0031FH,可以发现第19位到第5位是固定的:000000000011000。[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black] AS的20根地址线SA0~SA19如表2连接。

[b]表2 [url=http://www.qooic.com/detail-<a%20target=]RTL8019[/url]AS.html">[url=http://www.qooic.com/detail-RTL8019.html]RTL8019[/url]AS地址线的连接表[/b][/color]
[table=98%][tr][td=1,1,37%][color=black]SA19~SA10[/color][/td][td=1,1,63%][color=black]接地[/color][/td][/tr][tr][td=1,1,37%][color=black]SA9~SA8[/color][/td][td=1,1,63%][color=black]接单片机P2口的P2.7,即地址总线ADDR15[/color][/td][/tr][tr][td=1,1,37%][color=black]SA7~SA5[/color][/td][td=1,1,63%][color=black]接地[/color][/td][/tr][tr][td=1,1,37%][color=black]SA4~SA0[/color][/td][td=1,1,63%][color=black]对应为地址总线的ADDR0~ADDR4[/color][/td][/tr][/table][color=black]通过ADDR15、I/OW、I/OR来划分[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS和[/color][url=http://www.qooic.com/detail-62256.html][color=black]62256[/color][/url][color=black]的地址空间。ADDR15接[/color][url=http://www.qooic.com/detail-62256.html][color=black]62256[/color][/url][color=black]的CE脚,低电平时选择[/color][url=http://www.qooic.com/detail-62256.html][color=black]62256[/color][/url][color=black];高电平时选择[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS的地址空间80C52单片机的地址为16位,按图2的电路框图连接[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS的地址空间。定义reg00~reg1f来对应端口00300H~0031FH。[/color]
[color=black]#define reg00 XBYTE[0x8000]/*300H*/[/color]
[color=black]#define reg01 XBYTE[0x8001]/*301H*/[/color]
[color=black]…[/color]
[color=black]#define reg1f XBYTE[0x801F]/*31FH*/[/color]
[color=black]读写操作、复位操作对应的引脚按表3连接。

[b]表3 [url=http://www.qooic.com/detail-<a%20target=]RTL8019[/url]AS.html">[url=http://www.qooic.com/detail-RTL8019.html]RTL8019[/url]AS的ISA总线接口引脚与单片机的连接表[/b][/color]
[table=98%][tr][td=1,1,21%][color=black]Pin29[/color][/td][td=1,1,18%][color=black]IORB[/color][/td][td=1,1,61%][color=black]读信号,接到单片机的WR引脚(P3.6)。[/color][/td][/tr][tr][td=1,1,21%][color=black]Pin30[/color][/td][td=1,1,18%][color=black]IOWB[/color][/td][td=1,1,61%][color=black]写信号,接到单片机的RD引脚(P3.7)。[/color][/td][/tr][tr][td=1,1,21%][color=black]Pin33[/color][/td][td=1,1,18%][color=black]RSTDRV[/color][/td][td=1,1,61%][color=black]RESET信号,接单片机的T0(P3.4)。[/color][/td][/tr][tr][td=1,1,21%][color=black]Pin34[/color][/td][td=1,1,18%][color=black]AEN[/color][/td][td=1,1,61%][color=black]地址有效信号,接地。[/color][/td][/tr][tr][td=1,1,21%][color=black]Pin96[/color][/td][td=1,1,18%][color=black]IOCS16[/color][/td][td=1,1,61%][color=black]采用电阻下拉该引脚,复位时刻脚为低电平,选择8位模式。[/color][/td][/tr][tr][td=1,1,21%][color=black]Pin36~Pin43[/color][/td][td=1,1,18%][color=black]SD0~SD7[/color][/td][td=1,1,61%][color=black]8位数据总线,接单片机的P0口。(只用到8位数据总线,SD8~SD15不接。)[/color][/td][/tr][/table][color=black]采用10BASE-T布线标准通过双绞线进行以太网通讯,而[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS内置了10BASE-T收发器,所以网络接口的电路比较简单。外接一个隔离LPF滤波器0132,TPIN±为接收线,TPOUT±为发送线,经隔离后分别与RJ-45接口的RX±、TX±端相连。[/color]
[color=black]时钟电路通过T1、T2接口一个20MHz晶振以及2个电容,实现全双工方式。[/color]
[color=black]LED0、LED1各接一发光二极管以反映通讯状态:LED0表示LED_COL,即通讯有冲突;LED1表示LED_RX,即接收到网上的信息包。[/color]
[b][color=black]4 程序设计[/color][/b]
[color=black]所有程序采用Framclin C51语言编制,可读性强,移植性好,开发简易。[/color]
[color=black]4.1 复位[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS[/color]
[color=black]80C52的P3.4连接[/color][url=http://www.qooic.com/detail-<a%20target=][color=black]RTL8019[/color][/url][color=black]AS.html">[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS的RESDRV来进行复位操作。RSTDRV为高电平有效,至少需要800ns的宽度。给该引脚旋加一个1[font=Arial]μs[/font]以上的高电平就可以复位。施加一个高电平后,然后施加一个低电平。复位过程将执行一些操作,至少需要2ms的时间,推荐等待更久的时间之后如[/color][url=http://www.qooic.com/detail-100MS.html][color=black]100MS[/color][/url][color=black]之后才对它操作,以确保完全复位。[/color]
[color=black]4.2 初始化[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS[/color]
[color=black]初始化页0与页1的相关寄存器,页2的寄存器是只读的,不可以设置,页3的寄存器不是NE2000兼容的,不用设置。[/color]
[color=black](1)CR=0x21,选择页0的寄存器;[/color]
[color=black](2)TPSR=0x45,发送页的起始页地址,初始化为指向第一个发送缓冲区的页即0x40;[/color]
[color=black](3)PSTART=0x4c,PSTOP=0x80,构造缓冲环:0x4c~0x80;[/color]
[color=black](4)BNRY=0x4c,设置指针;[/color]
[color=black](5)RCR=0xcc,设置接收配置寄存器,使用接收缓冲区,仅接收自己地址的数据包(以及广播地址数据包)和多点播送地址包,小于64字节的包丢弃,校验错的数据包不接收;[/color]
[color=black](6)TCR=0xe0,设置发送配置寄存器,启用CRC自动生成和自动校验,工作在正常模式;[/color]
[color=black](7)DCR=0xc8,设置数据配置寄存器,使用FIFO缓存,普通模式,8位数据DMA;[/color]
[color=black](8)IMR=0x00,设置中断屏蔽寄存器,屏蔽所有中断;[/color]
[color=black](9)CR=0x61,选择页1的寄存器;[/color]
[color=black](10)CURR=0x4d,CURR是[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS写内存的指针,指向当前正在写的页的下一页,初始化时指和0x4c+1=0x4d;[/color]
[color=black](11)设置多址寄存器MAR0~MAR5,均设置为0x00;[/color]
[color=black](12)设置网卡地址寄存器PAR0~PAR5;[/color]
[color=black](13)CR=0x22,选择页1的寄存器,进入正常工作状态。

[b]图2 89C52单片机控制[url=http://www.qooic.com/detail-RTL8019.html]RTL8019[/url]AS实现以太网通讯的接口电路框图[/b]

[/color][color=black]4.3 发送帧[/color]
[color=black]将待发送的数据按帧格式封装,通过远程DMA通道送到[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS中的发送缓存区,然后发出传送命令,完成帧的发送。需要设置以太网目的地址、以太网源地址、协议类型,再按所设置的协议类型来设置数据段。之后启动远程DMA,数据写入[/color][url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS的RAM,再启动本地DMA,将数据发送网上。[/color]
[url=http://www.qooic.com/detail-RTL8019.html][color=black]RTL8019[/color][/url][color=black]AS无法将整个数据包通过DMA通道一次存入FIFO,则在构成一个新的数据包之前必须先等待前一数据包发送完成。为提高发送效率,设计将12页的发送缓存区分为两个6页的发送缓存区,一个用于数据包发送,另一个用于构造端的数据包,交替使用。[/color]
[color=black]循环,来测试系统的性能。在PC机上采用Sniffer软件如Windump软件来监视(或截获)PC机网卡接收ARP包的情况,取得了满意的效果。 [/color]
[color=black][/color]
[color=black][/color]
 1 
查看完整版本: 用51单片机控制RTL8019AS实现以太网通讯