# 开关机 ***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.*** --- # 功能概述 本章全面介绍Quectel OSA电源管理模块的功能特性、API使用方法及典型应用示例,旨在帮助开发者快速掌握电源管理能力的集成与调试,确保设备在各种电源工况下稳定可靠运行。 在蜂窝物联网设备(如Tracker、工业网关、智能表计)的实际部署中,电源相关问题是运维阶段的高发痛点——设备无法正常启动、运行中异常自动关机、电池续航骤降等现象屡见不鲜。这些问题往往源于开机原因不明、低电量处理不当、充电状态监控缺失或复位策略不完善。Quectel OSA电源管理模块正是为解决这些棘手问题而设计,它提供了一套统一且易用的接口,使开发者能够: - 获取开机原因:区分是按键开机、硬件看门狗复位、深度唤醒、还是异常掉电重上电,帮助快速定位启动阶段故障; - 控制设备关机与重启:支持软件关机和软复位,并可在重启前保存关键现场日志,便于事后分析; - 实时查询充电状态与电池电量:包括充电进行中、充电完成、电池电压/百分比等,为低电量预警和充电策略提供依据; - 监控电源事件:如外部供电插拔、电池过温、欠压等,让应用程序能够提前采取降频、休眠或告警等保护动作。 典型高频应用场景包括: - 设备无法启动时:通过读取开机原因寄存器,判断是否为异常复位(如看门狗超时),若为异常则上传复位日志至云端,避免反复重启死循环; - 设备自动关机后:在下次上电时查询上次关机原因(如低电压保护或过热),据此调整下一次运行功耗策略,或向平台上报关机事件; - 电池供电产品中:结合充电状态和电量值,动态控制网络连接间隔和GPS定位频率,延长有效工作时间。 后续章节将对各API的入参、返回值及错误码进行详细说明,并附带完整的代码示例。同时,我们还将总结常见电源异常现象的诊断思路及应对方案,帮助您提前规避现场故障,提升产品的鲁棒性。 # 开关机API ## 头文件 *qosa_power.h* ## 函数概览 | **函数** | **说明** | | --- | --- | | *qosa_power_down()* | 控制模块关机 | | *qosa_power_reset()* | 控制模块重启 | | *qosa_power_get_boot_cause()* | 获取开机原因 | | *qosa_power_get_charger_status()* | 获取充电状态和电量 | | *qosa_get_pwrkey_level()* | 获取PWRKEY引脚电平 | | *qosa_pwrkey_callback_register()* | 注册PWRKEY按键关机回调 | | *qosa_pwrkey_callback()* | PWRKEY按键事件回调函数 | ## 函数详解 ### qosa_power_down - **功能描述** 控制模块执行关机操作,支持正常关机和快速关机两种模式。 - **函数原型** ```c qosa_power_error_e qosa_power_down(qosa_powd_mode_e powd_mode) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *powd_mode* | 输入 | *qosa_powd_mode_e* | 关机模式
*QOSA_POWD_NORMAL*:正常关机
*QOSA_POWD_IMMDLY*:快速关机 | - **返回值说明** *QOSA_POWER_SUCCESS*:函数执行成功 *QOSA_POWER_GENERAL*:函数执行失败 ### qosa_power_reset - **功能描述** 控制模块执行重启操作,支持正常重启、快速重启、FOTA重启、不安全重启四种模式 **。** - **函数原型** ```c qosa_power_error_e qosa_power_reset(qosa_reset_mode_e reset_mode) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *reset_mode* | 输入 | *qosa_reset_mode_e* | 重启模式
*QOSA_RESET_NORMAL*:正常重启
*QOSA_RESET_QUICK*:快速重启
*QOSA_RESET_FOTA*:FOTA 升级后重启
*QOSA_RESET_UNSAFETY*:不安全强制重启 | - **返回值说明** *QOSA_POWER_SUCCESS*:函数执行成功 *QOSA_POWER_GENERAL*:函数执行失败 ### qosa_power_get_boot_cause - **功能描述** 获取模块本次的开机原因(如按键开机、RTC闹钟开机、充电开机等)。 - **函数原型** ```c qosa_power_error_e qosa_power_get_boot_cause(qosa_boot_cause_e *boot_cause) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *boot_cause* | 输出 | qosa_boot_cause_e* | 输出参数,指向开机原因枚举的指针 | - **返回值说明** 始终返回 *QOSA_POWER_SUCCESS*:函数执行成功 ### qosa_power_get_charger_status - **功能描述** 获取电池充电状态、剩余电量百分比和电池电压。 - **函数原型** ```c qosa_power_error_e qosa_power_get_charger_status(qosa_charge_status_e *nBcs, qosa_uint8_t *nBcl, qosa_uint32_t *vol) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *nBcs* | 输出 | qosa_charge_status_e * | 充电状态
*0*:未充电
*1*:充电中
2 *:* 充电完成 | | *nBcl* | 输出 | qosa_uint8_t * | 剩余电量百分比(0~100) | | *vol* | 输出 | qosa_uint32_t * | 电池电压。单位:mV | - **返回值说明** 始终返回 *QOSA_POWER_SUCCESS*:函数执行成功 ### qosa_get_pwrkey_level - **功能描述** 获取模块PWRKEY按键引脚的当前电平状态。 - **函数原型** ```c qosa_power_error_e qosa_get_pwrkey_level(qosa_uint8_t *pwrkey_level) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *pwrkey_level* | 输出 | qosa_uint8_t* | PWRKEY引脚电平值 | - **返回值说明** *QOSA_POWER_SUCCESS:函数执行成功* *QOSA_POWER_INVALID_PARAM*:参数为NULL ### qosa_pwrkey_callback_register - **功能描述** 注册PWRKEY按键关机回调函数,当按键触发关机时会调用该回调。 - **函数原型** ```c qosa_power_error_e qosa_pwrkey_callback_register(qosa_pwrkey_callback pwrkey_cb) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *pwrkey_cb* | 输入 | qosa_pwrkey_callback | 回调函数指针,无参数无返回值 | - **返回值说明** *QOSA_POWER_SUCCESS*:函数执行成功 *QOSA_POWER_INVALID_PARAM*:回调函数指针为NULL ### qosa_pwrkey_callback 回调函数类型定义如下: - **功能描述** PWRKEY按键事件回调函数类型,当按键状态变化时调用,传入当前按键电平。 ```c typedef void (*qosa_pwrkey_callback)(qosa_uint8_t pinlevel) ``` ## 枚举定义 ### qosa_powd_mode_e 关机模式枚举定义如下: ```c typedef enum{ QOSA_POWD_IMMDLY = 0, QOSA_POWD_NORMAL, QOSA_POWD_INVALID } qosa_powd_mode_e; ``` | **成员** | **说明** | | --- | --- | | *QOSA_POWD_IMMDLY* | 快速关机模式:不注销网络,直接关机 | | *QOSA_POWD_NORMAL* | 正常关机模式:先注销网络,再关机 | | *QOSA_POWD_INVALID* | 无效关机模式 | ### qosa_reset_mode_e 重启模式枚举定义如下: ```c typedef enum{ QOSA_RESET_QUICK = 0, /*!< 快速重启:不注销网络,不等待 FLASH 操作完成 */ QOSA_RESET_NORMAL, /*!< 正常重启:注销网络并等待 FLASH 操作完成 */ QOSA_RESET_FOTA, /*!< FOTA 重启:固件升级后重启 */ QOSA_RESET_UNSAFETY, /*!< 不安全重启:立即复位,不保证数据完整性 */ QOSA_RESET_INVALID /*!< 无效重启模式 */ } qosa_reset_mode_e; ``` | **成员** | **说明** | | --- | --- | | *QOSA_RESET_QUICK* | 快速重启:不注销网络,不等待FLASH操作完成 | | *QOSA_RESET_NORMAL* | 正常重启:注销网络并等待FLASH操作完成 | | *QOSA_RESET_FOTA* | FOTA重启:固件升级后重启 | | *QOSA_RESET_UNSAFETY* | 不安全重启:立即复位,不保证数据完整性 | | *QOSA_RESET_INVALID* | 无效重启模式 | ### qosa_boot_cause_e 开机原因枚举定义如下: ```c typedef enum{ QOSA_BOOT_CAUSE_UNKNOWN = 0, /*!< 未知原因开机 */ QOSA_BOOT_CAUSE_PSM_WAKE, /*!< 深睡眠/PSM 睡眠唤醒开机 */ QOSA_BOOT_CAUSE_PWRKEY, /*!< PWRKEY 按键开机 */ QOSA_BOOT_CAUSE_RESET, /*!< RESET 按键复位开机 */ QOSA_BOOT_CAUSE_WDG, /*!< 看门狗复位开机 */ QOSA_BOOT_CAUSE_PANIC, /*!< 系统异常崩溃复位开机 */ QOSA_BOOT_CAUSE_SWRESET, /*!< 软件主动复位开机 */ QOSA_BOOT_CAUSE_FOTA, /*!< FOTA 流程复位开机 */ QOSA_BOOT_CAUSE_INVALID /*!< 无效开机原因 */ } qosa_boot_cause_e; ``` | **成员** | **说明** | | --- | --- | | *QOSA_BOOT_CAUSE_UNKNOWN* | 未知原因开机 | | *QOSA_BOOT_CAUSE_PSM_WAKE* | 深睡眠/PSM睡眠唤醒开机 | | *QOSA_BOOT_CAUSE_PWRKEY* | PWRKEY按键开机 | | *QOSA_BOOT_CAUSE_RESET* | RESET按键复位开机 | | *QOSA_BOOT_CAUSE_WDG* | 看门狗复位开机 | | *QOSA_BOOT_CAUSE_PANIC* | 系统异常崩溃复位开机 | | *QOSA_BOOT_CAUSE_SWRESET* | 软件主动复位开机 | | *QOSA_BOOT_CAUSE_FOTA* | FOTA流程复位开机 | | *QOSA_BOOT_CAUSE_INVALID* | 无效开机原因 | ### qosa_charge_status_e 充电状态枚举定义如下: ```c typedef enum{ QOSA_CHARGE_IDEL = 0, /*!< 未充电状态 */ QOSA_CHARGE_ING, /*!< 正在充电 */ QOSA_CHARGE_STOP /*!< 充电完成 */ } qosa_charge_status_e; ``` | **成员** | **说明** | | --- | --- | | *QOSA_CHARGE_IDEL* | 未充电状态 | | *QOSA_CHARGE_ING* | 正在充电 | | *QOSA_CHARGE_STOP* | 充电完成 | ### qosa_powd_mode_e 错误码枚举定义如下: ```c typedef enum{ QOSA_POWER_SUCCESS = 0, QOSA_POWER_GENERAL = 1 | (QOSA_COMPONENT_POWER << 16), QOSA_POWER_INVALID_PARAM, } qosa_power_error_e; ``` | **成员** | **说明** | | --- | --- | | *QOSA_POWER_SUCCESS* | 操作成功 | | *QOSA_POWER_GENERAL* | 通用错误 | | *QOSA_POWER_INVALID_PARAM* | 参数无效 | # 应用逻辑流程图 ## 关机流程 ```{image} images/board_X6hawsU4ohRDwHba52jc2EvWn4b.jpg :width: 691px :height: 950px :align: center ``` ## 重启流程 ```{figure} images/board_Fm8Jwy1ULhCa9yboa7vcUnB9nee.jpg :align: center :alt: image ``` # 示例代码 完整示例代码请查看https://github.com/UniRTOS/UniRTOS-Doc-Examples/blob/main/system/power/power.c