关键字:嵌入式 网络接口 控制器
1前言
以太网作为目前应用最为广泛的局域网技术,在工业自动化和过程控制领域得到了越来越的应用。传统的控制系统在信息层大都采用以太网,而在控制层和设备层一般采用不同的现场总线或其他专用网络。目前,随着工业以太网技术的发展,以太网已经渗透到了控制层和设备层。基于以太网的控制网络最典型的应用形式是Ethernet+ICP/IP,它的底层是Ethernet,网络层和传输层采用国际公认的标准TCP/IP.然而大量的工业现场设备,如数控机床、机械手等设备,这些设备最常用的通讯方式为RS-232/485/422串行接口,不具备网络接口,以至无法直接接到以太网。
随着半导体产业和集成电路技术的发展,以微控制器/微处理为硬件核心的嵌入式系统得到迅速发展,并在无线通讯、网络设备、工业控制等领域得到广泛应用。本文选用基于ARM9和armlinux开发嵌入式网络接口控制器,实现串行口数据与以太网数据的相互转换,通过这种方式,可以使传统串口设备成为具有网络接口的设备,直接接入工业以太网。
2嵌入式网络接口控制器工作原理
嵌入式网络接口器选用DM9000E芯片作以太网控制器,来完成与上级以太网的数据交换,采用32位微处理器s3c2410和嵌入式Linux进行协议实现和数据处理,然后将处理过的数据下传给底层设备终端;把从底层终端设备接收的数据,进行数据处理和协议实现,通过DM900E传输到Internet上。工作原理如1所示
3 嵌入式网络接口控制器硬件平台
嵌入式网络接口控制器硬件平台的整体连接框图如图 2 所示。本文选用基于ARM9内核ARM9TDMI的32位微处理器s3c2410作为主控芯片。S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用0.18um制造工艺的32位微控制器。该处理器拥有:独立的16KB指令Cache和16KB数据Cache,MMU,支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。S3C2410处理器最高可运行在203MHz。本系统的FLASH存储器选INTEL公司的28F128,SDRAM芯片选用两片HY57V561620构成32位的存储器系统. 以太网控制器芯片选择DM9000,它是完全综合的、成本较低的单一快速,具有通用的处理器接口,10/100M自适应,以及4K双字节静态存取存储器。它被设计为低功耗、高处理性能,支持3.3V到5V的容差。DM9000提供一个MII接口来连接HPNA设备或者其他支持MII接口的收发器,并支持8位、16位、32位的接口来适应不同的处理器对内部存储器的访问,它支持IEEE802.3u规格,还支持IEEE 802.3x全双工流控制。在DM9000和RJ45接口之间需要用汉仁电子有限公司的网络隔离变压器HR601627来连接,网络隔离变压器起信号传输、阻抗匹配、波形修复、杂波抑制以及高电压隔离等作用,以保护系统的安全。
图1嵌入式网络接口控制器工作原理
图 2嵌入式网络接口控制器硬件框
4 嵌入式操作系统的选择
本系统的设计,网卡驱动和TCP/IP协议的实现是重点,选择嵌入式Linux,它已经嵌入了TCP/IP协议栈,使TCP/IP协议得以实现。嵌入式Linux系统支持多种类型的网卡如各种lOM/lOOM,1000M 的Ethemet网卡等。对于 DM9000E以太网控制器,嵌入式Linux已经提供了很好的支持,移植过程中只需要修改源代码和配置相应模块即可实现对网络的支持。
5以太网数据与串口数据转换实现
本文开发的接口控制器主要完成两个功能,即将串口接收到的数据通过网卡发送至以太网,将网卡接收到的数据通过串口发送至另一串口端。工作模式上可以选择为服务器或客户端模式,数据传输协议可以选择为TCP(Transmission Control Protocol,传输控制协议)方式或UDP(User Datagram Protocol,用户数据报协议)方式。其中TCP和UDP是以太网数据的两种传输协议,TCP是基于连接的协议,在正式收发数据前,必须和对方建立可靠的连接,而UDP是面向非连接的数据直接传输协议,不需要对方的回答确认。
5.1应用程序的开发环境和网络编程
由于嵌人式系统程序的开发和执行是在PC和ARM 两个不同的平台上进行的,因此需要进行交叉编译和连接。用串口和以太网将宿主机和目标板连接起来,程序开发在RedHat9.0 Linux操作系统下编辑,调试通过后,加入自己开发的程序重新编译armlinux内核,并将编译好的二进制文件固化到开发板的ROM中,使其开机后自动运行。
TCP/IP处理模块采用SOCKET套接字编程实现。SOCKET最早是在UNIX系统上为TCP/IP网络通信而开发的一个接口程序,后来被成功移植到DOS、Windows等操作系统上,成为Internet上网络开发最为通用的API函数。用于网络开发的SOCKET主要有Stream Sockets(流格式)和Datagram Sockets(数据报格式)两种类型,流格式Socket与TCP协议对应,数据报格式Socket与UDP协议对应。
5.2 软件设计
本系统采用工作模式TCP Server服务器,等待客户端请求连接,实现数据传输功能。本程序的流程图如图3所示。首先,打开串口,在Linux下打开串口是通过标准的文件打开函数
图3 功能实现流程图
图4 以太网数据通过串口发送
图5 串口数据通过网卡发送
操作,程序代码如下: int fd; fd=open(“/dev/ttyS0”,O_RDWR); if(fd==-1) {perror(“提示错误!”);} 然后设置串口的波特率、校验位和停止位。要用网卡接收发送数据,就要首先创建套接字,程序代码如下: int sock_fd; sock_fd=socket(AF_INET,SOCK_STREAM,O) if(sock_fd==-1) {perror(“socket”); exit(1);} 然后设置属性,然后等待客户端的连接,一旦建立连接,就可以实现数据的接收和传送。
数据处理在整个程序中是十分关键的一环,该环节中实现的是在网络数据和串口数据之间的相互交换,根据实际需要也可以将网络数据转换成并行数据或者其他类型接口的数据;这里网络和串口数据交互处理分成两部分,一部份是网络数据转变成串口数据,另一部份是串口数据发送到网络上,其流程图如图4、5所示。为了充分利用系统资源,在数据处理程序中调用select()函数。Select函数原型为:int select(int numfds,fd_set *readfds,fd_set *writeset,fd_set *exceptset,const struct timeval *timeout); 返回:准备好的文件描述符个数(可以是0),-1表示出错。
6结束语
本文作者创新点:本文采用性价比高的32位微处理器s3c2410作为主控芯片,移植了源代码开放的Linux,它易于实现了TCP/IP处理模块,这样大大缩短了产品开发周期,并有利于提高了串口数据和以太网数据的转换速率,提高数据传输的实时性,使传统串口设备方便接入以太网,为以太网在控制层和设备层的应用奠定了基础。