GSM0710中文版文档格式.docx
《GSM0710中文版文档格式.docx》由会员分享,可在线阅读,更多相关《GSM0710中文版文档格式.docx(55页珍藏版)》请在冰点文库上搜索。
2.ABMAsynchronousBalancedMode异步平衡模式
3.ERMError-RecoveryMode错误校验模式
4.DLCDataLinkConnection数据链路连接
5.FCSFrameCheckSequence帧校验序列
6.SARMSetAsynchronousBalancedMode设置异步平衡模式
7.UAUUnnumberedAcknowledgement未编号的确认信息
8.DMDisconnectedMode断开模式
9.UIHUnnumberedInformationwithHeaderCheck未编号的带校验头的信息
10.UIUnnumberedInformation未编号的信息
11.PSCPowerSavingControl省电控制
12.MSCModem状态命令
13.HDLCHigh-leveldatalinkcontrol高级数据链路控制
2.CMUX协议框架
多路复用协议提供在单个物理通信通道之上虚拟出多个并行的逻辑通信通道的能力,一般应用于TE(TerminalEquipment)与MS(MobileStation)之间,TE相当于智能手机的AP端,MS相当于智能手机的MODEM端,下图给出了典型的协议层次关系:
蓝色部分就是MUX多路复用层,它利用底层的物理串口链接收发数据,同时向上层提供若干个逻辑上独立使用的收发通道(上图中提供了四个逻辑通道,不同颜色表示)。
每个逻辑通道独立创建,可以拥有软件流控制。
在实际使用中,TE端的MUX向MS端的MUX发起通道建立请求,设置通道参数等,是主动的一方;
MS端的MUX等待TE端的服务请求,根据自身能力提供相应服务。
也就是说,两者的角色是不对称的。
GSM07.10协议就是一个提供MUX功能的标准协议,也是实际中较广泛使用的协议。
在E901项目中,NXP的5209MODEM软件提供标准的07.10MUX功能,AP端开发了07.10MUX的驱动,如上图所示,AP端的MUX驱动利用了物理串口FFUART(COM1:
),同时向系统提供了三个逻辑串口(COM7:
COM9:
COM8:
),其中COM7:
是AT命令口TE<
✍MS;
COM9:
是URC口TE✍MS;
COM8:
是数据端口TE<
✍MS,当建立GPRS/EDGE数据连接时使用。
这样对RIL驱动而言,只看到COM7和COM9这两个虚拟串口,对PPP模块而言,只看到COM8虚拟口,真正的物理串口COM1只对MUX驱动有意义,其他驱动看不到也不关心COM1。
TE终端和MS终端之间的每个通道,称作一个DLC链路,它们是先后相互独立的建立起来的。
其数据传输采用8BIT字符的Start-Stop的方式进行传输,双方的数据交互使用了后面定义的帧结构。
出于缓冲区管理的目的,每条DLC链路都有各自的流控。
总的链路也有全面的流控的机制。
DLC有两种工作模式Error-RecoveryMode(ERM)错误校验模式和Non-Error-RecoveryMode(non-ERM)模式。
在DLC链路上可以同时使用ERM和nor-ERM模式。
采用哪种模式,在DLC建立的时候就决定好了。
如果使用ERM校验模式,必须把DLC配置成ISOHDLC透明机制,但是否使用ERM校验模式,是可选的。
non-ERM模式使用UI帧和UIH帧来装载用户数据。
而ERM模式使用I帧装载用户数据。
CMUX支持三种操作选项,分别是Basic,AdvancedwithoutErrorRecovery和AdvancewithErrorRecovery。
其中前两种不支持错误纠正。
Basic:
1)数据长度指示器代替HDLC的透明机制;
2)与HDLC的flag标志位不同;
3)不能在数据链路上使用XON/XOFF流控
4)从数据同步丢失中恢复,需要比较长的时间。
AdvancedwithoutErrorRecovery
1)异步的HDLC跟ISO/IEC13239.协议一致;
2)可以在数据链路上使用XON/XOFF流程控制;
3)从数据同步丢失中恢复,很快。
AdvancewithErrorRecovery
1)使用HDLCERM流程。
3.NonErrorRecoveryMode
NonErrorRecovery用在Basic模式和Advanced模式,它是一种不可靠的数据传输,所以在链路很可靠的情况下才使用它。
它有一套简单的流程;
Advanced提供了数据透明机制:
它可以传输管理和控制信息;
它允许MS或TE进入省电模式;
它分了几个层,可以原封不动的装载不同类型的数据。
透明机制必须在MUX会话开始的时候建立,它是整个MUX会话的一个特征。
这套简单的流程,使用UIH帧装载传输数据。
这些帧比较容易处理,因为它使用的FrameCheckSequence(FCS)校验机制,可以事先计算,而不需要一个字节一个自己的去计算。
这套流程的使用是很直接的,不需要实现HDLC的状态机。
与可靠性相比,当及时的传递数据更重要时,该通道UI帧或UIH帧,都可以用。
当对可靠性要求比较高时,那就采用UI帧吧。
3.1.服务接口定义
服务接口用在数据链路层与上层应用之间。
这些接口由原语和参数界定。
3.1.1.服务模型
从图中可以看到双方通讯的两端都需要串口模拟实体,在实体和逻辑层之间建立的数据流通道和控制通道。
图中的左端是主动请求发起端。
右端是接收方。
3.1.2.启动CMUX服务模式
mode=[Basic|HDLC-UIHframes|HDLC-UIframes|HDLC-frames].,如果控制通道用了HDLC模式,那么其它用了DLC模式的参数配置可以忽略。
system_parameters=Portspeed[9,6|19,2|38,4|57,6|115,2|
230,4kBit/s],
MaximumFrameSize[1–128inBasicmode,
1–512inHDLCmodes
default:
31forthebasic
optionand64forthe
advancedoption]
AcknowledgementTimer[0,01s-2,55s,
0,1s]
Maximumnumberofretransmissions[0–100,
default:
3]
Responsetimerforthemultiplexercontrolchannel[0,01s-2,55s,
0,3s]
Wakeupresponsetimer[1s–255s,default10s]
Windowsizeforerrorrecoverymode[1–7,
2]
accept=[true|false]
一点要注意的是各个虚拟通道的一些参数可以不同。
根据(图2)中,启动CMUX服务,需要双方(左边是发起方,右边是接收方)建立4条消息,
1)发起方:
TS0710_START.request(mode,system_parameters)
2)发起方:
TS0710_START.indication(mode,system_parameters
3)接收方:
TS0710_START.response(mode,system_parameters,accept)
4)接收方:
TS0710_START.confirm(mode,system_parameters,accept)
这4条消息建立过程大致如下:
首先发起方发起request(请求)消息,接着,接收方接到indication(指示)消息,马上接收方发出response(反馈)消息,最后,发起方收到confirm(确认)消息。
这个过程做一些系统参数配置。
3.1.3.建立DLC服务
DLCI=1-63(DLCInumber)
Systemparameters=Typeofframe[UIH|UI|I,default:
UIH],
Convergencelayer[1-4,default:
1]
Priority[0-63]
MaximumFrameSize[1–32768,
31forthebasicoptionand
64fortheadvancedoption]
Maximumnumberofretransmissions[0–255,
Accept=[true|false]
建立服务,是配置各个通道的参数,让通道能工作。
它需要4条消息:
TS_0710_DLC_ESTABLISHMENT.request(DLCI,system_parameters)
2)发起方:
TS_0710_DLC_ESTABLISHMENT.indication(DLCI,system_parameters)
TS_0710_DLC_ESTABLISHMENT.response(DLCI,system_parameters,accept)
4)接收方:
TS_0710_DLC_ESTABLISHMENT.confirm(DLCI,system_parameters,accept)
大致的过程和启动服务的流程差不多。
建立服务是建立通道,当然是配置通道参数,后者是配置系统参数。
3.1.4.数据服务
数据服务使用了两条消息:
1)TS_0710_DATA.request(DLCI,User_data)
2)TS_0710_DATA.indication(DLCI,User_data)
DLCI=[1–63]DLCoverwhichthedataistobetransmitted.
User_data=Datatobetransferredorganisedinaccordancewiththe
convergencelayeroftheDLC
3.1.5.功耗控制
功耗控制包括sleep模式和wakeup模式
3.1.5.1.Sleep模式
有三条消息:
1)TS_0710_SLEEP.request
2)TS_0710_SLEEP.indication
3)TS_0710_SLEEP.confirm
注意的是这里不需要接收方发出反馈(Respone)消息,当然有这种情况,就是接收方没有进入Sleep模式,也被认为是进入Sleep模式。
3.1.5.2.Wakeup模式
有两条消息:
1)TS_0710_WAKEUP.indication
2)TS_0710_WAKEUP.response
3.1.6.释放DLC服务
用来断开DLC通道,有两条消息
1)TS_0710_DLC_RELEASE.request(DLCI)
2)TS_0710_DLC_RELEASE.indication(DLCI)
参数:
DLCI=[1–63]NumberoftheDLCtobereleased.
同建立通道一样,最大的可以有63个通道。
3.1.7.关闭服务
两条消息:
1)TS_0710_CLOSE.request
2)TS_0710_CLOSE.indication
关闭CMUX服务,和启动CMUX对应。
3.1.8.控制服务
这里把控制服务分成独立的一段。
主要是控制服务比较复杂。
分作两部分:
07.10协议服务和PortEmulation服务。
3.1.8.1.07.10协议服务
⏹DLC参数判定
DLC参数判定用来设置具体DLC参数,有四个消息;
1)TS0710_PARNEG.request(DLC,DLCparameters)
2)TS0710_PARNEG.indication(DLC,DLC_parameters)
3)TS0710_PARNEG.response(DLC,DLC_parameters,accept)
4)TS0710_PARNEG.confirm(DLC,DLC_parameters,accept)
用来改变一个具体的DLC通道的参数。
DLC_parameters=frametype[UIH|UI|I,
UIH]
ConvergenceLayerType[Type1|Type2|Type3|Type4,
Type1]
Priority[1-63,
accordingtotableinsubclause5.6]
Acknowledgementtimer[10ms-25.5sec,
deault:
100ms]
Responsetimerforthemultiplexorcontrol
channel[0,01s-2,55s,default:
⏹DLC服务判定服务
用来判别DLC服务是那一项具体的服务。
1)TS0710_SERVNEG.request(DLC,Service_parameters)
2)TS0710_SERVNEG.indication(DLC,Service_parameters)
3)TS0710_SERVNEG.response(DLC,Serviceparameters,accept)
4)TS0710_SERVNEG.confirm(DLC,Service_parameters,accept)
service_parameters=Service[data|voice64kbit/sA-lawPCM|reserved1|reserved2],
voicecodec[GSM06.21|64kbit/su-lawPCM|codedADPCM32kbit/s|codedhalfrate|
128kbit/sPCM|reserved]
⏹测试服务
1)TS0710_TEST.request(Testdata)
2)TS0710_TEST.confirm(Testdata)
⏹流程控制
1)TS_0710_FLOW.request(DLCI,State)
2)TS_0710_FLOW.indication(DLCI,State)
State=enabled(datamaybetransferred),disabled(datamaynotbetransferred)
控制使能或者不使能数据传输。
3.1.8.2虚拟端口服务
⏹移动DLC参数判定服务
1)TS0710_PORTNEG.request(DLC,Port_parameters)
2)TS0710_PORTNEG.indication(DLC,Port_parameters)
3)TS0710_PORTNEG.response(DLC,Portparameters,accept)
4)TS0710_PORTNEG.confirm(DLC,Port_parameters,accept)
port_parameters=Portspeed[2,4|4,8|7,2|9,6|19,2|38,4|57,6|115,2|
Databits[5|6|7|8,
8bits|
Stopbits[1|1,5,
1bit|
Parity[noparity|parity,
noparity|
ParityType[odd|even|mark|space]
⏹控制参数服务
1)TS0710_CONTROL.request(DLC,Control_parameters)
2)TS0710_CONTROL.indication(DLC,Contol_parameters)
3)TS0710_CONTROL.response(DLC,Contro_parameters)
4)TS0710_CONTROL.confirm(DLC,Control_parameters)
system_parameters=ModemSignal[DTR/DSR|RTS/CTS|RI|DCD],
BreakSignal[0—3sinstepsof200ms,
default0ms],
Buffers[donotdiscardbuffers,discardbuffer
donotdiscardbuffers],
Breaksignalsequence[assoonaspossible|insequence,
insequence]
⏹DLC通道指示服务
1)TS0710_PORTNEG.request(DLC,LineStatusparameter)
2)TS0710_PORTNEG.indication(DLC,LineStatusparameter)
Linestatusparameter=Portspeed[noerrors,overrunerror,parityerror,framingerror]
3.2.数据帧结构
3.2.1.帧域
Flag(1B)Address(1B)Control(1B)Length(1~2B)Info(Length长度,可变)FCS(1B)Flag(1B)
注意:
数据长度指示域,可能有,可能没有,如果没有采用透明机制,则有数据长度指示域。
3.2.1.1.标志域(FlagSequenceField)
每一帧开始和结束都有一个标识flag,基本模式Flag固定为0xF9。
高级模式为0x7E。
3.2.1.2.地址域(AddressField)
BitNo.
1
2
3
4
5
6
7
8
Signal
EA
C/R
DLCI
图2:
地址域的格式
DLCI是DLC(DataLinkControl数据链路控制)的标识号(identify)。
EA位表示该域是否只有本字节。
为1表示本字节就是长度域,为0表示后续还有一个字节。
这里只能为1,以后扩展协议后,会有为0的情况。
C/R(Command/Response)用来指示是命令还是响应。
Initiator是指MUX初始化的那一方,而responder是响应MUX初始化的那一方。
表1:
C/R位的用法
Command/response
Direction
C/Rvalue
Command
Initiator->
Responder
Responder->
Initiator
Response
如主机建立的MUX,主机发命令包时,Address为0x7,猫响应Address也是0x7。
3.2.1.3.控制域(ControlField)
表2:
控制域的编码
FrameType
备注
SABM(SetAsynchronousBalancedMode)
P/F
UA(UnnumberedAcknowledgement)
DM(DisconnectedMode)
DISC(Disconnect)
UIH(UnnumberedInformationwithHeadercheck)
UI(UnnumberedInformation)
可选
P/F是Poll/Final位,表示测试/返回。
后续会介绍。
比如建立DLC的时候,主机发SABM帧,并把P置1,如果成功,对方返回UA帧,并把F置1,否则返回DM帧,