合宙LuatOS的个人空间 https://www.eechina.com/space-uid-176273.html [收藏] [复制] [RSS]

博客

异常断链的惨痛经历!拯救Air780EP模块紧急项目

已有 294 次阅读2025-2-12 10:38 |个人分类:4G模组| 物联网, 单片机, 4G模块, 通讯模组, 嵌入式硬件

必须要吐槽一下:最近被老板驱使,要用Air780EP模块做几个紧急项目。。。

就怕紧急项目,时间紧任务重,遇到了一些棘手问题,可把我给折腾死了……

这里把遇到的问题,排查记录下来,看能不能帮到因遇到类似的问题,并且一直没找到原因,而被老板要求加班解决的兄弟们。


一、相关背景简介

不知道各位在用Cat.1模块的时候,会不会遇到收不到网络数据的问题呢?

比如:

"用TCP做长链接,在进入休眠场景后进行保活,但时常出现丢包的现象,应该怎么分析呢"、"MQTT服务器下行数据,模块有概率接收不到,服务器也有遇到收不到模块的上行数据,到底是什么情况"等等类似的问题。

但单纯通过模块这边看到的现象,也不能断定就是模块出了问题。

要想准确地找出这个“罪犯”,这种时候就需要通过网络抓包来分析排查是以下哪种原因:

  • 模块有发出数据->但服务器没收到
  • 模块未发出数据->导致服务器没收到
  • 服务器有发出数据->但模块没收到
  • 服务器未发出数据->导致模块没收到

以下通过最近遇到的一个实例,给各位提供个分析思路。

目前有个项目用的是AT开发,大致应用场景为TCP长链接,要求定时上报GPS/基站/Wi-Fi的定位数据,没有休眠需求。

但时不时在发送数据的时候,会出现AT+CIPSEND发数据发着发着返回**+CME: ERROR 3**的问题。

基本情况解析:

  • 使用的数据传输协议为TCP
  • 问题现象为偶现,小概率出现
  • 从模块查看到的异常情况为:
    AT+CIPSEND发送TCP数据的指令,出现了+CME: ERROR 3的错误码

首先按照+CME: ERROR 3这个错误码出现的条件,筛选一下可能出现的有哪些情况:

  • 最先想到的就是TCP链接已经不存****在,断开了
    导致发送数据时检测TCP通道关闭,而出现AT+CIPSEND命令返回错误。
  • 发送的AT+CIPSEND命令前后携带了其他的字符
    一起作为一整条指令发送给了模块,导致模块解析出错。

AT+CIPSEND这条指令会出现+CME: ERROR 3,基本上就是以上两种情况了。

那么先尝试排除下第二条:

我在偶现第一次AT+CIPSEND出现错误之后,后面也尝试发送了的多条AT+CIPSEND命令发现也都会出错。

但中间穿插发送的AT+CEREG?、AT+CGATT?、AT+CSQ 查网络状态、信号强度的命令返回都正常,也没有报错。

而且把发送的整条数据转为以HEX格式来看,指令前后也没有多余的字符出现。

那可以排除第二种情况了。

接下来这个时候为了印证第一条的猜想,

就需要排查下问题是否为TCP链接已经断开了:

在挂测了一段时间再次复现问题的时候,

加一条AT+CIPSTATUS的命令查一下连接状态。

结果不出所料:

返回的结果是 STATE: TCP CLOSED ,

TCP链接是断开的状态!

已经锁定问题原因是有概率出现TCP突然断链的现象。

由于目前条件抓不了服务器端的网络日志,只能暂且想办法从模块端排查问题。

出现断链也可以分为:

模块端发起断开连接和服务器端发起断开连接。

如果为模块端断接:

可以看下是否有主动发送AT+CIPCL****OSE去断开连接,但我从AT流程的日志来看,明显程序中还没有走到AT+CIPCLOSE这一步,问题就已经复现了。

模块端如果没有主动通过指令断开连接:

那么在遇到网络波动、信号差、卡没流量等等,会影响网络的事件时,模块也可能会发起断开连接的请求。

但上面也已经排查过:

在出现AT+CIPSEND返回ERROR之后,

也发送了AT+CEREG?、AT+CGATT?、AT+CSQ这三条指令。

返回结果依次为:

+CEREG: 0,1

+CGATT: 1

+CSQ: 25

可以从CEREG和CGATT的返回结果看出,网络状态是正常已成功注册网络的,CSQ信号值为25,也很正常。

那这到底是怎么回事呢?

这下不得不通过网络抓包来进一步分析了。



二、准备工作要点

根据项目需求准备相关硬件及软件,以下供参考:

  • 自制板子需要引出USB或者DBG_UART串口,二选一。
    但如果问题是 只有在休眠环境下才能复现的 ,那么只能使用DBG_UART串口, 进入休眠后USB要断开会导致抓不到休眠中的日志。
  • 如果使用DBG_UART串口,还需要准备一个高速串口工具(能支持6M波特率,例如ch343、ft4232)。
  • 合宙开发板默认有引出USB和DBG_UART串口,可以直接接线使用。
  • EPAT log工具 EPAT_V1.3.262.573,使用方式本文章也会简单说明,在EPAT软件 Manual 目录中也有一份使用介绍的PDF。
  • Wireshark网络包分析工具:


三、怎么抓日志

3.1 选择正确且合适的日志输出端口

USB的虚拟端口其中有一个为底层日志的输出端口。

可从设备管理器端口属性中“设备实例路径”的值为:

"USBVID_19D1&PID_0001&MI_04xxxxxx&0&0004"

锁定到底层日志输出端口是哪一个。

图片

**建议使用USB来抓取日志 **

优点: USB虚拟端口输出速率很高,所以基本不会出现丢日志的现象;

缺点: 连接USB时不会进入休眠。

DBG_UART串口需要以6M波特率输出底层日志,此串口输出的数据要通过EPAT工具才可以解析。

优点: 进入休眠的日志也同样可以抓取。

缺点: 但因为波特率要求在6M,所以对串口线的要求很高,如果引出的杜邦线太长或者质量不高,也会影响日志输出的数据,导致工具不能正常解析。


3.2 ****认识EPAT工具中的图标功能

以下从左至右依次介绍:

图片

1)重启模块;

2)勾选选择的端口从其他串口调试工具尝试打开是否可以正常输出数据(正常打开输出的就是乱码);

3)如果使用AT固件,默认DBG_UART端口输出是6M波特率。

可以通过:

AT+ECPCFG=logBaudrate,6000000 指令修改,

波特率设置请不要低于6M,不然很容易出现丢日志、抓的不全。

  • 打开日志文件
    需要在打开EPAT工具时跳出的"Select Data Source"选择框中选择"Select From Local Files",才能点击打开日志文件的功能,可以打开ZIP压缩包和Bin格式的日志文件。
  • 保存日志
    会将已抓取到的日志导出,以ZIP压缩包的方式保存,方便提供给技术同事或研发同事分析。
  • 更新解析日志的数据库文件
    在抓日志的时候,可以不匹配,等在使用EPAT打开日志文件的时候再做匹配解析。
  • 筛选查看日志
    如果不了解,用不到这个功能。
  • 启动开始抓日志
    如果没有日志出来,请检查日志端口有没有选择正确,有没有勾选打开;确认端口正确,也以勾选,还是没有日志出来,请尝试:
  • 暂停日志
  • 停止抓日志
    点击完停止后,就可以选择保存日志,发给技术/研发同事分析了。
  • 清除日志
    建议每次正式准备抓日志前清理一下日志,这样保存出来的日志给技术同事分析会方便很多。
  • 搜索当前view视图的日志内容
  • 设备端口配置界面

3.3 底层日志抓取步骤

3.3.1 打开EPAT工具,抓日志选择第一项“Serial Device”

图片

3.3.2 选择日志端口,准备抓取log

图片

接下来将从选择使用USB的虚拟日志端口 、选择使用DBG_UART串口,以及两个端口都使用的方式,分别进行详细讲解:


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
返回顶部