icm42670 - Driver for TDK ICM-42670-P 6-Axis IMU
- group icm42670
ESP-IDF driver for TDK ICM-42670-P IMU (found on ESP-RS board)
Copyright (c) 2022 Jan Veeh (jan.veeh@motius.de)
ISC Licensed as described in the file LICENSE
Defines
-
ICM42670_I2C_ADDR_GND
-
ICM42670_I2C_ADDR_VCC
-
ICM42670_REG_MCLK_RDY
-
ICM42670_REG_DEVICE_CONFIG
-
ICM42670_REG_SIGNAL_PATH_RESET
-
ICM42670_REG_DRIVE_CONFIG1
-
ICM42670_REG_DRIVE_CONFIG2
-
ICM42670_REG_DRIVE_CONFIG3
-
ICM42670_REG_INT_CONFIG
-
ICM42670_REG_TEMP_DATA1
-
ICM42670_REG_TEMP_DATA0
-
ICM42670_REG_ACCEL_DATA_X1
-
ICM42670_REG_ACCEL_DATA_X0
-
ICM42670_REG_ACCEL_DATA_Y1
-
ICM42670_REG_ACCEL_DATA_Y0
-
ICM42670_REG_ACCEL_DATA_Z1
-
ICM42670_REG_ACCEL_DATA_Z0
-
ICM42670_REG_GYRO_DATA_X1
-
ICM42670_REG_GYRO_DATA_X0
-
ICM42670_REG_GYRO_DATA_Y1
-
ICM42670_REG_GYRO_DATA_Y0
-
ICM42670_REG_GYRO_DATA_Z1
-
ICM42670_REG_GYRO_DATA_Z0
-
ICM42670_REG_TMST_FSYNCH
-
ICM42670_REG_TMST_FSYNCL
-
ICM42670_REG_APEX_DATA4
-
ICM42670_REG_APEX_DATA5
-
ICM42670_REG_PWR_MGMT0
-
ICM42670_REG_GYRO_CONFIG0
-
ICM42670_REG_ACCEL_CONFIG0
-
ICM42670_REG_TEMP_CONFIG0
-
ICM42670_REG_GYRO_CONFIG1
-
ICM42670_REG_ACCEL_CONFIG1
-
ICM42670_REG_APEX_CONFIG0
-
ICM42670_REG_APEX_CONFIG1
-
ICM42670_REG_WOM_CONFIG
-
ICM42670_REG_FIFO_CONFIG1
-
ICM42670_REG_FIFO_CONFIG2
-
ICM42670_REG_FIFO_CONFIG3
-
ICM42670_REG_INT_SOURCE0
-
ICM42670_REG_INT_SOURCE1
-
ICM42670_REG_INT_SOURCE3
-
ICM42670_REG_INT_SOURCE4
-
ICM42670_REG_FIFO_LOST_PKT0
-
ICM42670_REG_FIFO_LOST_PKT1
-
ICM42670_REG_APEX_DATA0
-
ICM42670_REG_APEX_DATA1
-
ICM42670_REG_APEX_DATA2
-
ICM42670_REG_APEX_DATA3
-
ICM42670_REG_INTF_CONFIG0
-
ICM42670_REG_INTF_CONFIG1
-
ICM42670_REG_INT_STATUS_DRDY
-
ICM42670_REG_INT_STATUS
-
ICM42670_REG_INT_STATUS2
-
ICM42670_REG_INT_STATUS3
-
ICM42670_REG_FIFO_COUNTH
-
ICM42670_REG_FIFO_COUNTL
-
ICM42670_REG_FIFO_DATA
-
ICM42670_REG_WHO_AM_I
-
ICM42670_REG_BLK_SEL_W
-
ICM42670_REG_MADDR_W
-
ICM42670_REG_M_W
-
ICM42670_REG_BLK_SEL_R
-
ICM42670_REG_MADDR_R
-
ICM42670_REG_M_R
-
ICM42670_REG_TMST_CONFIG1
-
ICM42670_REG_FIFO_CONFIG5
-
ICM42670_REG_FIFO_CONFIG6
-
ICM42670_REG_FSYNC_CONFIG
-
ICM42670_REG_INT_CONFIG0
-
ICM42670_REG_INT_CONFIG1
-
ICM42670_REG_SENSOR_CONFIG3
-
ICM42670_REG_ST_CONFIG
-
ICM42670_REG_SELFTEST
-
ICM42670_REG_INTF_CONFIG6
-
ICM42670_REG_INTF_CONFIG10
-
ICM42670_REG_INTF_CONFIG7
-
ICM42670_REG_OTP_CONFIG
-
ICM42670_REG_INT_SOURCE6
-
ICM42670_REG_INT_SOURCE7
-
ICM42670_REG_INT_SOURCE8
-
ICM42670_REG_INT_SOURCE9
-
ICM42670_REG_INT_SOURCE10
-
ICM42670_REG_APEX_CONFIG2
-
ICM42670_REG_APEX_CONFIG3
-
ICM42670_REG_APEX_CONFIG4
-
ICM42670_REG_APEX_CONFIG5
-
ICM42670_REG_APEX_CONFIG9
-
ICM42670_REG_APEX_CONFIG10
-
ICM42670_REG_APEX_CONFIG11
-
ICM42670_REG_ACCEL_WOM_X_THR
-
ICM42670_REG_ACCEL_WOM_Y_THR
-
ICM42670_REG_ACCEL_WOM_Z_THR
-
ICM42670_REG_OFFSET_USER0
-
ICM42670_REG_OFFSET_USER1
-
ICM42670_REG_OFFSET_USER2
-
ICM42670_REG_OFFSET_USER3
-
ICM42670_REG_OFFSET_USER4
-
ICM42670_REG_OFFSET_USER5
-
ICM42670_REG_OFFSET_USER6
-
ICM42670_REG_OFFSET_USER7
-
ICM42670_REG_OFFSET_USER8
-
ICM42670_REG_ST_STATUS1
-
ICM42670_REG_ST_STATUS2
-
ICM42670_REG_FDR_CONFIG
-
ICM42670_REG_APEX_CONFIG12
-
ICM42670_REG_OTP_CTRL7
-
ICM42670_REG_XA_ST_DATA
-
ICM42670_REG_YA_ST_DATA
-
ICM42670_REG_ZA_ST_DATA
-
ICM42670_REG_XG_ST_DATA
-
ICM42670_REG_YG_ST_DATA
-
ICM42670_REG_ZG_ST_DATA
Enums
-
enum icm42670_gyro_pwr_mode_t
Values:
-
enumerator ICM42670_GYRO_DISABLE
-
enumerator ICM42670_GYRO_STANDBY
-
enumerator ICM42670_GYRO_ENABLE_LN_MODE
-
enumerator ICM42670_GYRO_DISABLE
-
enum icm42670_accel_pwr_mode_t
Values:
-
enumerator ICM42670_ACCEL_DISABLE
-
enumerator ICM42670_ACCEL_ENABLE_LP_MODE
-
enumerator ICM42670_ACCEL_ENABLE_LN_MODE
-
enumerator ICM42670_ACCEL_DISABLE
-
enum icm42670_lp_clock_source_t
Values:
-
enumerator ICM42670_LP_CLK_WUO
-
enumerator ICM42670_LP_CLK_RCO
-
enumerator ICM42670_LP_CLK_WUO
-
enum icm42670_gyro_fsr_t
Values:
-
enumerator ICM42670_GYRO_RANGE_2000DPS
-
enumerator ICM42670_GYRO_RANGE_1000DPS
-
enumerator ICM42670_GYRO_RANGE_500DPS
-
enumerator ICM42670_GYRO_RANGE_250DPS
-
enumerator ICM42670_GYRO_RANGE_2000DPS
-
enum icm42670_gyro_odr_t
Values:
-
enumerator ICM42670_GYRO_ODR_12_5HZ
-
enumerator ICM42670_GYRO_ODR_25HZ
-
enumerator ICM42670_GYRO_ODR_50HZ
-
enumerator ICM42670_GYRO_ODR_100HZ
-
enumerator ICM42670_GYRO_ODR_200HZ
-
enumerator ICM42670_GYRO_ODR_400HZ
-
enumerator ICM42670_GYRO_ODR_800HZ
-
enumerator ICM42670_GYRO_ODR_1_6KHZ
-
enumerator ICM42670_GYRO_ODR_12_5HZ
-
enum icm42670_accel_fsr_t
Values:
-
enumerator ICM42670_ACCEL_RANGE_16G
-
enumerator ICM42670_ACCEL_RANGE_8G
-
enumerator ICM42670_ACCEL_RANGE_4G
-
enumerator ICM42670_ACCEL_RANGE_2G
-
enumerator ICM42670_ACCEL_RANGE_16G
-
enum icm42670_accel_odr_t
Values:
-
enumerator ICM42670_ACCEL_ODR_1_5625HZ
-
enumerator ICM42670_ACCEL_ODR_3_125HZ
-
enumerator ICM42670_ACCEL_ODR_6_25HZ
-
enumerator ICM42670_ACCEL_ODR_12_5HZ
-
enumerator ICM42670_ACCEL_ODR_25HZ
-
enumerator ICM42670_ACCEL_ODR_50HZ
-
enumerator ICM42670_ACCEL_ODR_100HZ
-
enumerator ICM42670_ACCEL_ODR_200HZ
-
enumerator ICM42670_ACCEL_ODR_400HZ
-
enumerator ICM42670_ACCEL_ODR_800HZ
-
enumerator ICM42670_ACCEL_ODR_1_6KHZ
-
enumerator ICM42670_ACCEL_ODR_1_5625HZ
-
enum icm42670_temp_lfp_t
Values:
-
enumerator ICM42670_TEMP_LFP_BYPASSED
-
enumerator ICM42670_TEMP_LFP_180HZ
-
enumerator ICM42670_TEMP_LFP_72HZ
-
enumerator ICM42670_TEMP_LFP_34HZ
-
enumerator ICM42670_TEMP_LFP_16HZ
-
enumerator ICM42670_TEMP_LFP_8HZ
-
enumerator ICM42670_TEMP_LFP_4HZ
-
enumerator ICM42670_TEMP_LFP_BYPASSED
-
enum icm42670_gyro_lfp_t
Values:
-
enumerator ICM42670_GYRO_LFP_BYPASSED
-
enumerator ICM42670_GYRO_LFP_180HZ
-
enumerator ICM42670_GYRO_LFP_121HZ
-
enumerator ICM42670_GYRO_LFP_73HZ
-
enumerator ICM42670_GYRO_LFP_53HZ
-
enumerator ICM42670_GYRO_LFP_34HZ
-
enumerator ICM42670_GYRO_LFP_25HZ
-
enumerator ICM42670_GYRO_LFP_16HZ
-
enumerator ICM42670_GYRO_LFP_BYPASSED
-
enum icm42670_accel_lfp_t
Values:
-
enumerator ICM42670_ACCEL_LFP_BYPASSED
-
enumerator ICM42670_ACCEL_LFP_180HZ
-
enumerator ICM42670_ACCEL_LFP_121HZ
-
enumerator ICM42670_ACCEL_LFP_73HZ
-
enumerator ICM42670_ACCEL_LFP_53HZ
-
enumerator ICM42670_ACCEL_LFP_34HZ
-
enumerator ICM42670_ACCEL_LFP_25HZ
-
enumerator ICM42670_ACCEL_LFP_16HZ
-
enumerator ICM42670_ACCEL_LFP_BYPASSED
-
enum icm42670_accel_avg_t
Values:
-
enumerator ICM42670_ACCEL_AVG_2X
-
enumerator ICM42670_ACCEL_AVG_4X
-
enumerator ICM42670_ACCEL_AVG_8X
-
enumerator ICM42670_ACCEL_AVG_16X
-
enumerator ICM42670_ACCEL_AVG_32X
-
enumerator ICM42670_ACCEL_AVG_64X
-
enumerator ICM42670_ACCEL_AVG_2X
-
enum icm42670_int_mode_t
Values:
-
enumerator ICM42670_INT_MODE_PULSED
-
enumerator ICM42670_INT_MODE_LATCHED
-
enumerator ICM42670_INT_MODE_PULSED
-
enum icm42670_int_drive_t
Values:
-
enumerator ICM42670_INT_DRIVE_OPEN_DRAIN
-
enumerator ICM42670_INT_DRIVE_PUSH_PULL
-
enumerator ICM42670_INT_DRIVE_OPEN_DRAIN
-
enum icm42670_int_polarity_t
Values:
-
enumerator ICM42670_INT_POLARITY_ACTIVE_LOW
-
enumerator ICM42670_INT_POLARITY_ACTIVE_HIGH
-
enumerator ICM42670_INT_POLARITY_ACTIVE_LOW
-
enum icm42670_wom_int_dur_t
Values:
-
enumerator ICM42670_WOM_INT_DUR_FIRST
-
enumerator ICM42670_WOM_INT_DUR_SECOND
-
enumerator ICM42670_WOM_INT_DUR_THIRD
-
enumerator ICM42670_WOM_INT_DUR_FOURTH
-
enumerator ICM42670_WOM_INT_DUR_FIRST
-
enum icm42670_wom_int_mode_t
Values:
-
enumerator ICM42670_WOM_INT_MODE_ALL_OR
-
enumerator ICM42670_WOM_INT_MODE_ALL_AND
-
enumerator ICM42670_WOM_INT_MODE_ALL_OR
Functions
-
esp_err_t icm42670_init_desc(icm42670_t *dev, uint8_t addr, i2c_port_t port, gpio_num_t sda_gpio, gpio_num_t scl_gpio)
Initialize device descriptor.
- Parameters:
dev – Device descriptor
addr – I2C device address,
ICM42670_I2C_ADDR_...
constport – I2C port
sda_gpio – SDA GPIO pin
scl_gpio – SCL GPIO pin
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_free_desc(icm42670_t *dev)
Free device descriptor.
- Parameters:
dev – Device descriptor
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_init(icm42670_t *dev)
Initialize device.
- Parameters:
dev – Device descriptor
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_idle_pwr_mode(icm42670_t *dev, bool enable_idle)
Set device power mode.
- Parameters:
dev – Device descriptor
enable_idle – bool to enable idle mode
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_gyro_pwr_mode(icm42670_t *dev, icm42670_gyro_pwr_mode_t pwr_mode)
Set gyro power mode.
- Parameters:
dev – Device descriptor
pwr_mode – struct of type icm42670_gyro_pwr_mode_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_accel_pwr_mode(icm42670_t *dev, icm42670_accel_pwr_mode_t pwr_mode)
Set accel power mode.
- Parameters:
dev – Device descriptor
pwr_mode – struct of type icm42670_accel_pwr_mode_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_low_power_clock(icm42670_t *dev, icm42670_lp_clock_source_t clock_source)
Set clock source in LP mode.
- Parameters:
dev – Device descriptor
clock_source – struct of type icm42670_lp_clock_source_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_read_temperature(icm42670_t *dev, float *temperature)
Read temperature from device.
- Parameters:
dev – Device descriptor
temperature – [out] temperature, degree C
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_read_raw_data(icm42670_t *dev, uint8_t data_register, int16_t *data)
Read 16-bit raw data registers (accelerometer and gyro values)
- Parameters:
dev – Device descriptor
data_register – data register to read from
data – [out] accel or gyro data
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_reset(icm42670_t *dev)
Performs a soft-reset.
- Parameters:
dev – Device descriptor
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_flush_fifo(icm42670_t *dev)
Wipes the FIFO.
- Parameters:
dev – Device descriptor
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_gyro_fsr(icm42670_t *dev, icm42670_gyro_fsr_t range)
Set the measurement FSR (Full Scale Range) of the gyro.
- Parameters:
dev – Device descriptor
range – struct of type icm42670_gyro_fsr_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_gyro_odr(icm42670_t *dev, icm42670_gyro_odr_t odr)
Set the measurement ODR (Output Data Rate) of the gyro.
- Parameters:
dev – Device descriptor
odr – struct of type icm42670_gyro_odr_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_accel_fsr(icm42670_t *dev, icm42670_accel_fsr_t range)
Set the measurement FSR (Full Scale Range) of the accelerometer.
- Parameters:
dev – Device descriptor
range – struct of type icm42670_accel_fsr_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_accel_odr(icm42670_t *dev, icm42670_accel_odr_t odr)
Set the measurement ODR (Output Data Rate) of the accelerometer.
- Parameters:
dev – Device descriptor
odr – struct of type icm42670_accel_odr_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_temp_lpf(icm42670_t *dev, icm42670_temp_lfp_t lpf_bw)
Set the digital Low-Pass-Filter (LPF) of the temperature sensor.
- Parameters:
dev – Device descriptor
lpf_bw – struct of type icm42670_temp_lfp_t (bandwidth)
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_gyro_lpf(icm42670_t *dev, icm42670_gyro_lfp_t lpf_bw)
Set the digital Low-Pass-Filter (LPF) of the gyro.
- Parameters:
dev – Device descriptor
lpf_bw – struct of type icm42670_gyro_lfp_t (bandwidth)
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_accel_lpf(icm42670_t *dev, icm42670_accel_lfp_t lpf_bw)
Set the digital Low-Pass-Filter (LPF) of the accelerometer.
- Parameters:
dev – Device descriptor
lpf_bw – struct of type icm42670_accel_lfp_t (bandwidth)
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_accel_avg(icm42670_t *dev, icm42670_accel_avg_t avg)
Set the averaging filter of the accelerometer (ONLY IN LOW POWER MODE (LPM)) This field can not be changed, when accel sensor is in LPM!
- Parameters:
dev – Device descriptor
avg – struct of type icm42670_accel_avg_t (averaging)
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_config_int_pin(icm42670_t *dev, uint8_t int_pin, icm42670_int_config_t config)
Configures the behaviour of an interrupt pin.
- Parameters:
dev – Device descriptor
int_pin – interrupt pin (1 or 2)
config – struct of type icm42670_int_config_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_set_int_sources(icm42670_t *dev, uint8_t int_pin, icm42670_int_source_t sources)
Configures the sources for an interrupt.
- Parameters:
dev – Device descriptor
int_pin – interrupt pin (1 or 2)
sources – struct of type icm42670_int_source_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_config_wom(icm42670_t *dev, icm42670_wom_config_t config)
Configures the Wake on Motion (WoM) behaviour WoM can only be configured if WoM is not enabled.
- Parameters:
dev – Device descriptor
config – struct of type icm42670_wom_config_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_enable_wom(icm42670_t *dev, bool enable)
Enable or Disable Wake on Motion (WoM)
- Parameters:
dev – Device descriptor
enable – true to enable, false to disable
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_get_mclk_rdy(icm42670_t *dev, bool *mclk_rdy)
Get the status of the internal clock.
- Parameters:
dev – Device descriptor
mclk_rdy – true if internal clock is running
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_get_accel_odr(icm42670_t *dev, icm42670_accel_odr_t *odr)
Get the output data rate (ODR) of the accel.
- Parameters:
dev – Device descriptor
odr – pointer to icm42670_accel_odr_t
- Returns:
ESP_OK
on success
-
esp_err_t icm42670_get_accel_avg(icm42670_t *dev, icm42670_accel_avg_t *avg)
Get the status of the accel averaging.
- Parameters:
dev – Device descriptor
avg – pointer to icm42670_accel_avg_t
- Returns:
ESP_OK
on success
-
struct icm42670_int_config_t
- #include <icm42670.h>
-
struct icm42670_int_source_t
- #include <icm42670.h>
-
struct icm42670_wom_config_t
- #include <icm42670.h>
-
struct icm42670_t
- #include <icm42670.h>
Device descriptor.
-
ICM42670_I2C_ADDR_GND