Luat GPRS模块TCPIP应用指导V1.1

第1章 架构 Luat GPRS模块的 TCP/IP应用有两种连接模式,可以通过命令AT+CIPMUX=<n>来设置。当AT+CIPMUX=0时,是单链路模式;当AT+CIPMUX=1时,是多链路模式。默认设置是单链路模式。...

1章 架构

Luat GPRS模块的 TCP/IP应用有两种连接模式,可以通过命令AT+CIPMUX=<n>来设置。当AT+CIPMUX=0时,是单链路模式;当AT+CIPMUX=1时,是多链路模式。默认设置是单链路模式。

当在单链路模式下,Luat GPRS模块可以工作在透传模式和非透传模式。在单链接模式下,模块作为一个TCP/UDP连接的客户端

当在多链路模式下,Luat GPRS模块只工作在非透传模式。在多链接模式下,模块作为一个TCP/UDP连接的客户端,它总共可以建立8路连接


图表1Luat GPRS 模块TCP/IP 结构图

attachments-2018-09-XjwwH0rf5b922f4f7aa30.png


2 状态机

 

当输入TCPIP相关命令以后,模块的状态也会发生相应的迁移。查询状态的命令是AT+CIPSTATUS

 图表2单链接时的状态机

attachments-2018-09-R8xgsbfK5b922fa2240e4.png

关于单连接状态机的几点说明:

 

l  输入AT+CIICR,会马上进入IP CONFIG状态,当返回OK后,会进入到IP GPRSACT状态;

l  输入AT+CIPSTART后,会立马进入IP/UDP CONNECTING状态,如果后续模块上报CONNECT OK这个URC,表明连接服务器成功,此时进入CONNECT OK状态;

l  输入AT+CIPCLOSE后,立马进入TCP/UDP CLOSING状态,此时如果模块上报CLOSE OK,则表明关闭与服务器的连接成功,此时模块进入TCP/UDP CLOSED状态;

l  如果模块上报+PDP DEACT这个URC,则标志着模块释放PDP上下文,并进入了PDP DEACT状态;

l  在IP GPRSACT,IP STATUS,CONNECT OK以及TCP/UDP CLOSED状态下,输入AT+CGATT=0,则也可以使模块释放上下文,进入PDP DEACT状态;

l  模块进入PDP DEACT状态,仍需要输入AT+CIPSHUT,进入IP INITIAL状态;

l 模块在各个状态下均可以输入AT+CIPSHUT,进入IP INITIAL状态。


图表3多链接时的状态机

attachments-2018-09-LLjraruD5b92304756ab0.png


3 模块上电初始化以及TCPIP流程

attachments-2018-09-9kdn4lPo5b92308d93719.jpg


4 单链接模式

AT+CIPMUX=0,可以将模块设置为单链接模式。在单链接模式下,只能同时存在一个TCPUDP链接。CIPMUX缺省值就是0

单链接模式下Luat GPRS模块可以工作在透传模式非透传模式。可以通过命令AT+CIPMODE=<n>用来设置,当AT+CIPMODE=0时,是非透传模式 (普通模式);当AT+CIPMODE=1时,是透传模式。默认设置是非透传模式

CIPMODE缺省值为0

 

4.1 非透传模式

非透传模式下,模块可以作为TCP客户端或UDP客户端与服务器建立链接。

 

4.1.1如何建立一个TCP/UDP链接

使用TCIPIP命令之前,需要进行一些必要的查询,确定模块是否注册网络。以下命令示例中,黑色的是输入的命令,蓝色的是命令的返回信息。

 attachments-2018-09-DqUlVrYc5b9231a49adf1.jpg

如果GPRS附着状态为1,则可以继续往下进行APN的设置,PDP的激活,以及建立一个TCPUDP链接。

attachments-2018-09-gg9ktmMy5b9231bb4eb14.jpg


4.2 透传模式

4.2.1  什么是透传模式

透传模式是一种建立在TCP/IP应用任务下的特殊的数据传输模式,用来接收和发送数据。透传模式下,一旦链接被建立,模块就处于数据模式,所有从串口输入输出的字符皆被认为是有效数据。

透传模式下,所有AT命令不可用。我们提供了在命令模式和透传模式间切换的方法。一旦切换到了命令模式,所有的AT命令又可以被使用了。

需要注意的是:只有单链接模式下,才可以使用透传模式。

4.2.如何配置透传模式

AT+CIPMODE=1 开启透传模式。

 

在输入CIPMODE命令之前可以用AT+CIPCCFG 用来配置透传模式的相关参数:

l  NmRetry 用来设置一个IP包的重传次数。缺省值是5

l  WaitTm 发送数据的时间间隔,单位是200ms缺省值是2

l   SendSz 每次发送数据的字节数。1~1460,缺省值是1024

l   Esc 是否开启转义序列,默认开启。

 

一般的应用情况下,这个CIPCCFG命令不需要修改参数。

 

4.2.3  透传模式的使用方法

透传模式下,只能在单路链接下建立,在透传模式下,Luat GPRS模块也能工作在2种模式: TCP客户端, UDP 客户端。一旦链路建立,串口会上报 “CONNECT” ,模块处于数据模式,同时,DCD 被拉低

 

以下是TCP客户端透传应用的例子:

attachments-2018-09-GCmgAmp45b9232702ba24.jpg


4.2.4  如何在透传模式和命令模式间切换

通过下面的方法可以在透传模式和命令模式间自由切换


(1)    如果AT+CIPCCFG 的第四个参数是1(默认值就是1,那么支持通过转义序列退出透传模式。默认的转义序列是 +++,为避免+++ 被错误的识别为数据,需要遵循以下步骤:

 


1. +++输入前1秒内无字符输入。

2. 0.5 秒内连续输入+++,中间不能有其他字符。

3. +++输入后 0.5 秒内无字符输入。

 

(2)    +++退出透传模式后,如果当前链接是激活的,ATO 命令可以从命令模式切换回数据模式,字符串 “CONNECT”会再次上报。

(3)    可以使用串口的DTR 脚。设置AT&D1(默认值就是1 DTR 脚至少接地 1 秒然后拉高。这个方法可以从数据模式切换到命令模式。上报字串“OK” 表示模块当前处于命令模式。

(4)    对于TCP客户端链接,如果远端服务器断开了链接,模块会自动切换到命令模式。

(5)    在数据传输中,如果模块的PDP场景被去激活(+PDP DEACT) ,模块也会自动切换到命令模式。

 

4.2.5  数据模式下如何处理来电和短信

数据模式下,如果有来电,串口的RING脚会一直拉低,直到挂断或者接通电话;而来短信的时候,RING脚会有120ms长的低电平。这个RI低电平可以给唤醒MCU并给MCU提示,有电话或短信到来了。

 

要处理来电或者短信,MCU那边首先要使模块进入命令模式 ( DTR 或者 +++),然后模块会得到正常的URC上报。

attachments-2018-09-v6oWudq75b923388976a8.jpg

 这时候就可以处理电话或者读短信了。

 

5 多链接模式

 

多链接模式下, Luat GPRS模块仅支持非透传模式。因此,在多链路模式下,命令AT+CIPMODE 是无效的。

多链路模式下,模块可以作为 TCP/UDP 客户端 使用。可以有8路链接(id = 0-7)同时共存,每一路链接可以是TCPUDP类型。

 下面是一个多链接应用示例:

attachments-2018-09-5cFPeTSj5b9233bb5dc17.jpg


6 DNS域名自动解析

 

 Luat GPRS系列模块支持DNS域名自动解析,除了使用AT+CIPSTART=<mode>,<ip_addr>,<port>连接服务器IP地址以外,还可以使用AT+CIPSTART=<mode>,<domain name>,<port>跟远端服务器域名地址建立连接

 

用户也可以使用命令 AT+CDNSGIP=<domain name >来查询所给域名的IP地址

 

以下是域名解析的应用示例:

下面是一个多链接应用示例:

attachments-2018-09-6DPFTgp75b923461be2d1.jpg


7 数据发送

Luat GPRS系列模块有三种方法来发送数据:变长数据的发送,定长数据的发送和定时发送。用户可以通过命令AT+CIPACK用来查询当前链接的数据传送状态。

 

7.1 固定长度数据发送

在单链接模式下,通过命令AT+CIPSEND=<length>可以进行固定长度的数据发送,发送长度是<length>。输入数据达到<length>个字节,不用发送<CTRL-Z>(即0x1A),数据会自动发送出去。

在多链接模式下,该命令的格式是:AT+CIPSEND=<id>,<length><id>是链接id<length>是发送长度。

7.2 不定长度数据发送

“AT+CIPSEND”直接发送即是不定长度的发送方式。输入“AT+CIPSEND”(如果是多链接模式,则是“AT+CIPSEND=<id>”),出现>后即进入数据输入模式,输入数据,然后发送CRTL-Z(即0X1A)即可发送数据。

不定长度的发送方式有以下情况,需要注意:

当数据中含有0X1A时,会将0X1A当做发送标识,并数据直接发送出去;当数据中含有0X1B时,会将0X1B认定为发送终止符,退出数据发送模式,回到AT命令状态。遇到含有0X1A0X1B的数据,请用户自己转义。

固定长度发送和不定长度发送两种数据发送方式的示例,请参考4.1.1 如何建立一个TCP/UDP链接

7.3 定时发送

还有第三种数据发送的方式:定时发送。首先,通过命令“AT+CIPATS=<mode>,<time>”设置自动发送时间。<mode>设置为1,打开超时自动发送。<time>是自动发送的超时时间,以秒为单位,取值范围为1~100

不管多链接还是单链接,设置了超时自动发送功能为开,发送数据的时候,时间到了就会自动发送数据,不管数据个数有多少。

 示例如下:

attachments-2018-09-WIgdXdLZ5b92358cd411e.jpg



8 数据接收

 

l  AT+CIPHEAD=1”在数据前加IP头,格式:“+IPD ,<data length>: payload”

l  AT+CIPSHOWTP”IP头里显示协议类型(TCP/UDP),这只有在CIPHEAD=1时有效。

实例示意如下:

attachments-2018-09-PNuMjbfp5b9235d51ec9b.jpg

 

l  AT+CIPSRIP=1”显示数据发送方信息,格式:“RECV FROM: <IP ADDRESS>:<PORT >” 

通过这些信息,用户很容易就可以知道数据帧的源,数据大小,协议。这可以让用户把收到的TCP/UDP数据和AT命令区分开来。


 

9 查询数据链路的状态
 

AT模式下,可以通过AT+CIPSTATUS查询当前的TCP/UDP数据链路状态。

透传模式下DCD 脚用来实现这一功能。如果TCP/UDP 链接存在,DCD 脚被置位(拉低)。一旦链接断开,DCD 脚会被设无效(拉高)

attachments-2018-09-c299kfdA5b92364d2efcd.jpg


10 关闭链接

单链接下用户可以使用命令 AT+CIPCLOSE来关闭 TCP 或者 UDP 链接。

 

当上报CLOSE OK表示链接关闭成功。

在多链路模式下,链路序号<n>要使用AT+CIPCLOSE=<n>关闭链接。

 

注意:命令AT+CIPCLOSE 仅关闭当前TCP/UDP链接,但PDP场景仍然激活,此时可以直接AT+CIPSTART重新建立连接。当然,用户也可以用AT+CIPSHUT来关闭,这时候PDP 上下文会被去激活。如果想重新建立连接,需要+CSTT,+CIICR,+CIFSR重新发一遍来激活PDP





  • 发表于 2018-09-07 15:53
  • 阅读 ( 4146 )
  • 分类:默认分类

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
qin0036

软件工程师

17 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章