ICM42670 Portable Driver
Public API reference for the ICM-42670-P IMU driver
Loading...
Searching...
No Matches
ICM42670_registermap.h
Go to the documentation of this file.
1
10#ifndef ICM42670_REGISTERMAP_H
11#define ICM42670_REGISTERMAP_H
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
17#include <stdint.h>
18
19/* Device identity. */
20#define ICM42670_REG_WHO_AM_I 0x75U
21#define ICM42670_WHO_AM_I_VALUE 0x67U
22
23/* User bank 0: basic status and control. */
24#define ICM42670_REG_MCLK_RDY 0x00U
25#define ICM42670_REG_DEVICE_CONFIG 0x01U
26#define ICM42670_REG_SIGNAL_PATH_RESET 0x02U
27#define ICM42670_REG_DRIVE_CONFIG1 0x03U
28#define ICM42670_REG_DRIVE_CONFIG2 0x04U
29#define ICM42670_REG_DRIVE_CONFIG3 0x05U
30#define ICM42670_REG_INT_CONFIG 0x06U
31
40#define ICM42670_REG_TEMP_DATA1 0x09U
41#define ICM42670_REG_TEMP_DATA0 0x0AU
42#define ICM42670_REG_ACCEL_DATA_X1 0x0BU
43#define ICM42670_REG_ACCEL_DATA_X0 0x0CU
44#define ICM42670_REG_ACCEL_DATA_Y1 0x0DU
45#define ICM42670_REG_ACCEL_DATA_Y0 0x0EU
46#define ICM42670_REG_ACCEL_DATA_Z1 0x0FU
47#define ICM42670_REG_ACCEL_DATA_Z0 0x10U
48#define ICM42670_REG_GYRO_DATA_X1 0x11U
49#define ICM42670_REG_GYRO_DATA_X0 0x12U
50#define ICM42670_REG_GYRO_DATA_Y1 0x13U
51#define ICM42670_REG_GYRO_DATA_Y0 0x14U
52#define ICM42670_REG_GYRO_DATA_Z1 0x15U
53#define ICM42670_REG_GYRO_DATA_Z0 0x16U
54#define ICM42670_REG_TMST_FSYNCH 0x17U
55#define ICM42670_REG_TMST_FSYNCL 0x18U
56
57/* User bank 0: power, scale, ODR, and filter configuration. */
58#define ICM42670_REG_PWR_MGMT0 0x1FU
59#define ICM42670_REG_GYRO_CONFIG0 0x20U
60#define ICM42670_REG_ACCEL_CONFIG0 0x21U
61#define ICM42670_REG_TEMP_CONFIG0 0x22U
62#define ICM42670_REG_GYRO_CONFIG1 0x23U
63#define ICM42670_REG_ACCEL_CONFIG1 0x24U
64
65/* User bank 0: APEX/WOM/FIFO/interrupt basics. */
66#define ICM42670_REG_APEX_CONFIG0 0x25U
67#define ICM42670_REG_APEX_CONFIG1 0x26U
68#define ICM42670_REG_WOM_CONFIG 0x27U
69#define ICM42670_REG_FIFO_CONFIG1 0x28U
70#define ICM42670_REG_FIFO_CONFIG2 0x29U
71#define ICM42670_REG_FIFO_CONFIG3 0x2AU
72#define ICM42670_REG_INT_SOURCE0 0x2BU
73#define ICM42670_REG_INT_SOURCE1 0x2CU
74#define ICM42670_REG_INT_SOURCE3 0x2DU
75#define ICM42670_REG_INT_SOURCE4 0x2EU
76#define ICM42670_REG_INTF_CONFIG0 0x35U
77#define ICM42670_REG_INTF_CONFIG1 0x36U
78#define ICM42670_REG_INT_STATUS_DRDY 0x39U
79#define ICM42670_REG_INT_STATUS 0x3AU
80#define ICM42670_REG_INT_STATUS2 0x3BU
81#define ICM42670_REG_INT_STATUS3 0x3CU
82#define ICM42670_REG_FIFO_COUNTH 0x3DU
83#define ICM42670_REG_FIFO_COUNTL 0x3EU
84#define ICM42670_REG_FIFO_DATA 0x3FU
85
86/* User bank 0: indirect MREG access window. */
87#define ICM42670_REG_BLK_SEL_W 0x79U
88#define ICM42670_REG_MADDR_W 0x7AU
89#define ICM42670_REG_M_W 0x7BU
90#define ICM42670_REG_BLK_SEL_R 0x7CU
91#define ICM42670_REG_MADDR_R 0x7DU
92#define ICM42670_REG_M_R 0x7EU
93
94/* MREG bank identifiers and MREG1 register addresses. */
95#define ICM42670_MREG1 0x00U
96#define ICM42670_MREG1_REG_TMST_CONFIG1 0x00U
97#define ICM42670_MREG1_REG_FIFO_CONFIG5 0x01U
98#define ICM42670_MREG1_REG_FIFO_CONFIG6 0x02U
99#define ICM42670_MREG1_REG_FSYNC_CONFIG 0x03U
100#define ICM42670_MREG1_REG_INT_CONFIG0 0x04U
101#define ICM42670_MREG1_REG_INT_CONFIG1 0x05U
102#define ICM42670_MREG1_REG_SENSOR_CONFIG3 0x06U
103#define ICM42670_MREG1_REG_FDR_CONFIG 0x66U
104
105/* Useful contiguous burst lengths. */
106#define ICM42670_TEMP_DATA_LEN 2U
107#define ICM42670_ACCEL_DATA_LEN 6U
108#define ICM42670_GYRO_DATA_LEN 6U
109#define ICM42670_ACCEL_GYRO_TEMP_LEN 14U
110
111/* MCLK_RDY bits. */
112#define ICM42670_MCLK_RDY_MASK 0x08U
113
114/* DEVICE_CONFIG bits. */
115#define ICM42670_DEVICE_CONFIG_SOFT_RESET 0x01U
116#define ICM42670_DEVICE_CONFIG_SPI_MODE_0 0x00U
117#define ICM42670_DEVICE_CONFIG_SPI_MODE_3 0x10U
118
119/* SIGNAL_PATH_RESET bits. */
120#define ICM42670_SIGNAL_PATH_FIFO_FLUSH 0x04U
121
122/* FIFO_CONFIG1 bits. */
123#define ICM42670_FIFO_CONFIG1_MODE_MASK 0x02U
124#define ICM42670_FIFO_CONFIG1_MODE_STREAM 0x00U
125#define ICM42670_FIFO_CONFIG1_MODE_STOP_ON_FULL 0x02U
126#define ICM42670_FIFO_CONFIG1_BYPASS_MASK 0x01U
127#define ICM42670_FIFO_CONFIG1_BYPASS_DISABLE 0x00U
128#define ICM42670_FIFO_CONFIG1_BYPASS_ENABLE 0x01U
129
130/* FIFO_CONFIG2 and FIFO_CONFIG3 bits. */
131#define ICM42670_FIFO_CONFIG2_WM_LOW_MASK 0xFFU
132#define ICM42670_FIFO_CONFIG3_WM_HIGH_MASK 0x0FU
133#define ICM42670_FIFO_WATERMARK_MAX 0x0FFFU
134
135/* PWR_MGMT0 field values. */
136#define ICM42670_PWR_ACCEL_LP_CLK_WUOSC 0x00U
137#define ICM42670_PWR_ACCEL_LP_CLK_RC 0x80U
138#define ICM42670_PWR_IDLE 0x10U
139#define ICM42670_PWR_GYRO_OFF 0x00U
140#define ICM42670_PWR_GYRO_STANDBY 0x04U
141#define ICM42670_PWR_GYRO_LN 0x0CU
142#define ICM42670_PWR_ACCEL_OFF 0x00U
143#define ICM42670_PWR_ACCEL_LP 0x02U
144#define ICM42670_PWR_ACCEL_LN 0x03U
145#define ICM42670_PWR_ACCEL_GYRO_LN \
146 (ICM42670_PWR_GYRO_LN | ICM42670_PWR_ACCEL_LN)
147
148/* GYRO_CONFIG0 and ACCEL_CONFIG0 field masks. */
149#define ICM42670_GYRO_CONFIG0_FS_SEL_MASK 0x60U
150#define ICM42670_GYRO_CONFIG0_ODR_MASK 0x0FU
151#define ICM42670_ACCEL_CONFIG0_FS_SEL_MASK 0x60U
152#define ICM42670_ACCEL_CONFIG0_ODR_MASK 0x0FU
153#define ICM42670_GYRO_CONFIG1_UI_FILT_BW_MASK 0x07U
154#define ICM42670_ACCEL_CONFIG1_UI_FILT_BW_MASK 0x07U
155
156/* APEX_CONFIG1 and WOM_CONFIG bits. */
157#define ICM42670_APEX_CONFIG1_FEATURE_ENABLE_MASK 0x78U
158#define ICM42670_WOM_CONFIG_WOM_EN 0x01U
159
160/* INTF_CONFIG0 bits. */
161#define ICM42670_INTF_CONFIG0_FIFO_COUNT_FORMAT_MASK 0x40U
162#define ICM42670_INTF_CONFIG0_FIFO_COUNT_FORMAT_BYTES 0x00U
163#define ICM42670_INTF_CONFIG0_FIFO_COUNT_FORMAT_RECORDS 0x40U
164#define ICM42670_INTF_CONFIG0_FIFO_COUNT_ENDIAN_MASK 0x20U
165#define ICM42670_INTF_CONFIG0_SENSOR_DATA_ENDIAN_MASK 0x10U
166
167/* FIFO packet header bits. */
168#define ICM42670_FIFO_HEADER_MSG 0x80U
169#define ICM42670_FIFO_HEADER_ACCEL 0x40U
170#define ICM42670_FIFO_HEADER_GYRO 0x20U
171#define ICM42670_FIFO_HEADER_20 0x10U
172#define ICM42670_FIFO_HEADER_TIMESTAMP_FSYNC_MASK 0x0CU
173#define ICM42670_FIFO_HEADER_ODR_ACCEL 0x02U
174#define ICM42670_FIFO_HEADER_ODR_GYRO 0x01U
175
176/* MREG1 TMST_CONFIG1 bits. */
177#define ICM42670_TMST_CONFIG1_ON_SREG_EN 0x10U
178#define ICM42670_TMST_CONFIG1_RES_16US 0x08U
179#define ICM42670_TMST_CONFIG1_DELTA_EN 0x04U
180#define ICM42670_TMST_CONFIG1_FSYNC_EN 0x02U
181#define ICM42670_TMST_CONFIG1_TMST_EN 0x01U
182
183/* MREG1 FSYNC_CONFIG bits. */
184#define ICM42670_FSYNC_CONFIG_UI_SEL_MASK 0x70U
185#define ICM42670_FSYNC_CONFIG_UI_SEL_SHIFT 4U
186#define ICM42670_FSYNC_CONFIG_UI_FLAG_CLEAR_SEL 0x02U
187#define ICM42670_FSYNC_CONFIG_POLARITY_FALLING 0x01U
188
189/* MREG1 FIFO_CONFIG5 bits. */
190#define ICM42670_FIFO_CONFIG5_WM_GT_TH 0x20U
191#define ICM42670_FIFO_CONFIG5_RESUME_PARTIAL_RD 0x10U
192#define ICM42670_FIFO_CONFIG5_HIRES_EN 0x08U
193#define ICM42670_FIFO_CONFIG5_TMST_FSYNC_EN 0x04U
194#define ICM42670_FIFO_CONFIG5_GYRO_EN 0x02U
195#define ICM42670_FIFO_CONFIG5_ACCEL_EN 0x01U
196
197/* MREG1 FIFO_CONFIG6 bits. */
198#define ICM42670_FIFO_CONFIG6_EMPTY_INDICATOR_DIS 0x10U
199#define ICM42670_FIFO_CONFIG6_RCOSC_REQ_ON_FIFO_THS_DIS 0x01U
200
201/* MREG1 INT_CONFIG0 bits. */
202#define ICM42670_INT_CONFIG0_UI_DRDY_INT_CLEAR_MASK 0x30U
203#define ICM42670_INT_CONFIG0_FIFO_THS_INT_CLEAR_MASK 0x0CU
204#define ICM42670_INT_CONFIG0_FIFO_FULL_INT_CLEAR_MASK 0x03U
205#define ICM42670_INT_CONFIG0_CLEAR_ON_STATUS_READ 0x00U
206#define ICM42670_INT_CONFIG0_FIFO_THS_CLEAR_ON_FIFO_READ 0x08U
207#define ICM42670_INT_CONFIG0_FIFO_FULL_CLEAR_ON_FIFO_READ 0x02U
208
209/* MREG1 INT_CONFIG1 bits. */
210#define ICM42670_INT_CONFIG1_TPULSE_DURATION_8US 0x40U
211#define ICM42670_INT_CONFIG1_ASYNC_RESET 0x10U
212
213/* MREG1 SENSOR_CONFIG3 bits. */
214#define ICM42670_SENSOR_CONFIG3_APEX_DISABLE 0x40U
215
216/* Common config bytes. */
217#define ICM42670_GYRO_CONFIG0_2000DPS_100HZ \
218 (ICM42670_GYRO_FS_2000_DPS | ICM42670_ODR_100_HZ)
219#define ICM42670_ACCEL_CONFIG0_16G_100HZ \
220 (ICM42670_ACCEL_FS_16G | ICM42670_ODR_100_HZ)
221
222/* INT_CONFIG bits. */
223#define ICM42670_INT_CONFIG_INT2_LATCHED 0x20U
224#define ICM42670_INT_CONFIG_INT2_PUSH_PULL 0x10U
225#define ICM42670_INT_CONFIG_INT2_ACTIVE_HIGH 0x08U
226#define ICM42670_INT_CONFIG_INT1_LATCHED 0x04U
227#define ICM42670_INT_CONFIG_INT1_PUSH_PULL 0x02U
228#define ICM42670_INT_CONFIG_INT1_ACTIVE_HIGH 0x01U
229#define ICM42670_INT_CONFIG_BOTH_LATCHED_PUSH_PULL_ACTIVE_HIGH \
230 (ICM42670_INT_CONFIG_INT2_LATCHED | ICM42670_INT_CONFIG_INT2_PUSH_PULL | \
231 ICM42670_INT_CONFIG_INT2_ACTIVE_HIGH | ICM42670_INT_CONFIG_INT1_LATCHED | \
232 ICM42670_INT_CONFIG_INT1_PUSH_PULL | ICM42670_INT_CONFIG_INT1_ACTIVE_HIGH)
233
234/* INT_SOURCE0 bits. */
235#define ICM42670_INT_SOURCE0_FSYNC_INT1_EN 0x40U
236#define ICM42670_INT_SOURCE0_DRDY_INT1_EN 0x08U
237#define ICM42670_INT_SOURCE0_FIFO_THS_INT1_EN 0x04U
238#define ICM42670_INT_SOURCE0_FIFO_FULL_INT1_EN 0x02U
239
240/* INT_SOURCE3 bits. */
241#define ICM42670_INT_SOURCE3_FSYNC_INT2_EN 0x40U
242#define ICM42670_INT_SOURCE3_DRDY_INT2_EN 0x08U
243#define ICM42670_INT_SOURCE3_FIFO_THS_INT2_EN 0x04U
244#define ICM42670_INT_SOURCE3_FIFO_FULL_INT2_EN 0x02U
245
246/* INT_STATUS_DRDY bits. */
247#define ICM42670_INT_STATUS_DRDY_DATA_RDY 0x01U
248
249/* INT_STATUS bits. */
250#define ICM42670_INT_STATUS_ST 0x80U
251#define ICM42670_INT_STATUS_FSYNC 0x40U
252#define ICM42670_INT_STATUS_PLL_RDY 0x20U
253#define ICM42670_INT_STATUS_RESET_DONE 0x10U
254#define ICM42670_INT_STATUS_FIFO_THS 0x04U
255#define ICM42670_INT_STATUS_FIFO_FULL 0x02U
256#define ICM42670_INT_STATUS_AGC_RDY 0x01U
257
258#ifdef __cplusplus
259}
260#endif
261
262#endif /* ICM42670_REGISTERMAP_H */