用GPRS modem实现嵌入式Internet接入系统_无线通信论文
关键词:uc/os-ii uip gprs tcp/ip 嵌入式internet
引言
随着gprs技术在无线通信领域的发展,gprsmodem作为gprs在internet的pc机终端已得到了广泛应用。相应的,在单片机系统中运用gprsmodem实现internet接入也已开始为人们所重视。gprs可以发挥永远在线、快速登录、按流量计费等优势。如果无线传输的仅仅只是低速数据,用成本较高的pc机来控制则成本过高。本文采用在嵌入式实时操作系统uc/os-ii中移植一种小型tcp/ip协议栈uip的方法,提供了一套运用arm cpu及西门子公司的gprsmodem(mc35)来实现internet接入的系统设计方案。
1 gprs接入internet模型设计
如图1所示,gprs网络主要由在gsm基站中新增加的gprs业务节点组成,并通过gprs网关节点实现与internet的互联。在本系统设计中,要与internet交互的数据先通过gprsmodem与当地gsm基站中的gprs业务节点进行无线通信,并进入gprs网络,然后通过gprs网关与internet进行数据交互。在本系统中,设计的关键有二:一是arm cpu与gprsmodem的连接,即数据端的串行数据经arm cpu的串口发送到gprsmodem上;二是在arm cpu中嵌入实时操作系统uc/os-ii,然后在uc/os-ii中移植uip,实现tcp/ip协议栈。
图1
2 系统的分层考虑与协议转换
图2简单示意了本系统的分层结构,把gprs服务节点和网关节点等gprs内部节点简化抽象为gprs网络,把gprs内部协议及internet网关协议等简化抽象为gprs网关协议。
物理层:arm cpu利用at指令对gprsmodem进行拨号。反馈应答后,一条通道即gprs信道就在本系统中的gprsmodem和internet之间建立起来。
数据链路层:ppp协议将原始的gprs层连接改造成无差错的数据链路,系统将成本远程登录internet,并得到gprs网关分配的a类ip地址。
网络层:采用ip协议作为网络层协议。ip协议将接入internet的具有不同ip地址的终端都联系起来。经过ip路由选择,可以实现本系统与连在internet上的任一ip终端进行数据交互。
传输层:选择tcp作为传输层协议,为数据传输提供面向连接、可靠服务。
3 uc/os-ii与小型tcp/ip协议栈uip
uc/os-ii是由jean j.labrosse编写的一种免费公开源代码的实时操作系统。作为一个操作系统内核,它没有提供通信软件库。uip是由瑞士计算机院的adam dunkels等开发的一种免费公开源代码的小型tcp/ip协议栈,全c编写,提供了网络通信所必须的协议,包括:arp、slip、ip、udp、icmp(pinc)和tcp。本系统在arm cpu中嵌入实时操作系统uc/os-ii,再移植uip实现tcp/ip协议栈,从而获得一个功能完善的嵌入式ip终端。
4 硬件设计
整个系统的硬件框架如图3所示。
arm cpu采用飞利浦公司的lpc2104,内核为基于arm7tdmi-s的精简指令集的通用32位高速微处理器。工作电压为3.3v,内核工作电压仅为1.8v;内置pll锁相环可以设置cpu工作频率达60mhz;双uart口,提供数据的异步串行发送和接收;片内16kb ram和128kb flash程序存储器,为嵌入式uc/os-ii操作系统和移植uip协议栈提供了必要的空间。
gprsmodem选用siemens公司的mc35。该模块提供了9针的标准rs232接口,通过max3232电平转换芯片和lpc2104的uart0口相连,进行全双工通信。mc35工作电压为12v,上电后由dtr上升沿跳变触发启动。本系统指定lpc2104的p0.13信号线经max3232电平转换后作为mc35的dtr。gsm基带处理器是mc35的核心部件,用来处理串口发送的at指令。
本系统中,上电复位后,首先进行工作频率等参数设置,然后进行拨号和ppp协商,得到系统本地ip,完成gprs的internet接入。arm cpu将用户数据先打成ip包,再经串口发送给mc35,mc35把其封装成gprs分组数据包传到gprs网。
5 软件设计
图4所示是uc/os-ii的结构及与硬件的关系。
与处理器无关的代码包含了uc/os-ii的系统函数,移植时只要将uc/os-ii,c文件包含在自己的项目中,即可将uc/os-ii中所有与mcu无关的代码包含到移植的代码中。
与处理器相关的代码包含了对各种不同类型mcu的支持,需要根据自己的mcu对这部分进行修改。笔者使用的是的ads2.0编译器,uc/os-ii的移植与三个文件相关:处理器相关c文件(os_cpu.h、os_cpu_c.c)和汇编文件(os_cpu_a.asm)。
(1)修改os_cpu.h
①编译器相关数据类型的设定。
用#define语句定义两个宏开关中断,具体实现为:
#define os_enter_critical()ea=0 //关中断
#define os_exit_critcal() ea=1 //开中断
②根据堆栈的方向宏方os_stk_growt。
#define os_stk_growth 1//growth。
虽然arm处理器核对于两种方式均支持,但ads2.0的c语言编译器仅支持一种方式,即从上往下生长,并且必须是满递减堆栈,所以os_stk_growth的值为1。
③os_stk_sw()、osctxsw()的移植
#define os_task_sw() osctxsw()
uc/os-ii从低优先级任务切换到高优先级任务时,通过执行os_stk_sw()模仿中断的产生。中断服务子程序的中断向量地址指向汇编语言函数osctxsw()。
(2)修改os_cpu_c.c和os_cpu_a.asm
uc/os-ii的移植还要编写10个简单的c函数,包括6个和操作系统相关的函数和4个与处理器相关的函数其中ostaskstklit()是必要的,其它9个函数必须声明,可以不加代码。在每个c函数及其声明后标注reentrant关键字,使生成的代码支持函数可重入。
①在目录uip-0.9/下创建一个自己的目录,例如uip0.9/2104/。
②把uip_arch.c文件从目录uip-0.9/unix/中复制到目录uip-0.9/2104中。
③把uipopt.h文件目录uip-0.9/unix中复制到目录uip-0.9/2104中,并对其修改,以满足系统需要。
④编写串口驱动程序和主控函数。
⑤编译源代码。
结语
本设计方案采用1片arm cpu来控制gprsmodem,实现了嵌入式实时操作系统uc/os-ii的移植以及小型tcp/ip协议栈uip的移植。该gprs终端利用gprs网和internet实现了基于gprs的无线internet互联,体积小功耗低,可靠性高,并且具有可扩展性和产品开发的延续性,可应用于移动终端、交通管理、家电、工业控制、环境监测以及pos网络和电子商务等多种应用场所。