zoukankan      html  css  js  c++  java
  • 高通Sensor驱动学习笔记

    高通ADSP Sensor框架:

    高通sensor架构实例分析之一

    linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)

    linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)

    高通SEE Sensor框架:

    高通SDM845平台Sensor学习——1.框架

    高通SDM845平台Sensor学习——2.Hal层

    高通SDM845平台Sensor学习——3.SLPI(Physical Sensor)

    高通SDM845平台Sensor学习——4.SLPI(SAM Sensor)

    msm8960之前是adsp(Audio DSP)架构,现在换成SEE(Sensor Exclute Environment)架构了。

    一、ADSP(Audio DSP)架构

    1. adsp架构简介

      最初的时候芯片厂家对sensor的处理和对待其它外设一样都是直接挂在processor上,sensor的驱动也和其他linux或android的驱动一样,生成对应的设备节点给上层提供数据。但后来这一切发生了变化,最主要的原因就是功耗。Sensor希望自己能够一直处于工作状态下,如计步器等应用场景。这样如果sensor还挂在主processor上势必影响待机功耗。因此各个芯片厂推出了各自的方案,如sensor-hub等等。高通在MSM8960之后就将sensor的处理塞到了一个单独的音频dsp中了(MSM8953中这个dsp叫作aDSP),这样待机时主处理器休眠降低功耗,由这个aDSP在处理音频数据的间隙捎带着就能把sensor的数据处理了。

    2. 以MSM8953为例的ADSP架构图

    3. 在应用处理器中,软件接口中不再有每个sensor的设备节点了。那有的是什么呢,只有Sensor1 API Socket Remoting Layer层对应的 (CPU与
    ADSP之间是通过Socket通信的!)API接口。


    4. 那么ADSP与应用处理器之间用什么机制进行通信呢?图中可以看到一个叫QMI的东西,就是它了,这个高通基于共享内存机制开发的多核间
    通信技术,在应用处理器侧和ADSP侧都有相应的库已经完成了底层实现。之后有机会分析一下这种号称最为有效的多核间通信技术。

    5. ADSP与CPU之间通过QMI进行通信的。QMI就是高通基于共享内存机制开发的多核间通信技术。

    6. 系统带有的传感器测试代码

    系统自带的:
    hardwarelibhardware ests usensors usensors.cpp
    作用:可以列出系统中存在的所有的传感器,监听并打印出传感器的数据。

    高通专有的:
    (1) vendorqcomproprietarysensorsdsps estsrcsns_cm_test.cpp

    (2) vendorqcomproprietarysensorsdsps estsrcsns_dsps_tc0001.c

    (3) 测试程序:
    vendor/qcom/proprietary/sensors/qsensortest/src/com/qualcomm/qti/sensors/core/sensortest/SensorTest.java
    JNI文件:
    vendor/qcom/proprietary/sensors/dsps/sensortest/jni/src/sensor_test.c


    7. Sensor上报数据的三种方式

    (1) Polling (0x00) 调用一次get_data后启动timer,等到timer到时间后调用sns_ddf_driver_if_s中指定的handle_timer()函数上报一组传感器数据

    (2) DRI (0x80) 调用enable_sched_data()启用DRI(Data ReadyInterrupt,数据完成中断),按照set_cycle_time指定的ODR(Output Data Rate,数据输出速率)进行数据采集,采集完成后调用sns_ddf_driver_if_s中指定的handle_irq()函数上报传感器数据。

    (3) FIFO (0xD0) 调用trigger_fifo_data()函数启动FIFO模式,当数据量到达指定的阈值,触发sns_ddf_smgr_data_notify()函数上报一批数据。

    一般加速度、陀螺仪等数据量较大的使用FIFO模式,光线、距离等有数据有变化才需要上报的传感器使用DRI模式。

    二、SEE(Sensors Execution Environment)架构

    1. SEE框架简介

    高通从SDM845平台开始,Sensor使用新的架构SEE(Sensors Execution Environment),和之前架构不同,新的架构有着很多的优点。

    2. config都是以 .json 为后缀的文件,每个物理sensor会有两个json文件,一个是包含所有平台的特殊配置文件,另一个是sensor driver
    的特殊配置文件。

    3. 各个sensor都是通过xxxx.scons静态添加sensor的。

  • 相关阅读:
    找到了2年前的一个微博小号
    Float Equal Problem
    有用的护肤品贴
    最近状态总结
    [Coursera]Machine Learning
    KMP算法(转载)
    [Leetcode] Median of Two Sorted Arrays
    [Algorithms(Princeton)] Week1
    [Algorithms(Princeton)] Week1
    [Leetcode] Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10966241.html
Copyright © 2011-2022 走看看