0 引言
计算机和网络技术的迅速发展,引发了控制领域深刻的技术革命。控制系统结构向网络化、开放性方向发展将是控制系统技术发展的主要潮流。过去大量的浩如烟海的8/16位单片机的嵌入式设备,如仪器仪表、数据采集和显示、过程控制、工业自动化、家庭自动化等的实时应用,已经到了享受网络方便的时候了。它们将成为Internet网的发展沃土,顺应"网络服务"向"网络应用"扩展的大潮。
目前大多数嵌入式系统还处于单独应用的阶段,以单片机为核心,与一些控制设备配合实现一定的功能。如果嵌入式系统能够连接到Internet这个信息流通渠道,则可以方便、低廉地将信息送到世界上任何一个地方,这将形成集管理与控制与一体的分布式网络系统。嵌入式系统以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应了各种应用系统中对功能、可靠性、成本、体积、功耗等的严格要求,因此它赢得了巨大的市场,在应用数量上远远超过了各种通用计算机。嵌入式接入Internet是近几年随着计算机网络技术的普及和发展而发展起来的一项新兴概念和技术,它通过为现有嵌入式系统增加因特网接入能力来扩展其功能,一般指设备通过嵌入式模块而非PC系统直接接入Internet,以Internet为介质实现信息交互的过程,通常又称为非PC接入。嵌入式系统利用网络接口控制芯片实现与网络的通信功能,成本低,控制方便可靠,满足系统对通信的要求。考虑到本身的特点,在大量工业领域中应用嵌入式设备功能比较单一,在上述网络接口控制芯片接口程序的基础上只需要开发简化的嵌入式协议栈,就可满足许多情况下的应用需求。目前,许多公司和组织致力于将以太网与现场总线实现无缝连接,使以太网越来越向底层延伸。以太网在现场设备中的应用研究和基于以太网的智能芯片的开发等也日益成为研究的热点。这里介绍一种嵌入式Internet系统的接口技术,它的特点是使用8位单片机与网络通信控制器RTL8019AS等组成的系统,采用以太网协议传输数据,因而成本低,容易实现。
1 硬件系统设计
1.1 系统总体结构
本系统由串行接口、单片机、网络控制器等部分组成,如图1所示。
1.2 系统电路原理
本系统电路主要由CPU、 串口的电平转换电路、具有IIC总线的EEPROM、8位锁存、32K的RAM、以太网通信控制器和隔离滤波器组成。IIC是作为英特尔IC的互补,这种总线类型是由菲利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。这种方式简化了信号传输总线。其电路原理见图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.
单片机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传输协议是不可靠的,对于控制网络来说,是不允许的。为了提高通信的可靠性,采用了回传校验机制。通过实验测试表明这种方式是行之有效的。
以太网是Xerox公司发明的基带LAN标准。它采用带冲突检测的载波监听多路访问协议(CSMA/CD),速率为10Mbps,传输介质为同轴电缆。以太网是在20世纪70年代为解决网络中零散的和偶然的堵塞而开发的,而IEEE802.3标准是在最初的以太网技术基础上于1980年开发成功的。现在,以太网一词泛指所有采用CSMA/CD协议的局域网。以太网2.0版由数字设备公司、Intel公司和Xerox公司联合开发,它与IEEE802.3兼容。
以太网控制器也称以太网适配器,就是我们通常称的"网卡".安装方法即是插在机器主板的PCI扩展槽里,一般为白色,然后安装所购买网卡中内附的驱动光盘即可。不装网卡的话你是无法连接网络的。不过现在一般主板都有集成网卡。以太网控制器协议转换模块主要由以太网卡驱动、ARP、UDP协议的若干个API函数组成,主要有 NICInit()、NICDMAInit()、NICInitTXFrame()、NICSendTXFrame()、NICReadAgain()、 ARPCheckifis()、ARPSendresponse()、ARPSendStPacket()、ICMPProcPkin()、 UDPAppInit()、IPGenCheckSum()、UDPAppProcPktin()、UDPStartPktout()和 UDPEndPktout()等。
系统首次执行或复位时,以太网控制器协议转换模块将首先调用NICInit ()和UDPAPPInit()等进行NIC、ARP、IP、UDP和应用程序的初始化。初始化完成后,即进入主循环。在主循环中,89C52将反复检测 RTL8019AS是否接收以太网帧。当有数据被接收时,89C52调用NICDMAInit()和NICReadAgain()读入以太网帧首部再调用 ARPCheckIFIs()判断接收帧是否为ARP数据。若是ARP,则转入ARPSendResponse()和ARPSendstPacket() 子程序进行ARP处理并发送响应ARP数据报;若不是ARP,则判断是否为IP数据报。该程序将读入UDP数据报文首部的数据并进行相应处理,还原出完整的CAN协议数据报文存入数据缓冲区B中,再通知总调度程序,由总调度程序调用CAN总线控制子程序将CAN协议数据报文发往CAN总线。
反过来,当总调度程序通知以太网控制器协议转换模块将数据缓冲区B中准备好的CAN协议数据发送到以太网上时,它将调用NICInitTxFrame()、 udpstartPktOut)、IPGenCheckSum()、IPStartPktout()、NICSendTxFrame()、 UDPEndPktOut()等子函数进行发送处理,从而实现CAN总线到以太网的数据传输。
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&rSocketADDressUINT&rSocketPort int nFlags=0接收数据。利用UDP协议可以使管理主机和89C52网关实现双向的数据通信。
3.接入Internet部分的程序流程图
前面已经介绍了软件设计的原理,这里介绍接入Internet部分的程序流程图
4.小结
系统中可以采用多种单片机实现,只要是8位的单片机即可,内部RAM容量大一点越好。该系统目前正在家庭电器的控制系统中使用,系统工作稳定,接收信息正确,表明系统应用可行。