基于MCU的以太网接入模块设计Word文件下载.docx
《基于MCU的以太网接入模块设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于MCU的以太网接入模块设计Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
51单片机;
TCP/IP协议;
传感器
Abstract
GivenSCMRTL8019ASEthernetcommunicationshardwareandsoftwaredesign.Designthehardwarecircuit,theinterfacecircuitdesignindetail,andthendesignRTL8019ASEthernetdriver.Sendandreceivedatathroughasimpletesttoverifythecorrectnessofthedesign.
KeywordsTheRTL8019AS;
51microcontroller;
TCP/IPprotocol;
sensor
目录
第1章绪论7
1.1本设计的背景7
1.2以太网络接口芯片RTL8019AS介绍7
第2章、系统总体结构设计10
2.1系统控制模块的硬件设计10
2.11控制系统的主要硬件电路10
2.2系统控制模块的软件设计10
2.21TCP/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公司制造的一种高集成度的10Mb/s以太网控制芯片,可实现基于以太网协议的MAC层的全部功能,内置16kBSRAM、双DMA通道和FIFO,可完成数据包的接收和发送功能。
主要性能
(1)符号EthernetÒ
与IEEE802.3(10Base5,10Base2,10BaseT)标准;
(2)全双工,收发可同时达到10Mb/s的速率;
(3)内置16kB的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所示
图一
远程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)与单片机的接口不能太复杂,要尽量少占用单片机的系统资源。
根据上面的原则,选用RTL8019AS作为网络接口芯片,网络接口卡设计方案如图二所示。
图二
2.2系统控制模块的软件设计
2.21TCP/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主程序
主程序可分为网络通讯和串行通讯这两部分。
网络通讯又可分为网卡初始化、发送控制和接收控制三部分。
主程序框图如图三所示。
图三
网卡初始化过程如下:
RTL8019AS的初始化主要是设置一些工作参数,如RAM的分配,中断初始化,MAC地址设置,接收设置,发送设置等,具体在以下程序中注释。
voidrtl8019Init(void)
{
RTL8019_RESET_PORT_H();
delayms(50);
RTL8019_RESET_PORT_L();
//RTL8019AS复位管脚置0
RTL8019WRITE(ISR,rtl8019Read(ISR));
//软件复位
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);
//#defineDCR_INIT0x58
RTL8019WRITE(RBCR0,0x00);
RTL8019WRITE(RBCR1,0x00);
RTL8019WRITE(RCR,0x04);
//接收结构寄存器
RTL8019WRITE(TCR,0x02);
//传送配置寄存器
RTL8019WRITE(TPSR,TXSTART_INIT);
//#defineTXSTART_INIT0x40
RTL8019WRITE(PSTART,RXSTART_INIT);
//#defineRXSTART_INIT0x47
RTL8019WRITE(BNRY,RXSTART_INIT);
RTL8019WRITE(PSTOP,RXSTOP_INIT);
//#defineRXSTOP_INIT0x60
RTL8019WRITE(ISR,0xFF);
//清除中断标志
RTL8019WRITE(IMR,IMR_INIT);
//中断屏蔽
RTL8019WRITE(CR,0x61);
//第1页
RTL8019WRITE(CURR,RXSTART_INIT);
//设置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);