工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->综合电路图->综合电路图->基于GR64模块的通用GPRS数传单元设计

基于GR64模块的通用GPRS数传单元设计

作者:dolphin时间:2011-05-11

通用分组无线业务GPRS(General Packet Radio Service)是在现有GSM网络基础上进行的软件升级,采用分组交换技术,可提供高速无线IP或X.25服务。它增加了SGSN (GPRS 业务支持节点)和GGSN(GPRS 网关支持节点)2 个服务节点,可提供端到端的、广域的无线IP 连接。相对于其他数传方式,GPRS更具优势: 建设成本低,数据传输可靠性高,传输速率可达171 kbps,基于IP 协议可以访问整个Internet,永远在线和按流量收费。
 GR64是Sony/Ericsson公司最新推出的一款内嵌TCP/IP协议栈的GSM/GPRS模块,可向下兼容GR47,内嵌的ARM9 CPU可以开放给用户。GR64 具有丰富的存储资源: 256 KB的脚本空间可同时容纳2个脚本,可用于CSD方式下脚本远程升级,至少50 KB的数据NVM空间和100 KB RAM;丰富的功能库涵盖所有的底层驱动,用户只须编写自己的应用程序。GR64提供丰富的接口: 对外有2个自适应波特率和帧格式的串口,其中UART1用于AT命令控制或本地脚本下载,UART3为通用串口;另外,还有USB2.0(等同GR47 UART2,可用于模块自身固件升级和脚本调试信息输出)、SPI、I2C、天线、音频接口,12根I/O线(8根复用),AD/DA转换器,蜂鸣器和实时时钟等内置外设。
 GR64模块有两种开发方式: 一种是内部脚本方式,即直接利用模块开放的CPU和系统资源,将类C语言脚本下载到模块的NVM(Nonvolatile Memory)中,在模块的CPU中运行。内部脚本解释器从NVM中读入脚本,逐行解释执行,模块通过UART3与数据终端接口。另一种是外部控制器方式,控制程序在外部微控制器中运行,微处理器向GR64的UART1发送AT命令控制其工作。

1 GPRS数据采集系统通信的实现
 上位机服务器不管采用哪种方式接入Internet都必须有固定IP地址,并对各终端开放相应的侦听端口号,在接入网络后要尽量保持在线。下位机(终端)工作后,会通过DTU主动与服务器建立连接,随后告知服务器自己的终端地址;服务器收到后将其加到动态地址数据库中,并自动定时刷新数据库以确定哪些表还挂在网络上,再根据管理员设定的自动查抄时间对连接在网络上的终端进行数据读取、参数设定、校时等操作。

2 基于GR64的GPRS DTU实现
2.1 DTU硬件电路
 DTU硬件电路如图1所示。

 模块工作电压VCC为3.2~4.5 V,可由降压芯片MIC29302bu将5 V降至典型工作电压3.6 V提供,5个发光二极管分别指示模块GSM网络注册状态,与GPRS网络交互,通信串口数据收发状态;由于模块引脚数字高电平为2.75 V,RS232电平转换芯片最好使用MAX3232等;ON/OFF脚和VREF分别提供给终端,用于控制模块硬件开关机和检测模块开关机状态;USB口为调试信息和打印信息输出口。

2.2 DTU功能实现及程序流程
 该应用中GR64工作于内部脚本方式,利用集成开发环境M2mpowerIDE脚本可通过计算机串口从模块UART1下载到内部脚本空间,并设置为上电自动运行。上电开机、模块注册网络后开始运行脚本: DTU先从数据NVM中读出运行参数,初始化后按预设运行。其中包括: 网络连接参数,如GPRS接入点APN(GA:cmnet)、用户名(GU∶wap)、密码(GP∶wap)、主站IP及端口号(NS:061.183.125.114:10001);系统参数,如通信协议(CP∶TCP/UDP/SMS)、TCP通信方式下工作模式(MD:RT实时在线/SA短信激活/DA振铃激活)、连续登陆失败停止登陆次数(CT∶10次)、激活模式下无数据传输自动断网时间间隔(IT∶30 min),以及短信控制密码(SP:whzydz)等。所有参数均向数据通信串口(UART3)发送“+++”后,按上面的格式本地修改(可以一次更改多项,各参数间用分号隔开);改后向DTU发送LS,将得到所有参数的当前值。也可在运行过程中通过短信远程更改各参数,但须在短信的开头加上预先设定好的短信控制密码(PWD:whzydzCT:15;……);另外还可通过通信串口及短信方式控制模块上下线(SM:ONLINE/OFFLINE)及软件重启动(RESET),掉电重上电后将按最近一次更改的参数运行。程序流程如图2、图3和图4所示。

2.3 内部脚本方式下程序实现要点
  以下粗体部分表示模块内建功能库函数。
  ① 内部脚本不支持中断,须通过内部gtf()函数查询系统标志位方式检测触发类事件的发生,或者通过gtb()函数查询系统状态字节的值确定各项系统状态。例如,收到新短信时标志位SMS_RCV将被置位。其中:int SMS_RCV=29。
  if(gtf()(SMS_RCV)){
    OSA[MR]=OSA[MR]|REQ;/*开短信处理进程*/
    prtf( New SMS received!); }
  同样,接收到IP数据时标志位IP_DT_RCV将被置位。其中:IP_DT_RCV = 13。
  通过查询来电状态字节,即if(gtb(CAL_STA)==RING)判断是否有来电拨入。其中: CAL_STA=12,RING=1。

  ② 是否接收到串口数据,通过判断内部函数utrl()返回的串口接收缓冲内数据的长度是否大于0确定。例如:
  if(utrl()&&(!(OSA[RS]&REQ))){
    OSA[RS]=OSA[RS]|REQ; /*开启串口处理进程*/
    prtf( UART 3 received!); }
  此函数的值只能确定串口是否接收到数据,因此在进入串口处理进程后,须先通过查询定时器超时时间内utrl()返回值的变化来检查数据链路,待一包数据接收完毕后再作处理。

  ③ 内部脚本方式下,TCP连接需要完成以下步骤。
  (a) 待注册GPRS网络(开机后模块自动完成)后,进入GPRS初始化进程。

  • 调用atcrt()创建内部AT命令通道;
  • 调用atsnd()发送命令“AT+CGDCONT=1,IP,cmnetCR”设置APN(由从记录中读出的全局变量GA决定,此处默认为cmnet);
  • 调用atsnd()发送AT命令“AT*ENAD=1,GPRS 1,wap,wapCR”设置接入用户名和密码(由GU、GP决定,此处默认为wap和wap);


评论

技术专区