高通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. 系统带有的传感器测试代码

系统自带的:
hardware\libhardware\tests\nusensors\nusensors.cpp
作用:可以列出系统中存在的所有的传感器,监听并打印出传感器的数据。

高通专有的:
(1) vendor\qcom\proprietary\sensors\dsps\test\src\sns_cm_test.cpp

(2) vendor\qcom\proprietary\sensors\dsps\test\src\sns_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的。

猜你喜欢

转载自www.cnblogs.com/hellokitty2/p/10966241.html