Air系列模块重启原因分析及应对策略(一)

如果要问开发者,什么情况最让其崩溃,估计异常重启能排到前三。模块稳定运行不重启,是所有开发者的梦想。然而总会有一些意外情况导致模块异常重启。本文将对一些常见的重启情况进行分析,同时探讨其对应策略,希望可以为模块的稳定运行提供一些帮助。

通常,重启是由硬件原因或者软件原因造成的。虽然病因不同,但是表象极为相似,咱们就使用“望闻问切”的方法,剖析病因,对症下药,直达病灶,快速起效(嘿,请认准了,Luat大法好!)。

”字诀——检查硬件环境:仔细排查接线,外围设备,供电等是否存在问题;

”字诀——检查软件代码:查看模块输出的Trace。通常,我们可以通过分析重启前后的输出Trace判断错误所在;

”字诀——初步发现问题所在,尝试复现。当可以准确复现后,分析对应逻辑存在的问题(找到相关责任人,让他请客!)。

”字诀——根据问题去修改代码(打样),反复测试是否还会出现此问题,是否引入新问题,是否干扰到原有逻辑的运行。

重复上述步骤,直到模块可以稳定运行为止。

本文今天就先说一下“”字诀。

Air系列模块对电源的要求较为严格,以Air202模块为例:attachments-2018-08-3wvZbyYL5b84aa11dbbd3.png


如图所示,根据硬件设计手册的要求,模块瞬时电流在1.6A时,VBAT电压不应跌落3.4V,否则必然出现异常(在频繁通信时,电流要求更高,最好可以满足2A)。

如果模块的PWRKEY未接地,VBAT电压低于3.4V时模块会自动关机;

如果模块的PWRKEY已接地,电压低于3.4V时模块会表现为先自动关机。后因电流减小,供电端恢复正常,VBAT电压升至3.4V以上,模块重新走上电开机流程。此种情况表现为异常重启,输出的Tracepoweron reason0

[2018-06-12 12:40:03,311.311]: host trace poweron reason:        0       Air800      A9321       1.1.1         1.1.0         Luat_V0014_8955

poweron reason表:

POWERON 事件

POWERON 代码

解释

rtos. POWERON_KEY

0

按键开机

rtos. POWERON_CHARGER

1

充电开机

rtos. POWERON_ALARM

2

闹钟开机

rtos. POWERON_RESTART

3

软件重启开机

rtos. POWERON_EXCEPTION

6

异常开机

rtos. POWERON_HOST

7

HOST工具控制重启开机

rtos. POWERON_WATCHDOG

8

其他原因


所以,如果模块重启前有频繁的通信操作,且没有固定的语句报错(无规律性),重启后上报的poweron reason0,此时应该重点排查供电问题。

如果存在瞬间电压跌落,可能会导致模块出现异常。

下边,试举一例:

某客户使用开关电源将市电220V AC降压至12V DC,然后PCB使用DCDC12V降到4V给模块VBAT供电。模块的PWRKEY已经接地,实现上电自动开机。

模块在频繁通信时工作正常,但是闲暇时发心跳包却无规律性重启。分析日志发现,重启后Trace输出的poweron reason0,初步判断并非代码错误,而是供电问题导致的异常重启。

(请注意,任何情况下,poweron reason0,都应首先检查VBAT端供电电压跌落问题)

首先,在全负荷情况下使用功率计测量,查看是否超过电源的额定输出值:

attachments-2018-08-YFC4pPTE5b84aa3a3633d.jpg

负载不到10w,远未达到12V 2A的上限要求;接下来测量电源输出情况:

(这是一个很考验耐心的事情,因为是无规律性重启,所以很可能一直盯着,一直没事儿;稍稍走神一下,它就重启了……还有一个需要注意的是,绝对不要用“万用表”,一定要用示波器,因为万用表不够灵敏,很容易导致误判)

attachments-2018-08-HVDjPuxa5b84aa4c77f59.jpg

attachments-2018-08-JLXyeiHd5b84aa56a4f29.jpg

如上图所示,经过长久的等待,终于抓到异常。某种特殊情况下,电源可能会瞬间跌落至0V,随后恢复正常输出;这一个瞬间的跌落,导致模块VBAT端电压直接跌破3.4V,最终异常重启。

和电源厂家沟通后了解到,这个问题并非过热、电流过大的自保护,而是电源动态响应速度跟不上,负载很小的时候,电源本身进入待机模式导致。更换新电源后问题得以解决,模块不再异常重启。

attachments-2018-08-gIl61D8J5b84aa6f16490.jpg

很多时候,并不能和电源厂商沟通,而供电不稳时有发生,只能“硬抗”这种波动怎么办呢?简单有效的方法就是使用电容、电池,让他们稳定输出电压。

如果无法改善供电(如风能、太阳能),也无法使用电池、电容,那么只能优化代码逻辑。例如,尽量减少通信频率和时常,减少通信包大小,使瞬时电流不超过阈值以至于引起压降。

所以说呢,只要保证任何情况下,模块VBAT的电压在《硬件设计手册》规定范围内,模块就不会因为供电问题出现异常啦!


上次更新 2021-01-28