CMUX协议学习总结

五个月前初刚开始接触CMUX时我在网上查找了很多资料以及文档,当时自认为对这个协议理解的还可以,现在回过头发现之前学的已经都忘的差不多了,借此机会回顾一下。不过CMUX协议的核心就是学习它的帧结构。本文参考了以下文档:

  • CMUX-User-Guide
  • CMUX协议文档
  • 华为串口多路复用参考手册

废话少说,来看CMUX吧。


1.什么是CMUX

CMUX是指串口多路复用。串口的多路复用器模式,就是使一个串行接口能够将数据传输到四个不同的客户应用程序。
实际的应用中,一个物理串口某一时间段内只能传输一个上层应用的数据流,如果有多个数据流同时要发送怎么办?除了访问多个UART还有别的方法吗?
CMUX协议的功能就是利用一个底层物理串口,向上层系统提供多个逻辑串口,每个逻辑串口对应着一个数据链路连接(DLC)。这样就可以同时在一条串行接口上存在多个会话,比如语音、FAX、数据、SMS、GPRS、USSD等。当正在进行传真/数据/ GPRS呼叫时,这是特别有利的,例如控制模块或使用SMS服务可以通过附加信道完成,而不会干扰数据流; 不需要访问第二个UART。
多路复用协议提供在单个物理通信通道之上虚拟出多个并行的逻辑通信通道的能力,一般应用于TE(Terminal Equipment)与MS(Mobile Station)之间,TE相当于智能手机的AP端,MS相当于智能手机的MODEM端,下图给出了典型的协议层次关系:

蓝色部分就是MUX多路复用层,它利用底层的物理串口链接收发数据,同时向上层提供若干个逻辑上独立使用的收发通道(上图中提供了四个逻辑通道,不同颜色表示)。每个逻辑通道独立创建,可以拥有软件流控制。在实际使用中,TE端的MUX向MS端的MUX发起通道建立请求,设置通道参数等,是主动的一方;MS端的MUX等待TE端的服务请求,根据自身能力提供相应服务。也就是说,两者的角色是不对称的。
TE终端和MS终端之间的每个通道,称作一个DLC链路,它们是先后相互独立的建立起来的。其数据传输采用8BIT字符的Start-Stop的方式进行传输,双方的数据交互使用了后面定义的帧结构。


2.启动CMUX模式

通常向GPRS模块发送AT+CMUX命令来激活多路复用,该命令格式为:

AT+CMUX=<mode>[,<subset>[,<port_speed>[,<N1>[,<T1>[,<N2> [,<T2>[,<T3>[,<k>]]]]]]]] 

参数说明:

mode:指定多路复用的模式,GTM900模块必须设为1。
0 Basic option
1 Advanced option 
subset:指定帧类型,GTM900模块设为0。
0 UIH frames used only
1 UI frames used only
2 I frames used only
缺省值:0 
port_speed:指定传输速率 1 9 600 bit/s
2 19 200 bit/s
3 38 400 bit/s
4 57 600 bit/s
5 115 200 bit/s
6 230 400 bits/s 
N1:最大帧尺寸 1- 32768
缺省值:基本模式为31 (高级模式为64) 
T1:确认时间,单位为10ms. 1-255
缺省值:10 (即100 ms) 
N2:最大重传次数 0-100
缺省值:3
T2:控制通道的响应时间,单位为10ms 2-255
缺省值:30 (即300 ms)
注意:T2必须大于 T1. 
T3:唤醒响应时间,单位为s 1-255
缺省值:10 
k:串口尺寸,用于带错误恢复的高级模式。
1-7
缺省值:2

3. CMUX帧结构

多路复用有三种操作模式:基本模式、带错误恢复功能的高级模式、不带错误恢复功能的高级模式(具体可以参见GSM 07.10协议)。不同的GPRS模块也支持不同的模式。

标记 地址 控制 长度 信息 校验 标记
1字节 1字节 1字节 1或2字节 整数个字节 1字节 1字节
0xF9或0x7e DLCI值 帧类型 I帧、UI帧、UIH帧 CRC 0xF9或0x7E

其中,帧类型可分控制帧信息帧
CMUX双方通过控制帧协商用以构建、拆除虚拟链路,控制帧又为以下几种:
SABM:建立DLC
UA:响应SABM帧或DISC帧
DM:链路未成功建立时,对收到的DISC命令的响应
DISC:通知对端拆除链接,在DLC0发送DISC帧,等于退出MUX功能

信息帧:
UIH\UI\I:这三种是信息帧,也就是携带要传输数据的帧。

标记、地址、控制、长度等各个字节里的每一位都代表着不同的信息,具体参照阅读华为串口多路复用手册,里面对CMUX帧结构中每一Byte的每一Bit,都作了详细介绍。

4.CMUX实际应用

基本模式的帧结构
基本模式的帧结构如下:

高级模式的帧结构
高级模式的帧结构如下:

注:高级模式没有长度域。
①启动业务

②建立控制通道
启动多路复用后,接着需要建立控制通道(DLCI=0),用来控制多路复用的参数。

③建立其他通道

④传输数据
逻辑通道建立后,即可用UIH进行数据传输。下面介绍数据的传输方法,以使用DLCI=1的通道传输数据为例,其他通道类似。
比如传输AT命令,直接将字符串“atd1861;\r\n”打包到UIH帧的信息域,如下图:

⑤释放业务
释放DLCI=1的通道:

释放DLCI=2的通道:

异常情况:

⑥关闭业务
释放DLCI=0的通道,等效于关闭多路复用业务,并返回到正常情况下的AT命令模式。


CMUX协议学习总结相关推荐

  1. 苹果ANCS协议学习【转】

    苹果ANCS协议学习 转自:http://www.cnblogs.com/alexcai/p/4321514.html 综述 苹果通知中心(Apple Notification Center Serv ...

  2. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  3. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  4. RTMP协议学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> RTMP协议学习总结 转载于:https://my.oschina.net/u/2374678/blog/746464

  5. 智能会议系统(9)---流媒体协议学习

    流媒体协议学习 一.协议篇 1. rtsp协议详解(http://www.mikewootc.com/wiki/net/protocol/rtsp.html) 2. rtp与rtcp协议详解(http ...

  6. TCP/IP协议学习(五) 基于C# Socket的C/S模型

    TCP/IP协议作为现代网络通讯的基石,内容包罗万象,直接去理解理论是比较困难的:然而通过实践先理解网络通讯的理解,在反过来理解学习TCP/IP协议栈就相对简单很多.C#通过提供的Socket API ...

  7. POP3协议学习笔记

    今日得闲,于是将POP3的学习笔记也整理出来! 互联网上的TCP/IP,POP3/SMTP等资料多如牛毛,这里只是自己一点点心得,另外对于各位网络方面的大牛请安静的路过,我可不喜欢在关公面前耍大刀.. ...

  8. CoAP协议学习笔记 1.3 用UDP工具来调试CoAP

    1 前言 CoAP的调试,目前没找到好用的工具,网上说的火狐插件现在也不能用了,多希望手头的TCP/UDP网络调试工具就可以支持. 既然CoAP是基于UDP来组包的,那肯定是可以实现. 所以这篇文章给 ...

  9. CANopen协议学习

    CANopen协议学习 https://www.kvaser.cn/about-can/higher-layer-protocols/canopen/?renqun_youhua=174080

  10. 片上总线协议学习(1)——SiFive的TileLink与ARM系列总线的概述与对比

    link 片上总线协议学习(1)--SiFive的TileLink与ARM系列总线的概述与对比 finally 27 人赞同了该文章 一.背景介绍 随着超大规模集成电路的迅速发展,半导体工业进入深亚微 ...

最新文章

  1. redis学习笔记---redis的哨兵Sentinel
  2. Godaddy如何导入导出MSSQL数据库
  3. 连接器篇(一) 低频系列
  4. 动态规划—完全背包问题
  5. 请领导批阅文件怎么说_领导说“谢谢”,该怎么回?低情商才说不客气,高情商的都这样说!...
  6. 如何在Java中对Collection对象进行排序?
  7. 【英语学习】【Level 07】U07 Stories of my Life L1 Going to the Countryside
  8. js实现小时钟,js中Date对象的使用?
  9. 用java读取word2003和word2007的内容
  10. 谷歌浏览器安装Postman插件 亲测有效!!!
  11. 使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效
  12. java 编码格式 utf 8_关于java生成UTF-8编码格式文件的诡异问题
  13. 09. Never call virtual funcitons during construction or destruction
  14. matlab的转置和共轭,对Matlab中共轭、转置和共轭装置的区别说明
  15. Mongodb之Chunk研究
  16. ICPC焦作站(E、F)+思维+树上dp
  17. 概率密度函数、概率函数、概率分布函数和积分等的一些概念
  18. springboot中Error creating bean with name ‘keyExpiredListener‘ defined in f
  19. C#链接SQL知识点
  20. 沟通的技巧--爱因斯坦如何向老太太解释相对论

热门文章

  1. STM32——EMWIN 字体(二十)
  2. php 生成多个水印,php 生成水印的完整代码
  3. c mysql_stmt游标移动_MySql数据库--stmt语句(续)
  4. win7共享文件服务器设置密码,Win7局域网共享文件夹添加密码保护文件安全的方法...
  5. 论文:Slicing Aided Hyper Inference and Fine-tuning for Small Object Detection通过划块的方式进行小目标检测
  6. 计算机英语专业摘要,推荐:计算机毕业论文英文摘要的写作方法
  7. 成功三步曲:有勇、有谋、有德
  8. Ring buffer streaming in general - how to imple...
  9. Web前端开发—html基础(3)
  10. android录屏代码(录屏并生成mp4文件)