J6X电源状态
J6X芯片电源域
J6x内部有AON、MCU和Main域三个电源域。其中AON为非下电状态需要一直供电的电源域,MCU电源域用于给Hsm和MCU及其内部IP供电,Main域给其他部分供电。
J6X电源状态列表
J6x目前实现了Off,MCU only,Working,Deep sleep和LightSleep五种电源状态,详细说明如下:
| 电源状态 | 描述 | AON | MCU | Main | DDR颗粒 |
+------------+------------------------------------------+-----+-----+------+---------+
| Off | 芯片完全下电 | Off | Off | Off | Off |
+------------+------------------------------------------+-----+-----+------+---------+
| MCU only | MCU Rcore正常工作 | On | On | Off | Off |
+------------+------------------------------------------+-----+-----+------+---------+
| Deep sleep | 只有AON工作,可被唤醒 | On | Off | Off | 自刷新 |
+------------+------------------------------------------+-----+-----+------+---------+
| Working | 正常工作模式 | On | On | On | On |
+------------+------------------------------------------+-----+-----+------+---------+
| LightSleep | Mcu正常工作,main仅ddr颗粒供电维持自刷新 | On | On | Off | 自刷新 |
+------------+------------------------------------------+-----+-----+------+---------+
J6X电源状态迁移表

| Current state(行) | | | | | |
| ->end state(列) | Off | MCU only | Working | Deep sleep | Light sleep |
+-------------------+--------+----------+---------+------------+-------------+
| Off | UND | C1 | C1+C4 | UND | UND |
+-------------------+--------+----------+---------+------------+-------------+
| MCU only | C2 | UND | C4 | C6 | UND |
+-------------------+--------+----------+---------+------------+-------------+
| Working | UND | C9 | UND | C11 | C21 |
+-------------------+--------+----------+---------+------------+-------------+
| Deep sleep | C12+C2 | C12 | C12+C4 | UND | C24 |
+-------------------+--------+----------+---------+------------+-------------+
| Light sleep | C25+C2 | C25 | C22 | C23 | UND |
+-------------------+--------+----------+---------+------------+-------------+
Cx:状态迁移向量编号。
UND:代表该状态迁移向量未定。
C11: 对于进入低功耗状态,推荐使用本状态而非组合状态。
J6X电源状态迁移说明
C1(Off->MCU only)
说明:系统从MCU only状态跳转到Off状态。
过程:
此时Main域已经完全下电,包括外部DDR颗粒。
TJA1145进入低功耗模式,配置成功后,INH引脚会转换为高阻态,并被板级下拉电阻拉低。
VR5510检测到POWERON1引脚拉低,按照OTP设定的流程完成下电。
API方法: SysPower_Shutdown()
C4(MCU only->Working)
说明:系统从仅MCU域工作到仅AON域上电,此时Main域应该处于下电状态。
过程:
此时处于MCU only状态,不需要关心Main域包括外部DDR颗粒状态(由进入MCU only状态时完成设置)。
AON区域标记当前是DeepSleep而非下电。
设置唤醒源。
IPC通知HSM准备进入Deep sleep状态。
确保Main域处于Off状态(Pmu_Lld_PerformMainDoMainOff)。
MCU core进入WFI状态。
HSM进入WFI状态。
PMU检测到所有MCU core进入Suspend状态后,输出STBY信号,将VR5510设置为STANDY状态,只保留AON供电。
API方法:
SysPower_Suspend
SysPower_GpioWakeupSet/SysPower_RtcWakeupSet
C9(Working->MCU only)
说明:系统从Working状态到只有AON供电的状态
过程:
MCU通过IPC发送SOC进入低功耗命令。(可选)
Acore走Linux正常Suspend流程。
Acore在ATF中切换DDR状态为自刷新状态。
Acore发送SCMI发送CMD到MCU侧发起Deep Sleep流程。
MCU侧获取并保存Acore的启动地址到AON区域。
等待Acore所有核进入Suspend状态。
MCU侧关闭Main域PMU。
AON区域保存当前是Deep sleep模式而非下电模式。
设置唤醒源。
MCU通过IPC通知HSM进入Suspend状态,然后MCU进入Suspend状态。
HSM进入Suspend状态。
PMU检测到所有MCU core进入Suspend状态后,输出STBY信号,将VR5510设置为STANDY状态,只保留AON供电。
API方法:
Linux shell:systemctl suspend
MCU通知Main域休眠:SysPower_MainStateSwitchNotify
C12(Deep sleep->MCU only)
说明:系统从正常工作状态到LightSleep状态,此状态为Main域下电状态,DDR颗粒自刷新状态。
过程:
Mcu设置当前休眠默认为light sleep。
Mcu通过IPC通知Main域休眠。
Acore走Linux休眠流程。
Acore通过SCMI发送CMD到Mcu侧发起休眠流程。
Mcu给Acore所有相关PMU下电。
Mcu给Acore除ddr颗粒供电外其他PMIC下电。
API方法:
SysPower_SetSleepMode:设置休眠模式。
SysPower_MainStateSwitchNotify:通知Main域休眠。
C22(LightSleep->Working)
说明:系统从仅LightSleep到仅Aon域上电,此时Main域应该处于下电+ddr自刷新状态。
过程:
AON区域标记当前是DeepSleep而非下电。
设置唤醒源。
IPC通知HSM准备进入Deep sleep状态。
MCU core进入WFI状态。
HSM进入WFI状态。
PMU检测到所有MCU core进入Suspend状态后,输出STBY信号,将VR5510设置为STANDY状态,只保留AON供电。
API方法:
SysPower_Suspend
SysPower_GpioWakeupSet/SysPower_RtcWakeupSet
C24(Deep sleep->LightSleep)
说明:系统从LightSleep状态到仅Mcu工作状态,此状态为Main域下电状态,DDR颗粒自刷新状态。
过程:Mcu给Acore所有相关PMIC下电。
API方法:
MCU直接给Main域下电:Pmu_PerformMainDomainForceOff