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

@ -115,6 +115,7 @@ GROUP_1_TARGETS := \
AIORACERF3 \
AIR32 \
AIRBOTF4 \
AIRBOTF4SD \
AIRHEROF3 \
ALIENFLIGHTF1 \
ALIENFLIGHTF3 \
@ -124,14 +125,15 @@ GROUP_1_TARGETS := \
BEEBRAIN \
BEEROTORF4 \
BETAFLIGHTF3 \
BLUEJAYF4 \
CC3D \
CC3D_OPBL \
GROUP_2_TARGETS := \
CHEBUZZF3 \
CJMCU \
CL_RACINGF4 \
COLIBRI \
GROUP_2_TARGETS := \
COLIBRI_OPBL \
COLIBRI_RACE \
DOGE \
@ -145,11 +147,10 @@ GROUP_2_TARGETS := \
IMPULSERCF3 \
IRCFUSIONF3 \
ISHAPEDF3 \
BLUEJAYF4 \
KAKUTEF4 \
KISSCC \
GROUP_3_TARGETS := \
KAKUTEF4 \
KISSCC \
KIWIF4 \
LUX_RACE \
LUXV2_RACE \
@ -158,19 +159,20 @@ GROUP_3_TARGETS := \
MULTIFLITEPICO \
NAZE \
NERO \
NUCLEOF7 \
OMNIBUS \
OMNIBUSF4 \
OMNIBUSF4SD \
PIKOBLX \
PLUMF4 \
PODIUMF4 \
RACEBASE \
GROUP_4_TARGETS := \
RCEXPLORERF3 \
REVO \
REVO_OPBL \
REVOLT \
REVONANO \
GROUP_4_TARGETS := \
RMDO \
SINGULARITY \
SIRINFPV \
@ -181,10 +183,8 @@ GROUP_4_TARGETS := \
SPRACINGF3EVO \
SPRACINGF3MINI \
SPRACINGF3NEO \
KROOZX \
NUCLEOF7 \
OMNIBUSF4 \
STM32F3DISCOVERY \
TINYBEEF3 \
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_SPI,
MPU_9250_SPI,
ICM_20689_SPI,
ICM_20608_SPI,
ICM_20601_SPI,
ICM_20602_SPI,
ICM_20608_SPI,
ICM_20689_SPI,
BMI_160_SPI,
} mpuSensor_e;

View file

@ -20,8 +20,9 @@
#define MPU6500_WHO_AM_I_CONST (0x70)
#define MPU9250_WHO_AM_I_CONST (0x71)
#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 ICM20608G_WHO_AM_I_CONST (0xAF)
#define MPU6500_BIT_RESET (0x80)

View file

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

View file

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

View file

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

View file

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

View file

@ -87,7 +87,7 @@ static void *notchFilter2[3];
#ifdef STM32F10X
#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
#else
#define GYRO_SYNC_DENOM_DEFAULT 4
@ -111,7 +111,7 @@ PG_RESET_TEMPLATE(gyroConfig_t, gyroConfig,
.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)
{
#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)
case GYRO_MPU6500:
case GYRO_ICM20608G:
case GYRO_ICM20601:
case GYRO_ICM20602:
case GYRO_ICM20608G:
#ifdef USE_GYRO_SPI_MPU6500
if (mpu6500GyroDetect(dev) || mpu6500SpiGyroDetect(dev)) {
#else
@ -215,12 +216,15 @@ STATIC_UNIT_TESTED gyroSensor_e gyroDetect(gyroDev_t *dev)
case MPU_9250_SPI:
gyroHardware = GYRO_MPU9250;
break;
case ICM_20608_SPI:
gyroHardware = GYRO_ICM20608G;
case ICM_20601_SPI:
gyroHardware = GYRO_ICM20601;
break;
case ICM_20602_SPI:
gyroHardware = GYRO_ICM20602;
break;
case ICM_20608_SPI:
gyroHardware = GYRO_ICM20608G;
break;
default:
gyroHardware = GYRO_MPU6500;
}
@ -289,7 +293,7 @@ STATIC_UNIT_TESTED gyroSensor_e gyroDetect(gyroDev_t *dev)
bool gyroInit(void)
{
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();
#ifdef USE_DUAL_GYRO
// set cnsPin using GYRO_n_CS_PIN defined in target.h
@ -308,9 +312,10 @@ bool gyroInit(void)
switch (gyroHardware) {
case GYRO_MPU6500:
case GYRO_MPU9250:
case GYRO_ICM20689:
case GYRO_ICM20608G:
case GYRO_ICM20601:
case GYRO_ICM20602:
case GYRO_ICM20608G:
case GYRO_ICM20689:
// do nothing, as gyro supports 32kHz
break;
default:

View file

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

View file

View file

@ -21,6 +21,10 @@
#define TARGET_BOARD_IDENTIFIER "AIR4"
#define USBD_PRODUCT_STRING "AirbotF4"
#elif defined(AIRBOTF4SD)
#define TARGET_BOARD_IDENTIFIER "A4SD"
#define USBD_PRODUCT_STRING "AirbotF4SD"
#elif defined(REVOLT)
#define TARGET_BOARD_IDENTIFIER "RVLT"
#define USBD_PRODUCT_STRING "Revolt"
@ -53,7 +57,7 @@
#endif
// Disable LED1, conflicts with AirbotF4/Flip32F4/Revolt beeper
#if defined(AIRBOTF4)
#if defined(AIRBOTF4) || defined(AIRBOTF4SD)
#define BEEPER PB4
#define BEEPER_INVERTED
#elif defined(REVOLT)
@ -68,7 +72,11 @@
#endif
// PC0 used as inverter select GPIO
#ifdef AIRBOTF4SD
#define INVERTER_PIN_UART6 PD2
#else
#define INVERTER_PIN_UART1 PC0
#endif
#define MPU6000_CS_PIN PA4
#define MPU6000_SPI_INSTANCE SPI1
@ -79,6 +87,15 @@
#define GYRO
#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)
#define USE_GYRO_SPI_MPU6000
#define GYRO_MPU6000_ALIGN CW180_DEG
@ -126,15 +143,39 @@
#define BARO
#define USE_BARO_MS5611
#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_SPI_INSTANCE SPI3
#define USE_FLASHFS
#define USE_FLASH_M25P16
#endif // AIRBOTF4SD
#define USE_VCP
#if defined(PODIUMF4)
#define VBUS_SENSING_PIN PA8
@ -186,6 +227,10 @@
#define VBAT_ADC_CHANNEL ADC_Channel_13
#endif
#if defined(AIRBOTF4SD)
#define RSSI_ADC_PIN PA0
#endif
#define DEFAULT_RX_FEATURE FEATURE_RX_SERIAL
#if defined(PODIUMF4)
#define SERIALRX_PROVIDER SERIALRX_SBUS
@ -207,12 +252,11 @@
#ifdef REVOLT
#define USABLE_TIMER_CHANNEL_COUNT 11
#define USED_TIMERS ( TIM_N(2) | TIM_N(3) | TIM_N(4) | TIM_N(8) | TIM_N(12) )
#else
#define USABLE_TIMER_CHANNEL_COUNT 12
#ifdef AIRBOTF4
#elif defined(AIRBOTF4) || defined(AIRBOTF4SD)
#define USABLE_TIMER_CHANNEL_COUNT 13
#define USED_TIMERS ( TIM_N(1) | TIM_N(2) | TIM_N(3) | TIM_N(5) | TIM_N(8) | TIM_N(12) )
#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) )
#endif // AIRBOTF4
#endif // REVOLT
#endif

View file

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