高通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的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM