MS(移动台,可以是手机、无线通信模块等设备)要接入外部PDN(外部分组数据网,包括企业内部网、Internet、WAP网站、行业内部网等),首先要具有一个IP地址,称为PDP地址,PDP地址是用于PDN识别MS的PDP上下文时使用的地址。MS以后就通过这个IP地址和PDN进行数据通信,简化的通信图如下:
上图中各关键节点释义如下
MS:移动台,可以是手机、无线通信模块等设备
BSS:移动基站
GGSN:移动网关,和外部数据网络(包括企业内部网、Internet、WAP网站、行业内部网等)相连,MS经由GGSN就可以和外部数据网络“自由交谈”了
PSTN:外部数据网络(包括企业内部网、Internet、WAP网站、行业内部网等)
若无特殊说明,在下文中用4G模块来代表MS,用基站来代表BSS,用网关来代表GGSN,用外部数据网络来代表PSTN
二、什么是PDP上下文
由上文可知,4G模块首先要请求网关分配一个IP地址(称为PDP地址,可以看做是移动网关内部的私有地址),然后才能经由网关和外部数据网络通信
这个请求网关分配地址的过程称为激活PDP ,PDP地址就像开通有线电话时,开通工单上的电话号码,而PDP上下文就是这张电话开通工单,上面不仅有分配给你的电话号码,还有这部电话对应的其他属性、其他功能的信息。PDP上下文是一个结构,而PDP地址只是结构中的一个成员而已,除此之外,还包括QoS、APN等,这些都是PDP上下文的内容
在PDP上下文中,有一个重要的参数APN,APN是4G模块用来告知网关要访问哪种外部数据网络(外部分组数据网,包括企业内部网、Internet、WAP网站、行业内部网等);还是以刚才的开通电话为例,开通时要求“仅支持省内电话呼入呼出”、“仅支持国内电话呼入呼出”、“可全球呼入呼出”这个就相当于是电话单的APN
三、4G模块如何激活和去激活PDP
4G模块最多支持8路PDP承载,这8路PDP承载可以是8个独立的物理承载,也可以是多路共享1个物理承载。怎么理解这个概念呢?要用到上文中提到的APN,激活PDP请求时,4G模块会指定一个APN(如果是通用的sim卡,在AT命令中,可以不再主动传入这个APN参数,因为4G模块固件会自动从网络端获取到正确的APN),PDP承载就根据APN来决定是“直接使用之前已经激活的同名APN的PDP承载”还是“新激活一个PDP承载”。例如:
使用如下AT命令,激活了一路id为1、APN为自动获取的默认APN的PDP承载
AT+SAPBR=3,1,"CONTYPE","GPRS" OK AT+SAPBR=3,1,"APN","" OK AT+SAPBR=1,1 OK AT+SAPBR=2,1 +SAPBR: 1,1,"10.55.40.48" OK |
再使用如下AT命令,激活了一路id为2、APN为自动获取的默认APN的PDP承载
AT+SAPBR=3,2,"CONTYPE","GPRS" OK AT+SAPBR=3,2,"APN","" OK AT+SAPBR=1,2 OK AT+SAPBR=2,2 +SAPBR: 2,1,"10.55.40.48" OK |
可以看出,id为2的PDP承载,IP地址和id为1的PDP承载完全一样
实际上,激活id为2的PDP承载时,首先检查已经激活的其他路PDP承载,发现id为1的PDP承载已经激活,并且APN相同,则直接映射到id为1的这一路物理承载,并不会向网关发起激活PDP的请求;如果APN不同,才会向网关发起新的PDP激活请求。在实际应用场景中,我们所用的sim卡基本上都是多路PDP共享一个物理承载的情况。
接下来我们进入正题,详细讲解一下4G模块如何激活和去激活PDP
在激活PDP之前,模块必须先附着上数据网络,4G模块开机后,会自动去附着数据网络,只要通过AT+CGATT?轮询是否附着成功即可,附着上数据网络之后,就可以激活PDP了
4G模块支持两套比较常用的通过AT命令激活PDP的方式,其中一套提供给socket使用,另外一套提供给MQTT、HTTP、FTP使用
3.1、socket应用的激活PDP方式
先来看个正常激活PDP的AT命令序列,请自行参考AT手册理解AT命令意义
AT+CPIN? +CPIN: READY //查询sim卡是否正常 OK AT+CGATT? +CGATT: 1 //查询是否附着上数据网络,如果返回+CGATT: 0表示未附着上 OK AT+CSTT="" //设置APN,此处""表示使用从网络端自动获取到的APN OK AT+CIICR //发起激活PDP的请求 OK AT+CIFSR 10.159.1.145 //请求到的PDP地址 |
激活PDP的流程图如下
3.2、socket应用的去激活PDP方式
PDP激活成功之后,就可以发送socket的AT命令和服务器通信了,某些情况下,还需要执行去激活PDP动作(发送AT+CIPSHUT,参考3.1章节的流程图),什么情况下,需要去激活PDP呢?分为被动和主动两种场景:
1、被动场景:如果网络环境发生了异常变化(例如进入了一个没有信号的区域,拔掉天线,拔掉sim卡等),一段时间后,4G模块会产生一个+PDP: DEACT的URC提示,出现此提示说明已经激活的PDP承载被网络端去激活了,此时仍然需要向4G模块发送AT+CIPSHUT命令主动关闭PDP
2、主动场景,分为如下两种情况:
Ø 在激活PDP过程中,激活失败,此时需要主动去激活,然后再重新激活
Ø socket应用过程中出现失败,根据项目需要,可以执行主动去激活,然后再重新激活,重新执行socket应用
3.3、http、mqtt、ftp应用的激活PDP方式
先来看个正常激活PDP的AT命令序列,请自行参考AT手册理解AT命令意义
AT+CPIN? +CPIN: READY //查询sim卡是否正常 OK AT+CGATT? +CGATT: 1 //查询是否附着上数据网络,如果返回+CGATT: 0表示未附着上 OK AT+SAPBR=3,1,"CONTYPE","GPRS" OK AT+SAPBR=3,1,"APN","" //设置APN,此处""表示使用从网络端自动获取到的APN OK AT+SAPBR=1,1 //发起激活PDP的请求 OK AT+SAPBR=2,1 //注意:此命令仅仅查询PDP地址,可以不执行 +SAPBR: 1,1,"10.159.1.145" //请求到的PDP地址 OK |
激活PDP的流程图如下
3.4、http、mqtt、ftp应用的去激活PDP方式
PDP激活成功之后,就可以执行http、mqtt、ftp的AT命令和服务器通信了,某些情况下,还需要执行去激活PDP动作(发送AT+SAPBR=0,1,参考3.3章节的流程图),什么情况下,需要去激活PDP呢?分为被动和主动两种场景:
1、被动场景:如果网络环境发生了异常变化(例如进入了一个没有信号的区域,拔掉天线,拔掉sim卡等),一段时间后,4G模块会产生一个+SAPBR 1: DEACT的URC提示,出现此提示说明已经激活的PDP承载被网络端去激活了,此时仍然需要向4G模块发送AT+SAPBR=0,1命令主动关闭PDP
2、主动场景,分为如下两种情况:
Ø 在激活PDP过程中,激活失败,此时需要主动去激活,然后再重新激活
Ø http、mqtt、ftp应用过程中出现失败,根据项目需要,可以执行主动去激活,然后再重新激活,重新执行http、mqtt、ftp应用
四、常见问题
4.1、重试多次PDP一直激活失败
如果重试多次,PDP一直激活失败,则尝试使用如下手段恢复:
1、使用RESET引脚复位模块
2、极端情况下,直接给模块断电,再上电,POWER
KEY引脚拉低开机
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!