diff --git a/lib/main/BoschSensortec/BMI270-Sensor-API/betaflight_info.txt b/lib/main/BoschSensortec/BMI270-Sensor-API/betaflight_info.txt index 9f8947c9d..bd93e9ba2 100644 --- a/lib/main/BoschSensortec/BMI270-Sensor-API/betaflight_info.txt +++ b/lib/main/BoschSensortec/BMI270-Sensor-API/betaflight_info.txt @@ -6,4 +6,4 @@ Library download location: Version: 2.63.1 -The only file that is compiled as part of Betaflight is bmi270_maximum_fifo.c. This file contains the device microcode that must be uploaded during initialization. +The only file that is compiled as part of Betaflight is bmi270.c. This file contains the device microcode that must be uploaded during initialization. diff --git a/src/main/drivers/accgyro/accgyro_spi_bmi270.c b/src/main/drivers/accgyro/accgyro_spi_bmi270.c index ecdedcbd6..ffcc336e4 100644 --- a/src/main/drivers/accgyro/accgyro_spi_bmi270.c +++ b/src/main/drivers/accgyro/accgyro_spi_bmi270.c @@ -45,14 +45,15 @@ #define BMI270_FIFO_FRAME_SIZE 6 -#define BMI270_CONFIG_SIZE 328 +#define BMI270_CONFIG_SIZE 8192 // Declaration for the device config (microcode) that must be uploaded to the sensor -extern const uint8_t bmi270_maximum_fifo_config_file[BMI270_CONFIG_SIZE]; +extern const uint8_t bmi270_config_file[BMI270_CONFIG_SIZE]; #define BMI270_CHIP_ID 0x24 -#define BMI270_GYRO_CAS_SIGN_BIT_MASK 0x0040 +#define BMI270_GYRO_CAS_MASK 0x7F +#define BMI270_GYRO_CAS_SIGN_BIT_MASK 0x40 // BMI270 registers (not the complete list) typedef enum { @@ -159,9 +160,9 @@ static void bmi270RegisterWrite(const extDevice_t *dev, bmi270Register_e registe } } -static int16_t bmi270GetGyroCas(int16_t gyroCasRaw) +static int16_t bmi270GetGyroCas(uint8_t gyroCasRaw) { - if (gyroCasRaw & BMI270_GYRO_CAS_SIGN_BIT_MASK ){ + if (gyroCasRaw & BMI270_GYRO_CAS_SIGN_BIT_MASK) { return (int16_t)(((int16_t)gyroCasRaw) - 128); } else { return (int16_t)(gyroCasRaw); @@ -196,7 +197,7 @@ static void bmi270UploadConfig(const extDevice_t *dev) bmi270RegisterWrite(dev, BMI270_REG_INIT_CTRL, 0, 1); // Transfer the config file - spiWriteRegBuf(dev, BMI270_REG_INIT_DATA, (uint8_t *)bmi270_maximum_fifo_config_file, sizeof(bmi270_maximum_fifo_config_file)); + spiWriteRegBuf(dev, BMI270_REG_INIT_DATA, (uint8_t *)bmi270_config_file, sizeof(bmi270_config_file)); delay(10); bmi270RegisterWrite(dev, BMI270_REG_INIT_CTRL, 1, 1); @@ -445,19 +446,19 @@ static bool bmi270GyroReadRegister(gyroDev_t *gyro) spiWait(&gyro->dev); // GYRO_CAS rading - gyro->dev.txBuf[9] = BMI270_REG_FEATURES_C | 0x80; + gyro->dev.txBuf[8] = BMI270_REG_FEATURES_C | 0x80; busSegment_t segmentsCas[] = { {.u.buffers = {NULL, NULL}, 4, true, NULL}, {.u.link = {NULL, NULL}, 0, true, NULL}, }; - segmentsCas[0].u.buffers.txData = &gyro->dev.txBuf[9]; - segmentsCas[0].u.buffers.rxData = &gyro->dev.rxBuf[9]; + segmentsCas[0].u.buffers.txData = &gyro->dev.txBuf[8]; + segmentsCas[0].u.buffers.rxData = &gyro->dev.rxBuf[8]; spiSequence(&gyro->dev, &segmentsCas[0]); // Wait for completion spiWait(&gyro->dev); - int16_t cas = bmi270GetGyroCas((int16_t)(gyroData[5])); + int16_t cas = bmi270GetGyroCas(segmentsCas[0].u.buffers.rxData[3] & BMI270_GYRO_CAS_MASK); gyro->gyroADCRaw[X] = gyroData[1] - (cas * gyroData[3] / 512); gyro->gyroADCRaw[Y] = gyroData[2]; gyro->gyroADCRaw[Z] = gyroData[3]; @@ -468,19 +469,19 @@ static bool bmi270GyroReadRegister(gyroDev_t *gyro) case GYRO_EXTI_INT_DMA: { // GYRO_CAS rading - gyro->dev.txBuf[15] = BMI270_REG_FEATURES_C | 0x80; + gyro->dev.txBuf[14] = BMI270_REG_FEATURES_C | 0x80; busSegment_t segmentsCas[] = { {.u.buffers = {NULL, NULL}, 4, true, NULL}, {.u.link = {NULL, NULL}, 0, true, NULL}, }; - segmentsCas[0].u.buffers.txData = &gyro->dev.txBuf[15]; - segmentsCas[0].u.buffers.rxData = &gyro->dev.rxBuf[15]; + segmentsCas[0].u.buffers.txData = &gyro->dev.txBuf[14]; + segmentsCas[0].u.buffers.rxData = &gyro->dev.rxBuf[14]; spiSequence(&gyro->dev, &segmentsCas[0]); // Wait for completion spiWait(&gyro->dev); - int16_t cas = bmi270GetGyroCas((int16_t)(gyroData[8])); + int16_t cas = bmi270GetGyroCas(segmentsCas[0].u.buffers.rxData[3] & BMI270_GYRO_CAS_MASK); gyro->gyroADCRaw[X] = gyroData[4] - (cas * gyroData[6] / 512); gyro->gyroADCRaw[Y] = gyroData[5]; gyro->gyroADCRaw[Z] = gyroData[6]; diff --git a/src/main/target/AT32F403ADEV/target.mk b/src/main/target/AT32F403ADEV/target.mk index caa4efa13..3718501d5 100644 --- a/src/main/target/AT32F403ADEV/target.mk +++ b/src/main/target/AT32F403ADEV/target.mk @@ -5,7 +5,7 @@ FEATURES += VCP SDCARD_SPI ONBOARDFLASH TARGET_SRC = \ $(addprefix drivers/accgyro/,$(notdir $(wildcard $(SRC_DIR)/drivers/accgyro/*.c))) \ - $(ROOT)/lib/main/BoschSensortec/BMI270-Sensor-API/bmi270_maximum_fifo.c \ + $(ROOT)/lib/main/BoschSensortec/BMI270-Sensor-API/bmi270.c \ $(addprefix drivers/barometer/,$(notdir $(wildcard $(SRC_DIR)/drivers/barometer/*.c))) \ $(addprefix drivers/compass/,$(notdir $(wildcard $(SRC_DIR)/drivers/compass/*.c))) \ drivers/max7456.c \ diff --git a/src/main/target/EMSRPROTO2/target.mk b/src/main/target/EMSRPROTO2/target.mk index 139ff97ae..e50564bdf 100644 --- a/src/main/target/EMSRPROTO2/target.mk +++ b/src/main/target/EMSRPROTO2/target.mk @@ -8,7 +8,7 @@ TARGET_SRC = \ drivers/barometer/barometer_bmp280.c \ drivers/compass/compass_hmc5883l.c\ drivers/compass/compass_qmc5883l.c\ - $(ROOT)/lib/main/BoschSensortec/BMI270-Sensor-API/bmi270_maximum_fifo.c \ + $(ROOT)/lib/main/BoschSensortec/BMI270-Sensor-API/bmi270.c \ drivers/accgyro/accgyro_spi_bmi270.c\ drivers/accgyro/accgyro_spi_lsm6dso_init.c \ drivers/accgyro/accgyro_spi_lsm6dso.c \ diff --git a/src/main/target/EMSRPROTO3/target.mk b/src/main/target/EMSRPROTO3/target.mk index 207cd04ed..84e98c79a 100644 --- a/src/main/target/EMSRPROTO3/target.mk +++ b/src/main/target/EMSRPROTO3/target.mk @@ -8,7 +8,7 @@ TARGET_SRC = \ drivers/barometer/barometer_bmp280.c \ drivers/compass/compass_hmc5883l.c\ drivers/compass/compass_qmc5883l.c\ - $(ROOT)/lib/main/BoschSensortec/BMI270-Sensor-API/bmi270_maximum_fifo.c \ + $(ROOT)/lib/main/BoschSensortec/BMI270-Sensor-API/bmi270.c \ drivers/accgyro/accgyro_spi_bmi270.c\ drivers/max7456.c \ diff --git a/src/main/target/NEUTRONRCF435AIO/target.mk b/src/main/target/NEUTRONRCF435AIO/target.mk index feb2104e7..d668a254b 100644 --- a/src/main/target/NEUTRONRCF435AIO/target.mk +++ b/src/main/target/NEUTRONRCF435AIO/target.mk @@ -13,7 +13,7 @@ TARGET_SRC = \ drivers/barometer/barometer_dps310.c\ drivers/compass/compass_hmc5883l.c\ drivers/compass/compass_qmc5883l.c\ - $(ROOT)/lib/main/BoschSensortec/BMI270-Sensor-API/bmi270_maximum_fifo.c \ + $(ROOT)/lib/main/BoschSensortec/BMI270-Sensor-API/bmi270.c \ drivers/accgyro/accgyro_spi_bmi270.c\ drivers/accgyro/accgyro_spi_lsm6dso_init.c \ drivers/accgyro/accgyro_spi_lsm6dso.c \