多通信接口接入互联网的嵌入式网关设计(一)

来源:互联网 发布:如何在淘宝上做代理 编辑:程序博客网 时间:2024/05/22 02:25

嵌入式Internet技术的出现,使得嵌入式系统与Internet之间可以实现资源共享、信息通信和状态测控等功能。目前,该技术的主要问题之一就是Internet上面的各种通信协议对于计算机存储器、运算速度等的要求比较高,而测控领域中大量存在的8位和16位MCU系统是无法处理这些的。要解决这个问题,一个可行的方法就是利用在嵌入式领域比较常用的总线,如RS485、RS232、CAN总线等,将这些处理能力较低的嵌入式设备连接起来,接入到网关所提供的通信接口上,由网关来实现协议栈和协议转换,从而就将8位/16位的嵌入式设备接入到互联网。

1. 嵌入式网关的典型设计方案

网关又被称为网间协议变换器,用于连接采用不同通信协议的网络,实现网络之间的数据传输。当一个报文要求从一个网段发送到另一个网段时,网关需要完成对该报文的接收、翻译与转发工作[1]。就目前已应用到嵌入式系统中的网关来说,主要有以下两种:

1.1 利用PC机来实现的网关

利用PC机的丰富资源和较强的处理能力,在其上构建WEB服务器,实现和Internet客户端的通信,而8位/16位MCU设备连接到PC总线的扩展接口或特定的板卡上,通过通信程序实现与PC机通信,进而利用PC机这一网关接入互联网。这种方式实现相对容易,灵活性较好,但成本较高,设备的可靠性和环境适应性都比较差。

1.2 利用32位嵌入式系统实现的网关

它以32位嵌入式系统为硬件基础,体积小、成本低,设备的可靠性和环境适应性较好。按实现TCP/IP协议栈方法的不同,可将这种嵌入式网关分为以下两个设计方案。

(1)基于软件来实现TCP/IP协议栈[2]

这一方案通常有两种实现方法,第一种是嵌入式操作系统带有TCP/IP协议栈。网关运行在嵌入式操作系统之上,可以利用嵌入式操作系统的强大功能,按用户需求实现很多复杂的功能。第二种方法则单独采用TCP/IP协议栈软件模块,不使用嵌入式操作系统,所构建的系统只占用很小的存储空间,但是如果要实现复杂的功能,则编程的复杂性较大。

(2)直接利用TCP/IP协议栈芯片[2]

在这种方案中,将集成有TCP/IP协议栈的芯片直接使用在嵌入式
网关中,使得设计简单,但增加了一个芯片,也就增加了制造成本,开发时需要熟悉TCP/IP协议栈芯片的接口。

2. 嵌入式网关的硬件结构

网关的硬件结构如图1所示,其中处理器使用基于ARM7TDMI的SAMSUNG S3C44B0X,它是16/32位RISC处理器,工作在66MHz,内置有丰富的片内外设,常用于手持设备和网络设备当中。系统内存使用4M×16bit 的HY57V65160b SDRAM,存储器使用1M×16bit的SST39VF160 Flash。网关的以太网控制器采用RTL8019AS,它支持IEEE802.3,支持8/16位数据总线,内置16KB SRAM,支持全双工方式,收发可同时达到10Mbps。网关提供多路本地通信接口,其中RS232接口利用S3C44B0X的UART0口实现,使用MAX3221E实现电平隔离和转换。RS485接口使用S3C44B0X的UART1口实现,外接MAX485完成TTL电平与RS485电平的转换和数据收发。CAN总线接口采用总线连接方式,使用PHILIPS公司的CAN控制器SJA1000T,它兼容基本CAN模式(BasicCAN)和增强CAN模式(PeliCAN),符合CAN2.0B协议,具有完成CAN通信协议所要求的全部特性,其外接TJA1040T作为CAN总线接口的收发器。此外,系统还预留了可用于扩展的其他通信接口。

图1 嵌入式网关硬件结构

图2嵌入式网关的软件构架

3. 嵌入式网关的软件设计

3.1 软件构架

本文所设计的嵌入式网关运行在嵌入式操作系统μCLinux之上,对外以WEB服务器与Intertent客户端交互;对内则按总线标准的不同,通过多个通信接口与多个不同类型的集散式子网相连,如图2所示。网关将内网中的各通信子网以及外网的Internet都看成是等同的网络,在转发数据时屏蔽网络之间的差异,将来自不同网络的数据都转换为统一格式的转发数据包,并采用基于优先级的调度机制来完成转发。这样便将内网和外网的通信整合在一起,实现各种子网通信协议与TCP/IP协议的转换,以及各种子网通信协议相互之间的转换。

当WEB服务器接收到来自Internet客户端的请求时,如果是请求静态网页,则将网页传给客户端(对应于图2中的①,下同);如果是要与本地子网的终端设备通信,服务器便将通信数据发往Internet接口模块(②),由其完成对数据的解析,并封装成转发数据包,发往接收子模块(③);相反,当Internet接口模块收到来自发送子模块的数据包时(④),则解析该数据包后生成动态网页,发往WEB服务器(②),服务器再将其发到客户端(①)。
当本地子网的某个终端设备要与别的设备通信,或者要将响应数据包发往Internet客户端时,按照一定的调度机制,将数据从终端设备发往内网通信模块(⑤),由该模块将数据转换为网关内部的转发数据包后,发往接收子模块(⑥)。与此相对,如果内网通信模块收到发送子模块发来的数据包(⑦),则根据该数据包的目的地址,选择相应的子网,将数据包转换为符合该子网的通信协议下的数据,再发往目的设备(⑤)。

接收子模块在接收到来自Internet(③)或本地子网(⑥)的数据包后,将这些格式统一的数据包按照优先级高低插入数据队列中(⑧)。当基于优先级的队列中有数据包的时候,发送子模块便从中取出数据包(⑨),发往目的子网(④⑦)。

3.2 嵌入式操作系统μCLinux的移植以及Boa服务器的配置
μClinux是一个完全符合GNU/GPL(通用公共许可证)的项目,其代码完全开放,专门针对没有MMU的MPU,通过对标准Linux内核的改动,针对嵌入式系统进行小型化处理,形成了一个高度优化的、代码紧凑的嵌入式Linux。将μClinux应用到网关中,可以利用其完备的网络功能,减小开发的难度,缩短开发时间。使用μClinux,第一步要做的就是根据网关的硬件平台移植μClinux,首先要在PC上安装Linux操作系统,下载uClinux源代码压缩包并解压,下载并安装交叉编译工具,建立交叉编译环境;其次根据不同的硬件系统修改源代码,编写或修改一些特殊硬件的驱动程序;然后配置内核,生成可在RAM中运行的内核文件;最后烧写到硬件系统的Flash存储器中,加电运行。

μClinux中常用的WEB服务器有:Boa、thttpd、httpd,网关可选择支持认证、支持CGI、非常适合于嵌入式系统的Boa WEB 服务器[3]。Boa是一个单任务的HTTP服务器,它不为每个访问的连接单独开启一个进程,也不会为多个连接而开启多个自身的拷贝,对所有活动的HTTP连接都在内部进行处理,而只为每个CGI连接启动新的进程,因此Boa在同等硬件条件下速度更快。使用Boa WEB服务器,需要对其运行环境、参数等进行设置,如设置侦听端口为80,设置服务器的文件根目录DocumentRoot,设置CGI文件的存放目录等。

3.3 Internet接口模块的设计

Internet接口模块实质上是一个CGI[3] (公共网关接口协议Common Gateway Interface)程序,CGI是对HTTP协议的补充,是一个用于定义WEB服务器与外部程序之间通信方式的标准,定义了建立互操作中双方必须遵守的规则集。CGI技术较为成熟,相关文献也较多,故本文不做详细论述,而是重点介绍一下Internet模块的实现算法,其流程图如图3所示。

图3 Internet接口模块流程图