0710 mux协议的作用(ppp拨号时如何和gprs进行at指令交互)
ppp拨号使gprs上网的同时如何和gprs模块进行at指令的交互,这是一个问题。
在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命令交互了。
所以这个时候,就有了一个东西,这个东西就是cmux协议(gsm0710)具体叫什么我也不十分清楚,多路复用串口技术,许多sim卡模块都是支持这个协议的,你可能会在sim卡的详情中看到他支持0710 mux协议的特性。这cmux是在你的mcu或者Soc和gprs之间一个东西,它会使得你的串口变成多个,一般是三个,同时也会使得gprs模块那边的串口也变成多个。当然这变出来的串口都是虚拟出来的,就是用这个协议虚拟出来的串口。这虚拟出来的串口,在你这边和gprs那边是一一对应的,它们两者之间通信时走的就是这个协议。
这个时候,你可以用ppp拨号使用cmux通过串口6虚拟出来的串口,比如/dev/mux0 作为拨号上网网络通信用的串口。可以使用虚拟出来的/dev/mux1 串口作为和gprs模块之间at交互用的串口,当然这虚拟出来的串口和正常的串口是一样进行操作的,只不过是用于gprs的。因为gprs支持这个协议。
它们通信的原则应该是这样的:你在应用程序中通过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,那么你需要继续去网上寻找下载。
下载下来的协议代码,你可以尝试编译生成可执行程序,然后放到arm板上去运行,你直接运行就会看到一些关于使用的帮助信息等,按照合理的参数成功运行后就可以看到你多出来了两个虚拟串口了,之后就可以使用了,但有的时候,你可能编译链接生成可执行程序成功了,但是你运行后并没有达到你的效果,那可能是你下载的这个协议代码是上传的人进行过改动了,你可以整体阅读下协议代码,了解下思路,然后再下载一份,在运行试试,互相比较着进行调试。最后,你要让这个协议代码变成守护进程,在代码中有一个_debug的全局变量,将它设置为0后,就可以成为守护进程,会去掉调试信息,如果成为不了守护进程,那可能是别人修改导致的。
我对gsm0710代码的理解的简单过程:
/dev/modem为你的调制解调器设备的所在,就是你的gprs模块是和哪个串口连接的,后者是usb,modem是你和gprs连接的真正的物理接口,串口,usb口等。
获取你运行程序的参数并解析。
程序通过三次打开/dev/ptmx 设备文件,来创建出根据你运行应用程序时带的参数为前缀的0,1,2三个虚拟串口。
关于波特率的获取,可以在全局变量那个表示波特率的写死,也可以运行程序带参数,但是有的人将协议代码中的获取波特率那行的代码注释掉了,你需要给去掉注释,因为如果不这样可能会导致你拨号不成功。
让后就是关于协议内部的数据处理那块了,我没有细看,但是可能是根据协议将数据组成数组帧了,最后通过write_fram函数写数据帧,这个函数名可能不对,英语不好,之后你和gprs之间就通过这个协议进行通信了
0710 mux协议的作用(ppp拨号时如何和gprs进行at指令交互)的更多相关文章
- 关于PPP拨号 和 AT指令实现GPRS模块联网的疑问
以下内容摘抄自互联网: ppp拨号 与 at命令的疑问 GPRS模块在Linux平台上ppp拨号上网总结与心得 以PPP拨号实现GPRS与因特网的数据通信的具体实现流程 问: 我刚接触GPRS,了解A ...
- GPRS模块在Linux平台上ppp拨号上网总结与心得
linux平台的ppp拨号上网,(注明:这里只谈命令行拨号,用linux就要习惯和熟练使用命令行) 在网上常见的有三种方式:1.使用智能的ppp拨号软件wvdial:参考案例:本博客的<使用wv ...
- 【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?
使用TCP协议连续传输大量数据时,是否会丢包,应如何避免? 比如发送文件.记得有人提过可能会发生什么堆栈溢出.怎样避免呢?是不是可以收到数据后发送确认包,收到确认包后再继续发送.或是发送方发送了一些数 ...
- linux下ppp拨号无线上网
linux下用ppp上网需要两个程序:pppd和chat.ubuntu自带pppd和chat,可以使用man查看具体使用方法. 典型的ppp拨号需要准备几个文件: 1. pppd脚本. 2. chat ...
- 在ARM-linux上实现4G模块PPP拨号上网【转】
本文转载自:http://blog.csdn.net/zqixiao_09/article/details/52540887 在ARM平台上实现4G模块的PPP拨号上网,参考网上的资料和自己的理解,从 ...
- sim900GPRS模块ppp拨号上网
--------------------------------------------- 主机操作系统:Centos 6.5 交叉编译器环境:arm-linux-gcc-4.5.4 开发板平台: F ...
- Linux Ubuntu系统之PPP拨号经验分享
近期,工作需要,我负责开发PPP拨号模块. 说起拨号,算算时间,我已经做过2次了, 暴露年龄了,呵呵. 第一次是刚毕业做的PPOE拨号,给电信做拨号软件,在河北石家庄工作过一段时间,基于windows ...
- 树莓派实现SIM868 ppp拨号上网
环境:raspbian-stretch(2018-06-27) 树莓派:3代B型 SIM868模块具有GPRS数据传输功能(2G网络),但是模块是通过AT指令控制的,在树莓派上用AT指令控制会非常不方 ...
- SIM7600CE TCP/IP连接与PPP拨号上网 4G上网
SIM7600CE联网测试分为两部分: 1.TCP/IP连接 2.PPP拨号上网 实验环境:ubuntu-meta 16.04 硬件:树莓派3B,SIM7600CE 上网卡:移动的NB-IOT物联网卡 ...
随机推荐
- 深入理解JVM(10)——Class文件结构
什么是“JVM”的无关性 Java具有平台无关性,也就是任何操作系统都能够运行Java代码,之所以能够实现这一点,是因为Java运行在虚拟机上,不同的操作系统都有各自的Java虚拟机,从而实现一次编译 ...
- Selenium环境搭建---C#
最近在学习Selenium,主要看的是C#版和java版,目前先搭建好了C#的环境,java的后期再搭建,这里先总结一下在vs2013里搭建环境时所遇到的坑,以便分享和后期避免. 首先就是seleni ...
- 小甲鱼Python第八讲课后习题
0. 下面的循环会打印多少次"I Love FishC"?
- JS_高阶函数(map and reduce)
//高阶函数:一个函数可以接受另一个函数作为参数,这种函数称之为高阶函数. */ function f(x,y,f){ return f(x)+f(y); } var sumAbs=f(-6,4,Ma ...
- week 10 blog
一.Iterations : 1.do...while : 创建执行指定语句的循环,直到测试条件评估为false.在执行语句后评估条件,导致指定语句至少执行一次. 例子:在以下示例中,do...而循环 ...
- 无法打开运行空间池,服务器管理器winrm插件可能已损坏或丢失
在使用windows2012 的服务器或云主机时,服务器安装不了iis服务. 提示 “无法打开运行空间池,服务器管理器winrm插件可能已损坏或丢失”. 这个问题可能的原因是您的机器未设置虚拟内存,可 ...
- 正則表達式 - C语言
http://blog.csdn.net/pipisorry/article/details/37073843 sscanf/scanf正则使用方法 %[ ] 的使用方法:%[ ]表示要读入一个字符集 ...
- 使用Canvas制作画图工具
前 言 JRedu canvas是HTML5中重要的元素之一,canvas元素使用JavaScript在网页上绘制图像,画布是一个矩形区域,我们可以控制其每一个元素,并且canvas拥有多种的绘 ...
- 对图片进行透明化处理-使用java程序
因需要将一张白色背景图片处理为透明色,因此上网上搜了搜处理方案,可以通过ps,和美图秀秀,但是我电脑上并没有这两个软件,下载安装太耗时.从网上搜了搜发现原来可以使用java代码进行处理,代码如下: i ...
- python接口自动化测试(六)-unittest-单个用例管理
前面五节主要介绍了环境搭建和requests库的使用,可以使用这些进行接口请求的发送.但是如何管理接口案例?返回结果如何自动校验?这些内容光靠上面五节是不行的,因此从本节开始我们引入python单元测 ...