CMUX
名词解释
- CMUX:多串口协议
- DLC:数据链路连接
- DM:断开模式
- FCS:帧校验序列
- UIH:未编号的带校验头的信息
- UI:未编号的信息
- MSC:modem状态命令
- HDLC:高级数据链路控制
什么是CMUX
- CMUX 是一种类似于传输层的协议,用户使用时无法感知该层;数据传输依赖一个真实串口传输,cmux 层负责解析数据用以分发到不同的 virtual uart ;从而实现一个真实串口虚拟出多个 UART 的目的
- CMUX 在应用场景中多用于 UART, 如有必要也可以支持 SPI 方式
CMUX是指串口多路复用。串口的多路复用器模式,就是使一个串行接口能够将数据传输到四个不同的客户应用程序。
CMUX协议的功能就是利用一个底层物理串口,向上层系统提供多个逻辑串口,每个逻辑串口对应着一个数据链路连接(DLC)。//解决多个数据流同时发送的问题
这样就可以同时在一条串行接口上存在多个会话,比如语音、FAX、数据、SMS、GPRS、USSD等。当正在进行传真/数据/ GPRS呼叫时,这是特别有利的,例如控制模块或使用SMS服务可以通过附加信道完成,而不会干扰数据流; 不需要访问第二个UART。
多路复用协议提供在单个物理通信通道之上虚拟出多个并行的逻辑通信通道的能力,一般应用于TE(Terminal Equipment)与MS(Mobile Station)之间,TE相当于智能手机的AP端,MS相当于智能手机的MODEM端。
CMUX帧结构
多路复用有三种操作模式:基本模式、带错误恢复功能的高级模式、不带错误恢复功能的高级模式(具体可以参见GSM 07.10协议)。不同的GPRS模块也支持不同的模式。
标记 | 地址 | 控制 | 长度 | 信息 | 校验 | 标记 | |
---|---|---|---|---|---|---|---|
1字节 | 1字节 | 1字节 | 1or2字节 | 整数个字节 | 1字节 | 1字节 | |
基本 | 0xF9 | DLCI值 | 帧类型 | 1/2B | I帧、UI帧、UIH帧 | CRC | 0xF9 |
高级 | 0x7e | DLCI值 | 帧类型 | - | I帧、UI帧、UIH帧 | CRC | 0x7e |
帧类型分控制帧和信息帧。
CMUX双方通过控制帧协商用以构建、拆除虚拟链路。
控制帧又为以下几种:
- SABM:建立DLC
- UA:响应SABM帧或DISC帧
- DM:链路未成功建立时,对收到的DISC命令的响应
- DISC:通知对端拆除链接,在DLC0发送DISC帧,等于退出MUX功能
**信息帧: **UIH\UI\I:这三种是信息帧,也就是携带要传输数据的帧。
标记、地址、控制、长度等各个字节里的每一位都代表着不同的信息(具体参照阅读华为串口多路复用手册,里面对CMUX帧结构中每一Byte的每一Bit,都作了详细介绍)。
- 帧头与帧尾都是固定的(基本的用F9,高级的用7E)
- len长度为:
len =(X-0x01)/2
,X为Length Indicator,len为实际长度;
CMUX功能特点
支持通过一个真实串口虚拟出多个串口
- CMUX 协议限制,理论上一个物理串口最多可以虚拟出 63 个虚拟串口
- 虚拟出的串口使用与真实串口一致,拥有 open,write,read 操作,设置 rx_indicate 接收回调
- 两方的 MCU 接收时要注意 DLCI ( Data Link Connection Identifier ) 数据链路连接接标识,相同的 DLCI 才可以互相正常通信
支持所有基于 GSM0707 / GSM0710 协议的蜂窝模块
- 兼容 PPP_DEVICE 软件包,实现 CMUX+PPP 场景,在一个串口上同时传输 AT 命令与 PPP 数据;解决PPP 通信独占一个物理串口的问题
- CMUX 的 GSM 功能已经在 Luat Air720, SIM7600, SIM800C 模块测试通过
低资源占用
使用 GSM 支持时,对 PPP_DEVICE 软件包同时开启的情况,做了一些处理,以节省 ROM 资源占用。
因为解析出的数据,挂载在不同虚拟端口的链表上,理论上占用 RAM 的大小只与链表上数据个数与长度相关,1.57 K 是在 CMUX + PPP 环境下测出。
启动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 c
缺省值:2