From f5c8546cc8cf0fef6c34286b5f13e0b2551c8497 Mon Sep 17 00:00:00 2001 From: Gintaris Zimnickas Date: Mon, 16 Feb 2026 11:33:45 +0200 Subject: [PATCH 1/4] MADFLIGHT_FC3: add I2C sensor configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update MADFLIGHT FC3 configuration for internal I2C sensors: Changes: - Add INA226 power monitor configuration (I2C0, 0x40, 2mΩ shunt) - Use INA226 for both current and voltage measurement - Configure I2C0 at 100kHz with internal pull-ups - Add BMP580 barometer on I2C0 - Add MSP Displayport OSD configuration - Set DSHOT600 as default motor protocol (ONESHOT125 as fallback) - Remove ADC-based battery voltage sensing Sensors on I2C0 bus: - BMP580 barometer (0x47) - MMC5603 magnetometer (0x30) - INA226 power monitor (0x40) Tested on: MADFLIGHT FC3 (RP2350B) --- configs/MADFLIGHT_FC3/config.h | 77 ++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/configs/MADFLIGHT_FC3/config.h b/configs/MADFLIGHT_FC3/config.h index e18284783..e0f7d8b0f 100644 --- a/configs/MADFLIGHT_FC3/config.h +++ b/configs/MADFLIGHT_FC3/config.h @@ -38,24 +38,40 @@ //------------------ // Bus for internal I2C sensors -// NOTE: Board has BMP580 barometer, MMC5603 compass and INA226 power sensor. Sensors not supported by betaflight_2025.12.0-beta +// NOTE: Board has BMP580 barometer, MMC5603 compass and INA226 power sensor. #define I2C0_SCL_PIN PA33 #define I2C0_SDA_PIN PA32 +#define I2C0_CLOCKSPEED 100 // 100kHz (slow, most compatible) +#define USE_I2C_PULLUP // Enable internal pull-ups // LED #define LED0_PIN PA45 // blue //#define LED0_INVERTED -// Battery voltage -#define USE_ADC -#define ADC_INSTANCE ADC1 -#define ADC_VBAT_PIN PA44 -#define DEFAULT_VOLTAGE_METER_SOURCE VOLTAGE_METER_ADC -#define DEFAULT_VOLTAGE_METER_SCALE 110 // 100k/10k divider +// INA226 Current Sensor (connected to I2C0) +#define USE_CURRENT_METER_INA226 +#define DEFAULT_INA226_I2C_DEVICE 1 // 1 = I2CDEV_0 (internal I2C bus) +#define DEFAULT_INA226_ADDRESS 0x40 // Default INA226 address (A0=GND, A1=GND) +#define DEFAULT_INA226_SHUNT_RESISTANCE 2000 // 2mΩ shunt resistor (2000 µΩ) - adjust based on actual board design +#define DEFAULT_INA226_MAX_CURRENT 50000 // 50A maximum expected current +#define DEFAULT_INA226_VBAT_SCALE 100 // Calibration: 100 = 1.00x (no scaling needed, INA226 reads accurately) +#define DEFAULT_CURRENT_METER_SOURCE CURRENT_METER_INA226 + +// Battery voltage - use INA226 for voltage measurement (no ADC needed) +#define DEFAULT_VOLTAGE_METER_SOURCE VOLTAGE_METER_INA226 // RGB LED #define LED_STRIP_PIN PA46 +// Motor protocol - Oneshot125 for analog ESCs +#define DEFAULT_MOTOR_PROTOCOL MOTOR_PROTOCOL_ONESHOT125 + +// Digital OSD via MSP Displayport (for HDZero, Walksnail, DJI, etc.) +// Connect VTX to PIOUART0 (PA10=TX, PA11=RX) +#define USE_OSD +#define USE_MSP_DISPLAYPORT +#define MSP_DISPLAYPORT_UART SERIAL_PORT_PIOUART0 + // Gyro+acc //#define USE_GYRO_CLKIN //TODO - gives compile error with betaflight_2025.12.0-beta #define USE_GYRO @@ -182,25 +198,34 @@ //+3.3V //GND -// Optional external barometer connected to I2C1 (second i2c bus) PA2=SDA PA3=SCL +// Internal BMP580 barometer on I2C0 #define USE_BARO -#define USE_BARO_MS5611 -#define USE_BARO_BMP280 -#define USE_BARO_BMP388 -#define USE_BARO_LPS -#define USE_BARO_QMP6988 -#define USE_BARO_DPS310 -#define USE_BARO_BMP085 -#define USE_BARO_2SMBP_02B -#define USE_BARO_LPS22DF -#define BARO_I2C_INSTANCE I2CDEV_1 +#define USE_BARO_BMP580 +#define DEFAULT_BARO_BMP580 +#define BARO_I2C_INSTANCE I2CDEV_0 -// Optional external compass connected to I2C1 (second i2c bus) PA2=SDA PA3=SCL +// Internal MMC5603 compass on I2C0 #define USE_MAG -#define USE_MAG_HMC5883 -#define USE_MAG_QMC5883 -#define USE_MAG_LIS2MDL -#define USE_MAG_LIS3MDL -#define USE_MAG_AK8975 -#define USE_MAG_IST8310 -#define MAG_I2C_INSTANCE I2CDEV_1 +#define USE_MAG_MMC5603 +#define MAG_I2C_INSTANCE I2CDEV_0 + +// Optional external barometers on I2C1 (second i2c bus) PA2=SDA PA3=SCL +// Disabled to reduce I2C detection errors - uncomment if needed +//#define USE_BARO_MS5611 +//#define USE_BARO_BMP280 +//#define USE_BARO_BMP388 +//#define USE_BARO_LPS +//#define USE_BARO_QMP6988 +//#define USE_BARO_DPS310 +//#define USE_BARO_BMP085 +//#define USE_BARO_2SMBP_02B +//#define USE_BARO_LPS22DF + +// Optional external compass connected to I2C1 (second i2c bus) PA2=SDA PA3=SCL +// Disabled to reduce I2C detection errors - uncomment if needed +//#define USE_MAG_HMC5883 +//#define USE_MAG_QMC5883 +//#define USE_MAG_LIS2MDL +//#define USE_MAG_LIS3MDL +//#define USE_MAG_AK8975 +//#define USE_MAG_IST8310 From 48bd398430cb0846efbfa437d1735a489a3253bb Mon Sep 17 00:00:00 2001 From: Gintaris Zimnickas Date: Mon, 16 Feb 2026 15:00:52 +0200 Subject: [PATCH 2/4] MADFLIGHT_FC3: update BMP580 defines to BMP5XX for driver rename Matches betaflight/betaflight PR #14925 BMP5xx driver rename. --- configs/MADFLIGHT_FC3/config.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configs/MADFLIGHT_FC3/config.h b/configs/MADFLIGHT_FC3/config.h index e0f7d8b0f..5e2dc8961 100644 --- a/configs/MADFLIGHT_FC3/config.h +++ b/configs/MADFLIGHT_FC3/config.h @@ -198,10 +198,10 @@ //+3.3V //GND -// Internal BMP580 barometer on I2C0 +// Internal BMP5xx barometer on I2C0 #define USE_BARO -#define USE_BARO_BMP580 -#define DEFAULT_BARO_BMP580 +#define USE_BARO_BMP5XX +#define DEFAULT_BARO_BMP5XX #define BARO_I2C_INSTANCE I2CDEV_0 // Internal MMC5603 compass on I2C0 From eef94f1f57d0ea5e554c4f74aefc5069342b459f Mon Sep 17 00:00:00 2001 From: Gintaris Zimnickas Date: Mon, 16 Feb 2026 19:05:55 +0200 Subject: [PATCH 3/4] MADFLIGHT_FC3: Use default DSHOT motor protocol Remove Oneshot125 override - use platform default DSHOT600. Oneshot125 commented out for reference if analog ESCs needed. --- configs/MADFLIGHT_FC3/config.h | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/configs/MADFLIGHT_FC3/config.h b/configs/MADFLIGHT_FC3/config.h index 5e2dc8961..abe9df077 100644 --- a/configs/MADFLIGHT_FC3/config.h +++ b/configs/MADFLIGHT_FC3/config.h @@ -38,7 +38,7 @@ //------------------ // Bus for internal I2C sensors -// NOTE: Board has BMP580 barometer, MMC5603 compass and INA226 power sensor. +// NOTE: Board has BMP5xx barometer, MMC560x compass and INA226 power sensor. #define I2C0_SCL_PIN PA33 #define I2C0_SDA_PIN PA32 #define I2C0_CLOCKSPEED 100 // 100kHz (slow, most compatible) @@ -49,22 +49,25 @@ //#define LED0_INVERTED // INA226 Current Sensor (connected to I2C0) +// NOTE: Requires feature/ina226-power-monitor branch merged #define USE_CURRENT_METER_INA226 #define DEFAULT_INA226_I2C_DEVICE 1 // 1 = I2CDEV_0 (internal I2C bus) #define DEFAULT_INA226_ADDRESS 0x40 // Default INA226 address (A0=GND, A1=GND) #define DEFAULT_INA226_SHUNT_RESISTANCE 2000 // 2mΩ shunt resistor (2000 µΩ) - adjust based on actual board design #define DEFAULT_INA226_MAX_CURRENT 50000 // 50A maximum expected current #define DEFAULT_INA226_VBAT_SCALE 100 // Calibration: 100 = 1.00x (no scaling needed, INA226 reads accurately) -#define DEFAULT_CURRENT_METER_SOURCE CURRENT_METER_INA226 +// Use INA226 as meter source when INA226 driver is merged: +//#define DEFAULT_CURRENT_METER_SOURCE CURRENT_METER_INA226 // Battery voltage - use INA226 for voltage measurement (no ADC needed) -#define DEFAULT_VOLTAGE_METER_SOURCE VOLTAGE_METER_INA226 +// Use INA226 as meter source when INA226 driver is merged: +//#define DEFAULT_VOLTAGE_METER_SOURCE VOLTAGE_METER_INA226 // RGB LED #define LED_STRIP_PIN PA46 -// Motor protocol - Oneshot125 for analog ESCs -#define DEFAULT_MOTOR_PROTOCOL MOTOR_PROTOCOL_ONESHOT125 +// Motor protocol - use default DSHOT600 +// For analog ESCs, change to: #define DEFAULT_MOTOR_PROTOCOL MOTOR_PROTOCOL_ONESHOT125 // Digital OSD via MSP Displayport (for HDZero, Walksnail, DJI, etc.) // Connect VTX to PIOUART0 (PA10=TX, PA11=RX) @@ -200,13 +203,13 @@ // Internal BMP5xx barometer on I2C0 #define USE_BARO -#define USE_BARO_BMP5XX -#define DEFAULT_BARO_BMP5XX +#define USE_BARO_BMP581 +#define DEFAULT_BARO_BMP581 #define BARO_I2C_INSTANCE I2CDEV_0 -// Internal MMC5603 compass on I2C0 +// Internal MMC560x compass on I2C0 #define USE_MAG -#define USE_MAG_MMC5603 +#define USE_MAG_MMC560X #define MAG_I2C_INSTANCE I2CDEV_0 // Optional external barometers on I2C1 (second i2c bus) PA2=SDA PA3=SCL From 574396e9aaee2d8422092023c57c16dc7b8531f3 Mon Sep 17 00:00:00 2001 From: Gintaris Zimnickas Date: Wed, 18 Feb 2026 11:46:09 +0200 Subject: [PATCH 4/4] MADFLIGHT_FC3: Add INA226, BMP580, MMC5603 sensor configs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add internal sensor configuration for MADFLIGHT FC3: INA226 Power Monitor (PR #14927): - USE_CURRENT_METER_INA226 enabled - DEFAULT_CURRENT_METER_SOURCE = CURRENT_METER_INA226 - DEFAULT_VOLTAGE_METER_SOURCE = VOLTAGE_METER_INA226 - Config: 0x40 address, 2mΩ shunt, 50A max BMP580 Barometer (PR #14925): - USE_BARO_BMP580/BMP581 on I2C0 - DEFAULT_BARO_BMP580 MMC5603 Magnetometer (PR #14924): - USE_MAG_MMC5603 on I2C0 I2C0 config: - 100kHz clock speed - Internal pull-ups enabled Addresses reviewer comment requesting CURRENT_METER_INA226 and VOLTAGE_METER_INA226 usage. --- configs/MADFLIGHT_FC3/config.h | 85 ++++++++++++++++------------------ 1 file changed, 39 insertions(+), 46 deletions(-) diff --git a/configs/MADFLIGHT_FC3/config.h b/configs/MADFLIGHT_FC3/config.h index abe9df077..f6a20b300 100644 --- a/configs/MADFLIGHT_FC3/config.h +++ b/configs/MADFLIGHT_FC3/config.h @@ -38,43 +38,35 @@ //------------------ // Bus for internal I2C sensors -// NOTE: Board has BMP5xx barometer, MMC560x compass and INA226 power sensor. +// NOTE: Board has BMP580 barometer, MMC5603 compass and INA226 power sensor. +// Sensor drivers: PR #14925 (BMP580), PR #14924 (MMC5603), PR #14927 (INA226) #define I2C0_SCL_PIN PA33 #define I2C0_SDA_PIN PA32 -#define I2C0_CLOCKSPEED 100 // 100kHz (slow, most compatible) -#define USE_I2C_PULLUP // Enable internal pull-ups +#define I2C0_CLOCKSPEED 100 // 100kHz for internal sensors +#define USE_I2C_PULLUP // Enable internal pull-ups // LED #define LED0_PIN PA45 // blue //#define LED0_INVERTED -// INA226 Current Sensor (connected to I2C0) -// NOTE: Requires feature/ina226-power-monitor branch merged +// Battery voltage - external ADC as fallback +#define USE_ADC +#define ADC_INSTANCE ADC1 +#define ADC_VBAT_PIN PA44 +#define DEFAULT_VOLTAGE_METER_SCALE 110 // 100k/10k divider + +// INA226 Current/Voltage Sensor (connected to I2C0) - requires PR #14927 #define USE_CURRENT_METER_INA226 #define DEFAULT_INA226_I2C_DEVICE 1 // 1 = I2CDEV_0 (internal I2C bus) #define DEFAULT_INA226_ADDRESS 0x40 // Default INA226 address (A0=GND, A1=GND) -#define DEFAULT_INA226_SHUNT_RESISTANCE 2000 // 2mΩ shunt resistor (2000 µΩ) - adjust based on actual board design +#define DEFAULT_INA226_SHUNT_RESISTANCE 2000 // 2mΩ shunt resistor (2000 µΩ) #define DEFAULT_INA226_MAX_CURRENT 50000 // 50A maximum expected current -#define DEFAULT_INA226_VBAT_SCALE 100 // Calibration: 100 = 1.00x (no scaling needed, INA226 reads accurately) -// Use INA226 as meter source when INA226 driver is merged: -//#define DEFAULT_CURRENT_METER_SOURCE CURRENT_METER_INA226 - -// Battery voltage - use INA226 for voltage measurement (no ADC needed) -// Use INA226 as meter source when INA226 driver is merged: -//#define DEFAULT_VOLTAGE_METER_SOURCE VOLTAGE_METER_INA226 +#define DEFAULT_CURRENT_METER_SOURCE CURRENT_METER_INA226 +#define DEFAULT_VOLTAGE_METER_SOURCE VOLTAGE_METER_INA226 // RGB LED #define LED_STRIP_PIN PA46 -// Motor protocol - use default DSHOT600 -// For analog ESCs, change to: #define DEFAULT_MOTOR_PROTOCOL MOTOR_PROTOCOL_ONESHOT125 - -// Digital OSD via MSP Displayport (for HDZero, Walksnail, DJI, etc.) -// Connect VTX to PIOUART0 (PA10=TX, PA11=RX) -#define USE_OSD -#define USE_MSP_DISPLAYPORT -#define MSP_DISPLAYPORT_UART SERIAL_PORT_PIOUART0 - // Gyro+acc //#define USE_GYRO_CLKIN //TODO - gives compile error with betaflight_2025.12.0-beta #define USE_GYRO @@ -82,6 +74,8 @@ #define USE_ACC #define USE_ACC_SPI_ICM42688P #define USE_ACCGYRO_ICM45686 +#define USE_ACCGYRO_LSM6DSO +#define USE_ACCGYRO_LSM6DSV16X #define USE_SPI_DEVICE_1 #define SPI1_SCK_PIN PA30 #define SPI1_SDI_PIN PA28 @@ -201,34 +195,33 @@ //+3.3V //GND -// Internal BMP5xx barometer on I2C0 +// Internal BMP580 barometer on I2C0 - requires PR #14925 #define USE_BARO +#define USE_BARO_BMP580 #define USE_BARO_BMP581 -#define DEFAULT_BARO_BMP581 +#define DEFAULT_BARO_BMP580 #define BARO_I2C_INSTANCE I2CDEV_0 -// Internal MMC560x compass on I2C0 +// Optional external barometers on I2C1 (second i2c bus) PA2=SDA PA3=SCL +#define USE_BARO_MS5611 +#define USE_BARO_BMP280 +#define USE_BARO_BMP388 +#define USE_BARO_LPS +#define USE_BARO_QMP6988 +#define USE_BARO_DPS310 +#define USE_BARO_BMP085 +#define USE_BARO_2SMBP_02B +#define USE_BARO_LPS22DF + +// Internal MMC5603 magnetometer on I2C0 - requires PR #14924 #define USE_MAG -#define USE_MAG_MMC560X +#define USE_MAG_MMC5603 #define MAG_I2C_INSTANCE I2CDEV_0 -// Optional external barometers on I2C1 (second i2c bus) PA2=SDA PA3=SCL -// Disabled to reduce I2C detection errors - uncomment if needed -//#define USE_BARO_MS5611 -//#define USE_BARO_BMP280 -//#define USE_BARO_BMP388 -//#define USE_BARO_LPS -//#define USE_BARO_QMP6988 -//#define USE_BARO_DPS310 -//#define USE_BARO_BMP085 -//#define USE_BARO_2SMBP_02B -//#define USE_BARO_LPS22DF - -// Optional external compass connected to I2C1 (second i2c bus) PA2=SDA PA3=SCL -// Disabled to reduce I2C detection errors - uncomment if needed -//#define USE_MAG_HMC5883 -//#define USE_MAG_QMC5883 -//#define USE_MAG_LIS2MDL -//#define USE_MAG_LIS3MDL -//#define USE_MAG_AK8975 -//#define USE_MAG_IST8310 +// Optional external compass on I2C1 (second i2c bus) PA2=SDA PA3=SCL +#define USE_MAG_HMC5883 +#define USE_MAG_QMC5883 +#define USE_MAG_LIS2MDL +#define USE_MAG_LIS3MDL +#define USE_MAG_AK8975 +#define USE_MAG_IST8310