上一篇已对主控的硬件和软件层面做了相应的总结,本篇将从手表常见的外设来说明:外设不同状态下对穿戴产品功耗的影响。
手表常见的外设有:
- 人机交互:LCD+Touch等。常见有TFT、AMOLED模组;
- 生物医学传感器:PPG、ECG等。用于光学、电学等原理获取人体生物特征值:PPG用于计算心率、血氧等,ECG用于监测心电图;
- 惯性传感器:加速度传感器(ACC)、陀螺仪(GYRO)、地磁(MAG)等。常作为运动、健康、睡眠算法的raw data;
- 近场通信:NFC等,用于实现移动支付、数据传输、门禁系统等功能;
- 定位:GPS等,用于运动定位、地图定位等功能;
- 支付:支付宝芯片等,用于硬件加密;
- 存储介质:NandFlash、NorFlash、EMMC等,由于存储固件、应用APP、用户数据等;
- ...
不同产品的外设配置可能会存在区别,下面小弟就以LCD、TP这组典型外设来说明下。
LCD
主要影响功耗的是 a) 自刷新频率、b) 亮度、c) 休眠模式:
以AMOLED为例,显示状态分为 Normal mode、AOD mode。休眠状态分为 Sleep mode、Standby mode。
自刷新频率
a) Normal mode一般配置为60hz;b) AOD mode一般配置为15hz。
自刷新频率限制了频率的最高帧率。市面较多的模组都是模组厂在出厂时就固化了自刷新频率,所以如果要从自刷新频率进行功耗优化,就得提前和模组厂沟通确认了。
通常,Normal mode的刷新频率一般不会降低,毕竟影响的是显示帧率,但AOD mode 据了解,有厂家已经能够做到几hz的效果了,实属牛x,因为AOD在15hz的情况下,很多模组还是存在肉眼可见的闪屏情况的。
亮度
Normal mode的亮度一般会提供由用户手动调节,或根据屏下光感来自适应调整,这块的功耗就没啥好说明了(市面常见的显示模组最高显示亮度由400nit~1000nit不等),用户设置的亮度越高,对应的功耗也越高了。
AOD mode(Always on Display)一般会选择固定亮度,而且亮度通常会较低(一般控制在最高亮度的20%以内)。因为AMOLED的物理属性,常亮会存在“烧屏”风险,“烧屏”后到时候给你来个绿屏护眼模式了哈哈哈,别说,早期我们调试阶段偶尔也会遇到“烧屏”情况的。所以从功耗的角度,我们通常会尽量降低AOD的亮度,而从硬件保护的角度,软件还会考虑定期移动显示内容位置来保证每个像素点都不会一直常亮。
休眠模式
休眠模式是在熄屏后触发的,分为sleep mode和standby mode,简单的说就是休眠等级不同。
进出sleep mode,一般只要发送 sleep in/out指令即可;
而进出standby mode,进入时需要发送sleep in + standby,而退出时还需要对模组执行硬件复位,再执行初始化才能退出;
相比sleep mode,退出standby mode需要对模组做硬件复位,所以我们就可以在进入standby后将模组给下电来优化功耗了。与此同时,功耗的收益需要付出的是需要更长的退出休眠时长(硬复位+初始化),影响的就是抬手亮屏等场景的速度了。所以这块的功耗优化就要在性能要求之间做权衡了。
Touch(TP)
主要影响功耗的是 a) 报点率,b) 休眠模式
报点率
TP的报点率,可以理解为触控面板的采样率,最直观的影响就是用户滑动的跟手效果。报点率越高,对应触控模组的功耗也越高。
举个极限的例子,1Hz和100Hz的报点率。用户从屏幕最左侧滑动到最右侧,用了500ms,1Hz的报点率得再过500ms才能相应用户的滑动操作,而100Hz就能够及时响应。
但也不是报点率越高就越好,再举个极限的例子,10000Hz的报点率,滑动的这1s内,抛开吊炸天的芯片,普通芯片的CPU得频繁响应中断,线程级任务就很难获得执行的机会,应用压根反应不过来,不光是TP相关的动作,连同其他任务和低优先级中断都无法执行,手表反而就更卡了,还跟个毛线手了。
所以TP报点率得折中选择,权衡功耗和性能,一般会在50~120H左右。
休眠模式
和LCD类似,TP也存在不同的休眠等级。如果用户使能了点触亮屏,那么再熄屏之后,TP只能进入浅睡模式,以便于及时响应点触中断;如果关闭了点触亮屏功能,那么就可以跟随系统动作,进入深睡模式。类似LCD,深度休眠的功耗收益要付出的代价就是退出休眠的时长更长,这里就不再展开了。
外设功耗模型
外设功耗模型是根据应用场景,合理切换外设的工作模式。设计目的是为了在满足用户使用场景的情况下,尽可能降低整机功耗。一般步骤为:
- 确定应用场景外设需要的工作模式;
- 确定外设各个模式下的工作电流;
- 在非应用场景下,将外设切换到省电模式;
- 打桩压测外设各个工作模式切换是否正常;
以PPG为例,有心率模式、血氧模式、佩戴检测模式。
a) 首先要明确不同应用下,PPG所需要切换的工作模式。如后台心率监测、心率应用检测,就需要切换成心率模式,后台血氧监测、血氧应用检测,就需要切换成血氧模式;
b) 分别切换PPG的3个模式,进行功耗测试(血氧模式功耗>心率模式>佩戴模式);
c) 进入应用场景时,控制PPG切换至对应模式,在退出应用场景的接口,将PPG切换为佩戴模式(通常功耗优化会在这个步骤下文章,比如减少中断频率、减少同步动作等);
d) 反复打桩压测3个模式切换是否正常(通常在HAL层进行统计,并结合功耗仪的记录情况来监测);
以上就是针对PPG的功耗模式设计的简单描述,实际开发过程会比上述过程会稍复杂,比如不同的应用场景下,可能需要其他外设配合输入一些raw data来执行健康算法,这里就要尽量减少交互的频率,在有限的交互次数来传输更多的有效数据,等等。
以上就是功耗外设篇的分享了,后续会从系统的角度对功耗优化和处理异常功耗bug做阐述。