CMUX协议学习总结
五个月前初刚开始接触CMUX时我在网上查找了很多资料以及文档,当时自认为对这个协议理解的还可以,现在回过头发现之前学的已经都忘的差不多了,借此机会回顾一下。不过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命令模式。