一种嵌入式Internet接口系统
扫描二维码
随时随地手机看文章
0 引言
计算机和网络技术的迅速发展,引发了控制领域深刻的技术革命。控制系统结构向网络化、开放性方向发展将是控制系统技术发展的主要潮流。过去大量的浩如烟海的8/16位单片机的嵌入式设备,如仪器仪表、数据采集和显示、过程控制、工业自动化、家庭自动化等的实时应用,已经到了享受网络方便的时候了。它们将成为Internet网的发展沃土,顺应“网络服务”向“网络应用”扩展的大潮。
目前大多数嵌入式系统还处于单独应用的阶段,以单片机为核心,与一些控制设备配合实现一定的功能。如果嵌入式系统能够连接到Internet这个信息流通渠道,则可以方便、低廉地将信息送到世界上任何一个地方,这将形成集管理与控制与一体的分布式网络系统。要做到这一点并不难,在电子技术、传感技术已经高度发达的今天,现场数据的取得,已经不是难事,温度、压力、湿度、速度、加速度、电流、电压这些数据只需要一个小小的嵌入式系统就可解决。另外,以太网(Ethernet)协议已经广泛地应用于各种计算机网络,基于以太网的嵌入式系统也正在不断向前发展。这里介绍一种嵌入式Internet系统的接口技术,它的特点是使用8位单片机与网络通信控制器RTL8019AS等组成的系统,采用以太网协议传输数据,因而成本低,容易实现。
1 硬件系统设计
1.1 系统总体结构
本系统由串行接口、单片机、网络控制器等部分组成,如图1所示。
500)this.style.width=500;" border="0" />
1.2 系统电路原理
本系统电路主要由CPU、 串口的电平转换电路、具有IIC总线的EEPROM、8位锁存、32K的RAM、以太网通信控制器和隔离滤波器组成。其电路原理见图2所示。
电路用到的主要芯片有89C52、24c512(IIC总线的eeprom)、373 八位锁存器、以太网通信控制器RTL8019AS和隔离滤波器T1组成。
本系统CPU采用ATMEL公司的89C52单片机,串口的电平转换电路采用MAX232,网络通信控制器采用RTL8019AS。
RTL8019AS 是台湾Realtek公司制造的一种高集成度的全双工10Mbps以太网控制芯片,实现基于Ethernet协议的MAC层的全部功能,内置16Kb的 SRAM、双DMA通道和FIFO完成数据包的接收和发送功能。在本接口设计中,使用跳线模式(JP置为高),硬配置RTL8019AS为8位模式。使用 RTL8019AS的低5位地址线A0~A4以及低8位数据线D0~D7。
500)this.style.width=500;" border="0" />
[!--empirenews.page--]
单片机89C52P0口的P0~P4脚通过373八位锁存器作为地址线连接RTL8019AS的低5位地址线,RD、WR分别连接读写时序控制脚IORB、 IOWB;P0口作为数据线连接RTL8019AS的低8位数据线。图2中AT24C512为64KBE2PROM,主要用来保存嵌入式透明SX-52网关的配置信息,如网关IP地址、MAC地址等。这样,可以灵活方便地修改网关参数,适应不同环境,同时也考虑到以后的扩展。
RTL8019AS除与89C52连接外,还将其网络收发器的4根引脚TPOUT+、TPOUT-、TPIN+、TPIN-通过外接的隔离滤波器T1`与以太网相连。采用隔离滤波器T1是为了提高网络通信的抗干扰能力。
以太网通信控制器RTL8019AS可以接收三种地址的数据: 一个是广播地址,一个是多播地址(我们用不上);一个是它自已的地址。
2 软件设计
Internet网上的协议格式有多种,对单片机来说不可能支持太多的协议格式。根据以太网的封装格式的物理传输帧整个系统的软件设计可以分为三部分:CAN总线设备接口通信程序、透明网关协议转换程序和以太网层应用程序设计。
2.1 CAN控制器协议模块
CAN控制器协议转换模块程序主要由寄存器读程序CANRead()、写程序CANWrite()、初始化程序CANInit()、发送程序txdsub()、接收程序rxdsub()程序组成。因为89C52芯片只有I/O端口,因此要编写单独的寄存器读、写子程序。
选用CAN2.0A协议构建CAN总线控制网络,初始化主要完成控制寄存器CR、验收代码寄存器ACR、验收屏蔽寄存器AMR、总线定时寄存器BTR0,1 和输出控制寄存器OCR的设置。初始化完成后,由总调度模块监控控制器。当CAN总线上有数据到达时,它调用接收子程序rxdsub(),把这一帧数据包存入数据缓冲区B中,然后释放接收缓冲器。同样,当有按CAN2.0A协议格式组合成的一帧数据报文在数据缓冲区A中要发送到CAN总线上去时,总调度模块将调CAN发送子程序txdsub()发送。
2.2 以太网控制器协议转换模块
以太网控制器协议转换模块主要负责从UDP数据包中解析出完整CAN协议报文,存入数据缓冲区A。同时,可能将数据缓冲区B中的完整CAN协议报文封装成UDP数据报,然后将其发送到以太网上。
在通信传输层采用UDP协议是考虑到CAN协议数据报为短帧形式(每个数据帧最多为8字节)。如果采用TCP传输协议,要传输8字节CAN协议数据,要先通过3次握手建立连接,再传输数据,之后还要通过握手释放连接。这样传输效率对有限的网络资源来说无疑是一种浪费。而UDP是无连接的传输,可以提高网络传输效率,同时,也减轻网关的处理任务。当然,UDP传输协议是不可靠的,对于控制网络来说,是不允许的。为了提高通信的可靠性,采用了回传校验机制。通过实验测试表明这种方式是行之有效的。
以太网控制器协议转换模块主要由以太网卡驱动、ARP、UDP协议的若干个API函数组成,主要有 NICInit()、NICDMAInit()、NICInitTXFrame()、NICSendTXFrame()、NICReadAgain()、 ARPCheckifis()、ARPSendresponse()、ARPSendStPacket()、ICMPProcPkin()、 UDPAppInit()、IPGenCheckSum()、UDPAppProcPktin()、UDPStartPktout()和 UDPEndPktout()等。所使用的变量有:remoteIP[3:0]、myIP[3:0] 、UDPRxSrcPortMSB、DPRxSxcPortLSB、UDPRxDataLenMSB、UDPRxDataLenLSB、 UDPTxSrcPortMSB、UDPTXSrcPortLSB、UDPTxDestPortMSB、UDPTxDestPortLSB、 UDPTxDataLenMSB、UDPTxDataLenLSB等。
系统首次执行或复位时,以太网控制器协议转换模块将首先调用NICInit ()和UDPAPPInit()等进行NIC、ARP、IP、UDP和应用程序的初始化。初始化完成后,即进入主循环。在主循环中,89C52将反复检测 RTL8019AS是否接收以太网帧。当有数据被接收时,89C52调用NICDMAInit()和NICReadAgain()读入以太网帧首部再调用 ARPCheckIFIs()判断接收帧是否为ARP数据。若是ARP,则转入ARPSendResponse()和ARPSendstPacket() 子程序进行ARP处理并发送响应ARP数据报;若不是ARP,则判断是否为IP数据报。若非IP数据报则清除该以太网帧;当所接收帧包含IP数据报时,则需进一步判断是ICMP数据报还是UPD数据报文。若是ICMP数据报则执行ICMPProcPktIn()子程序处理ICMP数据报并重发IP数据报;若数据为UDP数据报文,则调用UDPProcPktIn()子程序。该程序将读入UDP数据报文首部的数据并进行相应处理,还原出完整的CAN协议数据报文存入数据缓冲区B中,再通知总调度程序,由总调度程序调用CAN总线控制子程序将CAN协议数据报文发往CAN总线。
反过来,当总调度程序通知以太网控制器协议转换模块将数据缓冲区B中准备好的CAN协议数据发送到以太网上时,它将调用NICInitTxFrame()、 udpstartPktOut)、IPGenCheckSum()、IPStartPktout()、NICSendTxFrame()、 UDPEndPktOut()等子函数进行发送处理,从而实现CAN总线到以太网的数据传输。[!--empirenews.page--]
2.3 以太网层应用程序设计
以太网上的通信协议一般采用TCP/IP协议。本文采用流行的SOCKET套接字编程,传输层协议选择UDP(用户数据报协议),通过VisuaIC++编写用户层程序。
WinSock 提供了对UDP的支持,通过UDP协议可以向指定IP地址的透明网关发送CAN协议数据,同时也可以通过它接收CAN协议数据。发送和接收方处于相同的地位没有主次之分。利用CAsynSocket类操纵无连接的数据发送较简单。首先生成一个本地套接口(需要指明SOCK_DGRAM标记);然后利用 int CAsyncSocket SendTO const VOID IPBuf int nBufLen UINT nHostPort LPCTSTR IpszHostADDress= NULL int nFlags=0发送数据,int CasyncSocket ReceiveFrom void IpBuf int nBufLen Cstring&rSocketADDress?UINT&rSocketPort int nFlags=0接收数据。利用UDP协议可以使管理主机和89C52网关实现双向的数据通信。同时,这种传输方式也易于使数据89C52网关透明化。
3.接入Internet部分的程序流程图
前面已经介绍了软件设计的原理,这里介绍接入Internet部分的程序流程图。
500)this.style.width=500;" border="0" />
4.小结
系统中可以采用多种单片机实现,只要是8位的单片机即可,内部RAM容量大一点越好。该系统目前正在家庭电器的控制系统中使用,系统工作稳定,接收信息正确,表明系统应用可行。