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¶