SGLTE终端,语音呼叫(即CS业务)一般都是在GSM上进行。在日常的路测或者性能测试中,经常会遇见无法主叫,无法被叫,通话过程中掉话,通话有杂音等等问题。只有熟悉GSM语音呼叫的整个详细流程,才能够快速准确定位上述问题。
GSM的语音呼叫涉及到的主要协议栈有MN,CC,MM,RR,DL(LAPDm),Physical。其中问题主要出现在MM,RR以及DL这三层(AS层)。下面结合QXDM日志,详细分析一个完整的语音主叫流程,并重点分析MM,RR,DL。在日志的分析过程中,将列出语音呼叫中可能存在问题的地方,并给出具体的原因说明。
语音主叫发起的地方,可以搜索关键字CM_MO_NORMAL_CALL_REQ。这样我们就可以知道语音主叫发起的时间,结合后面的ALERTING消息,就可以计算出主叫发起的时间间隔,对分析语音主叫延迟有一定帮助。
MN发送MNCC_SETUP_REQ原语给CNM(connection manager),此处是CNM而不是CC(connection control),是因为GSM协议栈中CC,SMS,SS(补充业务)等都可以统称为CNM。
这里主要关注一下CC的状态是否发生了变化,以及改变后的状态是否正确。
参考文档3gpp 24008 5.1.2 Call Control States
CC_STATE_U0: No call exists
CC_STATE_U0_1:This state exists for a mobile originating call, when the mobile station requests the establishment of a MM connection.
此处CC是处于正确的状态,如果CC状态不正确,则本次主叫就有可能被拒绝。
CC发送MMCNM_EST_REQ原语给MM,请求建立MM连接。从CNM service type我们可以确定请求建立MM连接的原因:MO call,MT call,emergency call等
MM收到MMCNM_EST_REQ消息,开始建立MM连接
MM请求发送CM_SERVICE_REQUEST消息来建立MM连接,但是由于当前没有RR资源,所以需要先建立RR连接,所以MM触发了RR_EST_REQ,请求建立RR连接
此处需要重点关注MM的状态变化,可以参考代码mm_v.h和文档3gpp 24008 4.1.2.1.1
此处MM的状态变化完全符合协议规范。但是经常会遇到MM的状态并不是MM_IDLE的情况。例如:发起呼叫的时候MM正在执行位置更新,此时就需要等待位置更新成功之后,再发起主叫。或者其他的一些不适合发起主叫的状态,这是MM将直接拒绝本次主叫,并将原因值上报给上层,界面上体现的可以能就是直接推出拨号界面。
从这里也可以看出当前MM的详细状态,例如:如果MM Update Status 不是UPDATED而是NOT UPDATE,则可以知道MM需要发起位置更新。MM Ideal Substate 不是MM_NORMAL_SERVICE,而是limited service,则只能够发起紧急呼叫
由于GSM终端CS和PS不能同时进行,所以在发起CS业务的时候,需要先暂停PS业务
PS暂停完成
开始发起随机接入,请求建立RR连接,GSM终端在发起随机接入的时候,将以终端支持的最大功率进行发送,随机接入失败也是经常导致不能发起主叫的原因。网络通过BCCH发送RACH Control Parameters(3gpp 24008 10.5.2.29)参数,里面有允许的最大尝试次数,如果超过最大尝试次数,则随机接入失败。随机接入失败之后,将触发小区重选。因为随机接入是在RACH(属于CCCH)信道上发送,所以一般随机接入失败都是由于CCCH信道质量太差,导致的。查看CCCH信道质量可以通过过滤关键字 0x506A GSM L1 New Burst Metrics。
注意:手机SIM卡里面存贮了可用接入等级,并且网络会在RACH Control Parameters参数中配置网络允许的接入等级,如果SIM卡的接入等级不被网络允许,则手机也不能发起主叫。目前没有见过这种情况
请求物理层发起随机接入请求,其实就是发送channel request消息。
主要关注RR的状态变化,这样可以判断RR层是否发生了异常,例如:RR一直停留在某种状态,没有发生变化,或者RR的状态不允许发生呼叫等。由于协议并没有详细规范RR的状态,所以只能从QXDM日志的字面含义进行理解。
物理层发起随机接入过程
随机接入发送成功
由于没有收到属于自己的immediate assignment消息,所以需要再次发送channel request
至此这个随机接入的流程已经结束,后续手机将读取网络的AGCH信道,判断是否有属于自己的immediate assignment消息
找到了属于自己的immediate assignment 消息
终端开始同步到immediate assignment消息指配的SDCCH信道,只有这样终端才能够发送CM SERVICE REQ消息,建立MM连接。
从下面的的channel Type我们也可以知道当前的信道类型为SDCCH
可以看出RR正在等待PHY同步到SDCCH信道AwaitingPLà RR_CP_AWAITING_PHYSICAL_LINK
终端同步到SDCCH信道。
开始建立L2连接,这里可以看出CM SERVICE REQ消息,是在建立L2连接的时候通过SABM帧发送给网络的。
RR的状态发生了改变
GSM中除了短消息的建立是在SAPI3上之外,其他都是在SAPI0,所以从L2的SAPI我们也可以知道当前是SMS业务,还是其他业务。
这里的Frame Type即为L2发送给网络的帧类型,SABM帧里面携带了CM SERVICE REQ消息
收到网络的回复,这里我们可以看出,网络直接把相同的CM SERVICE REQ消息又发给了终端。
收到网络下发的UA帧,该UA帧即是对终端发送的SABM帧的回复。这里也是经常出现主叫发起不成功的地方。在建立L2连接发送SABM帧的时候,可能由于当前的SDCCH信道质量太差,导致手机不能够正确收到网络的UA帧,导致SABM不断重发,直到超过最大重传次数,T200,N200超时,此时上报RLF(Radio link failure)。查看SDCCH信道质量可以过滤关键字 0x506A GSM L1 New Burst Metrics。SABM重发可以搜索关键字:SABM Retransmission
至此L2链路建立成功
RR连接建立成功,后面就可以发起鉴权,加密,发送SETUP,测量报告等消息。
如下红色标记的消息都是在SDCCH信道上发送,如果SDCCH信道质量太差,导致L2链路不断重发,直到T200,N200超时,也会导致主叫失败。
在收到Assignment command消息之后,手机将同步到TCH信道
同步到TCH,随后将在TCH信道上发送语音帧,下面结合测量报告和TCH信道质量,来说明如何分析通话断续。测量报告里面有服务小区的RXLEV和RXQUAL。RXLEV表明当前的功率等级,RXQUAL表明当前的信道质量。RXLEV-110即为手机测量到的下行功率。RXQUAL参考如下对照表:
TCH信道质量可以通过过滤关键字0x506A GSM L1 New Burst Metrics