Skip to content

Conversation

@wchnflr
Copy link
Contributor

@wchnflr wchnflr commented Dec 20, 2025

User description

There is an ongoing need for a new OMNIBUSF4V3 target with ICM42605/ICM42688 gyro per:
https://www.reddit.com/r/fpv/comments/1fx8zvp/comment/ntxlvic/
This latest FC version is attractively priced for fixed wing applications.

This PR adds OMNIBUSF4V3_ICM as a variant of the OMNIBUSF4V3 target by only adding ICM42605 support and nothing else. A custom build as uploaded to Issue #11181 was successfully verified on target hardware. User reported improved performance compared to original OMNIBUSF4V3 target:

Hi, thank you for your custom firmware. The UARTs are working well, and everything is working better than the previous custom firmware I flashed. However, your custom firmware has one small issue: the gyro is reversed.
And the cpu load is reduced in this firmware! the last one is 50% but this one only 17 -> 25%
sometime < 10%

After changing gyro alignment from CW0_DEG to CW180_DEG:

It working well !
I think it’s ready to fly. I’ve tested all the important features, and they’re working well. Thank you for your support.
Can I share this firmware with the Vietnamese community? It would help a lot.

User also shared video capture from Inav Configurator.

Since the INAV devs do not appear to have official hardware to test, this target is being marked as SKIP_RELEASES.

OMNIBUSF4V3_ICM_INAV8_480p.mp4

PR Type

New Target


Description

  • Add OMNIBUSF4V3_ICM target variant with ICM42605/ICM42688 gyro support

  • Configure ICM42605 with CW180_DEG alignment and SPI1 bus

  • Mark new target as SKIP_RELEASES due to lack of official hardware

  • Update conditional compilation directives to include new target variant


Diagram Walkthrough

flowchart LR
  OMNIBUSF4["OMNIBUSF4 Target Family"]
  OMNIBUSF4V3["OMNIBUSF4V3<br/>MPU6000 Gyro"]
  OMNIBUSF4V3_ICM["OMNIBUSF4V3_ICM<br/>ICM42605 Gyro"]
  OMNIBUSF4 --> OMNIBUSF4V3
  OMNIBUSF4 --> OMNIBUSF4V3_ICM
  OMNIBUSF4V3_ICM -- "Board ID: OB4I" --> Config["SPI1 Configuration<br/>CW180_DEG Alignment"]
Loading

File Walkthrough

Relevant files
New target
target.h
Configure ICM42605 gyro and target conditionals                   

src/main/target/OMNIBUSF4/target.h

  • Add board identifier "OB4I" for OMNIBUSF4V3_ICM target
  • Configure ICM42605 IMU with CW180_DEG alignment on SPI1 bus
  • Update multiple conditional compilation blocks to include
    OMNIBUSF4V3_ICM variant
  • Update comment to clarify MPU6500/ICM20608 support
+20/-11 
Configuration changes
CMakeLists.txt
Add OMNIBUSF4V3_ICM target build configuration                     

src/main/target/OMNIBUSF4/CMakeLists.txt

  • Add new OMNIBUSF4V3_ICM target with STM32F405XG MCU
  • Mark target with SKIP_RELEASES flag to prevent release builds
+1/-0     

Add new target with support for ICM42605/ICM42688 gyro
Mark as SKIP_RELEASES.
Add new target OMNIBUSF4V3_ICM with board ID OB4I to support ICM42605/ICM42688 gyro.
@github-actions
Copy link

Branch Targeting Suggestion

You've targeted the master branch with this PR. Please consider if a version branch might be more appropriate:

  • maintenance-9.x - If your change is backward-compatible and won't create compatibility issues between INAV firmware and Configurator 9.x versions. This will allow your PR to be included in the next 9.x release.

  • maintenance-10.x - If your change introduces compatibility requirements between firmware and configurator that would break 9.x compatibility. This is for PRs which will be included in INAV 10.x

If master is the correct target for this change, no action is needed.


This is an automated suggestion to help route contributions to the appropriate branch.

@qodo-code-review
Copy link
Contributor

PR Compliance Guide 🔍

All compliance sections have been disabled in the configurations.

@sensei-hacker sensei-hacker changed the base branch from master to maintenance-9.x December 21, 2025 16:53
@sensei-hacker
Copy link
Member

sensei-hacker commented Dec 22, 2025

I have confirmed these changes don't interfere with the other targets that are intertwined.

However, having nine different targets tangled together makes maintenance difficult.
For that reason, for 9.1 I will split them off into different directories in #11196

@qodo-code-review
Copy link
Contributor

You are nearing your monthly Qodo Merge usage quota. For more information, please visit here.

PR Compliance Guide 🔍

All compliance sections have been disabled in the configurations.

Comment on lines +72 to 91
#if defined(OMNIBUSF4V3_ICM)
#define USE_IMU_ICM42605
#define IMU_ICM42605_ALIGN CW180_DEG
#define ICM42605_CS_PIN PA4
#define ICM42605_SPI_BUS BUS_SPI1
#endif

#if defined(OMNIBUSF4PRO) || defined(OMNIBUSF4V3) || defined(OMNIBUSF4V3_ICM)
#define USE_IMU_MPU6000
#define IMU_MPU6000_ALIGN CW270_DEG
#else
#define USE_IMU_MPU6000
#define IMU_MPU6000_ALIGN CW180_DEG
#endif

// Support for OMNIBUS F4 PRO CORNER - it has ICM20608 instead of MPU6000
#if defined(OMNIBUSF4PRO) || defined(OMNIBUSF4V3)
// Support for OMNIBUS F4 PRO CORNER - it has MPU6500/ICM20608 instead of MPU6000
#if defined(OMNIBUSF4PRO) || defined(OMNIBUSF4V3) || defined(OMNIBUSF4V3_ICM)
#define MPU6500_CS_PIN MPU6000_CS_PIN
#define MPU6500_SPI_BUS MPU6000_SPI_BUS
#define USE_IMU_MPU6500
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: To resolve a hardware conflict, remove the OMNIBUSF4V3_ICM target from the preprocessor conditions for the MPU6000, MPU6500, and BMI270 IMUs, as it should only use the ICM42605 IMU. [possible issue, importance: 9]

New proposed code:
 #if defined(OMNIBUSF4V3_ICM)
   #define USE_IMU_ICM42605
   #define IMU_ICM42605_ALIGN      CW180_DEG
   #define ICM42605_CS_PIN         PA4
   #define ICM42605_SPI_BUS        BUS_SPI1
 #endif
 
-#if defined(OMNIBUSF4PRO) || defined(OMNIBUSF4V3) || defined(OMNIBUSF4V3_ICM)
+#if defined(OMNIBUSF4PRO) || defined(OMNIBUSF4V3)
   #define USE_IMU_MPU6000
   #define IMU_MPU6000_ALIGN       CW270_DEG
 #else
 ...
 #endif
 
 // Support for OMNIBUS F4 PRO CORNER - it has MPU6500/ICM20608 instead of MPU6000
-#if defined(OMNIBUSF4PRO) || defined(OMNIBUSF4V3) || defined(OMNIBUSF4V3_ICM)
+#if defined(OMNIBUSF4PRO) || defined(OMNIBUSF4V3)
   #define MPU6500_CS_PIN          MPU6000_CS_PIN
   #define MPU6500_SPI_BUS         MPU6000_SPI_BUS
   #define USE_IMU_MPU6500
   #define IMU_MPU6500_ALIGN       IMU_MPU6000_ALIGN
 
   //BMI270
   #define USE_IMU_BMI270
   #define IMU_BMI270_ALIGN        IMU_MPU6000_ALIGN
   #define BMI270_SPI_BUS          MPU6000_SPI_BUS
   #define BMI270_CS_PIN           MPU6000_CS_PIN
 #endif

@sensei-hacker sensei-hacker merged commit 880c89a into iNavFlight:maintenance-9.x Dec 22, 2025
43 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants