高通Sensor驱动学习笔记
高通ADSP Sensor框架:
高通sensor架構(gòu)實(shí)例分析之一
linux驅(qū)動(dòng)由淺入深系列:高通sensor架構(gòu)實(shí)例分析之二(驅(qū)動(dòng)代碼結(jié)構(gòu))
linux驅(qū)動(dòng)由淺入深系列:高通sensor架構(gòu)實(shí)例分析之三(adsp上報(bào)數(shù)據(jù)詳解、校準(zhǔn)流程詳解)
高通SEE Sensor框架:
高通SDM845平臺(tái)Sensor學(xué)習(xí)——1.框架
高通SDM845平臺(tái)Sensor學(xué)習(xí)——2.Hal層
高通SDM845平臺(tái)Sensor學(xué)習(xí)——3.SLPI(Physical Sensor)
高通SDM845平臺(tái)Sensor學(xué)習(xí)——4.SLPI(SAM Sensor)
msm8960之前是adsp(Audio DSP)架構(gòu),現(xiàn)在換成SEE(Sensor Exclute Environment)架構(gòu)了。
一、ADSP(Audio DSP)架構(gòu)
1. adsp架構(gòu)簡(jiǎn)介
最初的時(shí)候芯片廠家對(duì)sensor的處理和對(duì)待其它外設(shè)一樣都是直接掛在processor上,sensor的驅(qū)動(dòng)也和其他linux或android的驅(qū)動(dòng)一樣,生成對(duì)應(yīng)的設(shè)備節(jié)點(diǎn)給上層提供數(shù)據(jù)。但后來這一切發(fā)生了變化,最主要的原因就是功耗。Sensor希望自己能夠一直處于工作狀態(tài)下,如計(jì)步器等應(yīng)用場(chǎng)景。這樣如果sensor還掛在主processor上勢(shì)必影響待機(jī)功耗。因此各個(gè)芯片廠推出了各自的方案,如sensor-hub等等。高通在MSM8960之后就將sensor的處理塞到了一個(gè)單獨(dú)的音頻dsp中了(MSM8953中這個(gè)dsp叫作aDSP),這樣待機(jī)時(shí)主處理器休眠降低功耗,由這個(gè)aDSP在處理音頻數(shù)據(jù)的間隙捎帶著就能把sensor的數(shù)據(jù)處理了。
2. 以MSM8953為例的ADSP架構(gòu)圖
3. 在應(yīng)用處理器中,軟件接口中不再有每個(gè)sensor的設(shè)備節(jié)點(diǎn)了。那有的是什么呢,只有Sensor1 API Socket Remoting Layer層對(duì)應(yīng)的 (CPU與
ADSP之間是通過Socket通信的!)API接口。
4. 那么ADSP與應(yīng)用處理器之間用什么機(jī)制進(jìn)行通信呢?圖中可以看到一個(gè)叫QMI的東西,就是它了,這個(gè)高通基于共享內(nèi)存機(jī)制開發(fā)的多核間
通信技術(shù),在應(yīng)用處理器側(cè)和ADSP側(cè)都有相應(yīng)的庫已經(jīng)完成了底層實(shí)現(xiàn)。之后有機(jī)會(huì)分析一下這種號(hào)稱最為有效的多核間通信技術(shù)。
5. ADSP與CPU之間通過QMI進(jìn)行通信的。QMI就是高通基于共享內(nèi)存機(jī)制開發(fā)的多核間通信技術(shù)。
6. 系統(tǒng)帶有的傳感器測(cè)試代碼
系統(tǒng)自帶的:
hardwarelibhardware ests
usensors
usensors.cpp
作用:可以列出系統(tǒng)中存在的所有的傳感器,監(jiān)聽并打印出傳感器的數(shù)據(jù)。
高通專有的:
(1) vendorqcomproprietarysensorsdsps estsrcsns_cm_test.cpp
(2) vendorqcomproprietarysensorsdsps estsrcsns_dsps_tc0001.c
(3) 測(cè)試程序:
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上報(bào)數(shù)據(jù)的三種方式
(1) Polling (0x00) 調(diào)用一次get_data后啟動(dòng)timer,等到timer到時(shí)間后調(diào)用sns_ddf_driver_if_s中指定的handle_timer()函數(shù)上報(bào)一組傳感器數(shù)據(jù)
(2) DRI (0x80) 調(diào)用enable_sched_data()啟用DRI(Data ReadyInterrupt,數(shù)據(jù)完成中斷),按照set_cycle_time指定的ODR(Output Data Rate,數(shù)據(jù)輸出速率)進(jìn)行數(shù)據(jù)采集,采集完成后調(diào)用sns_ddf_driver_if_s中指定的handle_irq()函數(shù)上報(bào)傳感器數(shù)據(jù)。
(3) FIFO (0xD0) 調(diào)用trigger_fifo_data()函數(shù)啟動(dòng)FIFO模式,當(dāng)數(shù)據(jù)量到達(dá)指定的閾值,觸發(fā)sns_ddf_smgr_data_notify()函數(shù)上報(bào)一批數(shù)據(jù)。
一般加速度、陀螺儀等數(shù)據(jù)量較大的使用FIFO模式,光線、距離等有數(shù)據(jù)有變化才需要上報(bào)的傳感器使用DRI模式。
二、SEE(Sensors Execution Environment)架構(gòu)
1. SEE框架簡(jiǎn)介
高通從SDM845平臺(tái)開始,Sensor使用新的架構(gòu)SEE(Sensors Execution Environment),和之前架構(gòu)不同,新的架構(gòu)有著很多的優(yōu)點(diǎn)。
2. config都是以 .json 為后綴的文件,每個(gè)物理sensor會(huì)有兩個(gè)json文件,一個(gè)是包含所有平臺(tái)的特殊配置文件,另一個(gè)是sensor driver
的特殊配置文件。
3. 各個(gè)sensor都是通過xxxx.scons靜態(tài)添加sensor的。
總結(jié)
以上是生活随笔為你收集整理的高通Sensor驱动学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】深入理解JVM
- 下一篇: C#操作电脑多显示器设置