hc
2024-03-22 f63cd4c03ea42695d5f9b0e1798edd196923aae6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Definitions for icm2060x chip.
 */
#ifndef __ICM2060X_H
#define __ICM2060X_H
 
#include <linux/ioctl.h>
#define ICM2060X_PRECISION    16
#define ICM2060X_RANGE        2000000
 
#define ICM2060X_SMPLRT_DIV    0x19
#define ICM2060X_CONFIG        0x1A
#define ICM2060X_GYRO_CONFIG    0x1B
#define ICM2060X_ACCEL_CONFIG    0x1C
#define ICM2060X_ACCEL_CONFIG2    0x1D
#define ICM2060X_LP_ACCEL_ODR   0x1E
#define ICM2060X_WOM_THRESH    0x1F
#define ICM2060X_FIFO_EN    0x23
#define ICM2060X_INT_PIN_CFG    0x37
#define ICM2060X_INT_ENABLE    0x38
#define ICM2060X_DMP_INT_STATUS    0x39
#define ICM2060X_INT_STATUS    0x3A
#define ICM2060X_ACCEL_XOUT_H    0x3B
#define ICM2060X_TEMP_OUT_H    0x41
#define ICM2060X_GYRO_XOUT_H    0x43
#define ICM2060X_ACCEL_INTEL_CTRL 0x69
#define ICM2060X_USER_CTRL    0x6A
#define ICM2060X_PWR_MGMT_1    0x6B
#define ICM2060X_PWR_MGMT_2    0x6C
#define ICM2060X_PRGM_STRT_ADDRH 0x70
#define ICM2060X_FIFO_COUNTH    0x72
#define ICM2060X_FIFO_R_W    0x74
#define ICM2060X_WHOAMI        0x75
 
/* DEVICE ID */
#define ICM20600_DEVICE_ID    0x11
#define ICM20607_DEVICE_ID    0x05
 
/* ICM2060X_CONFIG */
#define DLPF_CFG_250HZ        0x00
#define DLPF_CFG_184HZ        0x01
#define DLPF_CFG_98HZ        0x02
#define DLPF_CFG_41HZ        0x03
#define DLPF_CFG_20HZ        0x04
#define DLPF_CFG_10HZ        0x05
#define DLPF_CFG_5HZ        0x06
#define DLPF_CFG_3600HZ        0x07
#define EXT_SYNC_SET_TEMP    0x08
#define EXT_SYNC_SET_GYRO_X    0x10
#define EXT_SYNC_SET_GYRO_Y    0x18
#define EXT_SYNC_SET_GYRO_Z    0x20
#define EXT_SYNC_SET_ACCEL_X    0x28
#define EXT_SYNC_SET_ACCEL_Y    0x30
#define EXT_SYNC_SET_ACCEL_Z    0x38
 
 
/* ICM2060X_GYRO_CONFIG */
#define GFSR_250DPS        (0 << 3)
#define GFSR_500DPS        (1 << 3)
#define GFSR_1000DPS        (2 << 3)
#define GFSR_2000DPS        (3 << 3)
 
/* ICM2060X_ACCEL_CONFIG */
#define AFSR_2G        (0 << 3)
#define AFSR_4G        (1 << 3)
#define AFSR_8G        (2 << 3)
#define AFSR_16G    (3 << 3)
 
 
/* ICM2060X_ACCEL_CONFIG2 */
#define A_DLPF_CFG_460HZ    0x00
#define A_DLPF_CFG_184HZ    0x01
#define A_DLPF_CFG_92HZ        0x02
#define A_DLPF_CFG_41HZ        0x03
#define A_DLPF_CFG_20HZ        0x04
#define A_DLPF_CFG_10HZ        0x05
#define A_DLPF_CFG_5HZ        0x06
/* #define A_DLPF_CFG_460HZ      0x07 */
#define BIT_FIFO_SIZE_1K    0x40
#define BIT_ACCEL_FCHOICE_B    0x08
 
 
/* ICM2060X_LP_ACCEL_ODR */
#define LPA_CLK_P24HZ    0x0
#define LPA_CLK_P49HZ    0x1
#define LPA_CLK_P98HZ    0x2
#define LPA_CLK_1P95HZ    0x3
#define LPA_CLK_3P91HZ    0x4
#define LPA_CLK_7P81HZ    0x5
#define LPA_CLK_15P63HZ    0x6
#define LPA_CLK_31P25HZ    0x7
#define LPA_CLK_62P50HZ    0x8
#define LPA_CLK_125HZ    0x9
#define LPA_CLK_250HZ    0xa
#define LPA_CLK_500HZ    0xb
 
 
/* ICM2060X_PWR_MGMT_1 */
#define BIT_H_RESET        (1<<7)
#define BIT_SLEEP        (1<<6)
#define BIT_CYCLE        (1<<5)
#define BIT_GYRO_STANDBY    (1<<4)
#define BIT_PD_PTAT        (1<<3)
#define BIT_CLKSEL        (1<<0)
 
#define CLKSEL_INTERNAL        0
#define CLKSEL_PLL        1
 
/* ICM2060X_PWR_MGMT_2 */
#define BIT_ACCEL_STBY        0x38
#define BIT_GYRO_STBY        0x07
#define BITS_LPA_WAKE_CTRL    0xC0
#define BITS_LPA_WAKE_1HZ    0x00
#define BITS_LPA_WAKE_2HZ    0x40
#define BITS_LPA_WAKE_20HZ    0x80
 
#define ICM2060X_PWRM1_SLEEP        0x40
#define ICM2060X_PWRM1_GYRO_STANDBY    0x10
#define ICM2060X_PWRM2_ACCEL_DISABLE    0x38
#define ICM2060X_PWRM2_GYRO_DISABLE    0x07
 
/* ICM2060X_ACCEL_INTEL_CTRL */
#define BIT_ACCEL_INTEL_EN    0x80
#define BIT_ACCEL_INTEL_MODE    0x40
 
 
/* ICM2060X_USER_CTRL */
#define BIT_FIFO_RST        0x04
#define BIT_DMP_RST        0x08
#define BIT_I2C_MST_EN        0x20
#define BIT_FIFO_EN        0x40
#define BIT_DMP_EN        0x80
 
 
/* ICM2060X_FIFO_EN */
#define BIT_ACCEL_OUT        0x08
#define BITS_GYRO_OUT        0x70
 
 
/* ICM2060X_INT_PIN_CFG */
#define BIT_BYPASS_EN        0x2
 
/* ICM2060X_INT_EN/INT_STATUS */
#define BIT_FIFO_OVERLOW    0x80
#define BIT_MOT_INT        0x40
#define BIT_MPU_RDY        0x04
#define BIT_DMP_INT        0x02
#define BIT_RAW_RDY        0x01
#define DMP_START_ADDR        0x400
#define AXIS_NUM 3
#define AXIS_ADC_BYTE 2
#define SENSOR_PACKET (AXIS_NUM * AXIS_ADC_BYTE)
 
/* self-test parameter */
 
#define DEF_ST_PRECISION        1000
#define DEF_ST_ICM2060X_ACCEL_LPF    2
#define DEF_STABLE_TIME_ST        50
#define DEF_SELFTEST_GYRO_FS        (0 << 3)
#define DEF_SELFTEST_ACCEL_FS        (2 << 3)
#define DEF_SELFTEST_6500_ACCEL_FS    (0 << 3)
#define DEF_SW_SELFTEST_SENSITIVITY    ((2000 * DEF_ST_PRECISION) / 32768)
 
#define DEF_SW_SELFTEST_SAMPLE_COUNT    75
#define DEF_SW_SELFTEST_SAMPLE_TIME    75
#define DEF_SW_ACCEL_CAL_SAMPLE_TIME    50
#define DEF_SW_SKIP_COUNT        10
 
#define DEF_ST_6500_STABLE_TIME        20
#define BYTES_PER_SENSOR        6
#define DEF_SELFTEST_SAMPLE_RATE    0
#define DEF_GYRO_WAIT_TIME        50
#define THREE_AXIS            3
#define INIT_ST_SAMPLES            200
#define FIFO_COUNT_BYTE            2
#define DEF_ST_TRY_TIMES        2
#define REG_6500_XG_ST_DATA        0x0
#define REG_6500_XA_ST_DATA        0xD
#define BITS_SELF_TEST_EN        0xE0
 
#define DEF_ST_SCAL            (1L << 15)
 
/*---- ICM2060X Self Test Pass/Fail Criteria ----*/
/* Gyro Offset Max Value (dps) */
#define DEF_GYRO_OFFSET_MAX        20
/* Gyro Self Test Absolute Limits ST_AL (dps) */
#define DEF_GYRO_ST_AL            60
/* Accel Self Test Absolute Limits ST_AL (mg) */
#define DEF_ACCEL_ST_AL_MIN        225
#define DEF_ACCEL_ST_AL_MAX        675
#define DEF_6500_ACCEL_ST_SHIFT_DELTA    500
#define DEF_6500_GYRO_CT_SHIFT_DELTA    500
#define DEF_ST_ICM2060X_ACCEL_LPF    2
#define DEF_ST_6500_ACCEL_FS_MG        2000UL
#define DEF_SELFTEST_6500_ACCEL_FS    (0 << 3)
 
#define DEF_SELFTEST_GYRO_SENS        (32768 / 250)
#endif