首页 基于ENC28J60的以太网设计与实现

基于ENC28J60的以太网设计与实现

举报
开通vip

基于ENC28J60的以太网设计与实现基于ENC28J60的以太网设计与实现 济源职业技术学院 题目 基于ENC28J60的以太网设计与实现 系别 信息工程系 专业 计算机应用技术 班级 计应1001班 姓名 xx 学号 10090103 指导教师 xxx 日期 二零一二年九月 基于ENC28J60的以太网设计与实现 总计:毕业设计(论文)47页 图表 28副 II 摘 要 随着Internet迅猛发展,IP已经占据了各种终端应用的主导地位,而如何更高效、高速、廉价的传送IP数据是今后网络研究的重点。到目前,各种接入网技术之所以能够发...

基于ENC28J60的以太网设计与实现
基于ENC28J60的以太网设计与实现 济源职业技术学院 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目 基于ENC28J60的以太网设计与实现 系别 信息工程系 专业 计算机应用技术 班级 计应1001班 姓名 xx 学号 10090103 指导教师 xxx 日期 二零一二年九月 基于ENC28J60的以太网设计与实现 总计:毕业设计( 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 )47页 图表 28副 II 摘 要 随着Internet迅猛发展,IP已经占据了各种终端应用的主导地位,而如何更高效、高速、廉价的传送IP数据是今后网络研究的重点。到目前,各种接入网技术之所以能够发展起来,更是适应了当今网络的发展,但是这些技术都存在着一个相同的问题:成本较高、性价比不高。而提到廉价,人们会很自然地想到以太网技术,但是能否接入网到这一网络环境中还需要认真研究。 ENC28J60是MicrochipTechnology(美国微芯科技公司) 于2005年推出的一款28引脚的独立以太网控制器,由于采用SPI串行接口方式,简化了设计。本文介绍了其特性、内部结构、引脚功能和ENC28J60的硬件结构与接口电路,详细分析了其寄存器设置和工作过程。ENC28J60采用标准的SPI串行接口,通过程序的编写、TCP/IP协议的应用,只需4条连线即可实现与单片机连接,有利于在小型系统上实现以太网功能。 本设计根据协议的移植,由单片机处理模块、以太网控制器模块、协议模块等部分组成。实现了以太网控制器与单片机之间的基本数据传输。 关键词:以太网接入;单片机;ENC28J60;SPI接口;TCP/IP移植 I ABSTRACT With the rapid development of Internet, IP have occupied various terminal application dominance, and how to more efficient, high-speed, low-cost transmission of IP data is the future of network research focus. At present, all kinds of access network technology 's development, it is to adapt to today's network development, but these techniques have an identical problem: high cost, not cheap. While references to cheap, people will naturally think of Ethernet technology, but whether the access network to the network environment also need to seriously study. ENC28J60 is the MicrochipTechnology ( American microchip technology company ) in 2005 launched a 28 pin independent Ethernet controller, due to the use of SPI serial interface, simplifying the design. This paper introduces the characteristics, internal structure, pin function and ENC28J60 hardware structure and interface circuit, a detailed analysis of the register set and working process. ENC28J60 uses standard SPI serial interface, through the program, TCP/IP protocol application, only 4 lines can be connected with the single chip microcomputer, is advantageous in the small system Ethernet function. According to the design of protocols for transplantation, composed of a single chip microcomputer processing module, Ethernet controller module, protocol module and other components. Realization of Ethernet controller and SCM basic data transmission. Key words: Ethernet access; single chip microcomputer; ENC28J60; SPI interface; TCP/IP transplantation II 目 录 摘 要 I ABSTRACT ...................................................................................................... II 第1章 绪论 ................................................................................................. - 1 - 第2章 ENC28J60网络模块 ....................................................................... - 2 - 2.1 概述 ................................................................................................ - 2 - 2.2 外部连接 ........................................................................................ - 6 - 2.2.1 振荡器 ................................................................................. - 6 - 2.2.2 I/O电平 ................................................................................ - 6 - 2.2.3 带SPI接口的独立以太网控制器 ....................................... - 6 - 2.3存储器与寄存器 ............................................................................. - 8 - 2.3.1 存储器构成 .......................................................................... - 8 - 2.3.2 寄存器 ................................................................................. - 9 - 2.4 ENC28J60的寄存器设置和应用 .................................................... - 9 - 2.4.1 ENC28J60的寄存器设置 ..................................................... - 9 - 2.4.2 ENC28J60的应用 ............................................................... - 10 - 第3章 系统硬件设计 ............................................................................... - 11 - 3.1单片机与ENC28J60网络模块的选择及思想 .............................. - 11 - 3.2串口通信 ....................................................................................... - 14 - 3.2.1 通信简介 ............................................................................ - 14 - 3.2.2 单片机串口结构 ................................................................ - 15 - 3.2.3 串行口工作方式及帧格式 ................................................. - 15 - 3.2.4 单片机与串口的通信 ........................................................ - 16 - 3.2.5 单片机串口通信设置 ........................................................ - 17 - 3.3 ENC28J60外围电路 ..................................................................... - 17 - 第4章 网络协议 ....................................................................................... - 19 - 4.1 TCP/IP协议简介........................................................................... - 19 - 4.2 网络互连 ...................................................................................... - 20 - 4.3 uIP协议在单片机上的移植过程 .................................................. - 20 - 4.3.1 uIP协议栈的实现方法简述 ............................................... - 20 - 4.3.2 uIP架构 .............................................................................. - 21 - III 4.3.2 uIP协议在单片机上的移植 ............................................... - 22 - 4.4 uIP的关键功能及使用方法 .......................................................... - 24 - 4.4.1 接收数据 ............................................................................ - 24 - 4.4.2 发送数据 ............................................................................ - 25 - 4.4.3 重发数据 ............................................................................ - 25 - 4.4.4 关闭连接 ............................................................................ - 25 - 4.4.5 报告错误 ............................................................................ - 25 - 4.4.6 轮询 ................................................................................... - 25 - 4.4.7 监听端口 ............................................................................ - 25 - 4.4.8 打开连接 ............................................................................ - 26 - 4.4.9 数据流控制 ........................................................................ - 26 - 4.1.10 uIP函数总结 .................................................................... - 27 - 第5章 软件设计 ....................................................................................... - 28 - 5.1 软件Keil介绍 ............................................................................. - 28 - 5.2系统总流程图 ............................................................................... - 28 - 5.4 uIP协议代码分析 ......................................................................... - 30 - 5.4.1 应用程序接口 .................................................................... - 30 - 5.4.2 uIP/设备驱动接口 .............................................................. - 31 - 5.4.3 uIP/周期计时接口 .............................................................. - 31 - 5.4.4 uIP协议栈提供的主要接口 ............................................... - 31 - 5.4.5 主要移植心得 .................................................................... - 32 - 5.5 调试软件地址设置程序 ............................................................... - 33 - 5.6 TCP/IP在单片机内的实现 ........................................................... - 34 - 5.7 链路层的实现 .............................................................................. - 35 - 5.8网络层的实现 ............................................................................... - 35 - 5.9 传输层实现 .................................................................................. - 38 - 第6章 系统软硬件调试 ............................................................................ - 42 - 6.1 准备调试 ...................................................................................... - 42 - 6.2 进行调试 ...................................................................................... - 44 - 6.3 调试结果 ...................................................................................... - 45 - 总 结 ....................................................................................................... - 47 - 致 谢 ....................................................................................................... - 48 - 参考文献 ..................................................................................................... - 49 - IV 基于ENC28J60的以太网通信设计与实现 第1章 绪论 随着Internet迅猛发展,接入网技术有很多种类如:宽带接入、光纤接入、微波接入等。但是近年来IP技术的不断完善,大多的运营商已经将IP技术作为数据网络的主要承载技术。由此也随之衍生出来了大量以以太网技术为基础的接入技术,例如以太网、IP、DSL等。而以太网接入技术就是其中的一种。且以太网技术也日趋成熟,使用户得到了更多的方便。 以太网接入技术是具有中国特色的接入技术。由于中国特色的民宅大多数是比较集中,符合以太网的应用特点,而且用以太网接入技术的优点也非常之多,更适合使用。 以太网技术具有成熟、成本低、结构简单、稳定性、可扩充性好等优点;便于网络升级,同时可实现实时监控、智能化物业管理、小区/大楼/家庭保安、家庭自动化(如远程遥控家电、可视门铃等)、远程抄表等,可提供智能化、信息化的办公与家居环境,满足不同层次的人们对信息化的需求。并且随着同类技术的飞速发展,以太网接入技术也正在逐步完善,越来越显示出来它的优点。 本设计设计的是基于ENC28J60的以太网设计与实现,意在利用以太网接入技术实现单片机与以太网控制器两者之间的数据传输,并且,学习和掌握PC机与单片机的通信方法,了解通信协议的制定,设计的同时,对C语言程序的编写与设计硬件方面的连接等都有很严格的要求,提高自主思考能力和实践动手能力,最终实现本设计的最终目的(单片机与以太网控制器两者之间的数据传输)。 - 1 - 济源职业技术学院毕业设计(论文) 第2章 ENC28J60网络模块 ENC28J60是带有行业标准串行接口外设设备(SPI)的独立以太网控制器。它可作为任何配备有SPI的控制器的以太网接口。本章简单介绍了关于ENC28J60网络模块的一些功能、特点,主要介绍了ENC28J60的存储器构成、寄存器等。 2.1 概述 ENC28J60符合IEEE802.3的全部 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 ,采用了一系列包过滤机制以对传入数据包进行限制。它还提供一个内部DMA模块,以实现快速数据吞吐和硬件支持的IP校验和计算。与控制器的通信通过两个中断引脚和SPI实现,数据传输速率高达10Mb/s。两个专用的引脚用于连接LED,进行网络活动状态指示。 ENC28J60网络模块的框图及主要功能 图2-1所示为ENC28J60 的简化框图。图2-2所示为使用该器件的典型应用电路。要将单片机连接到速率为10 Mbps的以太网,只需 ENC28J60两个脉冲变压器和一些无源元件即可。 - 2 - 基于ENC28J60的以太网通信设计与实现 RX LEDA 8KB双端口RAMRXBMMACLEDB RXF过滤器 通道0通道控制寄TX0DMA与IP 判优器存器RMII校验和Tx 通道1通道 接口1 TXBMPHY 总线接 口 流量控制RX MIIM主机接口 接口 SPI25MHz振系统控制上电复位稳压器荡器 VcapRESET 图2-1 ENC28J60框图 ENC28j60RJ45TPIN+/-MCUI/OTPOUT+/-CSSDOSI以太网变压器SOSOITX/RXSCKMACPHY缓冲器SCKLEDA INT.WOTLEDBINTX 图2-2典型的 ENC28J60 接口 ENC28J60 由七个主要功能模块组成: (1)SPI 接口——充当主控制器和ENC28J60 之间通信通道。 (2)控制寄存器——用于控制和监视ENC28J60 。 (3)双端口RAM缓冲器——用于接收和发送数据包。 (4)判优器——当DMA、发送和接收模块发出请求时对RAM缓冲器的访 问进行控制。 (5)总线接口——对通过SPI 接收的数据和命令进行解析。 - 3 - 济源职业技术学院毕业设计(论文) (6)MAC(Medium Access Control)模块——实现符合IEEE 802.3 标准的 MAC逻辑。 (7)PHY(物理层)模块——对双绞线上的模拟数据进行编码和译码。 该器件还包括其他支持模块,诸如振荡器、片内稳压器、电平变换器(提供 可以接受5V电压的 I/O 引脚)和系统控制逻辑。如表2-1所示。ENC28J60的 I/O引脚说明。 表2-1 ENC28J60的I/O引脚说明 引脚 引脚号 引脚 缓冲 缓冲器 类型 器类说明 QFN SPDIP、 型 SOIC和 SSOP VCAP 1 25 P , 来自内部稳压器的 2.5V输出。 必须将 此引脚通过一个10 μF的电容连接到 VSSTX。 VSS 2 26 P , 参考接地端。 CLKO 3 27 O , 可编程时钟输出引 脚。(1) INT 4 28 O , INT中断输出引脚。 (2) WOL 5 1 O , LAN中断唤醒输出 引脚。(2) SO 6 2 O , SPI接口的数据输 出引脚。(2) SI 7 3 I ST SPI接口的数据输 入引脚。(3) SCK 8 4 I ST SPI接口的时钟输 入引脚。(3) CS 9 5 I ST SPI接口的片选输 入引脚。(3) RESE 10 6 I ST 低电平有效器件复 位输入。(3, 4) VSSRX 11 7 P , PHY RX 的参考接 地端。 - 4 - 基于ENC28J60的以太网通信设计与实现 TPIN- 12 8 I NA 差分信号输入。 TPIN+ 13 9 I NA 差分信号输入。 RBIAS 14 10 I NA PHY的偏置电流引 脚。 必须将此引脚 通过2k?(1%)的 电阻连接到 VSSRX。 VDDTX 15 11 P , PHY TX的正电源 端。 TPOU 16 12 O , 差分信号输出。 TPOU 17 13 O , 差分信号输出。 VSSTX 18 14 P , PHY TX的参考接 地端。 VDDRX 19 15 P , PHY RX 的正 3.3V 电源端。 VDDPL 20 16 P , PHY PLL的正 3.3V 电源端。 VSSPL 21 17 P , PHY PLL的参考接 地端。 VSSOS 22 18 P , 振荡器的参考接地 端。 OSC1 23 19 I DIG 振荡器输入。 OSC2 24 20 O , 振荡器输出。 VDDOS 25 21 P , 振荡器的正3.3V电 源端。 LEDB 26 22 O , LEDB 驱动引脚。 (5) LEDA 27 23 O , LEDA 驱动引脚。 (5) VDD 28 24 P , 正3.3V 电源端。 - 5 - 济源职业技术学院毕业设计(论文) 2.2 外部连接 2.2.1 振荡器 ENC28J60网络模块的工作频率为25MHz,晶振连接在OSC1和OSC2引脚之间。ENC28J60要求使用平行切割的晶体。使用顺序切割的晶体可能会使振荡器产生频率不在晶体制造厂商所给的参数范围内。 ENC28J60包含一个振荡器起振定时器(OST)以确保在使用振荡器和集成PHY之前它们已经稳定。在发生上电复位或从掉电模式唤醒后,OST经过7500个OSC1时钟周期(300 µ s)后超时。在这段延时期间,仍可通过SPI总线对所有的以太网寄存器和缓冲器进行读写操作。然而,在这期间不应试图使用软件发 MALL或PHY寄存器。当OST送任何数据包、使能接收数据包或访问MAC、 超时后,ESTAT寄存器中的CLKRDY位将置1.应用程序软件可通过查询此位来确定何时开始正常器件操作。 注:在上位复电或ENC28J60从掉电模式恢复后,在发送数据包、使能接收数据包或允许访问任何MAC、MLL或PHY寄存器之前,必须查询CLKRDY位。 2.2.2 I/O电平 ECN28J60网络模块是一个工作电压为3.3的器件,他被设计为易于集成到 CSRESET5V的系统中。SPI的,SCK和SI输入以及引脚都可以承受5V的电压。另一方面,如果主控制器运行在5V电压下,当SPI和中断输入由ENC28J60上的3.3V输入驱动时,它很可能不符合规范要求,此时需要一个单向电平转换器。可以使用廉价的74HCT08、74ACT125或其他带有TTL电平输入缓冲器的5VCMOS芯片来提供必要的电平转换。使用三态缓冲器便于系统集成,它可以与其他器件共享SPI总线。 2.2.3 带SPI接口的独立以太网控制器 ENC28J60网络模块可以实现占位小、成本低、更加精简的嵌入式网络应用系统。符合IEEE802. 3协议的ENC28J60只有28引脚,却具有早期器件相应的功能。 (1)以太网控制器特性 • IEEE 802.3兼容的以太网控制器 • 集成MAC和10 BASE-T PHY • 接收器和冲突抑制电路 - 6 - 基于ENC28J60的以太网通信设计与实现 • 支持一个带自动极性检测和校正的10BASE-T 端口 • 支持全双工和半双工模式 • 可编程在发生冲突时自动重发 • 可编程填充和CRC生成 • 可编程自动拒绝错误数据包 • 最高速度可达10 Mb/s 的SPI 接口 (2)缓冲器 • 8 KB 发送/ 接收数据包双端口SRAM • 可配置发送/ 接收缓冲器大小 • 硬件管理的循环接收FIFO • 字节宽度的随机访问和顺序访问(地址自动递增) • 用于快速数据传送的内部DMA • 硬件支持的IP 校验和计算 (3)介质访问控制器(MAC)特性 • 支持单播、组播和广播数据包 • 可编程数据包过滤,并在以下事件的逻辑“与”和“或”结果为真时唤 醒主机: - 单播目标地址 - 组播地址 - 广播地址 - Magic Packet - 由64位哈希表定义的组目标地址 - 多达64字节的可编程模式匹配(偏移量可由用户定义) • 环回模式 (4)物理层(PHY)特性 • 整形输出滤波器 • 环回模式 (5)工作特性 • 两个用来表示连接、发送、接收、冲突和全/ 半双 工状态的可编程LED 输出 • 使用两个中断引脚的七个中断源 • 25 MHz 时钟 • 带可编程预分频器的时钟输出引脚 • 工作电压范围是3.14V 到3.45V • TTL 电平输入 - 7 - 济源职业技术学院毕业设计(论文) • 温度范围:-40?C 到+85?C (工业级),0?C 到+70?C (商业级)(仅SSOP 封装) • 28 引脚SPDIP 、SSOP 、SOIC 和QFN封装封装类型如图2-3所示。 图2-3 封装类型 2.3存储器与寄存器 2.3.1 存储器构成 ENC28J60中所有的存储器都是以静态RAM的方式实现的。ENC28J60中有三种类型的存储器:控制寄存器、以太网缓冲器、PHY寄存器。 [5]控制寄存器类型存储器包含控制寄存器(Control Register,CR)。它们用于进行ENC28J60的配置.控制盒状态获取。可以通过SPI接口直接读写这些控制 - 8 - 基于ENC28J60的以太网通信设计与实现 寄存器。 以太网缓冲器中包含一个供以太网控制器使用的发送和接收存储空间。主控制器可以使用 SPI接口对该存储器空间的容量进行编程。只可以通过读缓冲器和写缓冲器SPI指令来访问以太网缓冲器。 PHY寄存器用于进行PHY模块的配置、控制和状态获取。不可以通过SPI -4接口直接访问这些寄存器,只可通过MAC中的MLL访问这些寄存器。如图2所示,显示了 ENC28J60 的数据存储器构成。 ECON1<1:0>以太网缓冲器控制寄存器 00hBank 0中的缓冲器指针0000h=0019h 1Ah通用 寄存器1Fh=0100h 19h1Ah通用 寄存器1Fh=1000h 19h1FFFh1Ah通用 寄存器1Fh00hPHY寄存器=1119h00h1Ah通用 寄存器1Fh1Fh 图2-4 ENC28J60 的数据存储器构成 2.3.2 寄存器 寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。 2.4 ENC28J60的寄存器设置和应用 2.4.1 ENC28J60的寄存器设置 ENC28J60内部的静态RAM分为三种类型,控制寄存器,以太网缓冲区和物理层寄存器,控制寄存器用来进行芯片的配置和控制等功能,直接SPI读写; - 9 - 济源职业技术学院毕业设计(论文) 以太网缓冲区可以由SPI接口配置为接收和发送以太网数据包的RAM区;物理层寄存器用来配置,控制和监测物理层的状态,此寄存器不能直接由SPI接口读写,只能通过媒体独立接口MII访问。 ENC28J60控制寄存器中最基本和重要的5个寄存器是EIE, EIR, ESTAT, ECON2 和ECON1,其功能分别如下, EIE:以太网中断使能控制寄存器,分为总中断使能和各部分使能控制, EIR:以太网中断标志寄存器,在接收和发送数据包时根据不同的标志位进入不同的执行程序, ESTAT:以太网状态寄存器,反映以太网当前是否数据碰撞、忙信息、错误信息、时钟状态等信息, ECON2:以太网辅助控制寄存器,设置数据指针,芯片节能等, ECON1:以太网主控制寄存器,这个是芯片最常用的寄存器,主要用来设置不同层的寄存器空间,下面将详细论述。 在这5个寄存器中,需要设置的是EIE、ECON2和ECON1,需要判断标志位的是EIR和ESTAT。 在ENC28J60接收和发送数据包之前,需要对相应寄存器进行设置和初始化,一般情况下这部分工作放在系统复位完成后执行,初始化设置工作包括接收和发送缓冲区、接收过滤、晶振启动时间、MAC寄存器、物理层。初始化芯片之前先关闭单片机的中断输入,对RESET引脚给定一个持续的低电平复位信号,然后对相应的寄存器进行设置。设置完成所有需要的寄存器后,判断以太网状态中的时钟启动标志位是否置位,然后开中断,硬件连接的两个中断引脚都对应多种中断条件,EIE和EWOLIE分别使能不同的中断,均指向中断入口处,因此需要在入口处进行判断每次的中断输入什么条件,EIR是中断标志位,包含了7中不同的中断条件,根据不同的标志位进入不同的执行程序。 2.4.2 ENC28J60的应用 由于采用串行SPI接口,ENC28J60可以很方便地和各种微控制器和处理器接口,构成嵌入式以太网模块,使用UDP,TCP进行通信,且采用3.3V供电。通过TCP/IP协议的应用,只需4条连线即可实现与单片机连接,用单片机的P2^0、P2^1、P2^2、P2^3与ENC28J60 的CS、MOSI、MISO、SCK四个引脚相连即可实现。ENC28J60构成的嵌入式以太网模块电路连接简单,功能强大,与目前大多数需要并行数据和地址总线的以太网控制器相比,不需要小封装的微控制器外扩地址和数据总线,有很大优点,根据需要配合不同的微控制器可以将电路板做到最小尺寸,完全符合未来工业以太网控制器的发展趋势。 - 10 - 基于ENC28J60的以太网通信设计与实现 第3章 系统硬件设计 3.1单片机与ENC28J60网络模块的选择及思想 本系统所用单片机STC12C5A60S2系列单片机是STC生产的单时钟/及其周 [6]期(1T)的单片机,是搞速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S,即25万次/秒),强干扰场合。 STC12C5A60S2单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S,即25万次/秒),针对电机控制,强干扰场合,图3-1所示STC12C5A60S2系列单片机管脚图。 图3-1 STC12C5A60S2系列单片机管脚图 (1).增强型8051CPU,IT,单时钟/机器周期,指令代码完全兼容传统8051。 (2).工作电压: STC12C5A60S2系列工作电压:5.5V—3.5V(5V单片机)。 (3).工作频率范围:0~35MHz,相当于普通8051的0~420MHz。 - 11 - 济源职业技术学院毕业设计(论文) (4).用户应用程序空间8K/16K/20K/32K/40K/48K/52K/60K/62K字节„„。 (5).片上集成1280字节RAM。 (6).通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA。 (7).ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片。 (8).有EEPROM功能(STC12C5A60S2/AD/PWM无内部EEPROM)。 (9).看门狗 (10).内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻倒地)。 (11). 外部掉电检测电路: 在P4.6口有一个低压门槛比较器5V单片机为1.33V,误差为?5%,3.3V 单片机为1.31V,误差为?3%。 (12).时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为?5到?10%以内)用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟常温下内部R/C振荡器频率为:5.0V单片机为:MHz , 7MHz 3.3V单片机为:8MHz , 2MHz (13)共4个16位定时器 两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器。 (14). 3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟。 (15). 外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模 块,Power Down模式可由外部中断唤醒,INT0/P3.2,INT/P3.3,T0/P3.4,T/P3.5,RxD/P3.0,CCP0/P1.3 ,CCP/P 1.4。 (16). PWM(2路)/ PCA (可编程计数器阵列,2路) —— 也可用来当2路D/A使用 —— 也可用来再实现2个定时器 —— 也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持)。 (17).A/D转换,10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)。 (18).通用全双工异步串行口(UART),由于STC12系列是高速的8051, - 12 - 基于ENC28J60的以太网通信设计与实现 可再用定时器或PCA软件,可再用定时器或PCA软件可再用定时器或PCA软件实现多串口。 (19).STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P.2 (可通过寄存器设置到P4.2 ),TxD2/P.3 (可通过寄存器设置到P4.3)。 (20).工作温度范围:-40 ~ +85?(工业级)/0 ~ 75?(商业级)。 (21).封装:LQFP-48, LQFP-44, PDIP-40, PLCC-44,,QFN-40I/O口不够时,可用2到3根普通I/O口线外接74HC64/65/595(均可级联)来扩展I/O口,还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。 而ENC28J60网络模块是美国微芯科技公司于2005年推出的一款28引脚的独立以太网控制器,可为嵌入式应用提供低引脚数、低成本且高效易用的远程通讯解决方案。利用ENC28J60以太网控制器,可以实现占位小、成本低、更加精简的嵌入式网络应用系统。 实现两者之间的通讯,只需4条连线即可实现与单片机连接,有利于在小型系统上实现以太网功能如图3-2所示。 图3-2 STC12C5A60S2与ENC28J60连接图 - 13 - 济源职业技术学院毕业设计(论文) 3.2串口通信 3.2.1 通信简介 计算机与外界所进行的信息交换被称为通信,其基本方式可以分为并行通信和串行通信两种。 并行通行是指一次就可以同时传送一个数据字的传输方式(其中包含8位、16位,甚至更多的数据)。其优点是传输速度快;缺点是需要同时连接的线数多,尤其是在通信距离较长时,传输线的成本会急剧增加。 串行通信是指把一个数据字逐位、顺序、分时进行的传输方式。其缺点是传送速度较慢,其优点是需要数量较少的传输线,且占用的引脚资源较少。串行通 [8]信又存在着异步通信和同步通信两种基本方式: (1)异步方式。其特点是通信双方以一个字节作为数据传输单位,且发送方传送字符的间隔时间是不定的,在传送一个字符时总是以起始位开始,以停止位结束。异步通信传输格式见图3-3所示。 图3-3 异步通信字符传输帧格式 一个字符单位除表示字符信息的数据位外,还有若干附加位:起始位(一位,值恒为0),奇偶位(可有可无),停止位(长度1、1.5和2可选,值恒为1)。传送一个字符必须以起始位开始,以停止位结束,这个过程称为一帧。 (2)同步方式。在数据开始传输时,发送方先发送一个或两个特殊字符,当发送方和接收方达到同步后,就可以一个字符接一个字符都加起,使其传输效率比较低,因此异步通信一般用在数据速率较慢的场合。在高速传输时,一般应采取同步协议。因此,在单片机与外围芯片之间的近距离通信中,同步通信方式得到了广泛的应用。 所以,对于近距离的点对点的数据通信,若不要求太高的数据传输率,则通常采用设备简单、控制容易的异步传输为好。 - 14 - 基于ENC28J60的以太网通信设计与实现 3.2.2 单片机串口结构 (1)单片机的串行接口是一个全双工通信接口,即能同时进行发送和接收。其帧格式和波特率可通过软件编程设置,在使用上非常方便灵活。串行口主要由两个数据缓冲器SBUF、一个输入移位寄存器、一个串行控制寄存器SCON和一个波特率发生器T1等组成。 (2)串行通信过程 在接收数据过程中进行通信时,当CPU允许接收时(即SCON的REN为1时),外界数据通过引脚RXD串行输入,数据的最低位首先进入移位器,一帧接收完毕再并行送入缓冲器SBUF中,同时将接收中断标志位RI置位,向CPU发出中断请求。CPU响应中断后,并用软件将RI位清除同时读走输入的数据。接着又开始下一帧的输入过程。重复直至所有数据接收完毕。 在发送数据过程中进行通信时,当CPU要发送数据时,将数据并行写入发送缓存器SBUF中,同时启动数据由TXD引脚串行发送,当一帧数据发送完既发送缓冲器空时,由硬件自动将发送中断标志位TI置位,向CPU发出中断请求。CPU响应中断后,用软件将TI位清除,同时又将下一帧数据写入SBUF中,重复上述过程,直至所有数据发送完毕。 3.2.3 串行口工作方式及帧格式 单片机串行口可以通过软件设置四种工作方式: (1)方式0 这种工作方式比较特殊,与常见的微型计算机的串行口不同,它又叫同步移位寄存器输出方式。在这种方式下,数据从RXD端串行输出或输入,同步信号从TXD端输出,波特率固定不变:为震荡频率的1/12。该方式是以8位数据为一帧,没有起始位和停止位,先发送或接收最低位。 (2)方式1 串行口采用该方式时,特别适合于点对点的异步通信。该方式规定发送或接收一个字符10位为一帧,即一个起始位,8个数据位,一个停止位,波特率可以改变。 (3)方式2 采用这种方式可以接收或发送11 位数据,以11 位为一帧,比方式1 增加了一个数据位,其余相同。第9 个数据即D8 位具有特别的用途,可以通过软件来控制它,再加特殊功能寄存器SCON 中的SM2 位的配合,可使单片机适用于多机通信。方式2 波特率固定,只有两种选择:为振荡频率的1/32 或1/64,由PCON 最高位选择。 - 15 - 济源职业技术学院毕业设计(论文) (4)方式3 方式3 与方式2 完全类似,唯一的区别是方式3 波特率可变,所以适用于多机通信。 3.2.4 单片机与串口的通信 由于串口用的是TTL电平,和RS-232电平不同,因此,单片机和PC通信时需要进行电平转换,常用的IC是MAX232,其中MAX232供电脚为+5V。采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线。第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说足够使用了。RS-232引脚图如图3-4所示。 图3-4 RS-232串口(母口) RS-232的标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,常用的只有9根,它们是:2个数据信号,发送信号TXD、接收信号RXD;1个信号地线SG;6个控制信号,DSR、DTR、RTS、CTS、DCD。 当通信距离较近时,通信双方可以直接连接,这种情况下,只需使用少数几根信号线。最简单的情况,在通信中根本不需要RS-232的控制联络信号,只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。 图3-5是RS-232最简单的连接方法(即三线连接),图中的2号线与3号线交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收,发送信号线接接收信号线、接收信号线接发送信号线、5号线同时接地。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。 - 16 - 基于ENC28J60的以太网通信设计与实现 图3-5 三线连接 3.2.5 单片机串口通信设置 在系统中,单片机一般称为下位机,通常用来完成数据的采集和上传,由PC机、网络设备、数据库服务器组成的后台应用部分则称为上位机,对下位机的上传数据进行分析并处理。系统充分发挥了单片机在实时数据采集和微机对数据处理显示以及单片机串行口工作方式选择、中断标志、可编程位的设置、波特率的倍增均是通过两个特殊功能寄存器SCON和PCON来控制的。 在串口通信模块中,波特率在程序初始化时定义为9600b/s。 波特率的产生用定时器产生,在设置时选择定时器1,并将它设为工作方式2,8位的常数自动重新装载的定时器,这种工作方式可以省去用户软件中重装初值的程序,简化定时初值的计算方法,可以相当精确的确定定时时间。计算出定时器的初值之后,在设定串行口的工作方式,在这里令SCON=0X50,即SCON各位中,SM0=0,SM1=1,REN=1,其他控制字为0,选择为工作方式1,8位一步收发。令TCON中的TR1=1,启动定时器,并禁止其他中断。 3.3 ENC28J60外围电路 ENC28J60的硬件设计需要注意时钟振荡器、复位电路、变压器、接口电路、终端和其他外部器件,输入/输出电平等几个方面事项,下面分别介绍这些需注意的事项。 1)时钟振荡器 ( 硬件设计中发现ENC28J60芯片需要一个接在OSC1和OSC2脚上的25MHz的晶振;这个晶振也可由外部时钟信号来完成如图3-6所示。 - 17 - 济源职业技术学院毕业设计(论文) +3.3V L1 +3.3VC2C1 4.7uF0.1uFOSC35U1 8R1R2VCC2415XCLKNCCLKDSPC3100100474HC1G14GND33pF 30M 图3-6 时钟振荡器电路 (2)复位电路 ENC28J60芯片上的电复位功能,引脚RESET上的低电平可以使该芯片进入复位模式;并且引脚RESET内部有弱上拉电阻,同时DSP的复位信号也会使ENC28J60芯片复位。 (3)接口电路 ENC28J60芯片工作电压为3.3 V,该芯片易于被设计为集成到5 V的系统中。此外该芯片可以通过SPI和微控制器连接;对于没有SPI接口的微控制器,我们也可以设计通过I/O 口模拟SPI的方法实现。 如果主控制器运行在5 V电压下,当SPI和中断输入由ENC28J60芯片上的3.3 V CMOS输出驱动时我们就需要有一个单向电平转换器。只有将ENC28J60芯片和主控芯片AT89S52结合,这两者之间的接口设计是一个关键。 - 18 - 基于ENC28J60的以太网通信设计与实现 第4章 网络协议 4.1 TCP/IP协议简介 传输控制协议/因特网互联协议(Transmission Control Protocol/Internet [1]TCP/IP),又叫网络通讯协议,是Internet最基本的协议、同时也是Protocol, Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。是互联网中的基本通信语言或协议。在私网中,它也被用作通信协议。当你直接网络连接时,你的计算机应提供一个TCP/IP程序的副本,此时接收你所发送的信息的计算机也应有一个TCP/IP程序的副本。 [2]参考开放系统互连模型,TCP/IP协议一般采用一种简化的四层模型,即链路层、网络层、传输层、应用层。高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。如图4-1所示表示了各层协议的关系。 TeIne协协协PingHTTPFTPDNSQQTFTPt 协协协TCPUDP 协协协IPICMPIGMP ARP 协协协DATELINKMACPPP协协 图4-1 各层协议之间的关系 - 19 - 济源职业技术学院毕业设计(论文) 4.2 网络互连 网络互连技术的发展,使得传输信息能够在全世界范围内实现,我们课题中的网络互联关键是根据需要,对通讯协议进行适当的剪裁,嵌入到通讯芯片中。网络互联设备划分为:集线器、交换机和路由器,如图4-2所示。 应用层应用层 传输层传输层 网络层路由器网络层 链路层交换机链路层 物理层中继器物理层图4-2 网络互连示意图 (1) 路由器:连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号的设备。目前路由器已经广泛应用于各行各业,各种不同档次的产品已经成为实现各种骨干网内部连接、骨干网间互联和骨干网与互联网互联互通业务的主力军。 (2) 交换机:交换机工作在第二层。 (3) 集线器:集线器本质就是中继器,工作在物理层。 4.3 uIP协议在单片机上的移植过程 4.3.1 uIP协议栈的实现方法简述 uIP实现了TCP/IP协议集的四个基本协议:ARP地址解析协议,IP网际互联协议,ICMP网络控制报文协议和TCP传输控制协议。为了在8位16位处理器上应用,uIP协议栈在各层协议实现时采用有针对性的方法,保持代码大小和存储器使用量最小。 (1)实现ARP地址解析协议时为了节省存储器,ARP应答包直接覆盖ARP请求包。 (2)实现IP网络协议时对原协议进行了极大的简化,它没有实现分片和重组。 - 20 - 基于ENC28J60的以太网通信设计与实现 (3)实现ICMP网络控制报文协议时,只实现echo(回响)服务。uIP在生成回响报文时并不重新分配存储器空间,而是直接修改echo请求报文来生成回响报文。将ICMP类型字段从“echo”类型改变成“echoreply”类型,重新计算校验和修改校验和字段。 (4)uIP里的TCP没有实现发送和接收数据的滑动窗口。每个TCP连接的状态由uip_conn结构保存,uip_conn结构包括当地和远端的TCP端口编号,远程主机的IP地址,重发时间值,上一段重发的编号,和连接的段的最大尺寸等信息。一个uip_conn结构数组用于保存所有的连接,数组的大小为支持的同时连接的最大数量。为了减少储存器的使用量,在处理重发时uIP并不缓存发送的数据包,而是由应用程序在需要重发时重新生成发送的数据。 4.3.2 uIP架构 uIP相当于一个代码库,通过一系列的函数实现与底层硬件和高层应用程序之间的通讯,对于整个系统来说它内部的协议组是透明的,从而增加了协议的通用性。 uIP协议栈与系统底层和高层应用之间的关系如图4-3所示. 应用程序 UIP_APPCALL() UIP协议 UIP_PERIODIC()UIP_INPUT() 系统底层 网络设备驱动系统定时器 图4-3 uIP在系统中的位置 uIP 协议栈主要提供了三个函数供系统底层调用。即uip_init(), uip_input() 和uip_periodic()。其与应用程序的主要接口是UIP_APPCALL( )。uip_init()是系统初始化时调用的,主要用于初始化协议栈的侦听端口和默认所有连接是关闭的。当网卡驱动收到一个输入包时,将其放入全局缓冲区 uip_buf 中,包的大小 - 21 - 济源职业技术学院毕业设计(论文) 由全局变量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 协议栈提供一系列接口函数供用户程序调用,其中大部分函数是作为C的宏命令实现的,主要是为了速度、代码大小、堆栈和效率的使用。用户需要将应用层入口程序作为接口提供给uIP协议栈,并将这个函数定义为UIP_APPCALL()。这样以来,uIP 在接受到底层传来的数据包后,在需要送到上层应用程序处理的地方,调用UIP_APPCALL( ),在不用修改协议栈的情况下可以适配不同的应用程序。 4.3.2 uIP协议在单片机上的移植 1(为此项目建立一个keil C工程,建立src目录存放源文件。 2(通过阅读uip-1.0\unix\main.c,了解uIP的的主循环代码架构,并将main.c 放到src 目录下。 3(仿照uip-1.0\unix\tapdev.c写网卡驱动程序,与具体硬件相关。这一步比较费点时间,不过好在大部分网卡芯片的驱动程序都有代码借鉴或移植。驱动需要提供三个函数。etherdev_init():网卡初始化函数,初始化网卡的工作模式。u16_t etherdev_read(void):读包函数。将网卡收到的数据放入全局缓存区uip_buf 中,返回包的长度,赋给uip_len。void etherdev_send(void):发包函数。将全局缓存区uip_buf 里的数据(长度放在uip_len 中)发送出去。因此,收包和发包主要是操作uip_buf 和uip_len。 4(因为uIP 协议栈需要使用时钟,为TCP 和ARP 的定时器服务,所以使用单片机的定时器0 用作时钟,每20ms 让计数tick_cnt 加1,这样,25 次计数(0.5S)满了后可以调用TCP 的定时处理程序,10S 后可以调用ARP 老化程序。对uIP1.0 版本,增加了timer.c/timer.h,专门用来管理时钟,都放到src 下。 5(uIP 协议栈的主要内容在uip-1.0\uip\下的uip.c/uip.h 中,放到src 下。如果需要ARP 协议,需要将uip_arp.c 和uip_arp.h 也放到src 下。 6(uipopt.h/uip-conf.h 是配置文件,用来设置本地的IP 地址、网关地址、MAC 地址、全局缓冲区的大小、支持的最大连接数、侦听数、ARP 表大小等。需要放在src 下,并且根据需要配置。在V1.00版本中对配置做了如下修改: - 22 - 基于ENC28J60的以太网通信设计与实现 (1)配置IP 地址,默认先关IP,在初始化中再设定。 #define UIP_FIXEDADDR 0 #define UIP_IPADDR0 192 #define UIP_IPADDR1 168 #define UIP_IPADDR2 1 #define UIP_IPADDR3 9 #define UIP_NETMASK0 255 #define UIP_NETMASK1 255 #define UIP_NETMASK2 255 #define UIP_NETMASK3 0 #define UIP_DRIPADDR0 192 #define UIP_DRIPADDR1 168 #define UIP_DRIPADDR2 1 #define UIP_DRIPADDR3 1 (2)设置MAC 地址 #define UIP_FIXEDETHADDR 1 #define UIP_ETHADDR0 0x00 #define UIP_ETHADDR1 0x4f #define UIP_ETHADDR2 0x49 #define UIP_ETHADDR3 0x12 #define UIP_ETHADDR4 0x12 #define UIP_ETHADDR5 0x13 (3)ping 功能 #define UIP_PINGADDRCONF 1 (4)关闭主动请求连接的功能 #define UIP_ACTIVE_OPEN 0 (5)将uip_tcp_appstate_t 定位u8_t 类型。 (6)由于单片机是大端结构,因此宏定义需要修改 #define UIP_CONF_BYTE_ORDER UIP_BIG_ENDIAN (7)暂时不移植打印信息,先关闭 #define UIP_CONF_LOGGING 0 (8)定义数据结构类型 typedef unsigned char u8_t; typedef unsigned int u16_t; typedef unsigned long u32_t; - 23 - 济源职业技术学院毕业设计(论文) 7(若使用 keil C 的小模式编译,则需要在大部分的RAM 的变量前增加xdata。 8(data为keil C 的关键词,代码中所有出现data 的地方(主要是参数、局部变量、结构体成员)改为pucdata或ucdata。 9(解决编译过程中的错误。由于uIP 协议栈是用C 语言编写,所以编译过程中的问题比较少,并且容易解决。 4.4 uIP的关键功能及使用方法 应用程序必须作为C函数去实现,uIP在任何一个事件发生时调用UIP_APPCALL()意,某些函数可以在互相连接时发生(即新数。表4-1列出了可能的事件和每个事件的对应测试函数,测试函数用于区别不同的事件。函数是作为C宏命令实现的,将会是零或非零值。注据可以在数据确应的同时到达)。 表4-1 uIP应用事件和对应的测试参数 uip_acked() 一个数据包到达,确定先前发送到数据 uip_newdata() 应用程序的新数据包已到达 uip_connected() 一个远程主机连接到监听端口 uip_connected() 一个到达远程主机的连接建立成功 uip_rexmit() 计时时间满重发 uip_poll() 计时时间满周期性轮询 uip_closed() 远程主机关闭连接 uip_aborted() 远程主机中断连接 uip_timedout() 由于太多重传,连接中断 当应用程序调用时,uIP设置全局变量uip_conn去指向当前连接的uip_conn结构,这可以用于区别不同的服务。一个典型的应用是检查uip_conn->lport (当地TCP端口号)去决定哪个服务连接应该提供。例如,如果值uip_conn->lport等于80,应用程序可以决定启动一个HTTP服务;若值是23,则是启动TELNET服务。 4.4.1 接收数据 如果uIP测试函数uip_newdata()的值为1,则远程连接的主机有发送新数据,uip_appdata指针指向实际数据,数据的大小通过uIP函数uip_datalen()获得。在数据不是被缓冲后,应用程序必须立刻启动。 - 24 - 基于ENC28J60的以太网通信设计与实现 4.4.2 发送数据 应用程序通过使用uIP函数uip_send()发送数据。uip_send()函数采用两个参数:一个指针指向发送数据和数据的长度。如果应用程序为了产生要发送的实际数据需要RAM空间,包缓存(通过uip_appdata指针指向)可以用于这方面。在一个时间里应用程序只能在连接中发送一块数据,所以不可以在每个应用程序启用中调用uip_send()超过一次,只有上一次调用的数据将会发出后才可以。注意,调用uip_send()后会改变某些全局变量,在应用函数返回前它不能被调用。 4.4.3 重发数据 若数据在网络中丢失,则应用程序必须重新发数据。无论是数据收到还是没有收到,uIP都保持跟踪,并 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 应用程序什么时候察觉出数据丢失了。若测试函数uip_rexmit()为真,则应用程序要重发上一次发出的数据。重发就好像原来那样发送,也就是通过uip_send()发送。 4.4.4 关闭连接 应用程序通过调用uip_close()关闭当前连接,这会导致连接干净地关闭。为了指出致命的错误,应用程序可以通过中止连接和调用uip_abort()函数完成这项工作。若连接已经被远端关闭,则测试函数uip_closed()为真,应用程序接着可以做一些必要的清理工作。 4.4.5 报告错误 有两个致命的错误可以发生在连接中:连接由远程主机中止和连接多次重发上一数据而被中止。uIP通过调用函数报告这些问题,应用程序使用两个测试函数uip_aborted()和uip_timedout() 去测试这些错误情况。 4.4.6 轮询 当连接空闲时,uIP周期性地轮询应用程序,应用程序使用测试函数uip_poll()去检查它是否被轮询过。 4.4.7 监听端口 uIP维持一个监听TCP端口列表,通过uip_listen()函数,一个新的监听端口被打开。当一个连接请求在一个监听端口到达,uIP产生一个新的连接。若一个新连接产生,则应用程序被调用,测试函数uip_connected()为真。 - 25 - 济源职业技术学院毕业设计(论文) 4.4.8 打开连接 作为uIP的0.6版,在uIP里面通过使用uip_connect()函数打开一个新连接。这个函数打开一个新连接到指定的IP地址和端口,返回一个新连接的指针到uip_conn结构。若是没有空余的连接槽,则函数返回空值。为了方便,函数uip_ipaddr()可以用于将IP地址打包进两个单元16位数组里,通过uIP去代表IP地址。 接下来用两个例子说明。第一个例子展示了怎样打开一个连接去远端TCP端口8080。若没有足够的TCP连接插槽去允许一个新连接打开,则uip_connect()函数返回NULL并通过uip_abort()中止当前连接。第二个例子展示怎样打开一个新连接去指定的IP地址。 例1:打开一个连接去远端TCP端口8080。 void connect_example1_app(void) { if(uip_connect(uip_conn->ripaddr, 8080) == NULL) { uip_abort(); } } 例2:打开一个连接去当前连接的远端的端口8080。 void connect_example2(void) { u16_t ipaddr[2]; uip_ipaddr(ipaddr, 192,168,0,1); uip_connect(ipaddr, 8080); } 4.4.9 数据流控制 uIP通过函数uip_stop()和函数uip_restart()提供对存取TCP数据流的控制途径。假如一个应用程序下载数据到一个慢速设备,例如磁盘驱动器。当磁盘驱动器的作业队列满时,应用程序不会准备从服务器接收更多的数据,直到队列排出空位。函数uip_stop()可以用于维护流控制和停止远程主机发送数据。当应用程序准备好接收更多数据时,可用函数uip_restart()告知远程终端再次发送数据。函数uip_stopped()可以用于检查当前连接是否停止。 - 26 - 基于ENC28J60的以太网通信设计与实现 4.1.10 uIP函数总结 表4-2包含了所有uIP提供的函数 表4-2 uIP 函数总结 系统接口 uip_init() 初始化uIP uip_input() 处理输入包 uip_periodic() 处理周期计时事件 应用程序接口 uip_listen() 开始监听端口 uip_connect() 连接到远程主机 uip_send() 在当前连接发送数据 uip_datalen() 输入数据的大小 uip_close() 关闭当前连接 uip_abort() 中止当前连接 uip_stop() 停止当前连接 uip_stopped() 查找连接是否停止 uip_restart() 重新启动当前连接 测试函数 uip_newdata() 远程主机已经发出数据 uip_acked() 确定发出的数据 uip_connected() 当前连接刚连上 uip_closed() 当前连接刚关闭 uip_aborted() 当前连接刚中止 uip_timeout() 当前连接刚超时 uip_rexmit 数据重发 uip_poll() 应用程序循环运行 其它 uip_mss() 获得当前连接的最大段的大小 uip_ipaddr() 将IP地址结构打包 htons(),ntohs() 在主机和网络之间转换字节次序 - 27 - 济源职业技术学院毕业设计(论文) 第5章 软件设计 5.1 软件Keil介绍 编程使用的软件是Keil,编程使用C语言。 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 (1)系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 (2)Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件((OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件((ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。 5.2系统总流程图 在硬件设计完成的基础上,我们需要通过软件来实现整个监视、控制过程。程序总流程图如图5-1所示。 - 28 - 基于ENC28J60的以太网通信设计与实现 开始 初始化系统时钟 初始化串口 初始化UIP 初始化IP,MAC地 址 初始化定时器 是否有数据到来, 创建TCP监听端 口,开始监听 是IP数据包吗, 是ARP数据包吗, 有返回数据吗, 解析IP数据包 ARP数据包 结束图5-1 程序总流程框图 - 29 - ACK响应 济源职业技术学院毕业设计(论文) 5.4 uIP协议代码分析 从系统的立场看,uIP有3个C函数,即uip_init(),uip_input()和 [3]uip_periodic()。uip_init()函数用于初始化uIP堆栈在系统启动期间的调用。当网络设备驱动器读一个IP包到包缓存时,调用函数uip_input()。周期性运行时调用uip_periodic(),代表的是一秒一次。 5.4.1 应用程序接口 uIP使用基于事件的程序模式,应用程序由C语言函数实现。当收发数据、新连接建立或者数据需要重新传输时,uIP都会调用应用程序。同时;应用程序还要周期查询是否有新的数据收发。因为应用程序只提供了一个回调函数,所以应用程序还要把不同的网络服务映射到不同的端口和连接。 uIP在接受到底层传来的数据包后,如果需要送上层应用程序处理,就调用uIP_APPCALL()。同时:uIP设置结构体ulP conn指针指向当前连接。uIP conn记录一条TCP连接的所有相关信息;它是维持ulP运行的关键结构,定义如下: struct tcp conn { u8 t tcpstateflags; //TCP的状态和标志 u16 t lport,rpert; //当地和远端端口 u16 t ripadar[2]; //远端的地址 u8 t rcv nxt[4];//下一个要接收的序列号 u8 t snd xt[4]; //上一个已发送的序列号 u8 t ack—nxt[4]; //对端下一个应答序列号 u8 t timer; //重传时间 u8 t nrtx; //计算特殊段的重发数量 u8 t mss; //连接中最大分段的大小 u8 t appstate[UIP APPSTATE SIZE]; } [9]uIP提供给应用程序的接口函数如:tcp_listen()、uip_connect()、uip_send()、tcp_datalen()、tcp_close()、tcp_abort()、tcp_stop()、uip_stopped()、uip_restart()等;实现了TCP/IP协议栈的基本功能。 为了将用户的应用程序挂接到uIP中,必须将宏uIP APPCALL()定义成实际的应用程序函数名,这样每当某个uIP事件发生时,内核就会调用该应用程序进行处理。如果要加入应用程序状态的话,必须将宏uIP APPSTATE SIZE定义成应用程序状态结构体的长度。在应用程序函数中:依靠uIP事件检测函数来决定处 - 30 - 基于ENC28J60的以太网通信设计与实现 理的方法;另外可以通过判断当前连接的端口号来区分处理不同的连接。 5.4.2 uIP/设备驱动接口 当设备驱动在包缓存里(uip_buf)放一个输入包,系统应该调用uip_input()函数。函数将会处理这个包并在需要时调用应用程序。当uip_input()返回,一个输出包放在包缓存里,包的大小由全局变量uip_len约束。如果uip_len是0,则没有包要发送。 5.4.3 uIP/周期计时接口 周期计时用于驱动所有uIP内部时钟事件,例如包重发。当周期计时激发,每一个TCP连接应该调用uIP函数uip_periodic()。连接编号传递作为自变量给uip_periodic()函数。类似于uip_input()函数,当uip_periodic()函数返回,输出的IP包要放在包缓存里。在这个特别的例子,函数netdev_send()是网络驱动的部分,将uip_buf数组的目录发出到网上。 for(i = 0; i < UIP_CONNS; ++i) { uip_periodic(i); if(uip_len > 0) { netdev_send(); } } 5.4.4 uIP协议栈提供的主要接口 提供的接口在 uip.h 中,为了减少函数调用造成的额外支出,大部分接口函数以宏命令实现。 1(初始化uIP协议栈:uip_init() 2(处理输入包:uip_input() 3(处理周期计时事件:uip_periodic() 4(开始监听端口:uip_listen() 5(连接到远程主机:uip_connect() 6(接收到连接请求:uip_connected() 7(主动关闭连接:uip_close() 8(连接被关闭:uip_closed() - 31 - 济源职业技术学院毕业设计(论文) 9(发出去的数据被应答:uip_acked() 10(在当前连接发送数据:uip_send() 11(在当前连接上收到新的数据:uip_newdata() 12(告诉对方要停止连接:uip_stop() 13(连接被意外终止:uip_aborted() 5.4.5 主要移植心得 uIP内核中有两个函数直接提供给底层设备驱动程序。一个是uip_input();当设备驱动程序从网络层收到的一个数据包时要调用这个函数,设备驱动程序必须事先将数据包存入到uip_buf中;包长放到uip_len,然后交由uip_input()处理。当函数返回时;如果uip_len不为0;则表明有带外数据(如SYN,ACK等)要发送。当需要ARP支持时;还需要考虑更新ARP表示或发出ARP请求和回应。以下代码即为设备驱动程序从网络层收到的一个数据包后的处理过程: #define BUF ((struct uip eth hdr*)&uip buf[0]) uip len=ethernet devicedriver poll(); //接收以太网数据包(设备驱动程序) if(uip len>0) { //收到数据 if(BUF->type==HTONS(UIP ETHTYPE IP)) { //是IP包吗? uip arp ipin(); //去除以太网头结构,更新ARP表 uip input(); //IP包处理 if(uip len>0) { //有带外回应数据 uip_arp out(); //加以太网头结构, 在主动连接时可能要构造ARP请求 ethernet devicedriver send(); //发送数据到以太网(设备驱动程序) } } else if(BUF->type==HTONS(UIP_ETHTYPE_ARP)){ //是ARP请求包 uip arp arpin(); //如是是ARP回应,更新ARP表; - 32 - 基于ENC28J60的以太网通信设计与实现 如果是请求,构造回应数据包 if(uip len>0) { //是ARP请求,要发送回应 ethernet devicedriver send(); //发ARP回应到以太网上 } } 另一个uIP内核直接提供给底层设备驱动程序的函数是uip periodic(conn)。这个函数用于uIP内核对各连接的定时轮循,因此需要一个硬件支持的定时程序周期性地用它轮循各连接;一般用于检查主机是否有数据要发送;如有:则构造IP包。以下示例即为uIP内核对各连接的定时轮循过程: for(i=0;i0) { uip arp out(); ethernet devicedriver send(); } } 从本质上来说,uip input()和uip periodic()在内部是一个函数;即uip process(u8 t flag);uIP的设计者将uip process(UIP DATA)定义成uip in-put();而将uip process(UIP TIMER)定义成uipperiodic(),因此从代码实现上来说是完全复用的。 5.5 调试软件地址设置程序 本设计调试软件为“TCP232调试助手”其IP地址、默认路由器IP地址及网络掩码都需要进行设置。 void InitNet(void) { uip_ipaddr_t ipaddr; tapdev_init(); //ENC28J60初始化 uip_init(); //UIP协议栈初始化 Uputs("uip ip address : 192.168.1.15\r\n"); - 33 - 济源职业技术学院毕业设计(论文) uip_ipaddr(ipaddr, 192,168,1,15); //设置IP地址 uip_sethostaddr(ipaddr); Uputs("uip route address : 192.168.1.1\r\n"); uip_ipaddr(ipaddr, 192,168,1,1); //设置默认路由器IP地址 uip_setdraddr(ipaddr); Uputs("uip net mask : 255.255.255.0\r\n"); uip_ipaddr(ipaddr, 255,255,255,0); //设置网络掩码 uip_setnetmask(ipaddr), } 5.6 TCP/IP在单片机内的实现 TCP/IP协议总流程 当一个有效的数据帧传过来,首先网卡接收该数据并判断,若是ARP数据帧则调用ARP通讯协议程序进行处理;若是IP则调用IP处理;若不是二者之一便不做处理返回。所以根据以上的原则可以减少协议,使它能够在单片机运行。单片机内是通过网络芯片的驱动程序和TCP/IP协议的相互协调来实现通信,TCP/IP协议工作流程图如图5-2所示。 开始 ARP帧类有网络数据?IP帧类型?型? ICMP类ICMP处理型, ARP处理 UDP类型,UDP处理 TCP类型,TCP处理 图5-2 TCP/IP协议工作流程图 - 34 - 基于ENC28J60的以太网通信设计与实现 下面我们分析一下分层,数据是从底层往上层传输的接收过程,每层有头,接收数据时,链路层仅仅对以太帧头进行判断分析,并决定调用IP进行处理IP层头的前20/28个字节,判断处理完成后会调用UDP或TCP接收函数,并将最终分析的传输层的数据帧头给应用层进行处理。发送数据包时,则先从应用层开始的,首先调用TCP或UDP发送,其次系统加上传输层头后,调用IP协议处理,然后加上IP层头后,才向链路层传输,最后再加上以太帧头发送到ENC28J60芯片。这种分层模式使得各个层之间相对比较独立,便以移植。 网络分层数据结构如图5-3所示。 TCP/UDPTCP/UDP数据负载头 IP头IP数据负载 以太帧头以太数据负载 图5-3 网络分层数据结构 5.7链路层的实现 链路层接到数据后首先进行存贮,然后判断该数据的第十三、十四字节类型,若是0X0806则调ARP协议处理,若是0x0800则调IP通讯协议处理如图5-4所示。 图5-4 以太帧格式 5.8网络层的实现 (1)ARP协议设计 ARP,即地址解析协议,它可以使计算机通过IP地址来获取其物理地址的协议。在TCP/IP协议网络环境下,每个主机被分配了一个32位的IP地址。报文可以在物理网路上传送,是因为可以知道目的主机的物理地址。这样就必须利 - 35 - 济源职业技术学院毕业设计(论文) 用ARP地址解析协议来把IP地址变换成物理地址。 在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。ARP基本功能就是通过目标IP查询到设备MAC;当发送数据时,主机就会在ARP缓存表中寻找目标IP地址是否存在,若找到,便可直接把目标MAC地址封装在帧里面发送;反之,主机便会发送一个请求,然后等待响应。 ARP发送数据时,需要把帧类型、目的IP地址、自身MAC地址和目的MAC地址等放在相应的位置后,才调用链路层发送帧模块;ARP接收数据时,首先判断帧的硬件类型,如不是0X0001则返回,否则判断目的IP是否符合本机的IP,ARP协议处理分ARP接收、ARP发送两部分。实现过程如图5-5所示。 - 36 - 基于ENC28J60的以太网通信设计与实现 发送数据接收数据 硬件类型符合 N Y指向ARP首位置 IP符合 N Y 相应的往ARP头赋请求类型符合数值 N Y 保存目的MAC 调用链路层数据发调用ARP返回送 图 图5-5 ARP接收和发送流程图 (2)IP协议设计 IP协议: TCP/IP包括TCP协议、IP协议、UDP协议、ICMP协议和其他 - 37 - 济源职业技术学院毕业设计(论文) 一些协议的协议组。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。对主机来说,如目的主机与源主机直接相连,那么IP数据报就直接送到目的主机。IP协议对数据报文的处理是独立的,IP协议的另一功能是路由选择,每个数据报文都可以独立的进行路由选择;IP协议是TCP/IP协议中最核心的协议。 IP协议就是对数据报进行封装和拆包,当IP层接收由更低层发来的数据包时,并把该数据包发送到更高层,即TCP或UDP层进行判断IP地址。 (2)ICMP协议设计 ICMP协议是用于传输出错报告控制信息的一种面向连接的协议。对于网络安全具有重要的意义。从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况,也能确保连线的准确性,其功能主要有侦测远端主机是否存在、建立及维护路由资料、重导资料传送路径。我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。 ICMP报文格式: 类型:用于识别区分的标志; 代码:识别标志; 校验和:在整个ICMP报文上进行的校验计算结果; 数据:当前类型、代码和校验和字段之后的数据出现在报文时,那么ICMP其他部分的格式将根据类型和代码的不同而不同。 5.9 传输层实现 在传输层主要用到两个互不相同的传输协议TCP和UDP。 UDP 是用户数据包协议, UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分辨运行在同一台设备上的多个应用程序。主要功能是简单的面向数据报传输层协议,在把应用程序传给IP层时不能保证是否到达。UDP协议适用端口分别运行在同一台设备上的多个应用程序。 UDP格式字段的功能: 源端口号:生成UDP数据进程标志; 目的端口号:标识UDP数据所希望到达的接收系统中的进程标志。 UDP校验和:用来校验UDP报头和数据字段,通过UDP头和数据加选定的IP头字段校验计算而来。 UDP长度:以字节为单位的UDP头字段、数据字段的长度; - 38 - 基于ENC28J60的以太网通信设计与实现 数据:数据长度最大可达65507字节,并且是可变的,包括从应用层协议传送的信息。 当接收到从IP层传来的数据时,系统先判断校验和,校验和不正确直接返回,正确判断端口号是否正确,如果端口号不正确则直接返回,如果端口号不正确则系统将处理应用层的数据,实际上在系统设计时远端客户机用SOCKET编程。 应用层的数据主要功能有网络数据、操作、系统时间、监视时间,当UDP发送数据时,先获取目标地址的端口号和IP地址,根据数据包计算校验和后写入应用层。由于在IP层协议没有采用分片处理,因此数据包长度不能超过1500字节,否则数据包将丢失。UDP协议实现的流程图如图5-6所示。 UDP数据接收UDP发送 置端口号N 校验和正确, 计算校验和 Y N 端口号正确, 置应用层数据 Y 调用IP协议发送分析应用层数据 图5-6 UDP协议实现的流程图 TCP:即传输控制协议,一种面向连接的、可靠的、基于字节流的运输层通信协议。在因特网协议族中,TCP层是位于IP层之上,应用层之下的运输层。 - 39 - 济源职业技术学院毕业设计(论文) 不同主机的应用层之间经常需要可靠的、像管道一样的连接。TCP(传输控制协议)是对运行于其上的应用程序提供了全方位的服务: 面向连接的服务:即在传输数据前要先建立逻辑连接,此连接在整个事务处理周期内有效;然后再传输数据,最后释放连接3个过程。 差错检测: TCP对头和数据进行检验、验证,发现包含错误的分组被丢弃; 分组确认:随着各段数据传送到目标地址,接收系统定期返回确认应答信号,以提示发送端成功接收的分组; 分组重传:为了确保对数据系列传送的完全性与准确性,没有到达目的地或被错误检测过程丢弃的段由发送者进行重传; 分组排序:TCP段是在IP数据报中传送的,所有尚未报文数据通过不同的路由器到达目的地,因此数据的顺序可能发生颠倒,但是TCP在将数据传到应用层之前,将这些数据按其原有的顺序重新排列起来; 流控:TCP/IP协议系统分配了一定数目的存储区来暂时存储到达的TCP,直到所有数据到达,形成完整数据帧。接收系统可指示发送者降低传输速率,直到清空缓冲区以保证在缓冲区填满时不丢失数据 TCP各个字段的功能: 源端口号:标识在传输系统中发起进程,生成TCP数据的端口标志,包括了客户为每个TCP事务处理临时所选择的端口号; 目的端口号:目的系统上的连接的端口,标识了将TCP数据传送到的目标接收系统。当目标是运行在服务器上的标准TCP/IP应用程序时,该字段还包括了端口号; 确认号:用于指定确认系统从发送者接收到的系列号。该字段只有在设置了ACK标志时才是可用的; 序号:该字段用于确保各段在目的地按正确顺序进行重组,标识了此分组数据字段中与整个数据序列相关的第一个字节; 头长度:通过以32位字长方式指出TCP头长度来标识数据字段的开始; 保留:未用; 6位标志:这些标志分别具有如下功能: FIN:提示接收系统,所有数据都已被发送并且连接将被中止; PSH标志:由目的端口号来表示的命令接收系统对已经提交的应用过程所有数据执行push操作; SYN:在初始化TCP连接时同步源系统和目的系统的系列号; URG:引起紧急指针的激活,向接收者指出正在传送的紧急数据,标识了紧急数据的序号; RST标志:命令接收系统复位TCP连接,会丢弃所有先前提交的段; - 40 - 基于ENC28J60的以太网通信设计与实现 ACK标志:规定分组的功能是确定,该标志激活确认号字段; 窗口大小:接收系统可接收的字节数; 紧急指针:用于配合URG标志; TCP校验和:TCP包的错误检测使用16位加和校验. 除了TCP包本身, TCP校验数据块还包括源IP地址,目的IP地址, TCP包长度, TCP协议号组成; 选项和填充:选项字段包括用于整理TCP连接的额外信息。 TCP协议是面向连接的协议,协议通过三个报文段完成连接的建立,这个过程称为三次握手(three-way handshake),建立一条通信链路。经过三次握手建立了连接后应用数据才可以进行下一步传输。同理终止一次亦需要“四个步骤”, 这是由TCP的半关闭(half-close)造成的。具体如下: (1) 服务器向客户机发出关闭-应答段时,服务器可以发送数据; (2) 当客户机为响应服务器的关闭时,向服务器发出关闭-应答数据段; (3) 客户机向服务器发出关闭段(FIN)时,客户机是可以接收数据,但不能发送数据的; (4) 当服务器向客户机发出关闭段(FIN)时,则接入关闭,此时可接收数据。 对常见TCP协议,设计和实现过程都应该完成以上的步骤,鉴于DSP资源有限,我们需对某些步骤进行简化,通过3次“握手”建立连接。 - 41 - 济源职业技术学院毕业设计(论文) 第6章 系统软硬件调试 硬件电路制作完成并调试好后,所有软件也无差错,便可将程序编译好下载到单片机试运行。 6.1 准备调试 首先检查PC机上是否有RS-232串口,串口是否被占用,然后检查串口线是否正常,连接是否正常。如果检测不到RS-232串口,则可以下载CH340驱动,即一种黑色的连接线驱动即USB转RS-232驱动,适合于Winxp系统用户使用,安装CH341驱动失败的可下载本驱动来解决问题如图6-1所示。 图6-1 ch340驱动 STC-ISP是一款单片机下载编程烧录软件,是针对STC 系列单片机而设计的,可以下载STC89系列、12C2052系列和12C5A60S2等系列的STC单片机,使用简便下载被广泛使用。 打开STC-ISP,在MCUType栏目下选中单片机,如STC12C5A60S2。根据数据线连接情况选中COM端口,波特率一般保持默认,如果遇到下载问题,可以适当调一些。先确定硬件连接正确,点击打来“打开文件”并在对话框内找到要下载的.HEX文件。选中两个条件项,这样可以使每次编译的KEIL时HEX代码能自动加载到STC-ISP。点击“Download/下载”。手动按下电源开关便即可把可执行文件.HEX写入单片机内,如图6-2所示程序写入完毕。 - 42 - 基于ENC28J60的以太网通信设计与实现 图6-2 STC-ISP烧录软件步骤图(2) 然后检测单片机电路是否正常焊接,可使用万用表对电路进行测试;且单片机也可以正常烧录。所需硬件经测试均无故障,连接无误后。连接效果如图6-3所示。 图6-3 硬件系统连接图 - 43 - 济源职业技术学院毕业设计(论文) 6.2 进行调试 检查程序编写是否有误,在Keil上运行程序看是否有错误、警告等;检查无误后,并且编写ICMP协议程序正确,可以正常ping通,效果如图6-4所示。 图6-4 ping通效果图 关于这一块,有很多会出现ping不通的现象。在此举例说明:?、ping是ICMP协议,你是否包含进去了呢,还有是否允许ping功能。?、防火墙什么的都关了。?、如果是中断驱动的方式,可能的原因是由于某次中断请求没有被响应,造成了数据阻塞。如果是查询的方式,那有可能是程序出错,篡改了某些寄存器的值,导致数据传输问题,定期重新初始化芯片就能解决了等等。有时也会出现经过一段时间重新上电就能解决这个问题。 检查PC机上串口是否可正常使用、单片机是否能正常运行等,如USB转串口线连接显示正常,同时也可以ping通,则可以进行调试。 首先,用USB转串口线将PC机与单片机模块连接,给单片机上电,同时用一根网线将ENC28J60网络模块与PC机连接。然后,打开TCP232调试助手,将串口号、波特率、协议类型、IP地址等进行一一设置,依次点击“打开”按钮,ping通,如串口接收数据显示框内显示设计题目、设计日期与作者等字样,则表示运行正常。最后,点击“连接”按钮,使设计最终结果实现,同时在TCP232调试助手下方的网络数据接收框下的发送框内输入“rxtest,接收测试”;“txtest,发送测试”命令实现数据的发送与接收功能。 - 44 - 基于ENC28J60的以太网通信设计与实现 6.3 调试结果 前面调试均显示正常,且连接成功如图6-5所示。 图6-5 连接成功效果图 当连接成功后,则可以调试数据是否能够正常发送,数据发送成功如图6-6所示。 图6-6 数据发送成功效果图 - 45 - 济源职业技术学院毕业设计(论文) 数据接收成功图如图6-7所示。 图6-7 数据接收成功效果图 - 46 - 基于ENC28J60的以太网通信设计与实现 总 结 本设计从初步需要学习网络协议、硬件、软件等相关知识,而且成本较低、更加精简的嵌入式网络应用系统对于很多外部元件数量较多,系统开销较大,最大的缺点是稳定性不高的系统来说有很大的优点。 从本设计可以看出,uIP协议栈采用有效的方法和结构化的代码,使其存储器占用量很小并且可以很方便的应用到不同的工程项目中,同时它又是免费的可以自由使用于商业和非商业目的。uIP为低端嵌入式设备的网络接入提供了很好的解决方案,具有很高的应用价值。ENC28J60是极具特色的独立以太网控制器:SPI接口使得小型单片机也能具有网络连接功能;集成MAC和PHY无需其他外设;具有可编程过滤功能,可自动 评价 LEC评价法下载LEC评价法下载评价量规免费下载学院评价表文档下载学院评价表文档下载 、接收或拒收多种信息包,减轻了主控单片机的处理负荷;内部继承可编程的8KB双端口SRAM缓冲器,操作灵活方便。不足之处为仅支持10BASET。 这次设计基本实现了所要设计的内容(单片机与ENC28J60之间的数据传输),但是我也看到了设计过程中的不足和出现的问题。例如,在编程时由于所掌握的知识有限,遇到过不少困难,虽然出了不少错误,但我相信自己在以后越来越多的实践中越来越成熟起来。总的来说这次的毕业设计不仅锻炼了我的实战能力,激发了我的创新思维,提高了我发现问题、解决问题的能力,而且培养了我面对挫折并勇于克服的意志、品质和吃苦耐劳的精神,也使我深深的体会到理论结合实际的重要性,体会到即使以后走到工作岗位,仍然要继续努力汲取知识。 - 47 - 济源职业技术学院毕业设计(论文) 致 谢 一分耕耘,一分收获。通过不懈努力,终见硕果。坚持了很久的毕业设计,如今终于完成了,在此,首先感谢导师王老师的支持和鼓励,有了您的支持,让我在这条路上始终坚持;有了您的指导,让我在少走了许多的弯路,有了您的指导,让我遇到的诸多难题都一一解惑。对此,我表示由衷的感谢。在设计期间,我学会了很多,细心、认真是做一件事情所必须的,还有我的自学能力都得到了很大的提高,这都要感谢我的指导老师。 同时,也要谢谢我们信息工程系的老师们。大学三年,你们教会了我很多,让我受益良多,不光是书本上的知识,还有做人的道理等等。作为你们的学生我感到特别的荣幸,你们的知识渊博、宽容慈爱,带给了我许多的感动。希望以后,我们学院会更加辉煌,我们信息工程系会更加美好。 我的父母,虽然不甚明白论文的写作主题,但是他们一直默默地给予我关切和鼓励,是我疲惫时的温馨港湾。“谁言寸草心,报得三春晖”,他们的安康是我执着前行的不懈动力。还有我那群朝气蓬勃、积极向上的同窗好友,他们不仅给我的论文写作提出很多宝贵的意见,在生活学习方面,更是给予我莫大的关怀和帮助。他们为我的生活添彩,更让我懂得“善”的美,“真”的可贵。 - 48 - 基于ENC28J60的以太网通信设计与实现 参考文献 [1]王树森.计算机网络与internet应用[M] .北京:中国水利水电出版社,2006 [2]周观民,王东霞. 就算计网络基础与实训[M]. 北京:电子工业出版社,2011.9 [3]马忠梅,籍顺心等.单片机的C语言应用程序设计[M]. 北京:航空航天大学出版社,2001 [4]李广弟,朱月秀,王秀山.单片机基础[M].北京:北京航空航天大学出版社,2001.7 [5]韩志军,沈晋源,望振波.单片机应用系统设计[M].北京:机械工业出版社,2005 [6]靳达.单片机应用系统开发实例导航[M].北京:人民邮电出版社, 2003.10 [7]何立民.单片机高级教程[M].北京:北京航空航天大学出版社,2001 [8]李江全,刘荣等.单片机数据通信及测控应用技术详解[M].北京:电子工业出版社,2011.12 [9]李光飞.单片机C程序设计实例[J].北京航空航天大学出版社,2002 - 49 -
本文档为【基于ENC28J60的以太网设计与实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_594886
暂无简介~
格式:doc
大小:390KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-10-13
浏览量:15