目录
1. CMUX协议
CMUX( Connection Multiplexing ),是一种串口多路复用协议,其功能主要在一个真实的物理通道上虚拟多个并行的逻辑通信通道的能力,一般应用于TE(Terminal Equipment)与MS(Mobile Station)之间,TE相当于智能手机的AP端,MS相当于智能手机的MODEM端。多路复用协议的实现框架图如下所示:
实际使用中,TE 端的 MUX 主动向 MS 端的 MUX 发起通道建立请求,设置通道参数等.
MS端的MUX等待TE端的服务请求,根据自身能力提供相应服务。(如上图,CH1通道实现PPP拨号处理,CH2通道实现AT指令模式,CH3通道实现APP1应用,CH4通道实现APP2应用)
2. CMUX协议帧结构
开始标记 | 地址 | 控制 | 长度 | 信息 | FCS | 结束标记 |
---|---|---|---|---|---|---|
0xF9(basic) | 1字节 | 1字节 | 1~2字节 | 实际信息长度 | 1字节 | 0xF9(basic) |
2.1 标记域
CMUX分基本模式和高级模式2种:
(1) 基本模式:
- 特点: 基本模式通常较为简单,不支持高级错误恢复功能。它适用于对数据传输可靠性要求不是特别高的场景。
- 数据帧结构: 标识帧的开始和结束,固定为0xF9;主要使用UI(未编号的信息)帧或UIH(未编号的带校验头的信息)帧进行数据传输。
(2)高级模式:
- 特点: 高级模式支持更复杂的链路管理功能,包括错误恢复和链路重建。它适用于需要更高数据传输可靠性和稳定性的场景。
- 数据帧结构: 标识帧的开始和结束,固定为x7E;高级模式没有明确的长度域;除了UI/UIH帧外,还可以使用SABM(设置异步平衡模式)、UA(无条件应答)、DM(断开模式)、DISC(拆除连接)等控制帧进行链路管理和错误恢复。
开始标记和结尾标记相同,表明了CMUX帧。本文主要讨论基本模式 标记 0xF9 。
2.2 地址域
地址域由一个字节组成,包含数据链路连接标识符(DLCI),C/R 位和地址域扩展位(EA)。如下表所
示:
第1位 | 第2位 | 第3位 | 第4位 | 第5位 | 第6位 | 第7位 | 第8位 |
---|---|---|---|---|---|---|---|
EA | C/R | D | L | C | I |
- EA位: EA 位扩展了地址域的范围。当字节中的 EA 位设置为 1 时,表示本字节为地址域的最后一个字节。当
EA 位设置为 0 时,表示后续还有一个字节。(当前仅支持 EA 为 1) - C/R位: C/R(命令/响应)位定义帧为命令或响应。TE 将 C/R 位设置为 1 的命令发送给 MS,MS 响应时,将
命令中的 C/R 位设置为 1。MS 发送 C/R 位设置为 0 的命令,TE 响应时,将命令中的 C/R 位设置为 0。C/R位用法如下图所示:
- DLCI: DLCI 定义了 TE 和 MS 之间的虚拟通道,位于地址域的第3-8位,可支持多个 DLCI(最大支持63个通道),但数量以实际需求为准。
2.3 控制域
控制域定义了协议帧的类型,如下图所示:
- P/F位: 轮询/结束位,用法如下:
- 发送消息帧(UIH/UI)时,P/F 设置为 0;
- 当一方从 DLCI 0 接收到 P/F 设置为 1 的消息帧时,将优先响应,并设置响应帧的 P/F 为 1;
- 一方发送控制帧时(主要通过DLCI0),P/F 设置为 1 。
- SABM: SABM 为命令帧,建立逻辑通道,用于在 TE 和 MS 之间建立 DLC链路 .
- UA: UA 帧为 SABM 或 DISC 帧的响应帧。
- DM: 响应帧, 上报断开逻辑数据链路的状态。断开连接模式下,接收设备收到 SABM 或 DISC 命令后,会发送一个DM响应帧来告知对方设备它当前的状态。
- DISC: DISC 为命令帧,用于关闭 DLC。执行该命令之前,接收端必须发送 UA 响应来确认 DISC 命令已接
收。 - UIH: UIH 为 命令/响应帧,可在两端发送用户数据。
2.4 长度域
长度域结构:
第1位 | 第2位 | 第3位 | 第4位 | 第5位 | 第6位 | 第7位 | 第8位 |
---|---|---|---|---|---|---|---|
EA | L1 | L2 | L3 | L4 | L5 | L6 | L7 |
第1位 | 第2位 | 第3位 | 第4位 | 第5位 | 第6位 | 第7位 | 第8位 |
---|---|---|---|---|---|---|---|
L8 | L9 | L10 | L11 | L12 | L13 | L14 | L15 |
- EA位: EA 位可用于扩展长度域范围。当一个字节中的 EA 位设置为 1 时,表示该字节是长度域的最后一个字
节,L1 - L7表示数据域长度(长度小于128)。EA 位设置为 0 时,表示后续还有一个字节,此时长度域的总长度为 15 位,L1 - L15表示数据域长度。
2.5 信息域
信息域为帧的有效负载,信息域携带用户数据和集成层信息。
2.6 FCS域
FCS仅计算地址域 + 控制域 + 长度域,以确保帧结构的完整性。
- FCS算法: 采用CRC8循环冗余校验,多项式 0x07, 初始值 0xFF,结果异或值 0xFF,输入反转,输出反转。
3. 示例
3.1 CMUX建立DLC连接
通常TE发起DLC链路建立请求(请求方发送 P 位为 1 的 SABM 帧,地址域包含关联的DLCI值)。MS端接收到SABM帧后,如果同意建立DLC,就响应F位为1的UA帧;若MS没有准备好或不愿建立DLC连接,就响应F位为1的DM帧。若指定的DLCI通道建立成功,双方都处于连接状态,此时可以进行数据传输。
(1) 建立DLCI0 控制通道:
操作 | 数据方向 | 十六进制 | 备注 | |
---|---|---|---|---|
TE 发送 SABM 帧,请求建立控制通道 DLCI0 | TE → MS | F9 03 3F 01 1C F9 | SABM 帧 | |
MS 收到 SABM 帧后,回复UA 帧并接受创建 DLCI0 | TE ← MS | F9 03 73 01 D7 F9 | UA 帧 |
(2) 建立DLCI1 传输通道:
操作 | 数据方向 | 十六进制 | 备注 | |
---|---|---|---|---|
TE 发送 SABM 帧,请求建立通道 DLCI1 | TE → MS | F9 07 3F 01 DE F9 | SABM 帧 | |
MS 收到 SABM 帧后,回复UA 帧并接受创建 DLCI1 | TE ← MS | F9 07 73 01 15 F9 | UA 帧 | |
MS 收到 SABM 帧后,响应DM帧,拒绝创建 DLCI1 | TE ← MS | F9 07 1F 01 F4 F9 | DM 帧 |
(3) 建立DLCI2 传输通道:
操作 | 数据方向 | 十六进制 | 备注 | |
---|---|---|---|---|
TE 发送 SABM 帧,请求建立通道 DLCI2 | TE → MS | F9 0B 3F 01 59 F9 | SABM 帧 | |
MS 收到 SABM 帧后,回复UA 帧并接受创建 DLCI2 | TE ← MS | F9 0B 73 01 92 F9 | UA 帧 |
其它传输通道的建立方法,参考建立通道 DLCI1、DLCI2 的方法。
3.2 CMUX传输信息
操作 | 数据方向 | 十六进制 | 备注 | |
---|---|---|---|---|
TE 使用DLCI1通道发送"AT\r\n"(41 54 0D 0A) | TE → MS | F9 07 EF 09 41 54 0D 0A 39 F9 | UIH 帧 | |
MS 在DLCI1上收到 "AT"信息后,回复 "OK\r\n"(4F 4B 0D 0A) | TE ← MS | F9 07 EF 09 4F 4B 0D 0A 39 F9 | UIH 帧 |
其它传输通道传输消息内容,参考通道 DLCI1 的方法。
3.3 关闭CMUX
(1) 关闭传输通道:
操作 | 数据方向 | 十六进制 | 备注 | |
---|---|---|---|---|
TE 发送 DISC 帧,请求关闭通道 DLCI1 | TE → MS | F9 07 53 01 3F F9 | DISC 帧 | |
MS 回复UA 帧接受该请求 | TE ← MS | F9 07 73 01 15 F9 | UA 帧 |
其它传输通道的关闭方法,参考关闭通道 DLCI1 的方法。
(2) 关闭控制通道 DLCI0:
操作 | 数据方向 | 十六进制 | 备注 | |
---|---|---|---|---|
TE 发送 DISC 帧,请求关闭通道 DLCI0 | TE → MS | F9 03 53 01 FD F9 | DISC 帧 | |
MS 回复UA 帧接受该请求 | TE ← MS | F9 03 73 01 D7 F9 | 收到UA 帧后,MUX已完全关闭 |
参考链接: