MTK6276拨号建立数据连接后如何中断

因为硬件限制,modem和mcu只能通过1个uart口通讯,MTK平台CMUX默认都是关闭的,所以在使用ATD*99#拨号成功后,AT指令会被堵住

根据MTK的答复有以下3中方法中断数据连接:

主动断开拨号方法: 

1. 先下+++切到AT模式,然后下ATH或AT+CGACT=0 

2. 在AP端直接发送断开数据连接的数据包 

3. 拨号上网,贵司应该会配置一个对应的网络连接,可以在网络连接上直接操作断开。 


我无法解析PPP数据,第2点无法验证

第3点经过验证也是可以的,不过方法比较粗暴,作为后续解决方案

直接调用mmi_cnmgr_disconnect_all_bearer_pre_handler的应用层函数,最终发送MSG_ID_MMI_ABM_DISCONNECT_REQ消息中断网络连接

第1点是常规方法,不过测试过程中发现,拨号成功的状态下,如果对方没有任何回复,即没有通过握手进入激活状态,下+++是无效的

尝试修改:

查看代码,整理一下流程,+是作为EscChar,在UART_RecHandler会判断接收的字符是否是EscChar,

            /* detect escape sequence  */
            if (UARTData->Rec_state != UART_RecNormal)
            {
               if (cRXChar == UARTData->ESCDet.EscChar)
               {
                  UARTData->EscCount++;
                  if(UARTData->EscCount == 3)
                  {
                     UARTData->Rec_state = UART_Get3EscChar;
                  }
                  else if(UARTData->EscCount > 3)
                  {
                     UARTData->Rec_state = UART_RecNormal;
                     UARTData->EscCount = 0;
                  }
               }

然后系统会调用UART_Calback,根据UARTData->Rec_state的状态,UART_Get3EscChar发送消息MSG_ID_UART_ESCAPE_DETECTED_IND来中断数据连接

但是在实际测试过程中发现,uart中断并没有调用UART_RecHandler,所以UARTData->Rec_state一直是0,无法发送消息出去

尝试在uart口收到“+++”命令时,直接发送MSG_ID_UART_ESCAPE_DETECTED_IND消息,测试是可以中断数据连接的

UART_Handler函数中SIO_CMD_GET_BYTES状态下判断如果buffer是+++,则直接发送消息

UART_sendilm(uart_port1, MSG_ID_UART_ESCAPE_DETECTED_IND);

你可能感兴趣的:(MTK,学习心得)