新闻  |   论坛  |   博客  |   在线研讨会
征程 6 系统 power 状态机介绍
地平线开发者 | 2025-04-01 12:01:30    阅读:15   发布文章

 1.征程 6X 电源状态


1.1征程 6X 芯片电源域


征程 6x 内部有 AON、MCU 和 Main 域三个电源域。其中 AON 为非下电状态需要一直供电的电源域,MCU 电源域用于给 Hsm 和 MCU 及其内部 IP 供电,Main 域给其他部分供电。


1.2征程 6X 电源状态列表


征程 6x 目前实现了 Off,MCU only,Working,Deep sleep 和 LightSleep 五种电源状态,详细说明如下:


image.png

1.3征程 6X 电源状态迁移表


Description

image.png


- Cx:状态迁移向量编号。

- UND:代表该状态迁移向量未定。

- C11: 对于进入低功耗状态,推荐使用本状态而非组合状态。


1.4征程 6X 电源状态迁移说明


C1(Off->MCU only)


```Plain


- 说明:系统从完全断电状态启动到只有MCU only状态。

- 过程:


  1. KL15等触发VR5510上电流程,VR5510按照OTP设计,给AON及MCU域供电。

  2. Romcode引导HSM以及SBL。

  3. SBL引导Autosar,至此SOC处于MCU only状态。


- API方法:无

```


C2(MCU only->Off)


```Plain


- 说明:系统从 MCU only 状态跳转到 Off 状态。

- 过程:


 1.此时 Main 域已经完全下电,包括外部 DDR 颗粒。

 2.TJA1145 进入低功耗模式,配置成功后,INH 引脚会转换为高阻态,并被板级下拉电阻拉低。

 3.VR5510 检测到 POWERON1 引脚拉低,按照 OTP 设定的流程完成下电。


- API 方法: SysPower_Shutdown()

```


C4(MCU only->Working)


```Plain


- 说明:系统从仅MCU域工作到全域启动,冷启动流程。

- 过程:


  1. 通过GPIO给Main域的PMIC上电。

  2. 配置Acore启动地址(SPL地址)。

  3. SPL启动后,根据标志决定是冷启动流程还是恢复流程,如果是冷启动,则初始化DDR后引导BL31。


- API方法:Pmu_PerformMainDoMainOn

```


C6(MCU only->Deep sleep)


```Plain


- 说明:系统从仅 MCU 域工作到仅 AON 域上电,此时 Main 域应该处于下电状态。

- 过程:


 1.此时处于 MCU only 状态,不需要关心 Main 域包括外部 DDR 颗粒状态(由进入 MCU only 状态时完成设置)。

 2.AON 区域标记当前是 DeepSleep 而非下电。

 3.设置唤醒源。

 4.IPC 通知 HSM 准备进入 Deep sleep 状态。

 5.确保 Main 域处于 Off 状态(Pmu_Lld_PerformMainDoMainOff)。

 6.MCU core 进入 WFI 状态。

 7.HSM 进入 WFI 状态。

 8.PMU 检测到所有 MCU core 进入 Suspend 状态后,输出 STBY 信号,将 VR5510 设置为 STANDY 状态,只保留 AON 供电。


-API 方法:

 1.SysPower_Suspend

 2.SysPower_GpioWakeupSet/SysPower_RtcWakeupSet

```


C9(Working->MCU only)


```Plain


- 说明:系统从正常工作状态到仅MCU工作状态,此状态为Main域下电状态,DDR颗粒下电状态。

- 过程:


  1. MCU通过IPC通知Main域下电。(可选)

  2. Acore走Linux下电流程。

  3. Acore通过SCMI发送CMD到MCU侧发起下电流程。

  4. MCU给Acore所有相关PMU下电。

  5. MCU给Acore所有相关PMIC下电。


- API方法:


  1. Linux shell: reboot osoff

  2. MCU通知Main域下电:Pmu_PerformMainDoMainOff

  3. MCU直接给Main域下电:Pmu_PerformMainDomainForceOff

```


C11(Working ->Deep sleep)


```Plain


- 说明:系统从 Working 状态到只有 AON 供电的状态

- 过程:


 1.MCU 通过 IPC 发送 SOC 进入低功耗命令。(可选)

 2.Acore 走 Linux 正常 Suspend 流程。

 3.Acore 在 ATF 中切换 DDR 状态为自刷新状态。

 4.Acore 发送 SCMI 发送 CMD 到 MCU 侧发起 Deep Sleep 流程。

 5.MCU 侧获取并保存 Acore 的启动地址到 AON 区域。

 6.等待 Acore 所有核进入 Suspend 状态。

 7.MCU 侧关闭 Main 域 PMU。

 8.AON 区域保存当前是 Deep sleep 模式而非下电模式。

 9.设置唤醒源。

 10.MCU 通过 IPC 通知 HSM 进入 Suspend 状态,然后 MCU 进入 Suspend 状态。

 11.HSM 进入 Suspend 状态。

 12.PMU 检测到所有 MCU core 进入 Suspend 状态后,输出 STBY 信号,将 VR5510 设置为 STANDY 状态,只保留 AON 供电。


- API 方法:

 1.Linux shell: systemctl suspend

 2.MCU 通知 Main 域休眠:SysPower_MainStateSwitchNotify

```


C12(Deep sleep->MCU only)


```Plain


- 说明:系统从Deep sleep状态恢复到MCU only状态。

- 过程:


  1. SOC被唤醒源唤醒,VR5510退出STANDBY状态。

  2. VR5510按照OTP给MCU域上电,Hsm与MCU(SBL)开始运行。

  3. Autosar启动后,根据标志判断当前是Wakeup流程。


- API方法:无

- 唤醒源:外部GPIO(ETH帧、CAN帧、KL15等通过电路的方式唤醒)及RTC。

```


C21(Working->LightSleep)


```markdown


- 说明:系统从正常工作状态到 LightSleep 状态,此状态为 Main 域下电状态,DDR 颗粒自刷新状态。

- 过程:


 1.Mcu 设置当前休眠默认为 light sleep。

 2.Mcu 通过 IPC 通知 Main 域休眠。

 3.Acore 走 Linux 休眠流程。

 4.Acore 通过 SCMI 发送 CMD 到 Mcu 侧发起休眠流程。

 5.Mcu 给 Acore 所有相关 PMU 下电。

 6.Mcu 给 Acore 除 ddr 颗粒供电外其他 PMIC 下电。


- API方法:无

 1.SysPower_SetSleepMode:设置休眠模式。

 2.SysPower_MainStateSwitchNotify:通知 Main 域休眠。。

```


C22(LightSleep->Working)


```Plain


- 说明:系统从仅LightSleep到全域启动,唤醒流程。

- 过程:


  1. 通过GPIO给Main域的PMIC上电。

  2. 配置Acore启动地址(SPL地址)。

  3. 设置相关的PMU。

  4. SPL启动后,根据标志决定是恢复流程,如果是恢复状态,则将DDR从自恢复状态恢复到正常工作状态,并跳转到之前保存到Aon sram区域的Acore地址即可。


- API方法:


  1. Pmu_PerformMainDoMainOn:给Main域上电并启动SPL。

```


C23(LightSleep->Deep sleep)


```markdown


- 说明:系统从仅 LightSleep 到仅 Aon 域上电,此时 Main 域应该处于下电+ddr 自刷新状态。

- 过程:


 1.AON 区域标记当前是 DeepSleep 而非下电。

 2.设置唤醒源。

 3.IPC 通知 HSM 准备进入 Deep sleep 状态。

 4.MCU core 进入 WFI 状态。

 5.HSM 进入 WFI 状态。

 6.PMU 检测到所有 MCU core 进入 Suspend 状态后,输出 STBY 信号,将 VR5510 设置为 STANDY 状态,只保留 AON 供电。


- API 方法:

 1.SysPower_Suspend

 2.SysPower_GpioWakeupSet/SysPower_RtcWakeupSet

```


C24(Deep sleep->LightSleep)


```Plain


- 说明:系统从Deep sleep状态恢复到LightSleep状态。

- 过程:


  1. SOC被唤醒源唤醒,VR5510退出STANDBY状态。

  2. VR5510按照OTP给Mcu域上电,Hsm/Mcu(SBL)开始运行。

  3. SBL根据标志判断此次为唤醒流程,只引导Autosar。

  4. Autosar启动后,根据标志判断当前是Wakeup流程。


- API方法:无

- 唤醒源:外部GPIO(ETH帧、CAN帧、KL15等通过电路的方式唤醒)及RTC

```


C25(LightSleep->Mcu only)


```markdown


- 说明:系统从 LightSleep 状态到仅 Mcu 工作状态,此状态为 Main 域下电状态,DDR 颗粒自刷新状态。

- 过程:Mcu 给 Acore 所有相关 PMIC 下电。


- API 方法:

 1.MCU 直接给 Main 域下电:Pmu_PerformMainDomainForceOff

等通过电路的方式唤醒)及RTC

```


C25(LightSleep->Mcu only)


```markdown


- 说明:系统从 LightSleep 状态到仅 Mcu 工作状态,此状态为 Main 域下电状态,DDR 颗粒自刷新状态。

- 过程:Mcu 给 Acore 所有相关 PMIC 下电。


- API 方法:

 1.MCU 直接给 Main 域下电:Pmu_PerformMainDomainForceOff

```


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客