Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
invensense2.h File Reference

Driver for the Invensense V2 IMUs ICM20948, ICM20648 and ICM20649. More...

#include "std.h"
#include "mcu_periph/spi.h"
#include "mcu_periph/i2c.h"
+ Include dependency graph for invensense2.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  invensense2_spi_t
 
struct  invensense2_i2c_t
 
struct  invensense2_t
 
union  invensense2_t.__unnamed325__
 

Macros

#define INVENSENSE2_SAMPLE_CNT   22
 
#define INVENSENSE2_SAMPLE_SIZE   14
 
#define INVENSENSE2_BUFFER_SIZE   ((INVENSENSE2_SAMPLE_SIZE*INVENSENSE2_SAMPLE_CNT) + 3)
 

Enumerations

enum  invensense2_bus_t { INVENSENSE2_SPI , INVENSENSE2_I2C }
 
enum  invensense2_status_t { INVENSENSE2_IDLE , INVENSENSE2_CONFIG , INVENSENSE2_RUNNING }
 
enum  invensense2_device_t { INVENSENSE2_UNKOWN , INVENSENSE2_ICM20648 , INVENSENSE2_ICM20649 , INVENSENSE2_ICM20948 }
 
enum  invensense2_gyro_dlpf_t {
  INVENSENSE2_GYRO_DLPF_OFF , INVENSENSE2_GYRO_DLPF_229HZ , INVENSENSE2_GYRO_DLPF_188HZ , INVENSENSE2_GYRO_DLPF_154HZ ,
  INVENSENSE2_GYRO_DLPF_73HZ , INVENSENSE2_GYRO_DLPF_36HZ , INVENSENSE2_GYRO_DLPF_18HZ , INVENSENSE2_GYRO_DLPF_9HZ ,
  INVENSENSE2_GYRO_DLPF_377HZ
}
 
enum  invensense2_gyro_range_t {
  INVENSENSE2_GYRO_RANGE_250DPS , INVENSENSE2_GYRO_RANGE_500DPS , INVENSENSE2_GYRO_RANGE_1000DPS , INVENSENSE2_GYRO_RANGE_2000DPS ,
  INVENSENSE2_GYRO_RANGE_4000DPS
}
 
enum  invensense2_accel_dlpf_t {
  INVENSENSE2_ACCEL_DLPF_OFF , INVENSENSE2_ACCEL_DLPF_265HZ , INVENSENSE2_ACCEL_DLPF_136HZ , INVENSENSE2_ACCEL_DLPF_69HZ ,
  INVENSENSE2_ACCEL_DLPF_34HZ , INVENSENSE2_ACCEL_DLPF_17HZ , INVENSENSE2_ACCEL_DLPF_8HZ , INVENSENSE2_ACCEL_DLPF_499HZ
}
 
enum  invensense2_accel_range_t {
  INVENSENSE2_ACCEL_RANGE_2G , INVENSENSE2_ACCEL_RANGE_4G , INVENSENSE2_ACCEL_RANGE_8G , INVENSENSE2_ACCEL_RANGE_16G ,
  INVENSENSE2_ACCEL_RANGE_30G
}
 

Functions

void invensense2_init (struct invensense2_t *inv)
 Initialize the invensense v2 sensor instance.
 
void invensense2_periodic (struct invensense2_t *inv)
 Should be called periodically to request sensor readings.
 
void invensense2_event (struct invensense2_t *inv)
 Should be called in the event thread.
 

Detailed Description

Driver for the Invensense V2 IMUs ICM20948, ICM20648 and ICM20649.

Definition in file invensense2.h.


Data Structure Documentation

◆ invensense2_spi_t

struct invensense2_spi_t

Definition at line 42 of file invensense2.h.

+ Collaboration diagram for invensense2_spi_t:
Data Fields
struct spi_periph * p Peripheral device for communication.
volatile uint8_t rx_buf[INVENSENSE2_BUFFER_SIZE] Receive buffer.
uint8_t slave_idx Slave index used for Slave Select.
struct spi_transaction trans Transaction used during configuration and measurements.
volatile uint8_t tx_buf[2] Transmit buffer.

◆ invensense2_i2c_t

struct invensense2_i2c_t

Definition at line 52 of file invensense2.h.

+ Collaboration diagram for invensense2_i2c_t:
Data Fields
struct i2c_periph * p Peripheral device for communication.
uint8_t slave_addr The I2C slave address on the bus.
struct i2c_transaction trans TRansaction used during configuration and measurements.

◆ invensense2_t

struct invensense2_t

Definition at line 123 of file invensense2.h.

Data Fields
union invensense2_t.__unnamed325__ __unnamed__
uint8_t abi_id The ABI id used to broadcast the device measurements.
enum invensense2_accel_dlpf_t accel_dlpf Accelerometer DLPF configuration.
enum invensense2_accel_range_t accel_range Accelerometer range configuration.
enum invensense2_bus_t bus The communication bus used to connect the device SPI/I2C.
uint8_t config_idx The current configuration index.
enum invensense2_device_t device The device type detected.
enum invensense2_gyro_dlpf_t gyro_dlpf Gyro DLPF configuration.
enum invensense2_gyro_range_t gyro_range Gyro range configuration.
uint8_t register_bank The current register bank communicating with.
enum invensense2_status_t status Status of the invensense V2 device.
float timebase_correction_pll Timebase correction factor for the PLL clock.
uint32_t timer Used to time operations during configuration (samples left during measuring)

◆ invensense2_t.__unnamed325__

union invensense2_t.__unnamed325__

Definition at line 129 of file invensense2.h.

Data Fields
struct invensense2_i2c_t i2c I2C specific configuration.
struct invensense2_spi_t spi SPI specific configuration.

Macro Definition Documentation

◆ INVENSENSE2_BUFFER_SIZE

#define INVENSENSE2_BUFFER_SIZE   ((INVENSENSE2_SAMPLE_SIZE*INVENSENSE2_SAMPLE_CNT) + 3)

Definition at line 39 of file invensense2.h.

◆ INVENSENSE2_SAMPLE_CNT

#define INVENSENSE2_SAMPLE_CNT   22

Definition at line 37 of file invensense2.h.

◆ INVENSENSE2_SAMPLE_SIZE

#define INVENSENSE2_SAMPLE_SIZE   14

Definition at line 38 of file invensense2.h.

Enumeration Type Documentation

◆ invensense2_accel_dlpf_t

Enumerator
INVENSENSE2_ACCEL_DLPF_OFF 
INVENSENSE2_ACCEL_DLPF_265HZ 
INVENSENSE2_ACCEL_DLPF_136HZ 
INVENSENSE2_ACCEL_DLPF_69HZ 
INVENSENSE2_ACCEL_DLPF_34HZ 
INVENSENSE2_ACCEL_DLPF_17HZ 
INVENSENSE2_ACCEL_DLPF_8HZ 
INVENSENSE2_ACCEL_DLPF_499HZ 

Definition at line 102 of file invensense2.h.

◆ invensense2_accel_range_t

Enumerator
INVENSENSE2_ACCEL_RANGE_2G 

Not possible for ICM20649.

INVENSENSE2_ACCEL_RANGE_4G 
INVENSENSE2_ACCEL_RANGE_8G 
INVENSENSE2_ACCEL_RANGE_16G 
INVENSENSE2_ACCEL_RANGE_30G 

Only possible for ICM20649.

Definition at line 114 of file invensense2.h.

◆ invensense2_bus_t

Enumerator
INVENSENSE2_SPI 
INVENSENSE2_I2C 

Definition at line 59 of file invensense2.h.

◆ invensense2_device_t

Enumerator
INVENSENSE2_UNKOWN 
INVENSENSE2_ICM20648 
INVENSENSE2_ICM20649 
INVENSENSE2_ICM20948 

Definition at line 72 of file invensense2.h.

◆ invensense2_gyro_dlpf_t

Enumerator
INVENSENSE2_GYRO_DLPF_OFF 
INVENSENSE2_GYRO_DLPF_229HZ 
INVENSENSE2_GYRO_DLPF_188HZ 
INVENSENSE2_GYRO_DLPF_154HZ 
INVENSENSE2_GYRO_DLPF_73HZ 
INVENSENSE2_GYRO_DLPF_36HZ 
INVENSENSE2_GYRO_DLPF_18HZ 
INVENSENSE2_GYRO_DLPF_9HZ 
INVENSENSE2_GYRO_DLPF_377HZ 

Definition at line 80 of file invensense2.h.

◆ invensense2_gyro_range_t

Enumerator
INVENSENSE2_GYRO_RANGE_250DPS 

Not possible for ICM20649.

INVENSENSE2_GYRO_RANGE_500DPS 
INVENSENSE2_GYRO_RANGE_1000DPS 
INVENSENSE2_GYRO_RANGE_2000DPS 
INVENSENSE2_GYRO_RANGE_4000DPS 

Only possible for ICM20649.

Definition at line 93 of file invensense2.h.

◆ invensense2_status_t

Enumerator
INVENSENSE2_IDLE 
INVENSENSE2_CONFIG 
INVENSENSE2_RUNNING 

Definition at line 65 of file invensense2.h.

Function Documentation

◆ invensense2_event()

void invensense2_event ( struct invensense2_t inv)

Should be called in the event thread.

  • Checks the response of the WHO_AM_I reading
  • Configures the sensor and reads the responses
  • Parse and request the sensor data from the FIFO buffers
Parameters
invThe invensense v2 instance

Definition at line 152 of file invensense2.c.

References foo, I2CTransDone, I2CTransFailed, I2CTransSuccess, INV2_WHOAMI_ICM20648, INV2_WHOAMI_ICM20649, INV2_WHOAMI_ICM20948, INV2REG_BANK_SEL, INV2REG_FIFO_COUNTH, invensense2_config(), INVENSENSE2_CONFIG, invensense2_fix_config(), INVENSENSE2_I2C, INVENSENSE2_ICM20648, INVENSENSE2_ICM20649, INVENSENSE2_ICM20948, INVENSENSE2_IDLE, invensense2_parse_data(), invensense2_register_read(), INVENSENSE2_RUNNING, INVENSENSE2_SAMPLE_SIZE, INVENSENSE2_SPI, SPITransDone, SPITransFailed, and SPITransSuccess.

Referenced by imu_cube_event(), and imu_pixhawk6x_event().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ invensense2_init()

void invensense2_init ( struct invensense2_t inv)

Initialize the invensense v2 sensor instance.

Parameters
invThe structure containing the configuration of the invensense v2 instance

Definition at line 79 of file invensense2.c.

References foo, I2CTransDone, INVENSENSE2_IDLE, INVENSENSE2_SPI, INVENSENSE2_UNKOWN, SPICphaEdge2, SPICpolIdleHigh, SPIDiv16, SPIDss8bit, SPIMSBFirst, SPISelectUnselect, and SPITransDone.

Referenced by imu_cube_init(), and imu_pixhawk6x_init().

+ Here is the caller graph for this function:

◆ invensense2_periodic()

void invensense2_periodic ( struct invensense2_t inv)

Should be called periodically to request sensor readings.

  • First detects the sensor using WHO_AM_I reading
  • Configures the sensor according the users requested configuration
  • Requests a sensor reading by reading the FIFO_COUNT register
Parameters
invThe invensense v2 instance

Definition at line 119 of file invensense2.c.

References foo, I2CTransDone, INV2REG_FIFO_COUNTH, INV2REG_WHO_AM_I, invensense2_config(), INVENSENSE2_CONFIG, INVENSENSE2_I2C, INVENSENSE2_IDLE, invensense2_register_read(), INVENSENSE2_RUNNING, INVENSENSE2_SPI, and SPITransDone.

Referenced by imu_cube_periodic(), and imu_pixhawk6x_periodic().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: