微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 支持TCP/IP协议的新一代GSM/GPRS模块及应用

支持TCP/IP协议的新一代GSM/GPRS模块及应用

时间:09-11 来源:互联网 点击:

有可能增加MTU大小到一个较大的值,一个较大的MTU允许TCP更快地增加拥挤窗口。对于基于GPRS的TCP/IP协议的设计,设计师必须考虑到这些问题。

索尼爱立信机对机通信模块

很多GSM模块可以通过GSM/GPRS直接接入互联网,如果模块上没有TCP/IP协议栈,它则必须在其应用或外围的微处理器中体现。索尼爱立信GR47/48模块正是一种内置TCP/IP协议栈的模块之一。为开发基于GSM/GPRS网的TCP/IP应用,索尼爱立信提供了一套完整工具,其机对机通信商业解决方案(M2mpower Business Solution)是一个强有力的支持环境,专为促进提高成本效益比率的无线机对机应用的研发而设计。M2mpower使开发者通过运用特定的开发工具,能够更容易地将无线应用直接嵌入兼容的索尼爱立信机对机产品中。M2mpower与可编程无线器件GR47/48一同被引入,其脚本语言是建立在工业级ANSI C语言的基础之上,使开发者将现有的应用可以平滑地转换到M2mpower。

图2显示了GR47实时操作系统的结构。新款可编程无线模块GR47/48提供了完整全面的功能。该模块包括一个内置TCP/TP协议栈,以便更有效地使用GPRS。它允许一个TCP/UDP传输机制以最小的前期配置和操作来被使用。其内嵌控制器方便集成客户的应用,减少外部控制器的需求,例如在报警、仪表抄送和自动售货等应用上。GR47和GR48分别支持双频GSM宽带900MHz/1800MHz和850MHz/1900MHz,它们都可通过SMS短消息服务、CSD、HSCSD或GPRS来发送或接收数据,并可处理语音及传真。其TCP/IP协议栈亦可通过AT命令或嵌入式应用进行访问。

GR47/48模块具有很多强大的特征。其TCP/UDP会话可以通过一个命令启动;它还提供为统一资源定位器(URL)查询IP地址的功能;最有用的特点之一是IP服务器侦听功能,该功能允许通信模块启动与网络的对话,例如,一个被分配的IP地址无需连接任何部分,只要等待该单元接收一个基于IP的连接引入请求,即可实现。

应用实例

在这一部分,我们将列出一些使用索尼爱立信GR47模块的应用实例以供参考。第一个例子显示了使用AT命令建立一个TCP会话的步骤,第二个则是嵌入式应用的范例。

1.使用AT命令接入GPRS网

GR47提供一系列AT命令来完成TCP/IP协议的功能,以简化应用集成的流程。相关的命令可以让应用设计者建立和取消UDP和TCP 协议,控制GPRS PDP context 的建立,传送数据,检查IP的状态信息等。

启动TCP会话功能的步骤如下所示:

1. at+cgdcont=1,“IP”,“CMNET” *write PDP context information, connect to China Mobile GPRS network*

2. at*e2ipa=1,1 *active IP session using stored PDP context*

3. at*e2ipi=0 *return currently assigned IP address*

4. at*e2ipo=1,“166.111.8.238”,23 *initiate a TCP connection to the module*

5. at*e2ipc *close a currently opened IP connection*

当模块处于数据传输状态中时,需要激活DTR来转换回在线命令模式,ATO则被用于再次转换回数据模式。

2.嵌入式应用接入GPRS网

以下描述示范怎样激活PDP文本、开始TCP对话以及接收数据。这只是整个程序的一部分,不能单独运行。

/* Reset the IP error flag by reading it */

gtf( APPS_IP_ERROR_TRIGGER );

Err = pdpa( 1, 1 );

prtf( “n PDP activate result = %dn”, Err );

if ( Err == 0 )

{ Val = ipi( 0 );

prtf( “ IP Address = %x”, Val );}

else

{ prtf( “n PDP activation failed!n” );

return;}

Err = ipo( 1, SckNum );

if( Err != 0 )

{ prtf( “ n TCP Socket open failed!n” );}

else

{ prtf( “n TCP Socket Opened!n” );

Err = tcpc( SckNum, Port, Address );

if( (Err == 0) || (Err == TCP_CONNECTING) || (Err == TCP_CONNECTED) )

{ while( !Complete (gtb( APPS_IP_ERROR_STATUSBYTE ) == 0) )

{ int len;

/* Receive some data */

if( gtf( APPS_IP_DATA_RECVD ) )

{ prtf( “n IP DATA RECVD” );

len = RXTX_SIZE;

Err = tcpr( SckNum, RxTxBuf, len);

if( Err != 0 )

{ prtf( “n *** Error in TCP Receive (%d)。 ***nn”, Err );}

else

{ if( gtb( APPS_IP_TCPSTATUS_BYTE ) == TCP_CONNECTING )

{ prtf( “n Delaying while TCP Connect occurs.。.nn” );}

else

{ prtf( “n Received %d bytes of data.nn”, len ); }

}

}

}

}

Err = ipc( SckN

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top