校准
传感器校准是调整或微调传感器硬件以确保准确性并最大限度地减少误差的过程。对工作环境变化敏感的传感器会因温度变化、机械磨损或工作范围偏移等因素而产生不适当的输出值。校准涉及将基于理论模型或标准的预期输出与传感器的实际测量输出进行比较。通过精确调整,传感器校准可提高性能、准确性和可靠性,从而确保传感器提供可靠的数据。
每次成功完成校准和关联的注册表更新(如以下各节所述)之后,ver 注册表项的值将递增。例如,如果注册表项中的偏差偏移量的 ver 值为 0,则在成功完成一次校准和注册表更新后,注册表项将使用新的偏置偏移量进行更新,并且 ver 值将递增为 1。
工厂传感器校准
工厂传感器校准是在制造阶段调整或微调传感器的过程。
加速度计
下表列出了加速度计校准过程:
地磁传感器
下表列出了地磁传感器校准过程:
接近
下表列出了接近校准过程:
环境光
下表列出了环境光校准过程:
Run-time 工厂传感器校准
Run-time 传感器校准是在传感器运行阶段(而不是在制造阶段)调整或微调传感器的过程。它是动态发生的,而传感器在现实世界中主动收集数据。
陀螺仪
陀螺仪校准传感器 gyro_cal 用于陀螺仪的 run-time 校准。下表列出了陀螺仪校准过程:
地磁传感器
地磁校准传感器 mag_cal 用于地磁传感器的 run-time 校准。下表列出了地磁传感器校准过程:
验证
ssc_sensor_info 测试工具用于验证 QSH 功能,并列出所有支持的传感器及其功能。
ssc_sensor_info
以下 shell 输出列出了所有支持的传感器及其属性:
root@qcm6490:~# ssc_sensor_info
ssc_sensor_info v1.86
SUID = 0xebd5604d09d379bca54dcf30ec041e0f
NAME = ak0991x
VENDOR = akm
TYPE = mag
AVAILABLE = true
VERSION = 2.62.47
API = sns_mag.proto
RATES = [1.000000, 10.000000, 20.000000, 50.000000, 100.000000]
RESOLUTIONS = 0.150000
RANGES = [-4912.000000,4912.000000]
DRI = false
FIFO_SIZE = 0
STREAM_TYPE = streaming
STREAM_SYNC = false
DYNAMIC = false
EVENT_SIZE = 16
OP_MODES = [LOW_POWER, LOW_NOISE]
ACTIVE_CURRENT = 900
SLEEP_CURRENT = 3
HW_ID = 0
RIGID_BODY = display
PHYSICAL_SENSOR = true
PHYSICAL_SENSOR_TESTS = [3, 1]
SELECTED_RESOLUTION = 0.150000
SELECTED_RANGE = [-4912.000000,4912.000000]
SUID = 0xaddeaddeaddeaddeaddeaddeaddeadde
NAME = da_test
VENDOR = QTI
TYPE = da_test
AVAILABLE = true
VERSION = 0.51.0
API = sns_da_test.proto
STREAM_TYPE = on_change
SUID = 0x69def905fea2fbac6a43ca273221a2eb
NAME = aont
VENDOR = QTI
TYPE = aont
AVAILABLE = true
VERSION = 0.0.1
API = sns_aont.proto
STREAM_TYPE = on_change
SUID = 0xabababababababababababababababab
NAME = suid
VENDOR = QTI
TYPE = suid
AVAILABLE = true
VERSION = 0.0.1
API = sns_suid.proto
STREAM_TYPE = single_output
SUID = 0xe12754a7007f27595e2541b4701e2275
NAME = registry
VENDOR = QTI
TYPE = registry
AVAILABLE = true
VERSION = 0.0.1
API = sns_registry.proto
STREAM_TYPE = single_output
SUID = 0xadfeadfeadfeadfeadfeadfeadfeadfe
NAME = da_test_big_image
VENDOR = QTI
TYPE = da_test
AVAILABLE = true
VERSION = 0.49.0
API = sns_da_test.proto
STREAM_TYPE = on_change
SUID = 0x61ab5376b4a5c9aa58442ede47acd316
NAME = icm4x6xx
VENDOR = TDK-Invensense
TYPE = accel
AVAILABLE = true
VERSION = 1.65.2
API = sns_accel.proto
RATES = [12.500000, 25.000000, 50.000000, 100.000000, 200.000000, 500.000000]
RESOLUTIONS = [0.000019, 0.000037, 0.000075, 0.000150, 0.000299]
RANGES = [[-9.806650,9.806650], [-19.613300,19.613300], [-39.226601,39.226601], [-78.453201,78.453201], [-156.906403,156.906403]]
DRI = true
FIFO_SIZE = 200
STREAM_TYPE = streaming
STREAM_SYNC = false
DYNAMIC = false
EVENT_SIZE = 16
OP_MODES = [LPM, NORMAL, HIGH_PERF]
ACTIVE_CURRENT = [50, 240, 240]
SLEEP_CURRENT = 6
HW_ID = 0
RIGID_BODY = display
PHYSICAL_SENSOR = true
PHYSICAL_SENSOR_TESTS = [3, 2, 1]
SELECTED_RESOLUTION = 0.000299
以下 QXDM 输出显示了低功耗处理器中所有支持的传感器及其属性的验证/确认日志:
[ 123/ 2] MSG 18:47:22.898750 SNS PLATFORM/High [sns_registry_parser.c 2099] REG INIT DONE... ts=63248955
[ 122/ 1] MSG 18:47:22.925000 SNS FRAMEWORK/Medium [ sns_diag_service.c 1072] Sensor registry Vendor:QTI SSID:53 registered with diag
[ 122/ 1] MSG 18:47:22.925000 SNS FRAMEWORK/Medium [ sns_sensor.c 769] Populating sensor b2926130 in island: 2, with SUID e12754a7 007f2759 5e2541b4 701e2275
[ 122/ 2] MSG 18:47:22.925000 SNS FRAMEWORK/High [sns_attribute_service.c 584] Sensor : registry, suid_populated : 1, available : 1
[ 122/ 2] MSG 18:47:22.925000 SNS FRAMEWORK/High [sns_attribute_service.c 594] Avail: B2926130 registry
[ 123/ 2] MSG 18:47:22.925000 SNS PLATFORM/High [sns_registry_sensor.c 284] Successfully initialized registry
[ 122/ 1] MSG 18:47:22.925000 SNS FRAMEWORK/Medium [sns_stream_service.c 150] Created data stream to Sensor 'registry' (b2926130) from Sensor 'suid' (b2922018): b296fd28
[ 122/ 1] MSG 18:47:22.925000 SNS FRAMEWORK/Medium [sns_stream_service.c 686] Add request b296fdc0 on stream b296fd28 (length 20; ID 512)
[ 122/ 0] MSG 18:47:22.926250 SNS FRAMEWORK/Low [sns_stream_service.c 548] Process request for Sensor b2926130 on b296fd28
[ 122/ 0] MSG 18:47:22.926250 SNS FRAMEWORK/Low [ sns_suid_sensor.c 1050] send_suid_event dt=registry, default=1
[ 123/ 2] MSG 18:47:22.926250 SNS PLATFORM/High [ sns_q6_pm.c 365] Deregister_client: B2927B30
[ 123/ 2] MSG 18:47:22.926250 SNS PLATFORM/High [sns_registry_sensor.c 366] Processed : SSCRPCD UP Signal
[ 122/ 0] MSG 18:47:22.926250 SNS FRAMEWORK/Low [ sns_suid_sensor.c 1050] send_suid_event dt=registry, default=1
[ 122/ 1] MSG 18:47:22.926250 SNS FRAMEWORK/Medium [ sns_data_stream.c 551] sns_data_stream_deinit b29231d0 removing=0
[ 122/ 1] MSG 18:47:22.926250 SNS FRAMEWORK/Medium [sns_stream_service.c 686] Add request b2927b30 on stream b29231d0 (length 0; ID 120)
[ 122/ 0] MSG 18:47:22.926250 SNS FRAMEWORK/Low [ sns_suid_sensor.c 1050] send_suid_event dt=registry, default=1
[ 123/ 2] MSG 18:47:22.926250 SNS PLATFORM/High [ sns_gdsc_island.c 109] gdsc_client_cnt(2), sns_gdsc_mode(1)
[ 122/ 1] MSG 18:47:22.926250 SNS FRAMEWORK/Medium [sns_stream_service.c 150] Created data stream to Sensor 'timer' (b2118e08) from Sensor 'power_sensor' (b2922c78): b2931c48
[ 122/ 0] MSG 18:47:22.926250 SNS FRAMEWORK/Low [ sns_suid_sensor.c 1050] send_suid_event dt=registry, default=1
[ 122/ 1] MSG 18:47:22.926250 SNS FRAMEWORK/Medium [sns_stream_service.c 686] Add request b2123580 on stream b2931c48 (length 16; ID 512)
[ 122/ 0] MSG 18:47:22.926250 SNS FRAMEWORK/Low [sns_stream_service.c 548] Process request for Sensor b2118e08 on b2931c48
[ 122/ 0] MSG 18:47:22.926250 SNS FRAMEWORK/Low [ sns_suid_sensor.c 1050] send_suid_event dt=registry, default=1