当前位置: 首页 > news >正文

征程 6 | power management sample

1. 功能概述

本文通过示例演示如何通过相关接口对启动标志进行读写,以及对 main 域电源进行控制与查询。相关 API 定义,请查询 电源管理用户手册 API 部分 。

2. main 域上下电及状态查询示例代码

请参考版本中 Service/Cmd_Utility/power_sample_cmd/src/PowerControl.c 相关代码:

// PowerControl.c代码
#include "Os.h"
#include "Log.h"
#include "Pmu.h"
#include "Boot.h"
#include "Shell_Port.h"// main域电源状态定义
#define MAINDOMAIN_STATUS_UNINIT      (0U)
#define MAINDOMAIN_STATUS_RUNNING     (1U)

注意

注意以下章节中的截图,在不同的版本上可能会有一些差异,只要关键信息部分一致即可。 请结合其中提到的验证方法做进一步确认。

2.1. MCU 对 Acore 进行上下电接口及命令说明

// 需要包含的头文件
#include "Power_Manager_Cust.h"// 通知Acore进行下电
hb_PM_RequestSt(MAINSTATE_OFF_ST);// 对Acore进行强制下电
hb_PM_RequestSt(MAINSTATE_FORCE_OFF_IT);// 对Acore进行上电

地平线版本中可使用如下命令:

testmainpower 0 # 通知Acore下电,同时会做bootflag和power状态查询
testmainpower forceoff # 对Acore强制下电
testmainpower 1 # 对Acore上电,同时会做bootflag和power状态查询

效果确认:

  1. 当对 Acore 进行下电,MCU 会有如下打印:

此时 MCU 正常,Acore 因为下电串口无法交互;

  1. 当对 Acore 进行强制下电,MCU 会有如下打印:

此时 MCU 正常,Acore 因为下电串口无法交互;

  1. 当对 Acore 进行上电,MCU 会有很长的打印,MCU 走完相关流程后,会有如下关键打印:

同时 Acore 会进入 kernel:

并可以正常进行命令行交互;

2.2. MCU 读写 bootflag 接口及命令说明

// 需要包含的头文件
#include "Boot.h"// 设置bootflag
Std_ReturnType Bl_MainDomainBootFlagSet(uint32 Flag);// 获取bootflag
Std_ReturnType Bl_MainDomainBootFlagGet(uint32 *Flag);

地平线版本中可使用如下命令:

testmainpower 0 # 对Acore下电,同时会做bootflag和power状态查询
testmainpower 1 # 对Acore上电,同时会做bootflag和power状态查询

效果确认:

示例代码中会尝试对 bootflag 进行读取/修改/恢复的流程;后边的数值代表对应 boot 标志,可以查询相关头文件。

2.3. MCU 获取 Acore power 状态接口及命令说明¶

// 需要包含的头文件
#include "Pmu.h"// 获取main power状态
Std_ReturnType Pmu_MainDomainStatusGet(uint32 *Status);

地平线版本中可使用如下命令:

getmainstatus # main power状态查询

效果确认:

示例代码中尝试去获取状态并打印出对应通过函数获取到的 Acore power 状态。

3. main 域 reset 示例

调用如下接口后,如果有接 Acore 串口,可以看到 Acore 串口有重启并再次正常进入 kernel,并且 Acore 的命令行可以进行正常交互。

3.1. main 域 reset 接口说明

// 需要包含的头文件
#include "Power_Manager_Cust.h"hb_PM_RequestSt(MAINSTATE_RESET_IT);

4. 征程 6X 全部下电示例

调用对应接口,MCU 和 Acore 都下电,两者的命令行都无法进行交互。要想重新启动,需要断电重启。

4.1. 全部下电接口说明

// 需要包含的头文件
#include "Power_Manager_Cust.h"hb_PM_RequestSt(SYSSTATE_SHUTDOWN_ST);

5. 不同场景休眠唤醒示例代码

请参考版本中 Service/Cmd_Utility/power_sample_cmd/src/PowerControl.c 相关代码,目前主要实现以下六个场景:

horizon:/$ powersample
[0512.790449 0]powersample {index:d} rtc_time:d>
[0512.790824 0]    index: 0: main suspend + mcu suspend + rtc wakeup + shutdown
[0512.791703 0]           1: main off + mcu suspend + rtc wakeup + shutdown
[0512.792538 0]           2: main suspend + mcu suspend + can wakeup + resume
[0512.793395 0]           3: main off + mcu suspend + can wakeup + poweron
[0512.794337 0]           4: main suspend + mcu suspend + rtc wakeup + resume
[0512.795077 0]           5: main off + mcu suspend + rtc wakeup + poweron

注意:各 sample 场景为都是单独流程,不要混合使用。如果在执行完一个 sample 场景后,需要更换场景测试,需要先进行整机下电,再重新上电。

场景拆分为以下几种流程:

流程 1: main off + mcu suspend:

流程 2:main suspend + mcu suspend:

流程 3:mcu on + main on:

流程 4:mcu on + main resume:

流程 5:rtc wakeup + shutdown:

在 rtc 唤醒场景中 - 如果需要 rtc 唤醒后直接关机,需要外部 kl15 信号源为低电平,否则会导致唤醒后一级电源无法正常下电

5.1. sample0

//sample0: main suspend + mcu suspend + rtc wakeup + shutdown// 设置rtc唤醒时间
Ret = SysPower_RtcWakeupSet(RtcWakeupTime);
if (Ret != E_OK)
{LogNotice("set rtc wakeup failed with %d\r\n", Ret);return -1;
}

5.2. sample1

//main off + mcu suspend + rtc wakeup + shutdown
/** acore scmi just control acore */
scmi_reset_mode = 1;// 通知acore进入下电
Ret = hb_PM_RequestSt(MAINSTATE_OFF_ST);if (Ret != E_OK)
{LogNotice("notify shutdown failed with %d\r\n", Ret);

5.3. sample2

//main suspend + mcu suspend + can wakeup + resume
//设置一个较大的rtc唤醒时间,以防止rtc误唤醒
Ret = SysPower_RtcWakeupSet(8388);
if (E_OK != Ret)
{LogNotice("SysPower_RtcWakeupSet failed with %d.\r\n", Ret);return -1;
}
//TJA1145进入低功耗模式相关配置
Ret = TJA1145_EnterLowPowerMode(1);

5.4. sample3

//3: main off + mcu suspend + can wakeup + poweron
/** acore scmi just control acore */
scmi_reset_mode = 1;
// 通知acore进入下电
Ret = hb_PM_RequestSt(MAINSTATE_OFF_ST);if (Ret != E_OK)
{LogNotice("notify shutdown failed with %d\r\n", Ret);return -1;

5.5. sample4

//main suspend + mcu suspend + rtc wakeup + resume
//设置一个rtc唤醒时间
Ret = SysPower_RtcWakeupSet(RtcWakeupTime);
if (Ret != E_OK)
{LogNotice("set rtc wakeup failed with %d\r\n", Ret);return -1;
}
// 通知acore开始休眠流程Ret = hb_PM_RequestSt(MAINSTATE_SLEEP_ST);

5.6. sample5

//main off + mcu suspend + rtc wakeup + poweron
/** acore scmi just control acore */
scmi_reset_mode = 1;
// 通知acore进入下电
Ret = hb_PM_RequestSt(MAINSTATE_OFF_ST);if (Ret != E_OK)
{LogNotice("notify shutdown failed with %d\r\n", Ret);return -1;
http://www.jsqmd.com/news/367601/

相关文章:

  • 2026最新测评:关于论文降aigc那款工具最有效,内含9款降ai率工具。
  • 【claude】Claude Skills 使用小技巧:7个让AI真正“懂你“的实用窍门
  • 基于java + vue药店管理系统(源码+数据库+文档)
  • Web 性能优化:如何让你的网站加载速度提升 50%
  • Spotify上传音乐文件,电脑播放本地音乐,手机同步电脑音乐
  • ST 表
  • 全网最全!10个论文降aigc神器,支持免费降ai率【建议收藏】
  • 明湾国际学校分享:AI如何重塑科技与学习生态?
  • 告别高AI率!这几款免费降低ai率的神器,彻底解决论文降aigc难题。
  • OpenClaw 暴雷背后:Command Tools 如何终结 AI 工具的“配置地狱”(附教程)
  • 明湾“145666“密码:一所非营利双语学校的使命与探索
  • Claude提示词工程 05,告别AI幻觉:让Claude诚实回应的提示词技巧
  • 乙醇燃料精准监测中枢:MTX-D数字双功能乙醇含量百分比和燃料温度计 改装店/车队/加油站/检测站全场景实战全解
  • 9款AI降AIGC工具亲测,毕业生速存
  • 毕业党福利!9款AI降AIGC率网站实测
  • 降ai率千万别乱试!实测10款降AI工具,谁最有效(附保姆级论文降ai教程)
  • Unity Entities 1.4 ECS 预制体实例化全教程:从单线程到多线程优化
  • 实测9款AI降AIGC神器,毕业收藏必备
  • 完整教程:基于YOLO13-C3k2-Star的阿塞拜疆传统服饰目标检测模型实现
  • 完整教程:在ASP.NET Core Web APP(MVC)开发中,如何处理Docker容器的持久化数据?
  • Unity Entities 1.4 ECS 核心工作流教程:从基础入门到 Authoring Baking
  • 毕业生必看!9款AI降AIGC率工具实测
  • Unity 2022.3.62 下使用 Entities 1.4 手动创建 ECS 入门工作流详细教程
  • 9款AI降AIGC率网站推荐,毕业党狂赞
  • BCI标签使用的核心规范与“红线”
  • linux 配置yum源和epel软件扩展包
  • 提示工程架构师的体系:从理论到实践
  • 必看!提示工程在基因编辑中的神奇应用策略
  • 实测9款AI降AIGC率工具,毕业季必备
  • 提示工程IDE环境配置:这些插件让你的开发更轻松