[Android][sensor]高通SEE架构下adsp平台的sensor低功耗原理

[Android][sensor]高通SEE架构下adsp平台的sensor低功耗原理

  • 早期
  • SensorHub
    • MTK平台
    • 高通平台
      • 低功耗空间(island 空间)
        • 重新划分island 空间
        • 添加sensor器件或算法到island空间

早期

sensor挂载在Ap侧处理,驱动生成对应设备节点给上层上报数据。sensor需要一直处于工作状态,导致很多场景系统不能进入深度休眠,产生功耗问题。

SensorHub

SensorHub是一种基于低功耗MCU和轻量级RTOS操作系统之上的软硬件结合的解决方案,为了解决功耗问题而产生的,主要功能是连接并处理来自各sensor的数据。

MTK平台

SCP架构(system companion processor):采用sensorhub。基于低功耗的MCU和轻量级RTOS操作系统之上的软硬件结合方案,一般称为SRAM空间。

高通平台

adsp架构:将sensor放到adsp(audio dsp; dsp: 应用数字信号处理系统)中,待机时主处理器休眠以降低功耗,adsp在处理音频数据的间隙处理sensor数据,以减小功耗。
slpi架构:slpi(sensor low power island)

低功耗空间(island 空间)

本质:CPU的二级缓存(即外部缓存,L2 cache、TCM),通过SRAM器件实现,空间大小由硬件限制,后期一般无法调整大小。

原理:SRAM不需要实时刷新电路就能够保存数据,所以具有静止存取数据的作用,功耗较低;DRAM需要不停地反复刷新电路,否则内部的数据将会消失,因此功耗会高。

需要运行在island mode的业务一般是Sensor、Audio等领域,涉及业务包含器件驱动、计步、语音唤醒、AONCamera等需要在AP休眠后仍继续运行的业务。

大小:其大小可以在相应芯片手册sensors overview上查到。也可以在编译log中看到,可以搜索如下关键字:

Island Meminfo for: SSC_TCM_PHYSPOOL 表示Sensor空间
Island Meminfo for: QURTOS_SSC_ISLAND_POOL 表示Sensor空间
Island Meminfo for: AUDIO_TCM_PHYSPOOL 表示Audio空间
Total island space copied at boot 表示已使用空间
Total island space left in island pool 表示剩余空间

重新划分island 空间

高通平台的island划分在不同的物理片区,sensor 的空间 oversize 不会影响 audio , audio 的空间 oversize 也不会影响 sensor 。

audio/sensor 低功耗空间目前基本遵循各 50% 的原则,而高通原始基线一般 audio 预分配空间占用会超过 50% , sensor 预分配空间会低于 50% ,有时会导致sensor的驱动或者自研算法无法加进island mode,这时候就需要手动调整低功耗空间分区大小。

不同PD之间划分内存大小必须以 64K 的整数倍进行,否则会因为内存对齐方式造成内存浪费
从audio 划分内存到 sensor 空间,一般是裁剪 audio 的 heap 空间,再划分至 sensor 空间

可以参考如下修改方案:
adsp_proc/build/chipset/divar/adsp/qdsp6.xml

    <physical_pool name="QURTOS_VA_ISLAND_POOL">
       <region base="0x0A000000" size="0x60000" name="QURTOS_ISLAND_REGION_TCM" cache_policy="l1_wb_l2_uncacheable"/>
       </physical_pool>

    <physical_pool name="QURTOS_SSC_ISLAND_POOL">
       <region base="0x0A060000" size="0x20000" name="QURTOS_ISLAND_REGION_TCM" cache_policy="l1_wb_l2_uncacheable"/>
       <region allocate="island" size="0x40000" name="QURTOS_ISLAND_REGION_DDR" cache_policy="l1_wb_l2_cacheable"/>
   </physical_pool>

SSC的base = VA的base +VA的size
VA让出的size可以加到SSC的size上

添加sensor器件或算法到island空间

可以按照oem示例代码添加sensor器件或算法,默认是配置到DDR空间上:
adsp_proc\ssc\chipset\kodiak\por.py

 include_sensor_vendor_libs.extend(['lsm6dso',
                                    'sns_mmc56x3x',
                                    'sns_newsensor',
                                    'sns_ltr311'])

添加算法为include_algo_libs

如果需要添加到island空间:
adsp_proc\ssc\chipset\kodiak\por.py

        env.AddUsesFlags(['SNS_ISLAND_INCLUDE_NEWSENSOR'])

同时需要在newsensor的.scons文件中添加:

newsensor_island_enable = True
...
add_island_files = newsensor_island_enable

这样编译时就会将以_island.c结尾的文件添加进island空间

你可能感兴趣的:(android_sensor,android)