如果彻底死机,设备管理器中的端口如下图所示,模块的USB映射出的端口,有且仅有一个
如果设备管理器中的端口一直如下图所示,则表示正常工作
如果端口在不断的闪烁,弹出来又消失,则表示模块在不断的重启
日志中如果出现类似于下面的死机信息,正常情况下,20多秒后,会自动重启,如果一直不会自动重启,则可以认定程序确实死机了
EE LOG: LR:
0x6014bbd
EE LOG: PC:
0x6767cc4
EE LOG: SP:
0x72adb80
EE LOG: MSA
Disable Sleep
EE LOG: Wait
for DSP L1 Memory dump...
EE LOG: first
entry!
EE LOG:
Software version: NZ_NZ_CP_2.178.000X
EE LOG: Compilation
time: Jun 13 2019 09:17:56
Ep0: TX 0, RX 0
AT: TX 0, RX 0,
CTRL 0
DIAG: TX 0, RX
0, CTRL 0
RNDIS: TX 0, RX
1, CTRL 0
MassStorage: TX
0, RX 0
EE LOG: Cancel
RNDIS transfer
EE LOG: Prepare
for Sd dump
EE LOG:
eeSDDumpPrepare Enter
EE LOG:
eeSDDumpPrepare Exit
EE LOG: Prepare
for diag transmit
EE LOG:
finalAction:5, eeFatalActionExt:602453d, eeMode:3f
EE LOG: IPCIIR
0x0, APBC_IPC_CLK 0x4, AIRQ_IPC_ENABLE 0x3d10
只要没有设置ASSERT模式,出现任何异常,理论上都会自动重启
如果遇到“异常后无法自动重启,一直处于死机状态”的问题,首先按照如下步骤确认一下是否设置了ASSERT模式:
1、脚本代码中是否执行了ril.request("AT*EXASSERT=1")语句
2、是否人为通过模块USB口枚举出的ASR MODEM DEVICE AT口发送过AT*EXASSERT=1命令
3、如果有条件重启模块,重启后,通过模块USB口枚举出的ASR MODEM DEVICE AT口发送AT*EXASSERT?命令,查询一下ASSERT状态
注意:模块一旦设置过ASSERT模式,是永远保存在flash中的,只能通过AT*EXASSERT=0关闭ASSERT模式,所以AT*EXASSERT只能在调试问题时使用,而且使用之后,要及时通过AT*EXASSERT=0关闭
如果没有设置ASSERT模式,出现了“异常后无法自动重启,一直处于死机状态”的问题,则肯定是不正常的,需要具体问题具体分析
PS:Luat V0017以及之前的版本固件,存在一个bug,可能会导致异常死机而无法自动重启
日志中搜索poweron reason,可以获取到开机原因值,例如:
[poweron reason:] 3 SOCKET_LONG_CONNECTION
2.0.0 2.2.1 Luat_V0019_ASR1802_720D
中的3就表示开机原因值
开机原因值的意义如下:
0: 按键开机 1: 充电开机 2: 闹钟开机 3:
软件重启开机 4:
其他原因导致的开机
6: 异常开机, 8: 看门狗开机, 10: 电池开机 11:
系统使能开机, 12:
USB开机
13: JIG开机 14: 开关由OFF拨到ON检测到exton1n时,准许开机 15: 外部原因开机,
255: 未知
遇到重启问题时,按照如下步骤分析具体原因:
1. 是否存在脚本运行异常
找到重启前上一次运行的最后日志,确认一下是否有脚本运行异常信息输出,例如
lua /lua/socketTask.lua:75: attempt
to perform arithmetic on global 'djkasjdlas' (a nil value)
stack traceback:
/lua/socketTask.lua:75: in function
'cb
/lua/sys.lua:363: in function 'run'
/lua/
如果脚本中使用了errDump功能模块(一定要使用errDump功能模块,此功能模块对“量产投放市场的设备,远程调试初步定位问题”至关重要),直接在日志中搜索errDump,也可以定位出是否发生脚本异常,例如
[E]-[errDump.luaErr]
/lua/socketTask.lua:75: attempt to perform arithmetic on global 'djkasjdlas' (a
nil value)
stack traceback:
/lua/socketTask.lua:75:
in function 'cb'
/lua/sys.lua:363:
in function 'run'
/lua/main.lua:59:
in main chunk
[C]:
?
2. 是否存在固件运行异常
如果在第1步存在了脚本运行异常,则可以不用关心这一步的固件运行异常,因为任何脚本运行异常都会触发固件运行异常。
找到重启前上一次运行的最后日志,确认一下是否有固件运行异常信息输出,例如
EE LOG: LR: 0x6014bbd
EE LOG: PC: 0x6767cc4
EE LOG: SP: 0x72adb80
EE LOG: MSA Disable Sleep
EE LOG: Wait for DSP L1 Memory
dump...
EE LOG: first entry!
EE LOG: Software version:
NZ_NZ_CP_2.178.000X
EE LOG: Compilation time: Jun 13
2019 09:17:56
Ep0: TX 0, RX 0
AT: TX 0, RX 0, CTRL 0
DIAG: TX 0, RX 0, CTRL 0
RNDIS: TX 0, RX 1, CTRL 0
MassStorage: TX 0, RX 0
EE LOG: Cancel RNDIS transfer
EE LOG: Prepare for Sd dump
EE LOG: eeSDDumpPrepare Enter
EE LOG: eeSDDumpPrepare Exit
EE LOG: Prepare for diag transmit
EE LOG: finalAction:5,
eeFatalActionExt:602453d, eeMode:3f
EE LOG: IPCIIR 0x0, APBC_IPC_CLK
0x4, AIRQ_IPC_ENABLE 0x3d10
如果脚本中使用了errDump功能模块(core为0019以及以后的版本,script为2.2.0以及以后的版本)(一定要使用errDump功能模块,此功能模块对“量产投放市场的设备,远程调试初步定位问题”至关重要),直接在日志中搜索errDump,也可以定位出是否发生固件异常,例如
[E]-[errDump.firmwareAssertErr] desc=FALSE,file=platform_main.cline=506,LR:0x6015025,PC:0x67688e4,SP:0x72adb80
3. 如果不存在前2种情况,确认一下是否为供电不稳引起的重启
此章节介绍如何搜索日志,一步步排查是否出现网络异常
1. 搜索CGSN,确认一下日志中的IMEI是否与标签上的IMEI一致,如果不一致,则可能生产过程出错
2. 搜索ATWMFT,如果返回ERR,表示模块没有校准,可能会导致各种网络问题,基本上可以确定是生产过程出错导致的,必须返厂维修;如果返回SUCCESS,表示正常
注意:如果通过AT+CFUN=0进入飞行模式,以下几步的查询结果都是异常状态
3. 搜索CPIN,如果返回的不是READY,则SIM卡异常
4. 搜索CSQ,查询信号强度,信号强度最大值为31,如果查询出来的信号值小于10,可以认为信号较弱,如果环境本身的信号不差,则需要分析硬件射频是否存在问题
5. 搜索CREG、CGREG、CEREG,查询网络状态,如果状态不是1或者5,则表示网络未成功注册
6. 搜索^MODE,查询当前使用的网络模式,2G、3G还是4G,此模式仅作为分析问题时补充信息使用
7. 搜索CGDCONT,查询PDP是否已经激活,如果返回的查询结果中有APN以及本地IP,则表示正常
此章节介绍如何搜索日志,一步步排查是否出现socket应用异常
注意:如果通过AT+CFUN=0进入飞行模式,以下几步的查询结果都是异常状态
1. 搜索socket,如果出现socket:connect: core sock conn error或者socket:connect: connect fail,则表示socket连接失败
2. 搜索socket,如果出现send fail则表示发送失败
3. 搜索socket,如果出现socket.rtos.MSG_SOCK_CLOSE_IND则表示socket'被动关闭
errDump功能模块对“量产投放市场的设备,远程调试初步定位问题”至关重要, 强烈建议客户一定要使用此功能,加载此功能模块后,具备如下功能:
1.
可以上报死机以及重启异常到调试服务器
2.
如果打开了errDump. setNetworkLog(true)开关,可以上报网络和socket应用异常到调试服务器
如果无法输出日志,则根据设备管理器中的端口判断模块是否死机或者一直在反复重启
如果有日志输出,正则搜索如下信息,判断是否存在网络和socket应用异常
EE LOG|traceback|\[E\]|errDump|CGSN|ATWMFT|CFUN|CPIN|CREG|CGREG|CEREG|CSQ|\^MODE|CGDCONT|conn error|send fail|MSG_SOCK_CLOSE_IND
注意:以上字符串中的\为notepad++中使用的转义字符,不同编辑器可能不同,根据使用的编辑器自行修改
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!