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之间就通过这个协议进行通信了

转载于:https://www.cnblogs.com/dpf-learn/p/8575990.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫笔记(十二)——浏览器伪装技术

为什么要进行浏览器伪装技术? 有一些网站为了避免爬虫的恶意访问,会设置一些反爬虫机制,对方服务器会对爬虫进行屏蔽。常见的饭爬虫机制主要有下面几个: 1. 通过分析用户请求的Headers信息进行反爬虫 2. 通过检测用户行为进行反…

650. 只有两个键的键盘

650. 只有两个键的键盘 最初记事本上只有一个字符 ‘A’ 。你每次可以对这个记事本进行两种操作: Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。Paste(粘贴&#x…

Codeforces 626F Group Projects (DP)

题目链接 8VC Venture Cup 2016 - Elimination Round 题意 把$n$个物品分成若干组,每个组的代价为组内价值的极差,求所有组的代价之和不超过$k$的方案数。 考虑DP,$f[i][j][k]$表示考虑到第$i$个物品的时候,还有$j$组尚未分配完…

《活出生命的意义》:人生有何意义?

在你一生的阅读体验中,如果能够有一本书,它的某个章节、某种思想、或者某句话能够触动你的内心,解决你的困惑,甚至能改变你的命运,那这样的一本书你一定要视如珍宝,经常翻阅,维克多弗兰克尔的《…

右键添加git-bash

主要: 右键如果没有git-bash,如何给右键手动添加 前面对右键存在git-bash但使用出现问题的解决,也想到如果右键都没有,该如何给右键添加了,于是接着记录下如何添加的过程: 情形: 手动给右键添加…

Weblogic的缓存

2019独角兽企业重金招聘Python工程师标准>>> 最近遇到一个关于weblogic缓存的问题。再把war包放入到weblogic指定目录启动以后,访问页面信息没有更新。最后发现是\weblogic\user_projects\domains\base_domain\servers\AdminServer下的文件没有清除&…

725. 分隔链表

725. 分隔链表 给你一个头结点为 head 的单链表和一个整数 k ,请你设计一个算法将链表分隔为 k 个连续的部分。 每部分的长度应该尽可能的相等:任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。 这 k 个部分应该按照在链表中出现的顺…

LAMP介绍-MySQL安装

2019独角兽企业重金招聘Python工程师标准>>> LAMP: linux-apache-mysql-php (安装方式有:rpm,源码,二进制免编译) linux-操作系统 apache-web服务软件(httpd) mysql-存储数据库 php…

总结verilog产生随机数的$random和seed

$random(seed)是verilog中最简单的产生随机数的系统函数。 在调用系统函数$random(seed)时,可以写成三种样式:1)$random,2)$random(),3)$random(seed)。下面分别说明: 1)…

326. 3的幂

326. 3的幂 给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。 整数 n 是 3 的幂次方需满足:存在整数 x 使得 n 3x 示例 1:输入:n 27 输出&#x…

Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果

说到动画效果,一般都会感到很高端,感觉很酷炫;而小菜技术有限,稍复杂的动画效果也需要很多时间处理,但是遇到时间紧任务重的情况该怎么办呢?那就尝试一下 Lottie 吧,酷炫的动画集成却相当简单&a…

正则表达式(读书过程所记未整理)

\d 表示一位数字字符 \d{3} 表示3个数字字符 匹配电话比如400-400-1118 import re phone_number re.compile(r\d{3}-\d{3}-\d{4}) mo phone_number.search(rfor a number is 400-400-4000) print(mo.group()) ************************************************************…

java1

不知道为啥粘贴的图片是一堆编码。。。。 如何插入图片 博客后后台MarkDown编辑器上只有一个按钮,就是用来上传图片并自动插入MarkDown标记的,超级好用 (一)学习总结 1.在java中通过Scanner类完成控制台的输入,查阅JDK…

430. 扁平化多级双向链表

430. 扁平化多级双向链表 多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构&#xff0c…

PHPstudy搭建本地环境的网页加载速度慢的解决方案

PHP5.3以上,如果数据库链接地址是localhost,会自动检测最终的地址是IPV4还是IPV6,所以会比较慢。解决办法:修改数据库的链接地址,将localhost改为127.0.0.1即可。 原文链接:https://chasjd.com/posts/fb433…

标记偏见_分析师的偏见

标记偏见“Beware of the HiPPO in the room” — The risks and dangers of top-down, intuition-based decision making are well known in the business world. Experimentation and data-based decision making become widely acknowledged as the right way to steer a bu…

scott登录查询常用语句

一、简单查询 1.简单查询select * from emp;--查询表emp中的所有数据select empno as id,ename as name from emp;--查询表emp中的empno显示为id,ename显示为name 2.去除重复select distinct job from emp;--将表emp中的job去重select distinct job,deptno from emp…

CSS结构的基础认知

css的属性值与html的属性值用法不相上下&#xff0c;但是css主要分为内联样式表和外联样式表。 内联样式表用法&#xff1a;在html文件中的《head》头文件中添加<style></style>标签&#xff0c;在标签内添加所需的属性值&#xff0c;例如&#xff1a;<!DOCTYPE…

BZOJ1453: [Wc]Dface双面棋盘

Time Limit: 10 Sec Memory Limit: 64 MB Submit: 784 Solved: 422 [Submit][Status][Discuss] Description 佳佳有一个 nnn 行 nnn 列的黑白棋盘&#xff0c;每个格子都有两面&#xff0c;一面白色&#xff0c;一面黑色。佳佳把棋盘平放在桌子上&#xff0c;因此每个格子恰好一…

用户体验数据分析 书单_如何使用数据改善用户体验设计

用户体验数据分析 书单In the current age of technology, if an entrepreneur comes up with a grand idea, chances are they’ll need a pretty sweet website to go along with it. And if they want their idea to really sell, they will also need a website that reall…