From e3a01d8e55e742b456acddfd7251b651f73ae997 Mon Sep 17 00:00:00 2001 From: nerdCopter <56646290+nerdCopter@users.noreply.github.com> Date: Wed, 22 Oct 2025 07:50:52 -0500 Subject: [PATCH 1/3] BMI270 - 6k code ; but does not properly work --- src/main/drivers/accgyro/accgyro.h | 1 + src/main/drivers/accgyro/gyro_sync.c | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/drivers/accgyro/accgyro.h b/src/main/drivers/accgyro/accgyro.h index 0bcf72738c..ac4192b978 100644 --- a/src/main/drivers/accgyro/accgyro.h +++ b/src/main/drivers/accgyro/accgyro.h @@ -69,6 +69,7 @@ #define GYRO_RATE_1_kHz 1000.0f #define GYRO_RATE_1100_Hz 909.09f #define GYRO_RATE_3200_Hz 312.5f +#define GYRO_RATE_6400_Hz 156.25f #define GYRO_RATE_8_kHz 125.0f #define GYRO_RATE_9_kHz 111.11f #define GYRO_RATE_16_kHz 64.0f diff --git a/src/main/drivers/accgyro/gyro_sync.c b/src/main/drivers/accgyro/gyro_sync.c index 91ddc1cec6..7015a11f23 100644 --- a/src/main/drivers/accgyro/gyro_sync.c +++ b/src/main/drivers/accgyro/gyro_sync.c @@ -65,8 +65,17 @@ uint32_t gyroSetSampleRate(gyroDev_t *gyro, uint8_t lpf, uint8_t gyroSyncDenomin gyroConfigMutable()->gyroSampleRateHz = 3200; break; case BMI_270_SPI: //bmi270 - gyro->gyroRateKHz = GYRO_RATE_3200_Hz; - gyroConfigMutable()->gyroSampleRateHz = 3200; +#ifdef USE_GYRO_DLPF_EXPERIMENTAL + if (gyro->hardware_lpf == GYRO_HARDWARE_LPF_EXPERIMENTAL) { + // 6.4KHz sampling, but data is unfiltered (no hardware DLPF) + gyro->gyroRateKHz = GYRO_RATE_6400_Hz; + //gyroSampleRateHz = 6400; + } else +#endif + { + gyro->gyroRateKHz = GYRO_RATE_3200_Hz; + gyroConfigMutable()->gyroSampleRateHz = 3200; + } break; default: if (gyro_use_32khz) { From d15ef224826ef95ee57175407307fb0c7f69d7be Mon Sep 17 00:00:00 2001 From: nerdCopter <56646290+nerdCopter@users.noreply.github.com> Date: Wed, 22 Oct 2025 08:21:05 -0500 Subject: [PATCH 2/3] fix: sampleRate --- src/main/drivers/accgyro/gyro_sync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/drivers/accgyro/gyro_sync.c b/src/main/drivers/accgyro/gyro_sync.c index 7015a11f23..5cf2bd262a 100644 --- a/src/main/drivers/accgyro/gyro_sync.c +++ b/src/main/drivers/accgyro/gyro_sync.c @@ -69,7 +69,7 @@ uint32_t gyroSetSampleRate(gyroDev_t *gyro, uint8_t lpf, uint8_t gyroSyncDenomin if (gyro->hardware_lpf == GYRO_HARDWARE_LPF_EXPERIMENTAL) { // 6.4KHz sampling, but data is unfiltered (no hardware DLPF) gyro->gyroRateKHz = GYRO_RATE_6400_Hz; - //gyroSampleRateHz = 6400; + gyroConfigMutable()->gyroSampleRateHz = 6400; } else #endif { From 89d0cd5c886fb9123adddb54681090df9666a337 Mon Sep 17 00:00:00 2001 From: nerdCopter <56646290+nerdCopter@users.noreply.github.com> Date: Fri, 24 Oct 2025 13:42:02 -0500 Subject: [PATCH 3/3] Fix BMI270 experimental mode initialization order The BMI270 case in gyroSetSampleRate() checks gyro->hardware_lpf to determine whether to use experimental 6.4kHz or standard 3.2kHz mode. This check was happening before the struct member was initialized, causing it to always evaluate to 0 (GYRO_HARDWARE_LPF_NORMAL) instead of the configured GYRO_HARDWARE_LPF_EXPERIMENTAL value. Other IMU sensors are unaffected as they don't reference hardware_lpf during the sample rate setup phase. --- src/main/sensors/gyro.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/sensors/gyro.c b/src/main/sensors/gyro.c index 6e87a381e0..95219bbb76 100644 --- a/src/main/sensors/gyro.c +++ b/src/main/sensors/gyro.c @@ -603,9 +603,9 @@ static bool gyroInitSensor(gyroSensor_t *gyroSensor) { break; } // Must set gyro targetLooptime before gyroDev.init and initialisation of filters - gyro.targetLooptime = gyroSetSampleRate(&gyroSensor->gyroDev, gyroConfig()->gyro_hardware_lpf, gyroConfig()->gyro_sync_denom, gyroConfig()->gyro_use_32khz); gyroSensor->gyroDev.hardware_lpf = gyroConfig()->gyro_hardware_lpf; gyroSensor->gyroDev.hardware_32khz_lpf = gyroConfig()->gyro_32khz_hardware_lpf; + gyro.targetLooptime = gyroSetSampleRate(&gyroSensor->gyroDev, gyroConfig()->gyro_hardware_lpf, gyroConfig()->gyro_sync_denom, gyroConfig()->gyro_use_32khz); gyroSensor->gyroDev.initFn(&gyroSensor->gyroDev); #ifndef USE_GYRO_IMUF9001 if (gyroConfig()->gyro_align != ALIGN_DEFAULT) {