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