0710 mux协议的做用(ppp拨号时如何和gprs进行at指令交互)

ppp拨号使gprs上网的同时如何和gprs模块进行at指令的交互,这是一个问题。linux

 

在linux中,ppp拨号上网是内核中支持的,只须要在内核配置中选上。数组

ppp拨号的方式使gprs进行上网与at指令使gprs上网,二者之间有不一样。ppp是一个将用at指令使gprs上网的那一部分给封装了起来。只要你将ppp成功的移植到了你的根文件系统中,那么你使用pppd call的时候就至关于用at指令让gprs上网了,封装的部分,包括一部分at命令,认证等等一些列的过程。最后双方认证经过,达成一致后,给了你的终端一个ip地址,以后你的终端就能够经过移动基站和另外一个基站中的东西进行通讯了,也就是你的终端这时上网了。网络

 

ppp和gprs模块之间经过一个物理串口进行互相沟通,这里假如这个串口是ttyS6,若是你用pppd call的方法使用了ttyS6这个串口进行拨号,使gprs模块进行上网了。这个时候,你的串口6和应用程序中的socket是关联的,当你在应用程序中socket通讯的时候,内核中ppp那部分就会将你的socket中的的数据经过物理串口6到达gprs模块中,经gprs模块将数据发送到移动基站等,最后经移动基站路由到目的地址去。这时串口6就只能做为网络通讯,数据链路的通讯,这时gprs模块是没法进入到at命令模式的,也就是没法经过应用程序发AT命令与gprs进行at命令交互了,由于你的串口6和gprs之间已经做为了网络通讯使用,因此对at命令是不给予例会的。这时就问题大了,由于你可能会想上网的同时,就能读取gprs中的短信内容,或者进行语音呼叫等等一些列的与gprs之间的at交互。可是由于你的惟一和gprs进行交互的串口已经作为了数据模式,没法进行at命令交互了。socket

 

因此这个时候,就有了一个东西,这个东西就是cmux协议(gsm0710)具体叫什么我也不十分清楚,多路复用串口技术,许多sim卡模块都是支持这个协议的,你可能会在sim卡的详情中看到他支持0710 mux协议的特性。这cmux是在你的mcu或者Soc和gprs之间一个东西,它会使得你的串口变成多个,通常是三个,同时也会使得gprs模块那边的串口也变成多个。固然这变出来的串口都是虚拟出来的,就是用这个协议虚拟出来的串口。这虚拟出来的串口,在你这边和gprs那边是一一对应的,它们二者之间通讯时走的就是这个协议。函数

 

这个时候,你能够用ppp拨号使用cmux经过串口6虚拟出来的串口,好比/dev/mux0 做为拨号上网网络通讯用的串口。可使用虚拟出来的/dev/mux1 串口做为和gprs模块之间at交互用的串口,固然这虚拟出来的串口和正常的串口是同样进行操做的,只不过是用于gprs的。由于gprs支持这个协议。debug

 

它们通讯的原则应该是这样的:你在应用程序中经过socket通讯时,数据走到了你拨号用的虚拟串口/dev/mux0,这个虚拟串口通过gsm0710协议,会走到物理串口6,在走到gprs模块中,由于这个时候,你确定已经选择gprs模块工做在cmux下了,因此走到gprs模块中后,也会通过这个协议,而后明白这个数据是网络用的,而后发向网络中;同时当你在应用程序中使用另外一个串口/dev/mux1与gprs模块之间发AT命令,也会通过协议走到物理串口6而后到gprs中,而后通过协议进行at的命令交互。这虚拟出来的串口是分时复用的。多是10ms的时间去mux1中了,多是10ms的时间去mux0中了。调试

 

这样就可使你ppp拨号上网的同时,也能和gprs模块进行at命令交互了。接口

 

gsm0710协议的使用:进程

去网上寻找并下载gsm0710的协议代码,通常四个文件就够用了,通常都是gsm0710.c和对应的头文件,buffer.c和对应的头文件,有可能你下载的协议代码没有buffer,那么你须要继续去网上寻找下载。ip

 

下载下来的协议代码,你能够尝试编译生成可执行程序,而后放到arm板上去运行,你直接运行就会看到一些关于使用的帮助信息等,按照合理的参数成功运行后就能够看到你多出来了两个虚拟串口了,以后就可使用了,但有的时候,你可能编译连接生成可执行程序成功了,可是你运行后并无达到你的效果,那多是你下载的这个协议代码是上传的人进行过改动了,你能够总体阅读下协议代码,了解下思路,而后再下载一份,在运行试试,互相比较着进行调试。最后,你要让这个协议代码变成守护进程,在代码中有一个_debug的全局变量,将它设置为0后,就能够成为守护进程,会去掉调试信息,若是成为不了守护进程,那多是别人修改致使的。

 

我对gsm0710代码的理解的简单过程:

/dev/modem为你的调制解调器设备的所在,就是你的gprs模块是和哪一个串口链接的,后者是usb,modem是你和gprs链接的真正的物理接口,串口,usb口等。

获取你运行程序的参数并解析。

程序经过三次打开/dev/ptmx 设备文件,来建立出根据你运行应用程序时带的参数为前缀的0,1,2三个虚拟串口。

关于波特率的获取,能够在全局变量那个表示波特率的写死,也能够运行程序带参数,可是有的人将协议代码中的获取波特率那行的代码注释掉了,你须要给去掉注释,由于若是不这样可能会致使你拨号不成功。

让后就是关于协议内部的数据处理那块了,我没有细看,可是多是根据协议将数据组成数组帧了,最后经过write_fram函数写数据帧,这个函数名可能不对,英语很差,以后你和gprs之间就经过这个协议进行通讯了

相关文章
相关标签/搜索