本科生毕业设计UIP协议在单片机上的移植与实现院系电气信息工程学院专业电气工程及其自动化班级学号学生姓名联系方式15939948268指导教师赵忠彪职称:讲师2011年5月独创性声明本人郑重声明:所呈交的毕业论文(设计)是本人在指导老师指导下取得的研究成果。除了文中特别加以注释和致谢的地方外,论文(设计)中不包含其他人已经发表或撰写的研究成果。与本研究成果相关的所有人所做出的任何贡献均已在论文(设计)中作了明确的说明并表示了谢意。签名:年月日授权声明本人完全了解许昌学院有关保留、使用本科生毕业论文(设计)的规定,即:有权保留并向国家有关部门或机构送交毕业论文(设计)的复印件和磁盘,允许毕业论文(设计)被查阅和借阅。本人授权许昌学院可以将毕业论文(设计)的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编论文(设计)。本人论文(设计)中有原创性数据需要保密的部分为(如没有,请填写“无”):无。签名:年月日指导教师签名:年月日摘要本文针对单片机在嵌入式系统中资源和处理能力有限这一问题,提出了精简的嵌入式协议栈——uIP协议,并以ENC28J60芯片为例,采用c语言编程,经过一些测试,最终实现了uIP协议在单片机上的移植。关键词:嵌入式系统,uIP协议,移植ABSTRACTThispaperproposesstreamlinedanembeddedprotocol—theuIPagreement,astheSCMislimitedatresourcesandprocessingpowerintheembeddedsystem.TakingtheENC28J60chipsforexample,thedesignachievedthetransplantusingtheclanguageaftersometestsfinally.Keywords:embeddedsystem,uIPagreement,transplant目录1概述..................................................................11.1研究背景.........................................................11.2研究意义.........................................................11.3研究思路.........................................................12UIP协议在单片机上的移植过程...........................................22.1UIP特性.........................................................22.2UIP架构.........................................................22.3UIP在MCS-51单片机上的移植......................................33UIP协议在单片机上的实现...............................................53.1UIP协议关键库函数的功能及使用方法................................53.1.1接收数据.......................................................63.1.2发送数据.......................................................63.1.3重发数据.......................................................73.1.4关闭连接.......................................................73.1.5报告错误.......................................................73.1.6轮询...........................................................73.1.7监听端口.......................................................73.1.8打开连接.......................................................73.1.9数据流控制.....................................................83.1.10UIP函数总结..................................................83.2重点代码分析....................................................103.2.1UIP/设备驱动接口..............................................103.2.2UIP/周期计时接口..............................................103.2.3UIP协议栈提供的主要接口......................................103.3以太网的芯片ENC28J60介绍及编程.................................113.3.1ENC28J60介绍.................................................113.3.2ENC28J60与单片机的连接.......................................13设计总结............................................................16参考文献............................................................17附录.................................................................181.ENC28J60与单片机的外部连接图.....................................182.重点函数程序......................................................20致谢.................................................................3211概述1.1研究背景近些年来,人们对把各种装置连接到一个现有的IP网络比如因特网上产生了浓厚的兴趣。为了能通过因特网通讯,一个可实现的TCP/IP协议栈是很必要的。对于由32位嵌入式处理器构建的中、高端网络接入嵌入式系统,一般会运行一个集成有TCP/IP协议栈的操作系统。但是对于由8位和16位低端处理器构建的系统,因为它所具有的处理能力和资源十分有限,通常不运行操作系统,这就要求系统开发者根据应用的要求和所选用的处理器的实际情况构建自己的TCP/IP协议栈,而TCP/IP协议的透明性掩盖了它实现的复杂性,从无到有构建一个协议栈是一件艰巨的任务,并且缺少有效的调试工具。uIPTCP/IP协议栈是应用于低端8位或16位微处理器构建的嵌入式系统的一个可实现的极小的TCP/IP协议栈,它可以用于商业和非商业目的。为了方便于移植uIP使用C语言编写,而且uIP协议栈的代码大小和RAM的需求比其它一般的TCP/IP栈要小,这就使得它可以方便的应用于各种低端系统上。本文将简要描述uIP的实现方法,分析uIP协议栈的应用接口,并讨论如何将其应用到51系列单片机上。1.2研究意义单片机在嵌入式领域中属于很低端的处理器,它的资源和处理能力有限。首先,它的数据存储空间RAM和程序存储空间ROM都不能超过64K;其次,它的CPU频率通常在12M~40M之间,指令的执行速度相对较慢,导致网络传输速度很难上去。据计算,12M的51单片机的最快网络传送速度大概是25KB/s。这些特点导致在单片机上不可能运行大而全的TCP/IP协议栈,需要使用精简的嵌入式协议栈。虽然通讯流量和处理速度不允许很大,但对于一般的楼宇、工业、家居智能化等领域也足够应付。更重要的是,它的成本很低,具有很高的经济价值。考虑到这些原因,uIP协议栈是一个不错的选择。因此本文以基于单片机控制的硬件和uIP协议栈介绍单片机TCP/IP网络编程与应用。1.3研究思路本文将简要描述uIP协议的实现方法,分析其在单片机上的移植过程,研究其关键库函数的功能及其使用方法,并讨论如何将其应用到51系列单片机上。22UIP协议在单片机上的移植过程2.1UIP特性uIP协议栈去掉了完整的TCP/IP系统中不常用的功能,简化了通讯流程,只保留了网络通信必须使用的协议,设计重点放在了IP/TCP/ICMP/UDP/ARP这些网络层和传输层的协议上,因此保证了其代码的通用性和结构的稳定性。由于uIP协议栈专门为嵌入式系统而设计,因此还具有以下优越功能:(1)代码非常少,其协议栈代码不到6K,方便阅读与移植。(2)占用的内存数极少,RAM占用仅几百字节。(3)它的硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据拷贝,而且发送和接收都是依靠这个缓存区,极大的节省了空间和时间。(4)支持多个主动连接和被动连接并发。(5)它的源代码中提供一套实例程序:web客户端,web服务器,Telnet服务器,电子邮件发送程序(SMTP客户端),DNS主机名解析程序等。通用性强,移植起来基本不用修改就可通过。(6)在数据的处理上采用轮循机制,不需要操作系统的支持。由于uIP对资源的需求少而且移植容易,大部分的8位微控制器都使用过uIP协议栈,而且很多著名的嵌入式产品和项目(如卫星,Cisco路由器,无线传感器网络)中均在使用uIP协议栈。2.2UIP架构uIP相当于一个代码库,通过一系列的函数实现与底层硬件和高层应用程序之间的通讯,对于整个系统来说它内部的协议组是透明的,从而增加了协议的通用性。uIP协议栈与系统底层和高层应用之间的关系如图(一)所示:3图(一)uIP在系统中的位置uIP协议栈主要提供了三个函数供系统底层调用。即uip_init(),uip_input()和uip_periodic()。其与应用程序的主要接口是UIP_APPCALL()。uip_init()是系统初始化时调用的,主要用于初始化协议栈的侦听端口和默认所有连接是关闭的。当网卡驱动收到一个输入包时,将其放入全局缓冲区uip_buf中,包的大小由全局变量uip_len约束。同时将调用uip_input()函数,这个函数将会根据包首部的协议处理这个包并在需要时调用应用程序。当uip_input()返回时,一个输出包同样放在全局缓冲区uip_buf里,并把大小赋给uip_len。若uip_len是0,则说明没有包要发送;否则调用底层系统的发包函数就会将包发送到网络上。uIP周期计时用于驱动所有的uIP内部时钟事件:当周期计时激发,每一个TCP连接都会调用uIP函数uip_periodic()。类似于uip_input()函数,uip_periodic()函数返回时,输出的IP包要放到uip_buf中,供底层系统查询uip_len的大小并发送。由于TCP/IP的应用场景很多,所以应用程序作为单独的模块由用户实现。uIP协议栈提供一系列接口函数供用户程序调用,其