深いLinuxドライバシリーズ:3つのセンサアーキテクチャ(ADSP詳細レポートデータ、詳細な較正手順)のハイパス分析の例としては、[オン]

転載この記事:https://blog.csdn.net/radianceblau/article/details/76180915

ナビゲーションのこのシリーズ:

深いLinuxドライバシリーズ:ハイパス分析センサ・アーキテクチャの一例(+ AP全体概要側面コード分析)

Linuxドライバシリーズディープ:クアルコムセンサアーキテクチャ解析例えばビス(ADSPドライバコード構造)
Linuxドライバディープシリーズ:3つのセンサアーキテクチャのハイパス分析の例(ADSP詳細レポートデータ、詳細な較正手順)


同期データがsmgr低速周辺バス問題を遮断することによって取得することができるので、同期または非同期モードに分けADSPからデータを取得する方法は、非同期モードでは、一般に、効率を低下させる消費電力の増大、実用に使用されます。

 

センサー報告されたデータは、次のカテゴリに分かれています

同期同期レポートデータ(各データレポートA)

非同期報告非同期データは、それぞれ次のリクエストがブロックされていない、タイミングビュー状態は、(すなわち、レポートを受信します)

自己スケジューリング非同期データは、各要求はブロックされません後、中断またはビューの状態のタイミングを待って、報告し、(すなわち、それは報告を受けました)

非同期FIFOデータレポートは、それぞれがデータのセットを要求、設定レベル、データ報告のセットが割り込みレベルによってトリガーされたときにセンサデータが蓄積されます。

S4S(センサーの同期)は、データの欠落を避けるために、クロックを同期させるために使用されるか、または同じデータを2回抽出します

 

実際に使用されている三つの方法にまとめるには:

1、(ポーリング)は0x00同期方法[SYNC]:センサデータにsmgr要求、バックデータの到着を待っているブロックと非同期[非同期]:タイマーを開始get_data等タイマ割り込みコールsns_ddf_driver_if_sが(指定handle_timerに到着し呼び出した後)センサデータのレポーティング機能のセット。handle_timer()一般的に使用されるsns_ddf_smgr_notify_dataのDDF提供()関数はデータを報告します。

2、(DRI)も、[自己スケジューリング]として知られているが0x80 enable_sched_data(呼び出し)のデータがためset_cycle_time ODR(出力データ・レート、データ出力レートを)に従って、指定されたタイマーを開始するために完了するか中断されるまでDRI(DataReadyInterrupt、データ完了割り込み)を有効にしますコールsns_ddf_driver_if_s指定handle_irq()関数は、センサデータを報告した後、データの取得は、買収は完了です。

データsns_ddf_smgr_data_notify()関数はデータの数を報告トリガ、指定されたしきい値に達したとき3、(FIFO)0xD0コールtrigger_fifo_data()関数は、FIFOモードを開始します。

(Handle_irq-> report_data->レポートデータsns_ddf_smgr_notify_data)

 通常、データ、加速度計、ジャイロスコープや他の大規模なFIFO方式の量が使用され、光、距離データの変更のみDRIセンサモードを使用して報告される必要があります。

 

例えば、Gセンサbmi160特定の分析以下:

sns_ddf_driver_if_s SNS_DD_IF_BMI160 =
{

.INIT =&sns_dd_bmi160_init、

.get_data =&sns_dd_bmi160_get_data、

.set_attrib =&sns_dd_bmi160_set_attr、

.get_attrib =&sns_dd_bmi160_get_attr、

.handle_timer =&sns_dd_bmi160_handle_timer、

.handle_irq =&sns_dd_bmi160_interrupt_handler、

.RESET =&sns_dd_bmi160_reset、

.run_test =&sns_dd_bmi160_self_test、

.enable_sched_data =&sns_dd_bmi160_enable_sched_data、

プローブ=&sns_dd_bmi160_probe、

.trigger_fifo_data =&sns_dd_bmi160_trigger_fifo_data
};
この構造は、センサが実装駆動ハイパスADSPの鍵となり、運転者は、対応する機能を実装する必要が、その後smgr_sensor_fn_ptr_mapテーブルに充填された構造体のポインタは、システムに登録されます。

そのようなsns_dd_xxxx_uimg.c&sns_dd_bmi160_get_dataにファイルとして他の人が、これは実際には高域側ADSPコードユニークなアーキテクチャであるが、上述した構造の機能の注意深い観察は、そのようなファイルsns_dd_xxxx.cのsns_dd_bmi160_initなどのいくつかの機能、に見出される、即ち、を有します符号データは、一般的に報告されているキャッシュで実行uimg識別コード、センサの動作中に、行わ関連作業は、外部閉じDDR最小電力で動作させることができ、コード中umigはオープンDDRを同定する必要なしに実行されいくつかの初期化コードは、一般的に関連する仕事です行う場所。

 

全体的な理解を持つセンサーの種類数クアルコムのプラットフォームの次のリスト。
列挙型のtypedef
{
SNS_DDF_SENSOR__NONE、// 0
SNS_DDF_SENSOR_ACCEL、// 1
SNS_DDF_SENSOR_MAG、// 2
SNS_DDF_SENSOR_GYRO、// 3
SNS_DDF_SENSOR_TEMP、// 4
SNS_DDF_SENSOR_PROXIMITY、//。5
SNS_DDF_SENSOR_AMBIENT、//。6
SNS_DDF_SENSOR_PRESSURE、//。7
SNS_DDF_SENSOR_MAG_6D、//。8
SNS_DDF_SENSOR_GYRO_6D、 // 9
SNS_DDF_SENSOR_DOUBLETAP、// 10
SNS_DDF_SENSOR_SINGLETAP、//。11
SNS_DDF_SENSOR_IR_GESTURE、// 12れる
SNS_DDF_SENSOR_OEM_SENSOR_01、// 13は
SNS_DDF_SENSOR_OEM_SENSOR_02、// 14
SNS_DDF_SENSOR_OEM_SENSOR_03、// 15
SNS_DDF_SENSOR_OEM_SENSOR_04、// 16
SNS_DDF_SENSOR_OEM_SENSOR_05、// 17
SNS_DDF_SENSOR_OEM_SENSOR_06、// 18
SNS_DDF_SENSOR_OEM_SENSOR_07、// 19
SNS_DDF_SENSOR_OEM_SENSOR_08、// 20
SNS_DDF_SENSOR_OEM_SENSOR_09、// 21
SNS_DDF_SENSOR_OEM_SENSOR_10、// 22
SNS_DDF_SENSOR_STEP_EVENT、// 23
SNS_DDF_SENSOR_STEP_COUNT、// 24
SNS_DDF_SENSOR_SMD、// 25
SNS_DDF_SENSOR_GAME_RV、// 26
SNS_DDF_SENSOR_HUMIDITY、// 27
SNS_DDF_SENSOR_RGB、// 28
SNS_DDF_SENSOR_CT_C、// 29
SNS_DDF_SENSOR_SAR、// 30
SNS_DDF_SENSOR_HALL_EFFECT、// 31
SNS_DDF_SENSOR_AMBIENT_TEMP、// 32
// 33 SNS_DDF_SENSOR_ULTRA_VIOLET、
SNS_DDF_SENSOR_HEART_RATE、// 34
SNS_DDF_SENSOR_HEART_RATE_RAW、// 35
SNS_DDF_SENSOR_OBJECT_TEMP、// 36
SNS_DDF_SENSOR_TILT_EVENT、// 37
SNS_DDF_SENSOR_ORIENTATION_EVENT、// 38は

SNS_DDF_SENSOR__ALL、/ ** <*アドレスすべてのセンサ/
SNS_DDF_SENSOR_LAST
} sns_ddf_sensor_e、
特定のデータフローを監視する前に、様々な定義クアルコムの最初のルックセンサ構成は、属性

typedefを列挙
{
SNS_DDF_ATTRIB_POWER_INFO、// 0
SNS_DDF_ATTRIB_POWER_STATE、// 1
SNS_DDF_ATTRIB_DELAYS、// 2
SNS_DDF_ATTRIB_RANGE、// 3
SNS_DDF_ATTRIB_RESOLUTION_ADC、// 4
SNS_DDF_ATTRIB_RESOLUTION、// 5
SNS_DDF_ATTRIB_LOWPASS、// 6
SNS_DDF_ATTRIB_MOTION_DETECT、// 7
SNS_DDF_ATTRIB_DRIVER_INFO、// 8
SNS_DDF_ATTRIB_DEVICE_INFO、 // 9
SNS_DDF_ATTRIB_THRESHOLD、// 10
SNS_DDF_ATTRIB_ACCURACY、// 11
SNS_DDF_ATTRIB_BIAS、// 12
SNS_DDF_ATTRIB_ODR、// 13
// 14 SNS_DDF_ATTRIB_SUPPORTED_ODR_LIST、
// 15 SNS_DDF_ATTRIB_REGISTRY_GROUP、
SNS_DDF_ATTRIB_IO_REGISTER、// 16
SNS_DDF_ATTRIB_FIFO、// 17
SNS_DDF_ATTRIB_ODR_TOLERANCE、// 18
SNS_DDF_ATTRIB_FILTER_DELAY // 19

} sns_ddf_attribute_e。


初期化プロセス

1、プローブ

2、INIT

3、get_attr

SNS_DDF_ATTRIB_RESOLUTION_ADC

SNS_DDF_ATTRIB_LOWPASS、

SNS_DDF_ATTRIB_ODR、

SNS_DDF_ATTRIB_SUPPORTED_ODR_LIST、

SNS_DDF_ATTRIB_FIFO、

SNS_DDF_ATTRIB_DEVICE_INFO、

SNS_DDF_ATTRIB_POWER_INFO、

SNS_DDF_ATTRIB_RESOLUTION、

SNS_DDF_ATTRIB_RANGE、

4、リセット

 

FIFOモード時に電源ボタンを押してプロセス

1、リセット

2、set_attr特性がSNS_DDF_ATTRIB_POWER_INFOを提供しました

SNS_DDF_ATTRIB_RANGE、

SNS_DDF_ATTRIB_ODR、

SNS_DDF_ATTRIB_FILTER_DELAY

SNS_DDF_ATTRIB_FIFO

  

FIFOモードデータ報告プロセス

enable_sched_data

リセット

handle_timer

interrupt_handler

handle_irq_attach_temp

 

interrupt_handler

handle_irq_attach_temp

...

 DRIパターンデータ報告プロセス

リセット

set_attr

enable_sched_data

リセット

handle_timer

interrupt_handler

handle_irq_drdy

handle_irq_attach_temp

 

interrupt_handler

handle_irq_drdy

handle_irq_attach_temp

...

 

 POLLINGパターンデータ報告プロセス

1、リセット

2、get_data

3、handle_timer

4、get_data

5、get_data

...

 

 

キャリブレーション処理

最後に、ための装置の一貫性の違いにより、センサーのキャリブレーションプロセスを見て、工場内の各マシンは、キャリブレーションする必要があります。キャリブレーションプロセスを実現する次のとおりです。

 

1、SSC(ハイパスセンサコントローラの略)のようなキャリブレーションアプリ校正要求発行

2、SSCコールsns_ddf_driver_if_sセンサ駆動構造指定した関数RUN_TEST

図3に示すように、データは、バイアス電流の機械キャリブレーションモードの複数の計算、及び記憶されRUN_TEST SNS_DDF_TEST_OEM機能モード。

/ **
*工場出荷時のテスト。
* /
typedefの列挙
{
SNS_DDF_TEST_SELF、/ ** <セルフテスト。* /
SNS_DDF_TEST_IRQ、/ ** <割り込みテスト。* /
SNS_DDF_TEST_CONNECTIVITY、/ ** <基本的な接続をテストします。* /
SNS_DDF_TEST_SELF_HW、/ * 。* <ハードウェアセルフテスト*の/
SNS_DDF_TEST_SELF_SW、/ ** <ソフトウェアセルフテスト* /。
SNS_DDF_TEST_OEM / ** <* / OEMをテストします。

} sns_ddf_test_e;
。4、SSC、その後のGet SNS_DDF_ATTRIB_BIAS get_attrプロパティを呼び出し、キャリブレーションを得ます/persist/sensor/sns.regに記憶された前回のキャリブレーションデータの値が
初期化SSCのsns.reg後、5各センサバイアスの電流値にファイルから読み込まれ

図6は、我々get_Dataデータを読み出す各較正されたセンサは、生データが取得され、キャリブレーション後に上位層データに戻すように、バイアス値を算出します。

おすすめ

転載: www.cnblogs.com/zzb-Dream-90Time/p/10963720.html