一种基于GPRS的微控制器上网的解决方案
Ofweek 2021-09-26

  引言

  以其体积小、功耗低、使用方便等特点,广泛应用于各种工业、民用的嵌入式系统中;而随着互联网(Internet)的兴起与普及,使微控制器通过互联网传送数据就变得非常有意义。目前使微控制器上网的解决方案一般有两种:一种是采用微控制器驱动网卡,通过以太网连接Internet;另一种是使微控制器直接驱动调制解调器(MODEM)通过电话线向ISP拨号上网。这两种方案的缺点在于都要使用有线的网络,无法应用于在边远地区或可移动系统中。

  针对这一问题,本文提出一种基于GPRS的微控制器上网的解决方案,即在微控制器中实现PPP协议,并通过驱动GPRS模块经过GPRS无线网连接到Internet实现上网。这种方案的优点在于:① 覆盖面广,适用于广大偏远地区;② 无线上网,适用于可移动目标;③使用廉价的微控制器实现简单、成本低;④ 安装简便,维护方便。

  1 GPRS技术及其特点

  GPRS(General Packet Radio Service)是通用分组无线业务的简称,是在GSM基础上发展起来的一种分组交换的数据承载和传输方式。与原有的GSM比较,GPRS在数据业务的承载和支持上具有非常明显的优势:通过多个GSM时隙的复用,支持的数据传输速率更高,理论峰值达115kb/s;不同的网络用户共享同一组GPRS信道,但只有当某一个用户需要发送或接收数据时才会占用信道资源。这样,通过多用户的业务复用,更有效地利用无线网络信道资源,特别适合突发性、频繁的小流量数据传输,很好地适应数据业务的突发性特点;GPRS计费方式更加灵活,可以支持按数据流量来进行计费;与无线应用协议(WAP)技术不同,GPRS能够随时为用户提供透明的IP通道,可直接访问Internet中的所有站点和资源;采用信道复用技术,每一个GPRS用户都能够实现永远在线;另外,GPRS还能支持在进行数据传输的同时进行语音通话等等,而且相对于短消息等其它无线数据通信业务,GPRS的价格优势比较明显。目前,我国移动推出的GPRS上网业务最高每千字节也只有3分钱,而且用户可以根据自己的需要,以月租、包月等多种形式进一步降低GPRS通信的费用。

  因此使用GPRS实现远程数据的传送是非常经济实用的,特别是对于不易架设有线网络的边远地区和可移动装置。

  2 硬件连接和GPRS模块设置

  通过GPRS网进行数据传输一般需要使用GPRS模块。目前,GPRS模块一般是指带有GPRS功能的GSM模块,可以利用GPRS网进行数据通信。其中比较流行的有法国Wave公司的WISMO系列和西门子公司的S系列等等。WAVECOM的WISMO模块接口简单、使用方便且功能非常强大,它与微控制器、SIM卡、电源之间的连接如图1所示。

  

  图1 GPRS模块的硬件连接图

  其中GPRS模块与微控制器间是通过串行口进行通信的,通信速率最快可以达到115 200b/s。模块与控制器间的通信协议是AT命令集,其中大部分命令是符合协议“AT command set for GSM Mobile Equipment (ME) (GSM 07.07 version 6.4.0 Release 1997)”的,但也有一些是Wavecom自己定义的AT命令。除了串口发送(TX)、串口接收(RX)之外,微控制器与GPRS模块之间还有一些硬件握手信号,如DTR、CTS、DCD等。为了简化微控制器的控制,硬件设计时没有使用全部的硬件握手信号,而只使用数据载波检测(Data Carrier Detect, DCD)和终端准备(Data Terminal Ready, DTR)信号。DCD信号可以检测GPRS模块是处于数据传送状态还是处于AT命令传送状态。DTR信号用来通知GPRS模块传送工作已经结束。

  硬件连接完成后,在进行GPRS上网操作之前,首先要对GPRS模块进行一定的设置。主要的设置工作有:① 设置通信波特率,可以使用AT+IPR=38400命令,把波特率设为38 400b/s或其它合适的波特率,默认的通信速度为9600b/s。② 设置接入网关,通过AT+ CGD CONT=1, “IP”, “CMNET”命令设置GPRS接入网关为移动梦网。③设置移动终端的类别,通过AT+CGCLASS=“B”设置移动终端的类别为B类,即同时监控多种业务;但只能运行一种业务,即在同一时间只能使用GPRS上网,或者使用GSM的语音通信。④ 测试GPRS服务是否开通,使用AT+CGACT=1,1命令激活GPRS功能。如果返回OK,则GPRS连接成功;如果返回ERROR,则意味着GPRS失败。这时应检查一下SIM卡的GPRS业务是否已经开通,GPRS模块天线是否安装正确等问题。(其它相关的AT命令请参阅文献3。)

  中国移动在GPRS与Internet网中间建立了许多相当于ISP的网关支持节点(GGSN),以连接GPRS网与外部的Internet网。GPRS模块可以通过拨“*99***1#”登录到GGSN上动态分配到Internet网的IP地址。其间GPRS模块与网关的通信要符合点对点协议(Point to Point Protocol, PPP),其中身份验证时用户名、密码都为空。使用PPP协议登录上之后,就可以通过GGSN接上Internet了。

  3 软件整体结构

  3.1 软件层次结构

  程序中的所有代码都是由C语言编写的,并采用分层的结构,从底到上分别为:串口驱动层、GPRS模块驱动层、PPP协议层、IP协议层、UDP协议层与应用层。上层函数的实现需要应用到底层函数,而底层函数的任务就是为上层函数提供服务,最终完成应用层任务——传送数据。各层的主要函数如图2所示。

  

  图2 软件层次结构

  3.2 驱动程序编写

  首先是串行口驱动层。它实现打开串口(OpenComm)、关闭串口(CloseComm)、读串口数据(ReadComm)、写串口数据(WriteComm)等函数。例如WriteComm函数向串口发送一个字节的数据,而transmit函数向串口发送一个字符串的数据:

  void WriteComm(char c){

  ES = 0;

  SBUF = c;

  while(TI==0);

  TI=0;

  ES = 1;

  }

  void transmit (char *data) {

  Delay (250);

  while (*data) {

  WriteComm (*data++);

  }

  }

  然后,在这些串口函数的基础上编写GPRS模块的驱动函数。通过串行口控制GPRS模块,进行拨号、设置等操作。控制的方法是采用AT命令。在控制GPRS模块拨打移动梦网GGSN的登录号码“*99***1#”之后,GPRS模块就转入在线模式(On-Line)。此时微控制器向串行口发送的所有数据都透明地传送给了GGSN,同样GGSN的回答也传回单片机的串行口。当数据传送完成后,微控制器需要通知GPRS模块结束会话,并从在线模式转回普通的命令模式,这可以通过置高DTR线完成。同时,如果线路由于异常断开,CD线会回复到平常的低电平,所以处于在线模式下也要不断检测CD线是否处于高电平。根据这些操作,可以编写GPRS驱动函数:初始化GPRS模块函数(GPRSInit)、拨号函数(GPRSDial)、断开连接函数(GPRSHangup)、检测是否处于在线状态函数(GPRSOnline)。其中,GPRS的拨号和挂断代码如下:

  BYTE GPRSDial (void) {

  signed char delayCount = 80;

  transmit (“ATV0\r”); // 要求返回数字表示的回答

  if (!Waitfor (“0”, 30)) { // 等待 OK 回答

  return -1;

  }

  DTR_ON;

  transmit (“ATD*99***1#\r”); // 拨GGSN的号码

  GPRSBuffFlush (); // 清空buffer

  // 等待回答

  while ((!GPRSBuffNotEmpty()) && (--delayCount 》 0)) {

  Delay (250);

  }

  if (delayCount) {

  return GPRSGetch (); // 返回回答的数字

  }

  return -1; // 没有返回,错误

  }

  void GPRSHangup (void) {

  DTR_ON; // 置高DTR

  Delay (40); // 保持一定时间

  DTR_OFF; // 完成连接的断开

  }

  这些底层的驱动函数将会使上层协议的编写很方便,更重要的是,它为我们提供了一个驱动抽象层。当底层硬件做出改动的时候,只需要对底层的驱动函数进行改动,而上层函数的代码不变。

  4 PPP协议的实现

  由于移动梦网的GGSN与GPRS模块通信时遵循PPP协议,所以要在微控制器中也实现一部分PPP协议才能与之对话。GPRS模块在拨号后首先要与GPRS网关进行通信链路的协商,即协商点到点的各种链路参数配置。协商过程遵守LCP(Link Control Protocol)、PAP(Password Authentication Protocol)和IPCP(Internet Protocol Control Protocol)等协议。其中LCP协议用于建立、构造、测试链路连接;PAP协议用于处理密码验证部分;IPCP协议用于设置环境,并分配IP地址。协商机制用有限状态机的模型来实现。一旦协商完成,链路已经创建,IP地址已经分配就可以按照协商的标准进行IP报文的传输了。根据应用的不同,IP报文中可以携带UDP报文,也可以是TCP或ICMP报文。本系统正是采用UDP报文传送数据信息的。数据传输完成之后,微控制器会向GGSN发送LCP的断开连接报文,以终止网络连接。

  PPP协议的帧结构如图3(左)所示。微控制器的串口中断接收程序首先以包起始和结束符来判断是否有完整的PPP包,并对PPP包的内容进行校验,以确定数据包的完整性和正确性。然后,在主循环中进入PPP报文解析模块,解析过程如图3(右)所示。

  

  图3 PPP报文解析

  5 登录GGSN的过程

  系统的一个难点是微控制器登陆GPRS网关(GGSN)并与网关通过LCP、PAP、IPCP协议进行协商的过程。LCP、PAP与IPCP协议的帧结构大同小异,最常用的为请求(REQ)、同意(ACK)和拒绝(NAK)三种帧。微控制器与GGSN各为一方进行协商,任何一方都可以发送REQ帧请求某方面的配制,另一方觉得配置不能接受会回应NAK帧,如果可以则回应ACK帧。为了节省资源,我们只处理这三种数据帧,其它链路问题都由微控制器在程序控制下自己重新拨号解决。

  协商过程大致描述如下:在拨号成功连接后,GGSN首先会返回一个PAP REQ数据帧。我们发送一个空LCP REQ帧,以强迫进行协议协商阶段。随后,GGSN发送LCP设置帧,我们拒绝所有的设置并请求验证模式。GGSN选择CHAP或PAP方式验证,我们只接受PAP方式。然后,进行PAP验证用户名和密码过程,在GPRS中用户名与密码都为空,如果成功,GGSN会返回IPCP报文分配动态IP地址。此时,就完成了与GGSN的协商过程。协商过程的状态转换如图4所示。

  

  图4 协商过程流程

  协商完成后进入IP数据报通信阶段。此时,微控制器向GGSN发送的所有包含IP报文的PPP报文都会被传送给Internet网中相应的IP地址;而远端所有向微控制器IP地址发送的报文也都会经GPRS网传送到微控制器上,从而完成微控制器与远程主机通过互联网的数据传输。

  6 小结

  经过优化,本系统的软件代码可以精简到6K字节左右,共使用不到300字节的RAM。并且由于程序使用C语言编写,稍加改动就可以在各种系列的微控制器上实现。微控制器通过GPRS上网的技术可以广泛应用于需要远程传送数据的系统中,特别适合于远程抄表、远程监控等领域。我们目前正把这项技术应用于车辆监控调度系统,在试验阶段取得了比较好的效果。

  参考文献

  1 Wavecom公司。 GPRS User Guide. 2001-11

  2 Wavecom公司。 WISMO2C Hardware Specifications. 2000-08

  3 Wavecom公司。 AT Commands Interface, 2000-03

  4 Simpson W. The Point to Point Protocol(PPP)。 RFC1661. 1994

  5 PPP in HDLC-Like Framing. RFC1662. 1994

  黄承安 硕士研究生,主要研究方向嵌入式系统的理论方法及软硬件设计,无线网络通信。

  张跃 副教授,主要研究方向嵌入式系统,控制理论。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
热门推荐
  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • ARM Cortex系列处理器知识点汇总

    最近因为要为芯片选定核,所以就在了解哪些核合适且性价比好,这是一个需要结合产品各类技术、市场分析的活,看似简单却还是需要一些储备的,今天选了一篇ARM Cortex系列的科普文章与大家分享。 众所周知,英国的ARM公司是嵌入式微处理器世界当中的佼佼者。AR

    05-11
  • 你的CPU属于哈佛结构还是冯诺依曼结构?

    现代的CPU基本上归为冯诺伊曼结构(也称普林斯顿结构)和哈佛结构。 冯洛伊曼结构就是我们所说的X86架构,而哈佛结构就是ARM架构。一个广泛用于桌面端(台式/笔记本/服务器/工作站等),一个雄踞移动领域,我们的手持设备(平板\手机用的大多就是他了)。 01

    05-10
  • 如何批量修改MCU封装管脚定义

    在做产品开发时,为了缩短研发周期,我们一般都是直接找来参考设计做参考。这些参考资料要么是来自原厂的,要么是来自方案商的。  接触过这么多的参考设计资料,发现大部分的资料都有一个通病,就是不少MCU的PIN脚定义都只是标出IO口的定义,其它复用​​​​功能

    05-08
  • MCU为什么要消抖动

    简单的说,进入了电子,不管是学纯模拟,还是学单片机,DSP、ARM等处理器,或者是我们的FPGA,一般没有不用到按键的地方。按键:人机交互控制,主要用于对系统的控制,信号的释放等。因此在这里,FPGA上应用的按键消抖动,也不得不讲! 一、为什么要消抖动 在

    05-07
  • 51单片机的ISP下载知识

    本文详细介绍了串口、51单片机的ISP下载等基础知识,已经学过单片机的也可以看看,加强一下对这方面的了解。 串口 串行接口简称串口,也称串行通信接口,是采用串行通信方式的扩展接口。 我们比较熟悉的USB接口,全名通用串行总线(Universal Serial BUS),就

    05-06
  • 硬件开发如何选择合适的MCU

    点击上方关注我们! 我在做硬件开发时,如果遇到的是一个新产品,新项目,之前没有做过的,没有任何的经验,在选MCU时,我一般是这样操作的。 首先,根据产品的需求,整理出一份硬件规格。比如,电源管理,传感器接口,人机交互接口等。 然后,整理出整个原理

    05-06
  • 单片机的功耗怎么算的?

    单片机的功耗是非常难算的,而且在高温下,单片机的功耗还是一个特别重要的参数。暂且把单片机的功耗按照下面的划分。 暂且把单片机的功耗按照下面的划分。 1.内部功耗(与频率有关) 2.数字输入输出口功耗 2.1输入口 2.2输出高 2.3输出低 3.模拟输入口功耗从

    05-07
  • 嵌入式工程师必备工具:I2C和SPI总线协议

    IIC vs SPI 现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原因是这两种通信协议非常适合近距离低速芯片间通信。Philips(for IIC)和Motorola(for SPI) 出于不同背景和市场需求

    04-30
  • 嵌入式面试注意事项

    找工作也是一门技能,有的人很快就找到自己喜欢的工作,有的人找了很久也没找到合适的工作。 下面给大家分享几点找工作过程中存在的“潜规则”内容。 1、面试的本质不是考试,而是告诉面试官你会做什么 经验不够的小伙伴特别容易犯的一个错误,不清楚面试官到

    04-29
  • 为什么需要RTOS?

    很多单片机初学者都是从裸机开始的,裸机确实也能开发出好的产品,但作为一个嵌入式软件工程师,如果只能用裸机开发产品,那肯定是不够的。 要从裸机的思维转变到RTOS的思维,其实需要一个过程,而且开始的一段时间会很痛苦。但过一段时间理解了一些内容,能

    04-28
  • 使用RTOS的8个理由

    嵌入式系统中,有很多方式实现任务调度。功能有限的小系统中,无限循环足够实现系统功能。当软件设计变得庞大且复杂时,设计师应该考虑使用实时操作系统。 下面给大家分享使用RTOS的8个理由: 1.硬实时响应 基于优先级抢占的RTOS,根据任务的实时需求,执行优

    04-26
  • 单片机延时程序,Keil C编译器实现

    应用单片机的时候,经常会遇到需要短时间延时的情况。需要的延时时间很短,一般都是几十到几百微妙(us)。有时候还需要很高的精度,比如用单片机驱动 DS18B20的时候,误差容许的范围在十几us以内,不然很容易出错。这种情况下,用计时器往往有点小题大做。而

    04-26
下载排行榜
更多
EE直播间
更多
广告
X
广告