什么是STR?
Suspend to ram 是一种特殊的电源工作模式,在这种工作模式下,所有的CPU core/控制器/IP core都会进入特殊的电源模式下,同时SOC 内部总线时钟降到最低的工作频率,PMIC的绝大部分供电都会被关闭,外部DDR进入自刷新模式。系统可以通过外部的信号/中断经由AOP(always on processor) 切换回正常的电源模式.
例如,在进入STR之后,整个SOC只有红框部分的硬件模块还在工作,其他模块均处于睡眠/offline状态.
STR工作流程
STR流程简述:
1,外部MCU/TBOX/GPIO/CAN信号触发进入STR mode
2,OEM lifecycle manager程序接收到进入STR mode 请求,开始准备进入STR mode的环境
3,OEM lifecycle manager通知 LA进入 STR mode,LA自己OS内部进入STR 处理流程
4, OEM lifecycle manager 通过qcore的PM接口通知已经注册的模块准备进入str mode,比如display/usb/openwfd_telltale以及OEM自己本身的模块
5,当LA&所有相关模块都已经进入str mode之后,触发QNX进入STR mode,这个时候整个系统包括所有SOC都进入str mode
6,MCU/TBOX/GPIO/CAN 通过中断唤醒AOP,AOP再唤醒所有SOC,同时通知OEM lifecycle manager去resume所有已经注册的模块
时序图如下:
STR基本验证
这里以Q+A的android R基线为例。
进入STR模式的方式:
# echo power > /dev/lcm_demo/display0/key #通过模拟按键通知android进入休眠模式
# cat /dev/qvm/la/power_status #检查确认android的电源状态,0表示已经进入休眠,1表示未进入休眠
# slay calib-touch #停掉mtouch模块
# slay openwfd_telltale #停掉openwfd client
# screen-pwrmgr off #QNX息屏
# echo "BUS::stop,busno=0" >> /var/pps/device/usb_ctrl1 #停掉usb controller 1
# echo "BUS::stop,busno=0" >> /var/pps/device/usb_ctrl2 #停掉usb controller 2
# str-ctl -i -e 5000000000 -w 5000000000 #以timer的方式进入和退出str
唤醒的方式:
#timer计时时间到会自动触发唤醒cpu,但是唤醒后需要复归app
# calib-touch
# openwfd_telltale
# screen-pwrmgr on
....
测试结果: