重启问题
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软件才会出现这样的问题
 - 检查是否有代码死循环导致看门狗超时
 - 检查看门狗超时设置是否合理