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的电压在《硬件设计手册》规定范围内,模块就不会因为供电问题出现异常啦!


  • 发表于 2018-08-28 09:51
  • 阅读 ( 4785 )
  • 分类:默认分类

0 条评论

请先 登录 后评论
不写代码的码农
技术销售Delectate

43 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章