딥 Linux 드라이버 시리즈 : 세 개의 센서 아키텍처의 하이 패스 분석 (ADSP 상세한 리포트 데이터 상세한 교정 절차) 턴]로서는

에서 재판이 문서 : https://blog.csdn.net/radianceblau/article/details/76180915

탐색이 시리즈 :

딥 Linux 드라이버 시리즈 : 하이 패스 분석 센서 구조의 일 예 (AP + 전체 개요 측 코드 분석)

리눅스 드라이버 시리즈 딥 : 퀄컴 센서 구조 분석 예 (ADSP 드라이버 코드 구조) 비스
리눅스 드라이버 깊은 시리즈 : 세 개의 센서 아키텍처의 하이 패스 분석 예 (ADSP 상세한 리포트 데이터 보정 절차 상세한)


동기 데이터 smgr 저속 주변 버스 문제를 차단하여 취득 할 수 있기 때문에, 동기 또는 비동기 모드로 나누어 ADSP 데이터를 획득하는 방법은, 비동기 모드는 일반적으로, 효율성을 감소 전력 소비의 증가, 실용적으로 사용된다.

 

센서보고 된 데이터는 다음과 같은 범주로 구분됩니다

동기화 동기화보고 데이터 (각 데이터보고합니다)

비동기보고 비동기 데이터는 각각의 요청이 차단되지 다음 타이밍 뷰 상태 (즉, 보고서를 수신한다)

자기 스케줄링 비동기 데이터가 각각의 요청이 차단되지 않는 한 후에, 인터럽트 또는 뷰 상태 타이밍을 기다려,보고 된 (즉,이 보고서를 수신한다)

비동기 FIFO 데이터 보고서는, 각각의 데이터의 세트를 요청, 설정 레벨 데이터 리포트 세트는 인터럽트 레벨에 의해 트리거 될 때, 센서 데이터가 축적된다.

S4S (센서의 동기화)은 데이터를 누락 방지하기 위해 클럭을 동기화하기 위해 사용되거나 동일한 데이터를 두 번 추출

 

실제 사용의 세 가지로 요약하면 :

1 (폴링) × 00 동기 방식 [동기화] : 센서 데이터 smgr 요청 블록은 다시 데이터의 도착을 기다리고, 비동기 [비동기] : (a 시작 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 같은 일부 기능에 발견 부호 데이터는 일반적으로 작업 외부 폐쇄 DDR 낮은 전력으로 동작 될 수있는 센서의 동작 중에 수행 관련보고 상기 캐시에서 실행 uimg 식별 코드; umig 코딩 동안 오픈 DDR을 식별 할 필요없이 실행 일부 초기화 코드는 일반적으로 관련 작업이다하는 곳.

 

전반적인 이해와 센서 유형 번호 퀄컴 플랫폼의 다음 목록.
열거 타입 정의
{
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은
// 13이고, SNS_DDF_SENSOR_OEM_SENSOR_01
, 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
SNS_DDF_SENSOR_ULTRA_VIOLET // 33
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,
퀄컴 여러 정의로 특정 데이터 흐름을 먼저 살펴보고 전 센서 구성 속성

열거 타입 정의
{
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
SNS_DDF_ATTRIB_SUPPORTED_ODR_LIST // 14
SNS_DDF_ATTRIB_REGISTRY_GROUP // 15
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, 초기화

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

...

 

 폴링 패턴 데이터보고 절차

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 및 교정을 얻을 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