资源描述
学 士 学 位 论 文
基于MCU的以太网接入模块设计
姓 名:
学 号:
指导教师:
院系(部所):
专 业:
完成日期:
2013年05月15日
摘 要
给出了单片机控制RTL8019AS实现以太网通讯的软硬件设计方案。首先设计了系统的硬件电路,并对接口电路的设计进行了详细的阐述,然后设计了RTL8019AS的以太网驱动程序.最后通过一个简单的数据收发试验验证了设计的正确性。
关键词 RTL8019AS; 51单片机; TCP/IP协议;传感器
Abstract
Given SCM RTL8019AS Ethernet communications hardware and software design. Design the hardware circuit, the interface circuit design in detail, and then design RTL8019AS Ethernet driver. Send and receive data through a simple test to verify the correctness of the design.
Key words The RTL8019AS; 51 microcontroller; TCP / IP protocol; sensor
目 录
第1章 绪论 7
1.1本设计的背景 7
1.2以太网络接口芯片RTL8019AS 介绍 7
第2章、系统总体结构设计 10
2.1系统控制模块的硬件设计 10
2.11控制系统的主要硬件电路 10
2.2系统控制模块的软件设计 10
2.21 TCP/ IP 协议 10
2.22 软件设计流程 11
2.3程序部分 11
2.31主程序 11
2.32发送控制过程 13
2.33接收控制过程 14
第3章 总结 16
第4章 参考文献 17
第5章 设计总结 18
第6章 致谢 19
第1章 绪论
1.1本设计的背景
随着互联网技术的飞速发展,Internet网络日益成为人们日常生活中必不可少的工具。人们在使用互联网学习、娱乐的同时,各种家电设备、仪器仪表以及工业生产中的数据采集与控制设备在逐步地走向网络化,以便共享网络中庞大的信息资源,给人们的工作学习带来更大的便利。就目前来看,利用 8位的微处理器,实现与Internet网络的通信,具有十分重要的意义。本设计主要为了解决利用单片机控制网卡芯片实现以太网的链接,已达到最大程度的利用网络资源,方便人们生活学习的目的。
1.2以太网络接口芯片RTL8019AS 介绍
RTL8019AS: 是台湾Realtek 公司制造的一种高集成度的10 Mb/ s 以太网控制芯片, 可实现基于以太网协议的MAC 层的全部功能,内置16 kB SRAM、双DMA 通道和FIFO,可完成数据包的接收和发送功能。
主要性能
( 1) 符号Ethernet Ò 与IEEE802.3 ( 10Base5,10Base2, 10BaseT) 标准;
( 2) 全双工, 收发可同时达到10 Mb/ s 的速率;
( 3) 内置16 kB 的SRAM, 用于收发缓冲, 降低对主处理器的速度要求;
( 4) 支持8/ 16 位数据总线8 个中断申请线以及16 个I/ O 基地址选择;
( 5) 支持UTP,AUI,BNC自动检测还支持对10BaseT 拓扑结构的自动修复;
( 6) 允许4个诊断LED 引脚可编程输出;
( 7) 100 脚的PQFP 封装,缩小了PCB 尺寸。
内部结构:RTL80l9AS内部可分为远程DMA接口、本地DMA接口、MAC(介质访问控制)逻辑、数据编码解码逻辑和其他端口。内部结构如图l所示
ISA总线接口
ENA(编码译码)逻辑
即插即用
PnP
Boot ROM
端口
EEPROM
端口
AUI接口
双绞线接口
8K*16
SROM
MAC逻辑
图一
远程DMA接口是指单片机对RTL80l9AS内部RAM进行读写的总线,即ISA总线的接口部分。单片机收发数据只需对远程DMA操作。本地DMA接口是指RTL80l9AS与网线的连接通道,完成控制器与网线的数据交换。MAC(介质访问控制)逻辑完成以下功能:当单片机向网上发送数据时,先将一帧数据通过远程DMA通道送到RTL80l9AS中的发送缓存区,然后发出传送命令;当RTL80l9AS完成了上一帧的发送后,再开始此帧的发送。RTL80l9AS接收到的数据通过MAC比较、CRC校验后,由FIFO存到接收缓冲区;收满一帧后,以中断或寄存器标志的方式通知主处理器。FIFO逻辑对收发数据作l6字节的缓冲,以减少对本地DMA请求的频率。2.3内部RAM地址空间分配RTL8Ol9AS内部有两块RAM区。一块l6K字节,地址为OX4OOO~OX7fff;一块32字节,地址为OXOOOO~OXOOlf。RAM按页存储,每256字节为一页。一般将RAM的前l2页(即OX4OOO~OX4bff)存储区用作发送缓冲区;后52页(即OX4cOO~OX7fff)存储区用作接收缓冲区。第O页叫Prom页,有32字节,地址为OXOOOO~OXOOlf,存放以太网物理地址。要接收和发送数据包就须通过DMA读写RTL8Ol9AS内部的l6KBRAM。实际上它是双端口的RAM,是指它有两套总线连接到此RAM,一套总线是RTL8Ol9AS读或写此RAM,即本地DMA;另一套总线是单片机读或写该RAM,即远程DMA
第2章、系统总体结构设计
2.1系统控制模块的硬件设计
系统控制单元以单片机主控模块为核心.其他外围电路主要包括:ISP下载线模块、系统供电模块、硬件时钟模块、网络接口卡模块、外部数据采集模块。
2.11控制系统的主要硬件电路
本系统的主控模块主要采用STC公司的89C52作为主控芯片 其中具体包括在线编程模块电路、系统复位电路、系统供电电路、网卡驱动电路、外部数据采集电路。要实现8位微处理器的上网首先要解决的就是与以太网的连接问题,即如何将通用处理器的网络装置应用于嵌入式网络的开发与应用。目前市面上有许多型号的以太网控制芯片,多数功耗较高、功能复杂,不适合用于价格低廉的嵌入式系统。还需要考虑的一点是网络接口芯片(RTL8019AS)与单片机的接口不能太复杂,要尽量少占用单片机的系统资源。根据上面的原则,选用RTL 8019AS作为网络接口芯片,网络接口卡设计方案如图二所示。
单片机
外部
RAM
存 存储器
网络控制器
隔离滤波器
RJ45
串口电平转换芯片
Pc机
网络接口
串口
EEPROM
图二
2.2系统控制模块的软件设计
2.21 TCP/ IP 协议
嵌入式设备网络化的关键是实现TCP/ IP 网络协议。众所周知, TCP/ IP 是一个数量庞大的协议体系,是由几百种网络协议组成的集合, 在嵌入式系统有限的资源中难以完全实现。且嵌入式系统以应用为中心, 即使具有特定功能的计算机系统, 也不需要实现那么多的协议。因此系统设计的首先就是进行TCP/ IP 协议栈子集的选择。TCP/ IP常被认为是一个由链路层、网络层、传输层和应用层组成的四层协议系统, 且每一层都有相应的协议集合用以实现不同的功能。数据链路层主要处理和传输介质相关的物理接口部分, 考虑到以太网数据流量大并且通用性强, 因此采用以太网协议, 用RJ45接口把嵌入式设备连入网络。网络层主要作用是处理数据包在网络中的协议封装,该层选用TCP/ IP 协议栈的核心IP 协议, 同时选用ARP 协议实现IP 地址到MAC 物理地址的转换。传输层主要为两台主机上的应用程序提供端到端的通信,有UDP和TCP两种协议。UDP协议是不面向连接的, 因此不能保证数据传输的可靠性。TCP是面向连接的,但是其可靠性的保证是以许多复杂措施以及由此而增加的开销为代价换来的。因此在此选择TCP为传输层协议,但是针对应用进行简化以适应嵌入式应用的要求。应用层负责处理特定的应用程序部分, 应用层协议种类很多, 考虑到嵌入式应用的特殊性,不选取通用的应用层协议。
2.22 软件设计流程
对网卡编程就是对网络接口控制器(NIC)RTL8019AS 中各寄存器进行编写程序控制,进而完成数据分组的正确发送及接收。
2.3程序部分
2.31主程序
主程序可分为网络通讯和串行通讯这两部分。网络通讯又可分为网卡初始化、发送控制和接收控制三部分。主程序框图如图三 所示。
Y
初始化串口
初始化网卡
接收串口数据
装入以太网帧
接收以太网帧
收到确认帧
N
图三
网卡初始化过程如下:
RTL8019AS的初始化主要是设置一些工作参数,如RAM的分配,中断初始化,MAC地址设置,接收设置,发送设置等,具体在以下程序中注释。
void rtl8019Init(void)
{
RTL8019_RESET_PORT_H();
delayms(50);
RTL8019_RESET_PORT_L(); //RTL8019AS复位管脚置0
RTL8019WRITE( ISR, rtl8019Read(ISR) ) ; // 软件复位
delayms(50);
RTL8019WRITE(CR, 0xE1); // 选择第3页,配置寄存器
RTL8019WRITE(0x01, 0xC0); //EEM1=EEM0=1
RTL8019WRITE(CONFIG2, 0x20);//设置网卡为10M自动检测模式
RTL8019WRITE(CONFIG3, 0); //设置LED工作模式
delayms(255);
RTL8019WRITE(0x01, 0); //EEM1=EEM0=0
RTL8019WRITE(CR, 0x21); //第0页
delayms(2);
RTL8019WRITE(DCR, DCR_INIT); // #define DCR_INIT 0x58
RTL8019WRITE(RBCR0,0x00);
RTL8019WRITE(RBCR1,0x00);
RTL8019WRITE(RCR,0x04); //接收结构寄存器
RTL8019WRITE(TCR,0x02); //传送配置寄存器
RTL8019WRITE(TPSR, TXSTART_INIT); //#define TXSTART_INIT 0x40
RTL8019WRITE(PSTART, RXSTART_INIT); //#define RXSTART_INIT 0x47
RTL8019WRITE(BNRY, RXSTART_INIT); //#define RXSTART_INIT 0x47
RTL8019WRITE(PSTOP, RXSTOP_INIT); //#define RXSTOP_INIT 0x60
RTL8019WRITE(ISR,0xFF); //清除中断标志
RTL8019WRITE(IMR, IMR_INIT); //中断屏蔽
RTL8019WRITE(CR, 0x61); //第1页
delayms(2);
RTL8019WRITE(CURR, RXSTART_INIT); //#define RXSTART_INIT 0x47
//设置MAC地址
RTL8019WRITE(PAR0+0, MYMAC_0);
RTL8019WRITE(PAR0+1, MYMAC_1);
RTL8019WRITE(PAR0+2, MYMAC_2);
RTL8019WRITE(PAR0+3, MYMAC_3);
RTL8019WRITE(PAR0+4, MYMAC_4);
RTL8019WRITE(PAR0+5, MYMAC_5);
RTL8019WRITE(CR, 0x22); // start the NIC
} //end rtl8019as init
2.32发送控制过程
在网络中,帧传输的过程就是发送方将待发送的数据按帧格式要求封装成帧,然后通过网卡发送到网络的传输线上。发送程序框图如图4所示。
数据长度=46
数据长度+14
初始化远程字节
计算器RBCR
启动远程DMA
数据写入缓冲区
启动本地DMA
发送字节计数器
赋值
初始化发送页起始地址寄存器TTTPSR
发送缓冲区数据到网上
初始化
数据长度小于46《《《度,444444646
发送完毕
发送完毕
返回
YY
N
N
N
YY
Y
图四
首先设置网卡发送数据包的RAM首地址,用以存放要发送的数据,和上两节写RAM相同。然后设置远程读此数据包的长度,(RBCR1,0在读数据包的时候作用为要读数据包的长度;在发送数据包的时候作用为远程接收此包时,此包的有效字节长度,相当于RTL8019AS接收数据包的Byte3,4,详细请看第二章的3.9节),然后设置发送数据包的长度,:发送数据包的长度与远程读此数据包的长度是一样的吧!!然后把要发送的数据包写入RAM,启动发送数据包命令,发送数据包,程序如下:
RTL8019WRITE(CR,0x22); //第0页 开始命令
while( rtl8019Read(CR) & 0x04 ); //有数据包发送则等发送完毕
RTL8019WRITE(TPSR,0x40); //加载发送RAM页的首地址
RTL8019WRITE(RSAR0,0x00); //写RAM地址 低8位
RTL8019WRITE(RSAR1,0x40); //写RAM地址 高8位
RTL8019WRITE(ISR,(1<<ISR_PTX)); //清除发送中断标志
RTL8019WRITE(RBCR0, (unsigned char)(packetLength));
//远程读数据包长度的低8位
RTL8019WRITE(RBCR1, (unsigned char)(packetLength>>8));
//远程读数据包长度的高8位
RTL8019WRITE(TBCR0, (unsigned char)(sendPacketLength));
//发送数据包长度的低8位
RTL8019WRITE(TBCR1, (unsigned char)((sendPacketLength)>>8));
//发送数据包长度的高8位
RTL8019WRITE(CR,0x12); //启动写RAM命令
for(unsigned int i=0;i<length;i++)
RTL8019WRITE(RDMAPORT, Buffer[i]); //写数据到RAM
RTL8019WRITE(CR,0x24); //发送数据包 CR的TXP=1
RTL8019WRITE(ISR, (1<<ISR_RDC)); //清除RAM操作完成标志
2.33接收控制过程
读数据包之前,可通过读BNRY和CURR来判断有无数据包的接收,BNRY=CURR的时候说明没有数据包接收,当BNRY不等于CURR时,说明有数据包收到,此时可从以BNRY为首地址的RAM中读出4个字节来判断收到数据包的长度,从而设置RBCR1,0,再从接收RAM中读出以太网数据包。需要注意的是,设置完RBCR1,0后,再从RAM读数据包的时候,首地址为BNRY+4,因为前4个字节已经读过了,如果不加4,读到的数据将不完整;同时,读之前还要判断是否有内存溢出,如果溢出,则做相应的处理。
rtl8019ProcessInterrupt(); //检测RAM是否溢出
RTL8019WRITE(CR,0x62); //第1页 读CURR
curr = rtl8019Read(CURR); // 读CURR
RTL8019WRITE(CR,0x22); //第0页 读BNRY
bnry = rtl8019Read(BNRY) ; //读BNRY
if( bnry == curr )
return ; //没有包,返回
RTL8019WRITE(ISR, (1<<ISR_PRX)); //清除接收中断标志
RTL8019WRITE(RBCR0, 4);
RTL8019WRITE(RBCR1, 0);
RTL8019WRITE(RSAR0, 0);
RTL8019WRITE(RSAR1, bnry);
RTL8019WRITE(CR, 0x0A); //启动读RAM命令
for(i=0;i<4;i++)
buffer[i] = rtl8019Read(RDMAPORT);
RTL8019WRITE(CR, 0x22); //终止RAM操作
//等待RAM操作完成
for(i = 0; i <= 20; i++)
if(rtl8019Read(ISR) & 1<<6)
break;
RTL8019WRITE(ISR, 1<<6); //清除RAM操作完成中断标志
rxlen = (buffer[3]<<8) + buffer[2]; //数据包实际长度
nextPage = buffer[1] ; //下一数据包页的首地址
ReadAddress = (bnry<<8) + 4; //读实际数据包的RAM地址
// 读实际数据包
RTL8019WRITE(RBCR0, (unsigned char) rxlen);
RTL8019WRITE(RBCR1, (unsigned char)( rxlen >>8));
RTL8019WRITE(RSAR0, (unsigned char) ReadAddress);
RTL8019WRITE(RSAR1, (unsigned char)( ReadAddress>>8));
RTL8019WRITE(CR, 0x0A); //启动读RAM命令
for(i=0;i<(rxlen-4);i++)
DataBuffer[i] = rtl8019Read(RDMAPORT);
RTL8019WRITE(CR, 0x22); //终止RAM操作
//等待RAM操作完成
for(i = 0; i <= 20; i++)
if(rtl8019Read(ISR) & 1<<6)
break;
RTL8019WRITE(ISR, 1<<6); //清除RAM操作完成中断标志
RTL8019WRITE(BNRY, nextPage); //设置下一个数据包的页地址
第3章 总结
RTL 8019AS芯片具有性价比高、连接方便等特点,是进行嵌入式以太网设计时首选的控制芯片,本文利用单片机控制RTI 8019AS来实现网络通信,主要解决了硬件电路连接和以太网驱动程序设计的问题。该方法在工业自动化系统、远程分散式设备控制、网络家电等方面具有广阔的应用前景。
第4章 参考文献
[1]李华.MCS-51系列单片机实用接口技术[M].北京:北京航空大学出版社,2002.
[2]杨延双,张建标,王全民.TCP/IP协议分析及应用[M].北京:机械工业出版社,2007
[3]Behrouz A.Forouzan.TCP/IP协议族(第四版).王海等译[M].北京:清华大学出版社,2011
[4]韩毅刚.计算机网络技术[M].北京:机械工业出版社,2010
[5]RTL8019AS 数据手册
[6]D.Gaponstev.Quasi-single-mode fiber laser nears 2kW output with high-quality beam[J].Laser Focus World.2005
[7]谭浩强.C语言程序设计(第二版)[M].北京:清华大学出版社,2003
[8]罗军周,钱松荣,杨明等.TCP/IP协议及网络编程技术[M].北京:清华大学出版社,2004
[9]徐爱钧,彭秀华.单片机高级语言C51应用程序设计[M].北京:电子工业出版社,1998
[10]严天峰.单片机开发[M].成都:科学出版社,2007
[11]任清珍,黄天戍.多路数据采集内存使用及存盘法[J].计算机应用研究,1991年03期
[12]张家喜.用PC—1500构成的多路数据采集系统[J].工业仪表与自动化装置,1992年04期
[13]章公器.8051单片机开发的几点经验[J].电子与自动化,1994年01期
[14]章公器.8051单片机开发的几点经验[J].电子技术应用,1994年03期
[15]汪家铭.分散式数据采集系统IMP[J].数据采集与处理,1991年02期
[16]A.Neto,H.Fernandes,A.Duarte,Firesignal-Data acquisition and control system software[J].FusionEngineering and Design 82(2007)
[17]David Gay,PhilLevis,Rob Von Behren,et al.The nesC Language:A Holistic Approach to Networked Embedded Systems[J].Proceedings of Programming Language Design and Implementation(PLDI),1996
第5章 设计总结
在整个设计过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了作品,达到了预期的目的,完了最初的设想。通过这一次的经验我意识到了对电路的设计、布局要先有一个好的构思,而且要认真仔细的检查各个功能模块的具体情况,确保不遗留什么元件,才做出美观、大方的电路板。程序编写中,先研究各个功能模块的程序,不懂的就通过查资料或者请教老师和同学来解决,然后再整理好这些程序,最终完成了能实现整个设计要求的程序。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,也练就了我们的耐心和细心,做什么事都要认真仔细,因为细节决定成败。总之,这次设计使我的能力得到了全方位的提高。
第6章 致谢
这次的设计和论文是在李老师的悉心指导下完成的。您严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,您都始终给予我细心的指导和不懈的支持。在此谨向李老师致以诚挚的谢意和崇高的敬意。
最后,衷心感谢在百忙之中抽出宝贵时间对此论文进行评阅与审议的李老师。感谢学院给我提供了一个展现自己的舞台,给我一次难得煅炼的机会,使得我的动手能力和专业技能都有了很大的提高。
展开阅读全文