TE: terminal equipment
MS: mobile station
Allows a number of simultaneous sessions over a normal serial asynchronous interface.
1. TE通过物理通道发送AT+CMUX=0通知MS进入mux模式;
2. MS响应OK表示同意;
3. TE依次发送SAMB0,1,2,3,建立编号为0~3的逻辑通道;
4. MS响应UA表示同意;
5. TE在通道1上发送命令UIH(1,"AT/r/n");
6. MS也在通道1上响应UIH(1,"OK/r/n").
0710一共定义了6种包(不包括error recover mode)
1. Set Asynchronous Balanced Mode (SABM)--建立逻辑通道;
2. command Disconnect (DISC) command-取消逻辑通道;
3. Unnumbered Acknowledgement (UA) response-响应建立通道;
4. Disconnected Mode (DM) response-响应取消逻辑通道;
5. Unnumbered information with header check (UIH);
6. Unnumbered Information (UI).
0710支持三种模式: Basic,Advanced,Advance with error recovery.
Basic: Flag(1Byte) Adderss (1Byte) Control(1Byte) Length(1~2Byte) Info(Length指定长度,可变) FCS(1Byte) Flag(1Byte).
Flag固定为0xF9;
Adderss 逻辑通道编号,类似于MAC地址.bit1 为 E/A,bit2 为 C/R,bit3~8为逻辑通道号. E/A 为1表示当前字节是否是该项的最后一个字节,这里只能为1; C/R用来指示命令发送方是否是通道发起方,是则为1 如TE建立的逻辑通道1,往该通道上发命令包时,Adderss为0x7,MS响应Adderss也是0x7;
Control 为上面说的包类型,其中bit5为P/F,大致可以这么理解,SAMB,DISC包及其响应时,P/F为1(响应为DM时,该位可以是0或1);
Length 为Info项长度,bit定义依次为 E/A,L1,L2,...,L7,(L8,...,L15),长度小于128时,E/A为1,不编码第二个字节 Info 类容取决域包类型;
FCS 为校验码,UIH,UI包的区别就在这里,UIH不对Info项编码,只编码Adderss,Control,Length.
Advanced模式包格式为 Flag(1Byte) Adderss (1Byte) Control(1Byte) Info(不定长) FCS(1Byte) Flag(1Byte)
Flag固定为0x7E;
两种模式的区别就是Advanced模式没有Length一项,而是采取了特定格式编码,来决定包何时结束,发包方对Flag除外其他项编码,碰到0x7E,0x7D等字符则在其前插入0x7D,接受方去掉相应0x7D.这样碰到单独的0x7E则表示包的结束和开始.
Multiplexer protocol(以下简称MUX) 简单一点就是多路复用,将原有的一条物理通道虚拟成几条可并发的逻辑通道,同网络协议中的物理链路,逻辑链路有点类似.实现上也类似,将逻辑通道上的数据打包,加上包头包尾,再发到物理通道上.
上图为建立逻辑通道,发送数据的例子.其中AT+CMUX=0是物理通道上的数据,告诉GSM MODEM(以下简称猫)我要进到MUX模式了,猫响应OK.主机依次发送SAMB0,1,2,3,建立编号为0~3的逻辑通道.猫响应UA表示同意. 然后主机就可以使用逻辑通道发命令了,如上图的UIH(1,"ATrn"),猫也在该通道(地址为1)上响应UIH包,数据同物理通道上响应一致,也就是 OKrn.
Flag | Address | Control | Length Indicator | FCS | Flag |
1B | 1B | 1B | 1B/2B | 1B | 1B |
F9 | 03 | 3F | 01 | 1C | F9 |
头 | 控制通道 DLC0 | SABM帧 | 长度0,没有 信息 |
| 尾 |
这是一个SABM帧,用于打开控制通道0.
Flag | Address | Control | Length Indicator | Information | FCS | Flag |
1B | 1B | 1B | 1B/2B | 长度不确定 | 1B | 1B |
F9 | 05 | EF | 09 | 41 54 49 0D | 58 | F9 |
头 | 控制通道 DLC1 | UIH帧 | 长度4 | ATI |
| 尾 |
这是一个UIH帧,用于在逻辑通道上传输数据ATI。
帧事例三:
Flag | Address | Control | Length Indicator | Information | FCS | Flag |
1B | 1B | 1B | 1B/2B | 长度不确定 | 1B | 1B |
F9 | 01 | EF | 0B | E3 07 07 0D 01 | 58 | F9 |
头 | 控制通道 DLC0 | UIH帧 | 长度5 | 代表MSC 消息 |
| 尾 |
这是一个MSC消息.
注:由这几个图可以看出来一些总结:
1)帧头与帧尾都是固定的F9 (好像也有用7E)
2)SABM帧addr位 03 ,07 ,0B ,13 分别代表 dlc0,dlc1,dlc2,dlc3;
3)SABM控制帧: 3F为发送帧,73为响应帧;
4)SABM地址帧: 05,09....分别为dlc0,dlc1....
5)len长度为:len =(X-0x01)/2,X为Length Indicator,len为实际长度;
6)MSC帧:Information中0F代表FC位被置1,无法就收数据,0D代表FC位被置0,恢复接受数据;
Information中数据也可以是63 01代表除了控制通道DLC0外所有通道;
信息字段
信息字段内包含了用户的数据信息和来自上层的各种控制信息。在UI/UIH帧中,具有该字段,它可以是任意长度的比特序列。
帧校验序列字段
- 帧校验序列用于对帧进行循环冗余校验(CRC校验)。
- 对于UI帧,其校验范围从地址字段的第1比特到信息字段的最后一比特的序列;对于UIH帧,只包括地址字段和控制字段和basic模式的长度字段。也就是说UIH能保证数据被正确的传到相应的链路上,但是没有对传输的内容进行保护。
下面列出几个帧格式,供读者参考:
? DO 7e 03 3f fc 7e 在DLC0 发SABM帧请求建立链路
? DI 7e 03 73 85 7e 在DLC0回应UA帧确认建链请求
? DO 7e 07 3f 89 7e 在DLC1发SABM帧请求建立链路
? DI 7e 07 73 f0 7e 在DLC1回应UA帧确认建链请求
? DO 7e 07 53 c8 7e 在在DLC1发DISC帧请求断开链路
? DI 7e 07 73 f0 7e 在DLC1回应UA帧确认断链请求
? DO 7e 03 ff c3 01 6c 7e 在DLC0发CLD消息(UIH帧)
? DI 7e 03 ff c3 01 6c 7e 在DLC0回应CLD消息(UIH帧)