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

Further work on gyro SPI selection

This commit is contained in:
Martin Budden 2017-03-24 18:21:00 +00:00
parent 3545775fdf
commit 9a3cad9ca3
12 changed files with 120 additions and 54 deletions

View file

@ -113,31 +113,33 @@ VALID_TARGETS := $(sort $(VALID_TARGETS))
GROUP_1_TARGETS := \ GROUP_1_TARGETS := \
AFROMINI \ AFROMINI \
AIORACERF3 \ AIORACERF3 \
AIR32 \ AIR32 \
AIRBOTF4 \ AIRBOTF4 \
AIRHEROF3 \ AIRBOTF4SD \
ALIENFLIGHTF1 \ AIRHEROF3 \
ALIENFLIGHTF1 \
ALIENFLIGHTF3 \ ALIENFLIGHTF3 \
ALIENFLIGHTF4 \ ALIENFLIGHTF4 \
ALIENFLIGHTNGF7 \ ALIENFLIGHTNGF7 \
ANYFCF7 \ ANYFCF7 \
BEEBRAIN \ BEEBRAIN \
BEEROTORF4 \ BEEROTORF4 \
BETAFLIGHTF3 \ BETAFLIGHTF3 \
BLUEJAYF4 \
CC3D \ CC3D \
CC3D_OPBL \ CC3D_OPBL \
GROUP_2_TARGETS := \
CHEBUZZF3 \ CHEBUZZF3 \
CJMCU \ CJMCU \
CL_RACINGF4 \ CL_RACINGF4 \
COLIBRI \ COLIBRI \
GROUP_2_TARGETS := \
COLIBRI_OPBL \ COLIBRI_OPBL \
COLIBRI_RACE \ COLIBRI_RACE \
DOGE \ DOGE \
ELLE0 \ ELLE0 \
F4BY \ F4BY \
FISHDRONEF4 \ FISHDRONEF4 \
FLIP32F3OSD \ FLIP32F3OSD \
FURYF3 \ FURYF3 \
FURYF4 \ FURYF4 \
@ -145,35 +147,35 @@ GROUP_2_TARGETS := \
IMPULSERCF3 \ IMPULSERCF3 \
IRCFUSIONF3 \ IRCFUSIONF3 \
ISHAPEDF3 \ ISHAPEDF3 \
BLUEJAYF4 \
KAKUTEF4 \
KISSCC \
GROUP_3_TARGETS := \ GROUP_3_TARGETS := \
KAKUTEF4 \
KISSCC \
KIWIF4 \ KIWIF4 \
LUX_RACE \ LUX_RACE \
LUXV2_RACE \ LUXV2_RACE \
MICROSCISKY \ MICROSCISKY \
MOTOLAB \ MOTOLAB \
MULTIFLITEPICO \ MULTIFLITEPICO \
NAZE \ NAZE \
NERO \ NERO \
NUCLEOF7 \
OMNIBUS \ OMNIBUS \
OMNIBUSF4 \
OMNIBUSF4SD \ OMNIBUSF4SD \
PIKOBLX \ PIKOBLX \
PLUMF4 \ PLUMF4 \
PODIUMF4 \ PODIUMF4 \
RACEBASE \
GROUP_4_TARGETS := \
RCEXPLORERF3 \ RCEXPLORERF3 \
REVO \ REVO \
REVO_OPBL \ REVO_OPBL \
REVOLT \ REVOLT \
REVONANO \ REVONANO \
GROUP_4_TARGETS := \
RMDO \ RMDO \
SINGULARITY \ SINGULARITY \
SIRINFPV \ SIRINFPV \
SOULF4 \ SOULF4 \
SPARKY \ SPARKY \
SPARKY2 \ SPARKY2 \
@ -181,10 +183,8 @@ GROUP_4_TARGETS := \
SPRACINGF3EVO \ SPRACINGF3EVO \
SPRACINGF3MINI \ SPRACINGF3MINI \
SPRACINGF3NEO \ SPRACINGF3NEO \
KROOZX \
NUCLEOF7 \
OMNIBUSF4 \
STM32F3DISCOVERY \ STM32F3DISCOVERY \
TINYBEEF3 \
GROUP_OTHER_TARGETS := $(filter-out $(GROUP_1_TARGETS) $(GROUP_2_TARGETS) $(GROUP_3_TARGETS) $(GROUP_4_TARGETS), $(VALID_TARGETS)) GROUP_OTHER_TARGETS := $(filter-out $(GROUP_1_TARGETS) $(GROUP_2_TARGETS) $(GROUP_3_TARGETS) $(GROUP_4_TARGETS), $(VALID_TARGETS))

View file

@ -175,9 +175,10 @@ typedef enum {
MPU_65xx_I2C, MPU_65xx_I2C,
MPU_65xx_SPI, MPU_65xx_SPI,
MPU_9250_SPI, MPU_9250_SPI,
ICM_20689_SPI, ICM_20601_SPI,
ICM_20608_SPI,
ICM_20602_SPI, ICM_20602_SPI,
ICM_20608_SPI,
ICM_20689_SPI,
BMI_160_SPI, BMI_160_SPI,
} mpuSensor_e; } mpuSensor_e;

View file

@ -20,8 +20,9 @@
#define MPU6500_WHO_AM_I_CONST (0x70) #define MPU6500_WHO_AM_I_CONST (0x70)
#define MPU9250_WHO_AM_I_CONST (0x71) #define MPU9250_WHO_AM_I_CONST (0x71)
#define MPU9255_WHO_AM_I_CONST (0x73) #define MPU9255_WHO_AM_I_CONST (0x73)
#define ICM20608G_WHO_AM_I_CONST (0xAF) #define ICM20601_WHO_AM_I_CONST (0xAC)
#define ICM20602_WHO_AM_I_CONST (0x12) #define ICM20602_WHO_AM_I_CONST (0x12)
#define ICM20608G_WHO_AM_I_CONST (0xAF)
#define MPU6500_BIT_RESET (0x80) #define MPU6500_BIT_RESET (0x80)

View file

@ -91,12 +91,15 @@ uint8_t mpu6500SpiDetect(const busDevice_t *bus)
case MPU9255_WHO_AM_I_CONST: case MPU9255_WHO_AM_I_CONST:
mpuDetected = MPU_9250_SPI; mpuDetected = MPU_9250_SPI;
break; break;
case ICM20608G_WHO_AM_I_CONST: case ICM20601_WHO_AM_I_CONST:
mpuDetected = ICM_20608_SPI; mpuDetected = ICM_20601_SPI;
break; break;
case ICM20602_WHO_AM_I_CONST: case ICM20602_WHO_AM_I_CONST:
mpuDetected = ICM_20602_SPI; mpuDetected = ICM_20602_SPI;
break; break;
case ICM20608G_WHO_AM_I_CONST:
mpuDetected = ICM_20608_SPI;
break;
default: default:
mpuDetected = MPU_NONE; mpuDetected = MPU_NONE;
} }

View file

@ -170,9 +170,11 @@ static const char * const lookupTableAccHardware[] = {
"MPU6000", "MPU6000",
"MPU6500", "MPU6500",
"MPU9250", "MPU9250",
"ICM20689", "ICM20601",
"ICM20602", "ICM20602",
"BMI160", "ICM20608",
"ICM20689",
"BMI160",
"FAKE" "FAKE"
}; };
@ -207,8 +209,8 @@ static const char * const sensorTypeNames[] = {
#define SENSOR_NAMES_MASK (SENSOR_GYRO | SENSOR_ACC | SENSOR_BARO | SENSOR_MAG) #define SENSOR_NAMES_MASK (SENSOR_GYRO | SENSOR_ACC | SENSOR_BARO | SENSOR_MAG)
static const char * const sensorHardwareNames[4][16] = { static const char * const sensorHardwareNames[4][16] = {
{ "", "None", "MPU6050", "L3G4200D", "MPU3050", "L3GD20", "MPU6000", "MPU6500", "MPU9250", "ICM20689", "ICM20608G", "ICM20602", "BMI160", "FAKE", NULL }, { "", "None", "MPU6050", "L3G4200D", "MPU3050", "L3GD20", "MPU6000", "MPU6500", "MPU9250", "ICM20601", "ICM20602", "ICM20608G", "ICM20689", "BMI160", "FAKE", NULL },
{ "", "None", "ADXL345", "MPU6050", "MMA845x", "BMA280", "LSM303DLHC", "MPU6000", "MPU6500", "ICM20689", "MPU9250", "ICM20608G", "ICM20602", "BMI160", "FAKE", NULL }, { "", "None", "ADXL345", "MPU6050", "MMA845x", "BMA280", "LSM303DLHC", "MPU6000", "MPU6500", "MPU9250", "ICM20601", "ICM20602", "ICM20608G", "ICM20689", "BMI160", "FAKE", NULL },
{ "", "None", "BMP085", "MS5611", "BMP280", NULL }, { "", "None", "BMP085", "MS5611", "BMP280", NULL },
{ "", "None", "HMC5883", "AK8975", "AK8963", NULL } { "", "None", "HMC5883", "AK8975", "AK8963", NULL }
}; };

View file

@ -214,8 +214,9 @@ retry:
#endif #endif
; // fallthrough ; // fallthrough
case ACC_MPU6500: case ACC_MPU6500:
case ACC_ICM20608G: case ACC_ICM20601:
case ACC_ICM20602: case ACC_ICM20602:
case ACC_ICM20608G:
#if defined(USE_ACC_MPU6500) || defined(USE_ACC_SPI_MPU6500) #if defined(USE_ACC_MPU6500) || defined(USE_ACC_SPI_MPU6500)
#ifdef USE_ACC_SPI_MPU6500 #ifdef USE_ACC_SPI_MPU6500
if (mpu6500AccDetect(dev) || mpu6500SpiAccDetect(dev)) if (mpu6500AccDetect(dev) || mpu6500SpiAccDetect(dev))
@ -230,12 +231,15 @@ retry:
case MPU_9250_SPI: case MPU_9250_SPI:
accHardware = ACC_MPU9250; accHardware = ACC_MPU9250;
break; break;
case ICM_20608_SPI: case ICM_20601_SPI:
accHardware = ACC_ICM20608G; accHardware = ACC_ICM20601;
break; break;
case ICM_20602_SPI: case ICM_20602_SPI:
accHardware = ACC_ICM20602; accHardware = ACC_ICM20602;
break; break;
case ICM_20608_SPI:
accHardware = ACC_ICM20608G;
break;
default: default:
accHardware = ACC_MPU6500; accHardware = ACC_MPU6500;
} }

View file

@ -32,10 +32,11 @@ typedef enum {
ACC_LSM303DLHC, ACC_LSM303DLHC,
ACC_MPU6000, ACC_MPU6000,
ACC_MPU6500, ACC_MPU6500,
ACC_ICM20689,
ACC_MPU9250, ACC_MPU9250,
ACC_ICM20608G, ACC_ICM20601,
ACC_ICM20602, ACC_ICM20602,
ACC_ICM20608G,
ACC_ICM20689,
ACC_BMI160, ACC_BMI160,
ACC_FAKE ACC_FAKE
} accelerationSensor_e; } accelerationSensor_e;

View file

@ -87,7 +87,7 @@ static void *notchFilter2[3];
#ifdef STM32F10X #ifdef STM32F10X
#define GYRO_SYNC_DENOM_DEFAULT 8 #define GYRO_SYNC_DENOM_DEFAULT 8
#elif defined(USE_GYRO_SPI_MPU6000) || defined(USE_GYRO_SPI_MPU6500) || defined(USE_GYRO_SPI_ICM20689) #elif defined(USE_GYRO_SPI_MPU6000) || defined(USE_GYRO_SPI_MPU6500) || defined(USE_GYRO_SPI_ICM20601) || defined(USE_GYRO_SPI_ICM20689)
#define GYRO_SYNC_DENOM_DEFAULT 1 #define GYRO_SYNC_DENOM_DEFAULT 1
#else #else
#define GYRO_SYNC_DENOM_DEFAULT 4 #define GYRO_SYNC_DENOM_DEFAULT 4
@ -111,7 +111,7 @@ PG_RESET_TEMPLATE(gyroConfig_t, gyroConfig,
.gyro_soft_notch_cutoff_2 = 100 .gyro_soft_notch_cutoff_2 = 100
); );
#if defined(USE_GYRO_MPU6050) || defined(USE_GYRO_MPU3050) || defined(USE_GYRO_MPU6500) || defined(USE_GYRO_SPI_MPU6500) || defined(USE_GYRO_SPI_MPU6000) || defined(USE_ACC_MPU6050) || defined(USE_GYRO_SPI_MPU9250) || defined(USE_GYRO_SPI_ICM20689) #if defined(USE_GYRO_MPU6050) || defined(USE_GYRO_MPU3050) || defined(USE_GYRO_MPU6500) || defined(USE_GYRO_SPI_MPU6500) || defined(USE_GYRO_SPI_MPU6000) || defined(USE_ACC_MPU6050) || defined(USE_GYRO_SPI_MPU9250) || defined(USE_GYRO_SPI_ICM20601) || defined(USE_GYRO_SPI_ICM20689)
static const extiConfig_t *selectMPUIntExtiConfig(void) static const extiConfig_t *selectMPUIntExtiConfig(void)
{ {
#if defined(MPU_INT_EXTI) #if defined(MPU_INT_EXTI)
@ -204,8 +204,9 @@ STATIC_UNIT_TESTED gyroSensor_e gyroDetect(gyroDev_t *dev)
#if defined(USE_GYRO_MPU6500) || defined(USE_GYRO_SPI_MPU6500) #if defined(USE_GYRO_MPU6500) || defined(USE_GYRO_SPI_MPU6500)
case GYRO_MPU6500: case GYRO_MPU6500:
case GYRO_ICM20608G: case GYRO_ICM20601:
case GYRO_ICM20602: case GYRO_ICM20602:
case GYRO_ICM20608G:
#ifdef USE_GYRO_SPI_MPU6500 #ifdef USE_GYRO_SPI_MPU6500
if (mpu6500GyroDetect(dev) || mpu6500SpiGyroDetect(dev)) { if (mpu6500GyroDetect(dev) || mpu6500SpiGyroDetect(dev)) {
#else #else
@ -215,12 +216,15 @@ STATIC_UNIT_TESTED gyroSensor_e gyroDetect(gyroDev_t *dev)
case MPU_9250_SPI: case MPU_9250_SPI:
gyroHardware = GYRO_MPU9250; gyroHardware = GYRO_MPU9250;
break; break;
case ICM_20608_SPI: case ICM_20601_SPI:
gyroHardware = GYRO_ICM20608G; gyroHardware = GYRO_ICM20601;
break; break;
case ICM_20602_SPI: case ICM_20602_SPI:
gyroHardware = GYRO_ICM20602; gyroHardware = GYRO_ICM20602;
break; break;
case ICM_20608_SPI:
gyroHardware = GYRO_ICM20608G;
break;
default: default:
gyroHardware = GYRO_MPU6500; gyroHardware = GYRO_MPU6500;
} }
@ -289,7 +293,7 @@ STATIC_UNIT_TESTED gyroSensor_e gyroDetect(gyroDev_t *dev)
bool gyroInit(void) bool gyroInit(void)
{ {
memset(&gyro, 0, sizeof(gyro)); memset(&gyro, 0, sizeof(gyro));
#if defined(USE_GYRO_MPU6050) || defined(USE_GYRO_MPU3050) || defined(USE_GYRO_MPU6500) || defined(USE_GYRO_SPI_MPU6500) || defined(USE_GYRO_SPI_MPU6000) || defined(USE_ACC_MPU6050) || defined(USE_GYRO_SPI_MPU9250) || defined(USE_GYRO_SPI_ICM20689) #if defined(USE_GYRO_MPU6050) || defined(USE_GYRO_MPU3050) || defined(USE_GYRO_MPU6500) || defined(USE_GYRO_SPI_MPU6500) || defined(USE_GYRO_SPI_MPU6000) || defined(USE_ACC_MPU6050) || defined(USE_GYRO_SPI_MPU9250) || defined(USE_GYRO_SPI_ICM20601) || defined(USE_GYRO_SPI_ICM20689)
gyroDev0.mpuIntExtiConfig = selectMPUIntExtiConfig(); gyroDev0.mpuIntExtiConfig = selectMPUIntExtiConfig();
#ifdef USE_DUAL_GYRO #ifdef USE_DUAL_GYRO
// set cnsPin using GYRO_n_CS_PIN defined in target.h // set cnsPin using GYRO_n_CS_PIN defined in target.h
@ -308,9 +312,10 @@ bool gyroInit(void)
switch (gyroHardware) { switch (gyroHardware) {
case GYRO_MPU6500: case GYRO_MPU6500:
case GYRO_MPU9250: case GYRO_MPU9250:
case GYRO_ICM20689: case GYRO_ICM20601:
case GYRO_ICM20608G:
case GYRO_ICM20602: case GYRO_ICM20602:
case GYRO_ICM20608G:
case GYRO_ICM20689:
// do nothing, as gyro supports 32kHz // do nothing, as gyro supports 32kHz
break; break;
default: default:

View file

@ -32,9 +32,10 @@ typedef enum {
GYRO_MPU6000, GYRO_MPU6000,
GYRO_MPU6500, GYRO_MPU6500,
GYRO_MPU9250, GYRO_MPU9250,
GYRO_ICM20689, GYRO_ICM20601,
GYRO_ICM20608G,
GYRO_ICM20602, GYRO_ICM20602,
GYRO_ICM20608G,
GYRO_ICM20689,
GYRO_BMI160, GYRO_BMI160,
GYRO_FAKE GYRO_FAKE
} gyroSensor_e; } gyroSensor_e;

View file

View file

@ -21,6 +21,10 @@
#define TARGET_BOARD_IDENTIFIER "AIR4" #define TARGET_BOARD_IDENTIFIER "AIR4"
#define USBD_PRODUCT_STRING "AirbotF4" #define USBD_PRODUCT_STRING "AirbotF4"
#elif defined(AIRBOTF4SD)
#define TARGET_BOARD_IDENTIFIER "A4SD"
#define USBD_PRODUCT_STRING "AirbotF4SD"
#elif defined(REVOLT) #elif defined(REVOLT)
#define TARGET_BOARD_IDENTIFIER "RVLT" #define TARGET_BOARD_IDENTIFIER "RVLT"
#define USBD_PRODUCT_STRING "Revolt" #define USBD_PRODUCT_STRING "Revolt"
@ -53,7 +57,7 @@
#endif #endif
// Disable LED1, conflicts with AirbotF4/Flip32F4/Revolt beeper // Disable LED1, conflicts with AirbotF4/Flip32F4/Revolt beeper
#if defined(AIRBOTF4) #if defined(AIRBOTF4) || defined(AIRBOTF4SD)
#define BEEPER PB4 #define BEEPER PB4
#define BEEPER_INVERTED #define BEEPER_INVERTED
#elif defined(REVOLT) #elif defined(REVOLT)
@ -68,7 +72,11 @@
#endif #endif
// PC0 used as inverter select GPIO // PC0 used as inverter select GPIO
#ifdef AIRBOTF4SD
#define INVERTER_PIN_UART6 PD2
#else
#define INVERTER_PIN_UART1 PC0 #define INVERTER_PIN_UART1 PC0
#endif
#define MPU6000_CS_PIN PA4 #define MPU6000_CS_PIN PA4
#define MPU6000_SPI_INSTANCE SPI1 #define MPU6000_SPI_INSTANCE SPI1
@ -79,6 +87,15 @@
#define GYRO #define GYRO
#define ACC #define ACC
#ifdef AIRBOTF4SD
#define USE_GYRO_SPI_ICM20601
#define ICM20601_CS_PIN PB13 // served through MPU6500 code
#define ICM20601_SPI_INSTANCE SPI1
#define USE_DUAL_GYRO
#define GYRO_0_CS_PIN MPU6000_CS_PIN
#define GYRO_1_CS_PIN ICM20601_CS_PIN
#endif
#if defined(SOULF4) #if defined(SOULF4)
#define USE_GYRO_SPI_MPU6000 #define USE_GYRO_SPI_MPU6000
#define GYRO_MPU6000_ALIGN CW180_DEG #define GYRO_MPU6000_ALIGN CW180_DEG
@ -126,15 +143,39 @@
#define BARO #define BARO
#define USE_BARO_MS5611 #define USE_BARO_MS5611
#endif #endif
#if defined(AIRBOTF4SD)
// SDCARD support for AIRBOTF4SD
#define ENABLE_BLACKBOX_LOGGING_ON_SDCARD_BY_DEFAULT
#define USE_SDCARD
#define USE_SDCARD_SPI3
#define SDCARD_DETECT_INVERTED
#define SDCARD_DETECT_PIN PC0
#define SDCARD_SPI_INSTANCE SPI3
#define SDCARD_SPI_CS_PIN SPI3_NSS_PIN
// SPI2 is on the APB1 bus whose clock runs at 84MHz. Divide to under 400kHz for init:
#define SDCARD_SPI_INITIALIZATION_CLOCK_DIVIDER 256 // 328kHz
// Divide to under 25MHz for normal operation:
#define SDCARD_SPI_FULL_SPEED_CLOCK_DIVIDER 4 // 21MHz
#define SDCARD_DMA_CHANNEL_TX DMA1_Stream5
#define SDCARD_DMA_CHANNEL_TX_COMPLETE_FLAG DMA_FLAG_TCIF5
#define SDCARD_DMA_CLK RCC_AHB1Periph_DMA1
#define SDCARD_DMA_CHANNEL DMA_Channel_0
#else
#define M25P16_CS_PIN PB3 #define M25P16_CS_PIN PB3
#define M25P16_SPI_INSTANCE SPI3 #define M25P16_SPI_INSTANCE SPI3
#define USE_FLASHFS #define USE_FLASHFS
#define USE_FLASH_M25P16 #define USE_FLASH_M25P16
#endif // AIRBOTF4SD
#define USE_VCP #define USE_VCP
#if defined(PODIUMF4) #if defined(PODIUMF4)
#define VBUS_SENSING_PIN PA8 #define VBUS_SENSING_PIN PA8
@ -186,6 +227,10 @@
#define VBAT_ADC_CHANNEL ADC_Channel_13 #define VBAT_ADC_CHANNEL ADC_Channel_13
#endif #endif
#if defined(AIRBOTF4SD)
#define RSSI_ADC_PIN PA0
#endif
#define DEFAULT_RX_FEATURE FEATURE_RX_SERIAL #define DEFAULT_RX_FEATURE FEATURE_RX_SERIAL
#if defined(PODIUMF4) #if defined(PODIUMF4)
#define SERIALRX_PROVIDER SERIALRX_SBUS #define SERIALRX_PROVIDER SERIALRX_SBUS
@ -207,12 +252,11 @@
#ifdef REVOLT #ifdef REVOLT
#define USABLE_TIMER_CHANNEL_COUNT 11 #define USABLE_TIMER_CHANNEL_COUNT 11
#define USED_TIMERS ( TIM_N(2) | TIM_N(3) | TIM_N(4) | TIM_N(8) | TIM_N(12) ) #define USED_TIMERS ( TIM_N(2) | TIM_N(3) | TIM_N(4) | TIM_N(8) | TIM_N(12) )
#else #elif defined(AIRBOTF4) || defined(AIRBOTF4SD)
#define USABLE_TIMER_CHANNEL_COUNT 12 #define USABLE_TIMER_CHANNEL_COUNT 13
#ifdef AIRBOTF4
#define USED_TIMERS ( TIM_N(1) | TIM_N(2) | TIM_N(3) | TIM_N(5) | TIM_N(8) | TIM_N(12) ) #define USED_TIMERS ( TIM_N(1) | TIM_N(2) | TIM_N(3) | TIM_N(5) | TIM_N(8) | TIM_N(12) )
#else #else
#define USABLE_TIMER_CHANNEL_COUNT 12
#define USED_TIMERS ( TIM_N(2) | TIM_N(3) | TIM_N(5) | TIM_N(8) | TIM_N(12) ) #define USED_TIMERS ( TIM_N(2) | TIM_N(3) | TIM_N(5) | TIM_N(8) | TIM_N(12) )
#endif // AIRBOTF4 #endif
#endif // REVOLT

View file

@ -1,5 +1,9 @@
F405_TARGETS += $(TARGET) F405_TARGETS += $(TARGET)
FEATURES += VCP ONBOARDFLASH ifeq ($(TARGET), AIRBOTF4SD)
FEATURES = VCP SDCARD
else
FEATURES = VCP ONBOARDFLASH
endif
TARGET_SRC = \ TARGET_SRC = \
drivers/accgyro_spi_mpu6000.c \ drivers/accgyro_spi_mpu6000.c \