Skip to content

重启问题

1、重启现象

模块重启一般通过监控如下几个硬件接口,就可以判断是否有重启现象:

1.1、USB口

  • USB插入情况下,系统设备管理器不停有COM口设备重新枚举
  • USB口插入后,没有任何反应
    • USB还没有初始化,设备就重启,导致USB设备没法正常枚举

1.2、DEBUG(UART0)串口

  • DEBUG串口,重复打印相同的开机日志,具体现象如下:
    • 日志窗口的UE Time列时间没有持续增长
    • 日志中开机相关信息重复打印

1.3、MAIN(UART1)串口

  • MAIN串口,重复打印boot.rom ....信息
  • AT版本除了上面内容,还会重复打印RDY提示信息
^boot.rom'v\0\0'!\n
RDY
....

^boot.rom'v\0\0'!\n
RDY

2、常见重启原因以及解决方法

通过查看开机原因,可以判断重启原因。

  • 通过开机日志判断重启原因(需要>=R4.0.0版本)

通过DEBUG串口,抓取开机日志,并搜索关键词poweron可以看到如下内容打印

poweron reason XXXXX 

其中XXX表示具体开机原因, 具体原因如下:

poweron reason 说明
POWERKE 按键开机
PADRESET 按键重启
SWRESET 软件重启
HARDFAULT 异常重启
WDT 开门狗重启
ASSERT ASSERT异常重启
  • AT指令查看开机原因
AT*EXASSERT=0,2
OK

power on reason:    XXXX
...

其中XXX表示具体开机原因, 具体原因参考上面表格

  • API接口查询开机原因
yopen_get_powerup_reason(&powerup_reason);

其中powerup_reason为枚举类型,定义如下:

typedef enum {
    YOPEN_REASON_POWERKEY = 0,          // 按键开机
    YOPEN_REASON_SWRESET,               // 软件重启
    YOPEN_REASON_PADRESET,              // reset键重启
    YOPEN_REASON_HARDFAULT,             // 异常重启
    YOPEN_REASON_ASSERT,                // ASSERT重启
    YOPEN_REASON_WDT,                   // 看门狗重启
    YOPEN_REASON_FOTA,                  // FOTA重启
    YOPEN_REASON_UNKNOWN                // 未知重启原因
} yopen_powerup_reason_t;

2.1 供电不足

  • 开机原因为:POWERKEY

开机后电压不够,比如常压版VBAT管脚供电电压低于3.3V。或者供电最大电流不够(一般要求高于1A),导致模块注网或者收发数据峰值电流不够,硬件重启。

  • 解决方法
    • 检查供电是否正常,是否有短路或者断路
    • 检查供电最大电流是否足够,是否有过压保护

2.2 软件异常

  • 开机原因为:HARDFAULT或者ASSERT
  • 解决方法
    • 通过AT*EXASSERT=1或者调用yopen_debug_set_fault_action(YOPEN_EXCEP_OPTION_DUMP_FLASH_EPAT_LOOP);接口设置为debug模式
    • 通过Trace32死机分析工具`分析软件异常原因,修改代码解决。

2.3 软件重启

  • 开机原因为:SWRESET
  • 解决方法
    • 检查主控是否发送了AT+CFUN=1,1等模块重启指令
    • 检查代码是否调用yopen_power_reset重启接口

2.4 硬件(按键)重启

  • 开机原因为:PADRESET
  • 解决方法
    • 检查是否有按键短接或者长按导致重启
    • 检查RESET_N管脚是否收到外界干扰,导致重启

2.5 看门狗重启

  • 开机原因为:WDT
  • 解决方法
    • 一般只有Yopen软件才会出现这样的问题
    • 检查是否有代码死循环导致看门狗超时
    • 检查看门狗超时设置是否合理