diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index 6fc140f4af..7cbcabfc6b 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -164,6 +164,7 @@ const char * const lookupTableAccHardware[] = { "ICM45605", "ICM45686", "ICM40609D", + "IIM42652", "VIRTUAL" }; @@ -191,6 +192,7 @@ const char * const lookupTableGyroHardware[] = { "ICM45605", "ICM45686", "ICM40609D", + "IIM42652", "VIRTUAL" }; diff --git a/src/main/drivers/accgyro/accgyro.h b/src/main/drivers/accgyro/accgyro.h index e969f92ec4..9a50c6b69b 100644 --- a/src/main/drivers/accgyro/accgyro.h +++ b/src/main/drivers/accgyro/accgyro.h @@ -65,6 +65,7 @@ typedef enum { GYRO_ICM45605, GYRO_ICM45686, GYRO_ICM40609D, + GYRO_IIM42652, GYRO_VIRTUAL } gyroHardware_e; diff --git a/src/main/drivers/accgyro/accgyro_mpu.h b/src/main/drivers/accgyro/accgyro_mpu.h index 20104d7fe2..b3e4fe7ef2 100644 --- a/src/main/drivers/accgyro/accgyro_mpu.h +++ b/src/main/drivers/accgyro/accgyro_mpu.h @@ -47,6 +47,7 @@ #define ICM42688P_WHO_AM_I_CONST (0x47) #define ICM45686_WHO_AM_I_CONST (0xE9) #define ICM45605_WHO_AM_I_CONST (0xE5) +#define IIM42652_WHO_AM_I_CONST (0x6F) #define IIM42653_WHO_AM_I_CONST (0x56) #define LSM6DSV16X_WHO_AM_I_CONST (0x70) #define ICM40609_WHO_AM_I_CONST (0x3B) @@ -207,6 +208,7 @@ typedef enum { ICM_20689_SPI, ICM_42605_SPI, ICM_42688P_SPI, + IIM_42652_SPI, IIM_42653_SPI, BMI_160_SPI, BMI_270_SPI, diff --git a/src/main/drivers/accgyro/accgyro_spi_icm426xx.c b/src/main/drivers/accgyro/accgyro_spi_icm426xx.c index b323d2211d..afdc21e2fa 100644 --- a/src/main/drivers/accgyro/accgyro_spi_icm426xx.c +++ b/src/main/drivers/accgyro/accgyro_spi_icm426xx.c @@ -28,7 +28,7 @@ #include "platform.h" -#if defined(USE_GYRO_SPI_ICM42605) || defined(USE_GYRO_SPI_ICM42688P) || defined(USE_ACCGYRO_IIM42653) +#if defined(USE_GYRO_SPI_ICM42605) || defined(USE_GYRO_SPI_ICM42688P) || defined(USE_ACCGYRO_IIM42652) || defined(USE_ACCGYRO_IIM42653) #include "common/axis.h" #include "common/utils.h" @@ -284,6 +284,9 @@ uint8_t icm426xxSpiDetect(const extDevice_t *dev) case ICM42688P_WHO_AM_I_CONST: icmDetected = ICM_42688P_SPI; break; + case IIM42652_WHO_AM_I_CONST: + icmDetected = IIM_42652_SPI; + break; case IIM42653_WHO_AM_I_CONST: icmDetected = IIM_42653_SPI; break; @@ -306,6 +309,7 @@ void icm426xxAccInit(accDev_t *acc) { switch (acc->mpuDetectionResult.sensor) { case IIM_42653_SPI: + case IIM_42652_SPI: acc->acc_1G = 512 * 2; // Accel scale 32g (1024 LSB/g) break; default: @@ -319,6 +323,7 @@ bool icm426xxSpiAccDetect(accDev_t *acc) switch (acc->mpuDetectionResult.sensor) { case ICM_42605_SPI: case ICM_42688P_SPI: + case IIM_42652_SPI: case IIM_42653_SPI: break; default: @@ -427,6 +432,7 @@ bool icm426xxSpiGyroDetect(gyroDev_t *gyro) case ICM_42688P_SPI: gyro->scale = GYRO_SCALE_2000DPS; break; + case IIM_42652_SPI: case IIM_42653_SPI: gyro->scale = GYRO_SCALE_4000DPS; break; @@ -444,6 +450,8 @@ static aafConfig_t getGyroAafConfig(const mpuSensor_e gyroModel, const aafConfig { switch (gyroModel){ case ICM_42605_SPI: + case IIM_42652_SPI: + case IIM_42653_SPI: switch (config) { case GYRO_HARDWARE_LPF_NORMAL: return aafLUT42605[AAF_CONFIG_258HZ]; @@ -456,7 +464,6 @@ static aafConfig_t getGyroAafConfig(const mpuSensor_e gyroModel, const aafConfig } case ICM_42688P_SPI: - case IIM_42653_SPI: default: switch (config) { case GYRO_HARDWARE_LPF_NORMAL: @@ -475,4 +482,4 @@ static aafConfig_t getGyroAafConfig(const mpuSensor_e gyroModel, const aafConfig } } -#endif // USE_GYRO_SPI_ICM42605 || USE_GYRO_SPI_ICM42688P || USE_ACCGYRO_IIM42653 +#endif // USE_GYRO_SPI_ICM42605 || USE_GYRO_SPI_ICM42688P || USE_ACCGYRO_IIM42652 || USE_ACCGYRO_IIM42653 diff --git a/src/main/sensors/acceleration.h b/src/main/sensors/acceleration.h index bb75d5cc61..9464544642 100644 --- a/src/main/sensors/acceleration.h +++ b/src/main/sensors/acceleration.h @@ -54,6 +54,7 @@ typedef enum { ACC_ICM45605, ACC_ICM45686, ACC_ICM40609D, + ACC_IIM42652, ACC_VIRTUAL } accelerationSensor_e; diff --git a/src/main/sensors/acceleration_init.c b/src/main/sensors/acceleration_init.c index 93426607ba..46a9943379 100644 --- a/src/main/sensors/acceleration_init.c +++ b/src/main/sensors/acceleration_init.c @@ -218,9 +218,10 @@ retry: FALLTHROUGH; #endif -#if defined(USE_ACC_SPI_ICM42605) || defined(USE_ACC_SPI_ICM42688P) || defined(USE_ACCGYRO_IIM42653) +#if defined(USE_ACC_SPI_ICM42605) || defined(USE_ACC_SPI_ICM42688P) || defined(USE_ACCGYRO_IIM42652) || defined(USE_ACCGYRO_IIM42653) case ACC_ICM42605: case ACC_ICM42688P: + case ACC_IIM42652: case ACC_IIM42653: if (icm426xxSpiAccDetect(dev)) { switch (dev->mpuDetectionResult.sensor) { @@ -230,6 +231,9 @@ retry: case ICM_42688P_SPI: accHardware = ACC_ICM42688P; break; + case IIM_42652_SPI: + accHardware = ACC_IIM42652; + break; case IIM_42653_SPI: accHardware = ACC_IIM42653; break; diff --git a/src/main/sensors/gyro_init.c b/src/main/sensors/gyro_init.c index 5afb37e5e9..7a2de5f353 100644 --- a/src/main/sensors/gyro_init.c +++ b/src/main/sensors/gyro_init.c @@ -318,6 +318,7 @@ void gyroInitSensor(gyroSensor_t *gyroSensor, const gyroDeviceConfig_t *config) case GYRO_LSM6DSO: case GYRO_LSM6DSV16X: case GYRO_ICM42688P: + case GYRO_IIM42652: case GYRO_IIM42653: case GYRO_ICM42605: case GYRO_ICM45686: @@ -434,9 +435,10 @@ STATIC_UNIT_TESTED gyroHardware_e gyroDetect(gyroDev_t *dev) FALLTHROUGH; #endif -#if defined(USE_GYRO_SPI_ICM42605) || defined(USE_GYRO_SPI_ICM42688P) || defined(USE_ACCGYRO_IIM42653) +#if defined(USE_GYRO_SPI_ICM42605) || defined(USE_GYRO_SPI_ICM42688P) || defined(USE_ACCGYRO_IIM42652) || defined(USE_ACCGYRO_IIM42653) case GYRO_ICM42605: case GYRO_ICM42688P: + case GYRO_IIM42652: case GYRO_IIM42653: if (icm426xxSpiGyroDetect(dev)) { switch (dev->mpuDetectionResult.sensor) { @@ -446,6 +448,9 @@ STATIC_UNIT_TESTED gyroHardware_e gyroDetect(gyroDev_t *dev) case ICM_42688P_SPI: gyroHardware = GYRO_ICM42688P; break; + case IIM_42652_SPI: + gyroHardware = GYRO_IIM42652; + break; case IIM_42653_SPI: gyroHardware = GYRO_IIM42653; break; diff --git a/src/main/target/common_post.h b/src/main/target/common_post.h index b4ff315959..b406583886 100644 --- a/src/main/target/common_post.h +++ b/src/main/target/common_post.h @@ -110,8 +110,9 @@ && !defined(USE_ACC_SPI_MPU6000) \ && !defined(USE_ACC_SPI_MPU6500) \ && !defined(USE_ACC_SPI_MPU9250) \ - && !defined(USE_VIRTUAL_ACC) \ - && !defined(USE_ACCGYRO_IIM42653) + && !defined(USE_ACCGYRO_IIM42652) \ + && !defined(USE_ACCGYRO_IIM42653) \ + && !defined(USE_VIRTUAL_ACC) #error At least one USE_ACC device definition required #endif @@ -133,8 +134,9 @@ && !defined(USE_GYRO_SPI_MPU6000) \ && !defined(USE_GYRO_SPI_MPU6500) \ && !defined(USE_GYRO_SPI_MPU9250) \ - && !defined(USE_VIRTUAL_GYRO) \ - && !defined(USE_ACCGYRO_IIM42653) + && !defined(USE_ACCGYRO_IIM42652) \ + && !defined(USE_ACCGYRO_IIM42653) \ + && !defined(USE_VIRTUAL_GYRO) #error At least one USE_GYRO device definition required #endif @@ -472,11 +474,11 @@ #define USE_GYRO_SPI_MPU6500 #endif -// Generate USE_SPI_GYRO or USE_I2C_GYRO +// Generate USE_SPI_GYRO #if defined(USE_GYRO_SPI_ICM20689) || defined(USE_GYRO_SPI_MPU6000) || defined(USE_GYRO_SPI_MPU6500) || defined(USE_GYRO_SPI_MPU9250) \ || defined(USE_GYRO_L3GD20) || defined(USE_GYRO_SPI_ICM42605) || defined(USE_GYRO_SPI_ICM42688P) || defined(USE_ACCGYRO_ICM45686) \ || defined(USE_ACCGYRO_ICM45605) || defined(USE_ACCGYRO_IIM42653) || defined(USE_ACCGYRO_BMI160) || defined(USE_ACCGYRO_BMI270) \ - || defined(USE_ACCGYRO_LSM6DSV16X) || defined(USE_ACCGYRO_LSM6DSO) || defined(USE_ACCGYRO_ICM40609D) + || defined(USE_ACCGYRO_LSM6DSV16X) || defined(USE_ACCGYRO_LSM6DSO) || defined(USE_ACCGYRO_ICM40609D) || defined(USE_ACCGYRO_IIM42652) #ifndef USE_SPI_GYRO #define USE_SPI_GYRO #endif diff --git a/src/main/target/common_pre.h b/src/main/target/common_pre.h index 326c7fd5ee..ed96a9f48f 100644 --- a/src/main/target/common_pre.h +++ b/src/main/target/common_pre.h @@ -116,6 +116,7 @@ #define USE_GYRO_SPI_ICM42688P #define USE_ACCGYRO_ICM45686 #define USE_ACCGYRO_ICM45605 +#define USE_ACCGYRO_IIM42652 #define USE_ACCGYRO_IIM42653 #define USE_ACC_SPI_ICM42605 #define USE_ACC_SPI_ICM42688P