基于51单片机嵌入式WEB的控制系统
摘要目前,以太网已经广泛地应用于各种计算机网络,通过以太网及TCP/IP协议栈可以使不同的网络控制设备实现互联,交换数据。为了解决嵌入式设备网络通信的问题,方便嵌入式系统与计算机网络的通信,需要设计一种嵌入式网络适配器。网络适配器是将计算机、工作站、服务器等设备连接到网络上的通信接口装置。结合目前以太网技术在嵌入式领域中的应用。
本文提出了基于8位单片机AT89S52的嵌入式以太网适配器。该适配器采用Microchip公司生产的ENC624J600以太网控制器作为以太网硬件接口,设计了基于TCP/IP的通信协议来实现可靠的以太网通信。通过web服务器,在客户端登陆后进行板子上LED的控制。该系统采用普通的性能较差的51单片机,为了实现相对大量数据的网页,通过设置624使其低2k的通用缓冲区当做单片机的RAM。同时为了确保正确传输,对于网页传输通过设置MSS采用TCP分包传输(避开IP分包)使得每包仅传输300个字节。
经试验测试结果表明该嵌入式以太网适配器在稳定性、实时性、速率方面都有良好的表现,特别适用于现有的网络传输系统,在数据采集、数据传输等领域均有广泛的应用前景。
1. 绪论
1.1 研究课题的意义
当前工业控制系统中流行的控制方式:底层设备采用RS232总线结构,而上层的管理层一般采用以太网结构。该控制方式使信号可以在企业的Intranet上及时发布和共享,还可以在Internet/Intranet的任何位置对现场智能设备进行在线控制、功能组态以及远程诊断等,实现了控制网络真正意义上的开放性和互操作性。而RS485总线是一种基于平衡发送和差分接收的串行总线,具有很强的抗共模干扰能力,在适当的波特率下传输距离很远。同时由于其硬件设计简单、控制方便、易于进行网络扩展,被广泛的应用在很多工业现场。
本文所研究的嵌入式以太网适配器,就是要解决嵌入式设备网络通信的问题,方便嵌入式系统与计算机网络的通信,实现远程监控、访问及数据的传输。
2. 主要芯片选择及简介
2.1 单片机AT89S52
本设计中AT89S52作为核心处理器。AT89S52是Atmel公司生产的低功耗、高性能CMOS8位单片机,片内含有8k字节的EPROM和256字节的RAM。具有ISP(在系统编程)功能。它具有灵活性高、使用方便、价格低廉等优点。因此,该芯片在嵌入式控制系统中得到了广泛应用。单片机AT89S52经过以太网传到PC机实现远程控制。利用AT89S52的ISP(在系统编程)功能,很方便地把编好的程序写到单片机中,并且调试、修改和升级很容易。由于AT89S52单片机本身提供了一组全双工串行传输口,由TXD引脚来传送串行数据,而由RXD引脚来接收数据,可是其工作逻辑电平皆为TTL电平(0V,5V)。AT89S52最小系统如图1所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD5FF.tmp.jpg
图1 AT89S52最小系统
2.2 网络控制芯片ENC624J600
ENC624J600网络控制器是一款带有行业标准串行接口和并行接口的,专为嵌入式应用系统设计的独立以太网控制芯片。ENC624J600通过SPI或并行接口与单片机通信,数据传输速率为14Mbit/s(对于SPI)至160Mbit/s(对于16位的并行接口),ENC624J600主要功能特性有,自适应的选择传输速率,支持10Mbit/s或100Mbit/s;充分支持半双工或全双工交换式以太网;可编程填充和CRC生成;提供24KBA片内RAM缓冲区,用于执行发送和接手操作,主单片机还可以用它来进行常规的存储操作;支持总线8位或16位CPU访问,可编程自动拒绝错误数据包;可编程为发生冲突时自动重发。
ENC624J600器件符合IEEE 802.3中适用于10 Base-T 和100 Base-TX 以太网的全部规范,包括许多可选条款,例如自动协商。ENC624J600器件采用了一系列数据包过滤机制以对传入数据包进行限制。它还提供了一个16位宽的内部DMA以实现快速数据吞吐和硬件IP校验和计算支持。对于需要SSL、TLS 以及其他与加密相关的协议的安全和身份验证功能的应用,提供了一个安全引擎模块。 该引擎可执行RSA、Diffie- Hellman、AES、MD5 和SHA-1 算法计算,以缩短代码大小、加快连接的建立和吞吐,并减少固件开发的工作量。通过SPI或并行接口与单片机通信,数据传输速率为14 Mbit/s(对于SPI)至160 Mbit/s (对于16 位解复用并行接口)。提供了专用于LED 连接、活动指示以及发送/接收/DMA 中断的引脚。提供了一个通用24 KB片内RAM缓冲区,用于执行发送和接收操作。主单片机还可以用它来进行常规存储操作。通信协议(例如TCP)可使用此存储器保存可能需要重新发送的数据。在最终产品易于生产性方面,ENC624J600 系列的每个器件都预编程了唯一的非易失性MAC地址。在大多数情况下,这使最终器件省去了串行编程步骤,图2给出了器件的一般框图。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD610.tmp.jpg
图2 ENC624J600的框图
2.3 外部数据存储器FM1808
FM1808是基于铁电存储器原理制造的并行接口256Kbit铁电存储器,FM1808的主要特性如下:采用先进的铁电技术制造;存储容量为256Kbit;读写寿命为100亿次;掉电数据可保存10年;写数据无延时;存取时间为70ns;低功耗,工作电流为25mA,待机电流仅为20uA;采用单5V工作电压;工作温度范围为-40℃~+85℃;具有特别优良的防潮湿、防电击及抗震性能;与SRAM或并行EEPROM管脚兼容。
3. 硬件电路设计
3.1 AT89S52与以太网控制器连接电路的设计
本系统里,P0口被作为低8位地址/数据复用,当作数据线使用时用来连接NC624J600的8位数据接口。当作为地址线使用时,为了给ENC624J600提供15位地址的低8位,要采用复用技术,对地址和数据进行分离。因此P0口连接到74ls373的D0~D7,把低8位地址暂存,随后有地址锁存器的O0~O7给ENC624J600提供15位地址的低8位,而高7位由P2口通过74ls245提供,如图3所示。
要使与单片机的接口具有高度的灵活性,ENC624J600器件提供了两种选择:基于串行外设接口(SPI)标准的串行接口和灵活的8/16位并行从端口接口。在任何给定时间只能使用一个接口。本课题中,AT89S52单片机和ENC624J600的连接选择PSP接口,如图3所示。要选择PSP接口,则在上电时通过INT/ SPISEL引脚上的SPISEL功能由硬件选择I/O接口。要完成此操作,需在向器件供电且器件退出上电复位状态后将施加到该引脚的电平约锁存1至10μs。如果SPISEL被锁存在逻辑高电平状态,将使能串行接口。如果SPISEL被锁存在逻辑低电平状态,则使能PSP接口。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD611.tmp.jpg
图3 AT89S52与以太网控制器连接电路的设计
3.2 AT89S52和与外部扩展存储器FM1808的电路设计
AT89S52与FM1808的连接与AT89S52与NC624J600的连接类似,P0口被作为低8位地址/数据复用,当作数据线使用时用来连接FM1808的8位数据。当作为地址线使用时,采用复用技术,对地址和数据进行分离,给FM1808提供15位地址的低8位,而高7位由P2口通过74ls245提供,如图4所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD622.tmp.jpg
图4 AT89S52和与外部扩展存储器FM1808的电路设计
3.3 电源电路设计
电源模块是一块电路板最为基本的组成部分,只有稳定可靠的电源为板上芯片供电才能够保证各功能模块的正常工作,因此在电源模块的设计时首先应该初步计算电路板所有元件的功耗,然后在保证功耗的前提下选择相应的芯片进行直流电源模块设计,尽量做到体积小,重量轻;性价比合理;能长期稳定、可靠地工作。
本适配器所需要的电源有3.3V。系统需要3.3V电源供电的芯片以太网控制器等。考虑到系统可能工作于高速通信模式,消耗电流会非常大,所以选用1片UC385芯片,每片UC385输出电流可达800mA,可以完全满足系统的需求。具体电路如图5所示 。file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD623.tmp.jpg
图5 电源模块设计
4. 软件部分设计
4.1 主函数
上电先查询ARP,若未获取MAC,则发送ARP请求。若有新的数据,若TCP应答没有完成,则应答TCP,完成TCP三次握手。然后根据请求类型响应HTTP。
4.2 TCP应答部分
4.2.1 三次握手阶段
所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD633.tmp.jpg
图6 三次握手(Three-way Handshake)
第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD644.tmp.jpg
图7 第一次握手
第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的ISN加1以.即X+1。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD645.tmp.jpg
图8 第二次握手
第三次握手,客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD655.tmp.jpg
图9 第三次握手
其实在握手和结束时确认号应该是对方序列号加1,传输数据时则是对方序列号加上对方携带应用层数据的长度。
在传输TCP分包的过程中也是需要发送一分包,确认一分包的,而TCP确认包只有54字节,就是只有头部信息。因此在传输TCP分包序列号一直不变,确认号按发送数据的长度递增即可。
4.3 HTTP
4.3.1请求
连接成功建立后,开始向web服务器发送请求,这个请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET 路径/文件名 HTTP/1.0文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。现在可以发送GET命令:GET /mytest/index.html HTTP/1.0,
4.3.2 应答
web服务器收到这个请求,进行处理。从它的文档空间中搜索子目录mytest的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。为了告知浏览器,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。常用的HTTP头信息有:
① HTTP 1.0 200 OK 这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。代码"200 OK"表示请求完成。
② MIME_Version:1.0 它指示MIME类型的版本。
③ content_type:类型 这个头信息非常重要,它指示HTTP体信息的MIME类型。如:content_type:text/html指示传送的数据是HTML文档。
④ content_length:长度值 它指示HTTP体信息的长度(字节)。
4.3.3 关闭连接
当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。
4.4 提交表单GET/POST
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
POST把提交的数据则放置在是HTTP包的包体中。在FORM(表单)中,Method默认为"GET"。
本文中登录时提交表单数据采用的是POST方式,而提交控制信息表单时用的是GET。以下是用抓包的方式明显看出他们的不同之处。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD656.tmp.jpg
图10 POST方式
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD667.tmp.jpg
图11 GET方式
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD668.tmp.jpg
图12 GET方式是提交的数据直接放在URL中了
4.5 总体软件设计
AT89S52单片机首先对ENC624J600进行初始化,首先应查询ESTAT寄存器的CLKRDY位,确保在配置MAC和PHY寄存器前有足够的延时;PHY寄存器用来设置通信模式;编程ERXST和ERXND指针对接收缓冲器进行初始化,当编程ERXST指针时,相同的值会自动更新ERXWRPT寄存器,接收硬件将从ERXWRPT中的地址开始写入已收到的数据,为跟踪接收的数据,ERXRDPT寄存器也需要用相同的值编程;为了能最大限度地降低主控制器的处理工作量,ENC624J600配备了不同的过滤器,可自动拒绝不需要的数据包,所有的过滤器都由ERXFCON寄存器进行配置,可以使用ANDOR位对几个过滤器的测试结果作逻辑/与0或逻辑/或0运算;由于未被用作接收缓冲器的存储空间都作为发送缓冲器,所以不需要对发送缓冲器进行特定的初始化,通常将存储空间分配为大的接收缓冲器空间和较小的接收存储空间。
在初始化完成后,即进入主循环程序,单片机将反复检测ENC624J600是否接收到以太网帧(或者数据缓冲区B中有数据需要发送),当有数据接收(或者发送)时则根据标志位进行相应的子函数处理,将数据存入数据缓冲区(或者发送至以太网上)。主程序流程如图13所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD67A.tmp.png
图13 主程序流程图
5. 测试结果与分析
5.1 小网页小图片测试
Wireshark(前称Ethereal)是当前较为流行的一种计算机网络调试和数据包嗅探软件。Ethereal基本类似于tcpdump,但Wireshark还具有设计完美的GUI和众多分类信息及过滤选项。用户通过Wireshark,同时将网卡插入混合模式,可以查看到网络中发送的所有通信流量。Wireshark应用于故障修复、分析、软件和协议开发以及教育领域。
本文应用Wireshark软件来从网络上抓取数据包,并以此来分析以太网的通信。抓取的网络数据包数据如图14所示。
图14
图14主要包括3部分,分别是:
1. 协议数据包窗口:该窗口中概要的显示数据包捕获的时间,源和目的地址,以及使用协议的概况。
2. 协议树窗口:该窗口以树形结构显示捕获到的数据包。
3. 16进制数据包窗口:该窗口以16进制的形式显示协议树窗口中对应的数据包。
捕获的数据包默认按时间顺序全部显示在协议数据包窗口中,窗口的选项从左到右分别是包序号、时间(单位为秒)、数据包源的IP地址、数据包目标的IP地址、协议类型、包信息概述。如图所示,第一个数据包的数据包源的IP地址是192.168.1.5,数据包目标地址是192.168.1.13,第一个数据包是本地计算机向终端提出请求,谁的IP地址是192.168.1.13,告诉本地计算机。而在协议树窗口中,对捕获到的数据包进行了分析,这个数据包的长度是42字节,所用的协议为ARP等等。Ethernet II是指以太网协议,本地计算机通过地址解析协议向终端提出申请,和IP地址为192.168.1.13的网络建立连接。
终端在得到申请后,要做出回应,通过ARP协议,才能在两个IP地址件建立连接。如图15所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD68B.tmp.jpg
图15 通过ARP协议在两个IP之间建立连接
在图中,可以看出终端告诉本地计算机IP地址192.168.1.13的物理地址为00:01:02:03:04:05,这个数据包的长度为60字节。在此,本地计算机和IP地址为192.168.1.13的网络已经连接上了,可以开始TCP通信。从第四个数据包开始,在两个IP地址之间先要进行TCP三次握手。如图16所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD69C.tmp.jpg
图16 TCP三次握手
第四个包的是HTTP GET请求,是本地计算机发给192.168.1.13的数据,目标端口为80。如图17所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD6AC.tmp.jpg
图17 HTTP GET请求
接下来就是板子分包应答HTTP请求。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD6AD.tmp.jpg
图18 应答HTTP请求
在TCP三次握手后,请求图片。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD6BE.tmp.jpg
图19 请求图片
5.2 大图片测试
下图是一副46k大小的bmp格式图片,发送过程中,分成185个TCP分包进行传输。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD6CF.tmp.jpg
图20 显示46k的bmp格式图片
下图是抓包得到的详细过程。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD6DF.tmp.jpg
图21 显示46k图片的详细过程
继续传输185个TCP分包。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD6E0.tmp.jpg
图22继续传输185个TCP分包
5.3 总体测试
正确输入密码则进入控制页面,否则显示psd error!
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD6E1.tmp.jpg
图23进入控制页面
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD6F2.tmp.jpg
图24 账号密码错误
输入1提交则灯亮,提交2则灯灭。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD6F3.tmp.jpg
图25 提交1则灯亮
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD703.tmp.jpg
图26 提交2灯灭
6. 附录
6.1 原理图
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD704.tmp.jpg
6.2 PCB图
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD715.tmp.jpg
6.3 主程序
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD726.tmp.jpg
void main()
{
enc624_init(MAC);
while(1)
{
ARPCHECK();
bytesnum=dev_poll();
if(bytesnum>0)
{
ARPACK(recbuf);
if(arpmark==0)
{
if(tcpmark)
{
TCPACK(recbuf);
}
if(tcpmark==0)
{
HTTPACK(recbuf);
}
}
}
}
}
6.4 参考文献
[1]梁艳.MCU以太网适配器通讯设计与应用.北京:自动化仪表,2010.5
[2]Silicon Laboratories.C805 1 FI 20 mixed signal ISP Flash MCU family[DB/
OL].[2006-0l-21].
[3]黄岚,候瑞锋,郝静,等.基于TCP/IP硬件协议栈的智能仪器网络接口设计[J].计
算机工程与设计,2.006,27(23):4408—4409.
[4]李云岗.基于CP2201的嵌入式以太网接口的实现及应用[D].北京:北京交通大学,
2008.
[5]Silicon Laboratories.CP2200.single.chip Ethernet controller[DB/OL].[2006
-1l-02].
[6]张瑞瑞,马晨普.用CP2200实现MCU的简易型以太网接121[J].单片机与嵌入式系
统应用,2006(12):38-40.
本帖最后由 nwx8899 于 2015-8-31 19:18 编辑