1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-13 03:20:00 +03:00

Add support for IIM42652 (#14424)

This commit is contained in:
Mark Haslinghuis 2025-06-11 01:47:01 +02:00 committed by GitHub
parent 1b1648d135
commit ec91238cd8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 36 additions and 11 deletions

View file

@ -164,6 +164,7 @@ const char * const lookupTableAccHardware[] = {
"ICM45605", "ICM45605",
"ICM45686", "ICM45686",
"ICM40609D", "ICM40609D",
"IIM42652",
"VIRTUAL" "VIRTUAL"
}; };
@ -191,6 +192,7 @@ const char * const lookupTableGyroHardware[] = {
"ICM45605", "ICM45605",
"ICM45686", "ICM45686",
"ICM40609D", "ICM40609D",
"IIM42652",
"VIRTUAL" "VIRTUAL"
}; };

View file

@ -65,6 +65,7 @@ typedef enum {
GYRO_ICM45605, GYRO_ICM45605,
GYRO_ICM45686, GYRO_ICM45686,
GYRO_ICM40609D, GYRO_ICM40609D,
GYRO_IIM42652,
GYRO_VIRTUAL GYRO_VIRTUAL
} gyroHardware_e; } gyroHardware_e;

View file

@ -47,6 +47,7 @@
#define ICM42688P_WHO_AM_I_CONST (0x47) #define ICM42688P_WHO_AM_I_CONST (0x47)
#define ICM45686_WHO_AM_I_CONST (0xE9) #define ICM45686_WHO_AM_I_CONST (0xE9)
#define ICM45605_WHO_AM_I_CONST (0xE5) #define ICM45605_WHO_AM_I_CONST (0xE5)
#define IIM42652_WHO_AM_I_CONST (0x6F)
#define IIM42653_WHO_AM_I_CONST (0x56) #define IIM42653_WHO_AM_I_CONST (0x56)
#define LSM6DSV16X_WHO_AM_I_CONST (0x70) #define LSM6DSV16X_WHO_AM_I_CONST (0x70)
#define ICM40609_WHO_AM_I_CONST (0x3B) #define ICM40609_WHO_AM_I_CONST (0x3B)
@ -207,6 +208,7 @@ typedef enum {
ICM_20689_SPI, ICM_20689_SPI,
ICM_42605_SPI, ICM_42605_SPI,
ICM_42688P_SPI, ICM_42688P_SPI,
IIM_42652_SPI,
IIM_42653_SPI, IIM_42653_SPI,
BMI_160_SPI, BMI_160_SPI,
BMI_270_SPI, BMI_270_SPI,

View file

@ -28,7 +28,7 @@
#include "platform.h" #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/axis.h"
#include "common/utils.h" #include "common/utils.h"
@ -284,6 +284,9 @@ uint8_t icm426xxSpiDetect(const extDevice_t *dev)
case ICM42688P_WHO_AM_I_CONST: case ICM42688P_WHO_AM_I_CONST:
icmDetected = ICM_42688P_SPI; icmDetected = ICM_42688P_SPI;
break; break;
case IIM42652_WHO_AM_I_CONST:
icmDetected = IIM_42652_SPI;
break;
case IIM42653_WHO_AM_I_CONST: case IIM42653_WHO_AM_I_CONST:
icmDetected = IIM_42653_SPI; icmDetected = IIM_42653_SPI;
break; break;
@ -306,6 +309,7 @@ void icm426xxAccInit(accDev_t *acc)
{ {
switch (acc->mpuDetectionResult.sensor) { switch (acc->mpuDetectionResult.sensor) {
case IIM_42653_SPI: case IIM_42653_SPI:
case IIM_42652_SPI:
acc->acc_1G = 512 * 2; // Accel scale 32g (1024 LSB/g) acc->acc_1G = 512 * 2; // Accel scale 32g (1024 LSB/g)
break; break;
default: default:
@ -319,6 +323,7 @@ bool icm426xxSpiAccDetect(accDev_t *acc)
switch (acc->mpuDetectionResult.sensor) { switch (acc->mpuDetectionResult.sensor) {
case ICM_42605_SPI: case ICM_42605_SPI:
case ICM_42688P_SPI: case ICM_42688P_SPI:
case IIM_42652_SPI:
case IIM_42653_SPI: case IIM_42653_SPI:
break; break;
default: default:
@ -427,6 +432,7 @@ bool icm426xxSpiGyroDetect(gyroDev_t *gyro)
case ICM_42688P_SPI: case ICM_42688P_SPI:
gyro->scale = GYRO_SCALE_2000DPS; gyro->scale = GYRO_SCALE_2000DPS;
break; break;
case IIM_42652_SPI:
case IIM_42653_SPI: case IIM_42653_SPI:
gyro->scale = GYRO_SCALE_4000DPS; gyro->scale = GYRO_SCALE_4000DPS;
break; break;
@ -444,6 +450,8 @@ static aafConfig_t getGyroAafConfig(const mpuSensor_e gyroModel, const aafConfig
{ {
switch (gyroModel){ switch (gyroModel){
case ICM_42605_SPI: case ICM_42605_SPI:
case IIM_42652_SPI:
case IIM_42653_SPI:
switch (config) { switch (config) {
case GYRO_HARDWARE_LPF_NORMAL: case GYRO_HARDWARE_LPF_NORMAL:
return aafLUT42605[AAF_CONFIG_258HZ]; return aafLUT42605[AAF_CONFIG_258HZ];
@ -456,7 +464,6 @@ static aafConfig_t getGyroAafConfig(const mpuSensor_e gyroModel, const aafConfig
} }
case ICM_42688P_SPI: case ICM_42688P_SPI:
case IIM_42653_SPI:
default: default:
switch (config) { switch (config) {
case GYRO_HARDWARE_LPF_NORMAL: 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

View file

@ -54,6 +54,7 @@ typedef enum {
ACC_ICM45605, ACC_ICM45605,
ACC_ICM45686, ACC_ICM45686,
ACC_ICM40609D, ACC_ICM40609D,
ACC_IIM42652,
ACC_VIRTUAL ACC_VIRTUAL
} accelerationSensor_e; } accelerationSensor_e;

View file

@ -218,9 +218,10 @@ retry:
FALLTHROUGH; FALLTHROUGH;
#endif #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_ICM42605:
case ACC_ICM42688P: case ACC_ICM42688P:
case ACC_IIM42652:
case ACC_IIM42653: case ACC_IIM42653:
if (icm426xxSpiAccDetect(dev)) { if (icm426xxSpiAccDetect(dev)) {
switch (dev->mpuDetectionResult.sensor) { switch (dev->mpuDetectionResult.sensor) {
@ -230,6 +231,9 @@ retry:
case ICM_42688P_SPI: case ICM_42688P_SPI:
accHardware = ACC_ICM42688P; accHardware = ACC_ICM42688P;
break; break;
case IIM_42652_SPI:
accHardware = ACC_IIM42652;
break;
case IIM_42653_SPI: case IIM_42653_SPI:
accHardware = ACC_IIM42653; accHardware = ACC_IIM42653;
break; break;

View file

@ -318,6 +318,7 @@ void gyroInitSensor(gyroSensor_t *gyroSensor, const gyroDeviceConfig_t *config)
case GYRO_LSM6DSO: case GYRO_LSM6DSO:
case GYRO_LSM6DSV16X: case GYRO_LSM6DSV16X:
case GYRO_ICM42688P: case GYRO_ICM42688P:
case GYRO_IIM42652:
case GYRO_IIM42653: case GYRO_IIM42653:
case GYRO_ICM42605: case GYRO_ICM42605:
case GYRO_ICM45686: case GYRO_ICM45686:
@ -434,9 +435,10 @@ STATIC_UNIT_TESTED gyroHardware_e gyroDetect(gyroDev_t *dev)
FALLTHROUGH; FALLTHROUGH;
#endif #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_ICM42605:
case GYRO_ICM42688P: case GYRO_ICM42688P:
case GYRO_IIM42652:
case GYRO_IIM42653: case GYRO_IIM42653:
if (icm426xxSpiGyroDetect(dev)) { if (icm426xxSpiGyroDetect(dev)) {
switch (dev->mpuDetectionResult.sensor) { switch (dev->mpuDetectionResult.sensor) {
@ -446,6 +448,9 @@ STATIC_UNIT_TESTED gyroHardware_e gyroDetect(gyroDev_t *dev)
case ICM_42688P_SPI: case ICM_42688P_SPI:
gyroHardware = GYRO_ICM42688P; gyroHardware = GYRO_ICM42688P;
break; break;
case IIM_42652_SPI:
gyroHardware = GYRO_IIM42652;
break;
case IIM_42653_SPI: case IIM_42653_SPI:
gyroHardware = GYRO_IIM42653; gyroHardware = GYRO_IIM42653;
break; break;

View file

@ -110,8 +110,9 @@
&& !defined(USE_ACC_SPI_MPU6000) \ && !defined(USE_ACC_SPI_MPU6000) \
&& !defined(USE_ACC_SPI_MPU6500) \ && !defined(USE_ACC_SPI_MPU6500) \
&& !defined(USE_ACC_SPI_MPU9250) \ && !defined(USE_ACC_SPI_MPU9250) \
&& !defined(USE_VIRTUAL_ACC) \ && !defined(USE_ACCGYRO_IIM42652) \
&& !defined(USE_ACCGYRO_IIM42653) && !defined(USE_ACCGYRO_IIM42653) \
&& !defined(USE_VIRTUAL_ACC)
#error At least one USE_ACC device definition required #error At least one USE_ACC device definition required
#endif #endif
@ -133,8 +134,9 @@
&& !defined(USE_GYRO_SPI_MPU6000) \ && !defined(USE_GYRO_SPI_MPU6000) \
&& !defined(USE_GYRO_SPI_MPU6500) \ && !defined(USE_GYRO_SPI_MPU6500) \
&& !defined(USE_GYRO_SPI_MPU9250) \ && !defined(USE_GYRO_SPI_MPU9250) \
&& !defined(USE_VIRTUAL_GYRO) \ && !defined(USE_ACCGYRO_IIM42652) \
&& !defined(USE_ACCGYRO_IIM42653) && !defined(USE_ACCGYRO_IIM42653) \
&& !defined(USE_VIRTUAL_GYRO)
#error At least one USE_GYRO device definition required #error At least one USE_GYRO device definition required
#endif #endif
@ -472,11 +474,11 @@
#define USE_GYRO_SPI_MPU6500 #define USE_GYRO_SPI_MPU6500
#endif #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) \ #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_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_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 #ifndef USE_SPI_GYRO
#define USE_SPI_GYRO #define USE_SPI_GYRO
#endif #endif

View file

@ -116,6 +116,7 @@
#define USE_GYRO_SPI_ICM42688P #define USE_GYRO_SPI_ICM42688P
#define USE_ACCGYRO_ICM45686 #define USE_ACCGYRO_ICM45686
#define USE_ACCGYRO_ICM45605 #define USE_ACCGYRO_ICM45605
#define USE_ACCGYRO_IIM42652
#define USE_ACCGYRO_IIM42653 #define USE_ACCGYRO_IIM42653
#define USE_ACC_SPI_ICM42605 #define USE_ACC_SPI_ICM42605
#define USE_ACC_SPI_ICM42688P #define USE_ACC_SPI_ICM42688P