0.引 言
随着GPRS/CDMA网络技术的逐步成熟,无线数据相关应用已经成为当前的热点应用,特别是对于电力、电信、石油、水利、地质、和交通行业中场所不固定的应用场合,由于有线网络的架设受到种种条件的限制,采用基于GPRS/CDMA的无线网络技术,具有无可比拟的优势。传统的无线数据终端一般是采用“单片机+GPRS/CDMA调制解调器”的系统结构,这种结构硬件成本略低,但功能比较有限,在协议的开发和支持上都有一定难度。而近年来,以ARM为代表的嵌入式32位微处理器技术得到了飞速发展,无论是在功耗、便携性还是在硬件成本上,许多高性能的ARM芯片已经与单片机相差无几,因此在许多工业应用设计中,使用ARM芯片取代传统的8/16位单片机已经是一个非常经济、理想的选择。
无线数据终端系统以“高性能嵌入式微处理器+GPRS/CDMA模块” 的系统架构取代了传统的无线数据终端设计方案,此方案虽然硬件成本稍高,需要高性能嵌入式微处理器来支持嵌入式操作系统,但可以实现丰富协议接口,便于移植和向高端系统应用升级,同时更加便于数据采集与远程监控的实现。这样不仅可以利用ARM芯片丰富的片内、片外资源简化系统硬件结构,更为方便的是,可以通过运行嵌入式操作系统来实现丰富协议接口,减小实际应用的开发难度且便于向高端系统应用升级。
1.硬件结构
无线数据终端系统是嵌入到一个工业控制系统中使用,同时综合考虑其他相关需求和功能扩展,因此选用AT91RM9200处理器作为系统的核心处理单元,外接GPRS/CDMA模块,作为整个系统的硬件平台。AT91RM9200是ATMEL公司生产的一款高性能的基于ARM架构到32位嵌入式的ARM9芯片,AT91RM9200是一款工业级到ARM9芯片,工作温度范围可达-40℃~85℃,存储温度-60℃~150℃。CPU内嵌16KB数据Cache和16KB指令Cache,带有MMU存储器关联单元,在180MHz时工作频率下运行速度可达200MIPS.芯片内嵌10M/100M自适应以太网口、USB2.0协议到USB HOST和Device接口,具有多媒体卡接口MCI,3个同步串口SSC,4个USART接口以及SPI接口等,最多可达122个可编程I/O口。AT91RM9200性能稳定,功能强大,时工业控制、网络通讯等应用的首选,也适合于汽车、医药等领域。图1是无线数据终端系统的总体硬件结构图。
在图1所示的硬件结构中,R232/RS485接口和RJ45网络接口用来实现客户的接口需求,与各种用户前端设备进行关联,GPRS/CDMA模块提供系统的无线数据通信链路,通过UART接口和AT91RM9200通信,实现数据的无线传输。图中的其他功能模块实现系统所需的基本功能,整体硬件结构相对比较简单。
目前成熟的无线网络技术中,主要有GPRS和CDMA两种技术,系统设计时可以针对不同的应用地区电信运营商的网络覆盖情况选择GPRS或CDMA模块实现无线网络的连接。其中,GPRS模块我们采用的是目前比较流行而且最易购买的西门子公司的MC39i模块(GPRS),CDMA模块我们采用WAVECOM的Q2358C模块(CDMA)。MC39i采用GPRS分时复用的Class 8 的标准,支持EGSM900和GSM1800双频,它具有TC35的全部功能并且很容易集成。该GPRS模块接收速率可以达到86.20kbps,发送速率可以达到21.5kbps。接口为40pin,包括电源、3VSIM卡、RS232接口、语音、控制等管脚/50Ω天线接口。CDMA模块选用Wavecom公司的Q2358C模块,它是一个单频800MHZ,CDMA20001xRTT模块, RS-232和声音通过15pin接口连接,电源通过4pin接都相连,含有SMA天线接口和活动UIM插槽,可以通过通过AT指令进行控制。本应用设计时主要使用了三个接口,即电源接口、SIM接口和串行接口。GPRS/CDMA模块包含完整的SIM接口信号和一个完整的全功能串口,因此模块的SIM接口和串口的连接非常简单,直接将模块的接口与ARM系统的对应接口连接即可。
2.软件平台
2.1 构建可移植嵌入式Linux系统
无线数据终端的软件开发一般分为两部分,即系统软件的移植与配置和高级应用程序的开发,其中前者是后者实现的基础。嵌入式Linux是目前广泛应用的一种嵌入式操作系统,嵌入式Linux针对嵌入式系统的特点,对Linux的内核进行了修改和重新编译,包含了Linux常用的API,保留了Linux系统原有的强大的网络功能,高稳定性,丰富的文件系统支持功能。
采用的微处理器AT91RM9200 内部带有MMU,所以采用ARM Linux,使用Linux2.4.18内核,他的特点主要是给内部带有存储管理单元MMU 的处理器提供良好的支持。硬件系统主要芯片包括:CPU 采用ATMELARM9处理器AT91RM9200;内存芯片为现代HY57V641620; FALSH 采用SST39VF160;BOOT FLASH 为ATMEL AT29C010;由于AT91RM9200内嵌一个以太网控制器,支持媒体独立接口MII和带缓冲DMA接口,可在半双工或全双工模式下提供情报10/100Mb/s的以太网接入。兼容IEEE802.3MAC控制层协议。同时,为满足系统的无线数据终端的应用需求,还对系统源代码进行了改进,利用AT91RM9200芯片支持DMA机制,对串口驱动代码进行改写,将数据收发方式由原先的字节中断改为DMA方式,这样便可以通过避免大量的CPU计算开销来提高核心处理单元与GPRS模块间通信的吞吐量。
2.2 ARM-Linux内核功能设计
GPRS/CDMA的网络连接是无线数据终端的基础功能,它是通过PPP(点对点协定)协议来完成的。PPP是在串行连接的数据链路实现IP以及其他网络协议的一种机制。同时为节省成本,无线数据终端常常是作为一个无线路由网关来使用,即内部局域网计算机能够通过它透明访问Internet。嵌入式Linux的网络体系结构继承了Linux网络系统具有稳定、高效和功能齐全的优点,同时按照应用的需要进行了适当的移植和配置就能满足要求,在完成相关内核修改后,需要重新编译内核。
(1)增加ARM-Linux内核的NAT支持。内核中与NAT相关的配置都在“Networking options”菜单下,一般需要选中的选项包括:“Network packet filtering (replaces ipchains)”选项和“IP: Netfilter Configuration”子菜单中与NAT规则相关的配置,其他选项则根据应用需求来选择。另外,还需要选中内核的“/proc file system support”和“Sysctl support”选项,这样系统运行时才可以通过Sysctl接口来动态更改内核参数。
(2)增加ARM-Linux内核的PPP支持。内核中与PPP协议相关的配置选项都包含在“Network device support”选项下,需要选中的选项包括PPP协议支持、PPP异步/同步串口通信以及PPP压缩等。
(3)移植IPTables和PPP应用程序。IPTables是Linux系统上用来创建NAT规则的一个开源的工具程序,从网络上可以下载其源码。PPPD是PPP的一个应用程序,为PPP提供一种在点对点串行线路上传输数据流的方法,而Chat则是PPPD一个配套程序,它用来拨号并等待提示,然后根据提示输入用户名和密码等登陆信息。可以从网络上下载IPTables和PPP源码,然后根据源代码版本使用相应版本的ARM-Linux交叉编译器进行编译,便可以得到相应二进制程序。
(4)编写联网拨号脚本文件,调试GPRS/CDMA联网, 完成系统利用成熟GPRS/CDMA技术的网络连接。
3.系统实现
通过对完善增加ARM-Linux内核的功能后,ARM-Linux内核已经具有了PPP和NAT功能,同时通过编写联网拨号脚本,完成与GPRS/CDMA网络连接之后,需要根据设备的具体应用需求开发相关的应用程序。
3.1 NAT配置
嵌入式Linux是一种开发源代码、软实时、多任务的嵌入式操作系统,通常它是在标准的Linux的基础上针对嵌入式系统进行裁减和优化后形成的,而且裁减和优化后的Linux体积更小,性能更加稳定,因此在许多实际应用中都使用网络地址转化技术(NAT)这种最为简单、常用的方式。
NAT技术本质上是通过修改IP包的源地址或目的地址来实现。如果一个节点执行了NAT,它会修改通过它转发的IP包的源地址或者目的地址,并且节点会记住它是怎样修改了这个包,因此当相应的应答包从另一个方向到达时,它就知道如何反向修改应答包。其中,修改IP包的源地址常被称为IP伪装技术,当内部网络节点作为客户端,需要发起对Internet的访问时,就可以采用这种方式。而修改IP包的目的地址中最常用的就是端口转发技术,它可以让内部网络上运行的服务器,如Web、FTP等,能够被外部网络的机器访问。
根据应用需求,制定相应的NAT规则。对于各种NAT应用,需要使用IPTables程序来设定相应的控制规则。例如,实现应用中的IP伪装功能,在控制台中运行下列命令:
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
第一行指令是用来开启操作系统的IP转发功能,如为方便开机自动执行也可以将命令编辑为文件firewall,然后编辑/etc/rc.d/rc.local文件,,在末尾加上/etc/rc.d/firewall以确保开机时能自动执行该脚本。第二条命令则是设置所有通过ppp0设备(拨号后生成的网络设备)发出的数据报的源地址都使用ppp0的IP地址。这样,与GPRS/CDMA数据相连的局域网内的计算机只需要将网络连接的默认网关和DNS服务器设置成GPRS数据终端的IP地址就可以访问Internet。
而对于NAT的端口转发功能,如假定GPRS数据终端的内部IP为192.168.0.1,通过拨号上网得到的IP为202.96.128.168,运行Web服务器的计算机节点的IP为192.168.0.100,监听常用的80端口。那么需要在GPRS/CDMA数据终端上进行端口注册,假定将该服务注册为GPRS数据终端上的TCP 8080端口。则运行命令:
$ iptables -A PREROUTING -t nat -p tcp -i ppp0 --dport 8080 -j DNAT --to 192.168.0.100:80
完成端口注册并开启IP转发功能后,外部用户通过访问http://202.96.128.168:8080就可以访问到内部的Web服务器了,但在一般的实际应用中都是将上述Shell命令和NAT规则编写为一个可执行的脚本文件,由系统启动后自动调用执行。
3.2 转换网关程序
在传统的工业控制领域,有成千上万的感应器,PLC,控制器,监测器,读卡器等RS-232/485/422串口设备,都是通过RS-232串口通信或者RS-485/42总线通信与PC进行数据通信,随着社会需求的发展,从而要求更大的系统,更加稳定的系统,更大的数据流量的系统。使得现有的RS-232串口通信,RS-485/422总线通信不能满足社会的需求。需要一种简单、经济的方式,能将这些传统设备接入主流网络,同时不需要对这些设备的结构进行改变。当将GPRS/CDMA无线数据终端应用于这种需求时,就必须在它上面实现串行通信转网络(TCP/IP)通信功能。
转换网关程序实际上就是在GPRS/CDMA无线数据终端完成串行通信转网络(TCP/IP)通信功能模块,能够将串行通信数据以TCP/IP包的形式发出,而将收到的TCP/IP数据包用串行通信的方式传输,完成相互间的透明转换。在许多应用中,需要通过无线终端与Internet网络上服务器进行网络通信。转换的实现方法如下:
⑴ 通过配置文件或者命令行参数的方式得到所需的各种配置参数,包括串口设置参数,如波特率、数据位、停止位、奇偶校验、流控等,以及网络通信的设置参数,如网络通信协议、服务端口等等;
⑵ 根据串口设置参数进行相应的系统串口设置;
⑶ 根据网络通信设置,建立Socket,如果网络通信采用的是TCP协议,还需要预先建立网络连接。
⑷ 使用Linux的select机制,不断检查Socket和串口是否可以发送和接收。程序必须同时维持两个缓存区,一个是Socket数据缓存,另一个是串口数据缓存。如果Socket有数据获得就放入串口数据缓存中,串口有数据获得就放入Socket数据缓存。如果Socket或串口可以发送,就将相应的缓存数据发送出去。
编写完成上述程序运行后,无线数据终端便充当了串行通信设备与以太网之间的通信转换器的角色,实现了两者间的信息交互。
4.结束语
本文在ARM9的嵌入式Linux平台上,详细介绍了基于AT91RM9200的无线数据终端的实现,利用嵌入式Linux系统下的网络通信设计, 通过对Linux的内核进行了修改和重新编译后,增加了相应的PPP和NAT功能,凭借ARM9的良好性能,以及Linux在嵌入式系统和网络通信上的优势,编写实现串行通信转网络的转换网关程序。本系统的设计在其他嵌入式设备上的无线应用方面有一定的应用价值和指导意义。本文作者创新点充分利用了ARM丰富的硬件资源简化了系统结构,并通过对嵌入式Linux系统核心编译增加对NAT和PPP的支持,同时移植成熟的IPTables和PPP应用程序,实现应用系统的结构简化,实现简单,功能实用。