icm42670: Driver for TDK ICM-42670-P 6-Axis IMU
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
- enum icm42670_accel_pwr_mode_t
Values:
- enumerator ICM42670_ACCEL_DISABLE
- enumerator ICM42670_ACCEL_ENABLE_LP_MODE
- enumerator ICM42670_ACCEL_ENABLE_LN_MODE
- enum icm42670_lp_clock_source_t
Values:
- enumerator ICM42670_LP_CLK_WUO
- enumerator ICM42670_LP_CLK_RCO
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- enum icm42670_int_mode_t
Values:
- enumerator ICM42670_INT_MODE_PULSED
- enumerator ICM42670_INT_MODE_LATCHED
- enum icm42670_int_drive_t
Values:
- enumerator ICM42670_INT_DRIVE_OPEN_DRAIN
- enumerator ICM42670_INT_DRIVE_PUSH_PULL
- enum icm42670_int_polarity_t
Values:
- enumerator ICM42670_INT_POLARITY_ACTIVE_LOW
- enumerator ICM42670_INT_POLARITY_ACTIVE_HIGH
- 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
- enum icm42670_wom_int_mode_t
Values:
- enumerator ICM42670_WOM_INT_MODE_ALL_OR
- enumerator ICM42670_WOM_INT_MODE_ALL_AND
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>Public Members
- icm42670_int_mode_t mode
- icm42670_int_drive_t drive
- icm42670_int_polarity_t polarity
- struct icm42670_int_source_t
#include <icm42670.h>
- struct icm42670_wom_config_t
#include <icm42670.h>Public Members
- icm42670_wom_int_dur_t trigger
- icm42670_wom_int_mode_t logical_mode
- icm42670_wom_mode_t reference
- uint8_t wom_x_threshold
- uint8_t wom_y_threshold
- uint8_t wom_z_threshold