madflight FC3v2 - RP2350B Flight Controller
Schematic Rev-B
Schematic Rev-A
This is a Raspberry Pi Pico2 on steroids. Use it as a flight controller, or for a project that requires precise orientation sensing with the on-board 10DOF best-in-class sensors.
The layout of the pins is similar to the Raspberry Pi Pico2, but with added power pins to make it easy to connect external components like RC receivers, GPS with compass, 4-in-1 ESC, Servos, Radars, etc.
Easy mounting: Use the standard 30.5mm x 30.5mm mounting holes to fit your drone frame. Or use double sided tape to mount the board, the board has no components on the back.
Power the board directly from 3 ~ 5.5V (eg. USB or 1S LiPo), or use the included DC-DC converter to connect larger batteries. For added flexibility the DC-DC converter board can be top or bottom mounted.
Even when using all internal functions, the external pins can be used for:
- 22 PWM pins
- 8 DSHOT pins
- 6 Serial Ports (2 Hardware + 4 PIO UARTs)
- 1 I2C Port
- 1 SPI Port
- 6 ADC pins
Specifications
madflight FC3
- RP2350B with 48 GPIO
- 16MB Flash
- 30 GPIO pins accessible via 2.54mm pinheader
- 9 power and 9 ground pins
- LSM6DSV16B (Rev-B) or ICM-45686 (Rev-A) high-performance 6-axis IMU
- MMC5603NJ high performance magnetometer (20-bit, 0.0625mG per LSB, 2 mG total RMS noise, Enables heading accuracy of 1º)
- BMP580 Precision Barometer (2cm noise @ 85Hz sample rate)
- INA226 16-bit Battery Monitor (40A with 1.25mA resolution, 36V with with 1.25mV resolution)
- WS2812B RGB LED
- SDCARD with click mechanism and fast 4-bit SDIO interface
- Optional PSRAM or second Flash (empty SO-8 socket on back of board)
- Standard 30.5 x 30.5 mm mounting with 4x Φ4mm holes, with grommets Φ3mm
- Dimensions: 50.7 x 41.6 mm (4.4 mm max height)
- Weight: 6.3 gr (without DC-DC)
DC-DC Converter (included)
- Output: 5V 2A continous / 3A peak
- Input: 6.5 ~ 20V
- Dimensions: 20 x 10 x 5 mm
- Weight: 1.8 gr
Arduino IDE and PlatformIO Setup
See here
Betaflight Setup
Betaflight supports the RP2350 based madflight FC3 Rev-A flight controller, see Betaflight announcement
Not all Betaflight features are supported yet for RP2350, but:
- IMU works
- DSHOT600 works (but not PWM, see https://github.com/betaflight/betaflight/issues/14743 )
- SDCARD works
- External BMP280/DPS310 barometer works
- 4 UARTs work
- CRSF/ELRS receiver works
- RGB LED works
Open app.betaflight.com with a Chrome browser to configure your FC3. Note: the Betaflight PC Configurator is history.
Betaflight firmware upload instructions:
- Open app.betaflight.com with a Chrome browser
- Click "Update Firmware"
- Enable switches "Enable Expert Mode" and "Show release candidates"
- Select "Development"
- Select board "MADFLIGHT_FC3"
- Press "Load Firmware[Online]"
- Place the FC3 in boot mode (press BOOT button, press+release RST button, release BOOT button)
- Press "Flash Firmware", and in the save-as popup select the RP2350 drive
- Press "Connect" and configure your FC3 board
Note: if your motors run erratic when disarmed, put #14864 (pull request number) in the Select commit field in the Firmware Flasher tab (you need to Enable expert mode, Show release candidates and Development).
Pinout FC3v2
Set #define MF_BOARD "brd/madflight_FC3v2.h" to use this configuration, it can be modified with madflight_config configuration settings in your program.
| GPIO | Default External Pin Function | Internal Function |
|---|---|---|
| 0 | SER0_TX (connect to radio receiver RX) | |
| 1 | SER0_RX (connect to radio receiver TX) | |
| 2 | I2C1_SDA (connect to GPS SDA) | |
| 3 | I2C1_SCL (connect to GPS SCL) | |
| 4 | SER1_TX (connect to GPS RX) | |
| 5 | SER1_RX (connect to GPS TX) | |
| 6 | OUT0 (connect to ESC for motor 1) | |
| 7 | OUT1 (connect to ESC for motor 2) | |
| 8 | OUT2 (connect to ESC for motor 3) | |
| 9 | OUT3 (connect to ESC for motor 4) | |
| 10 | free | |
| 11 | free | |
| 12 | free | |
| 14 | free | |
| 15 | free | |
| 16 | free | |
| 17 | free | |
| 18 | free | |
| 19 | free | |
| 20 | free | |
| 21 | free | |
| 22 | free | Rev-B jumper Vusb Sense |
| 23 | free | Rev-B jumper BAR_INT |
| 24 | free | Rev-B jumper BAT_INT |
| 25 | free | Rev-B jumper SD Card Detect |
| 26 | IMU_CLKIN | |
| 27 | IMU_INT | |
| 28 | IMU_SPI1_MISO | |
| 29 | IMU_CS | |
| 30 | IMU_SPI1_SCLK | |
| 31 | IMU_SPI1_MOSI | |
| 32 | I2C0_SDA (bar,bat,mag) | |
| 33 | I2C0_SCL (bar,bat,mag) | |
| 34 | SD_SDIO_CLK or SD_SPI0_SLCK | |
| 35 | SD_SDIO_CMD or SD_SPI0_MOSI | |
| 36 | SD_SDIO_D0 or SD_SPI0_MISO | |
| 37 | SD_SDIO_D1 | |
| 38 | SD_SDIO_D2 | |
| 39 | SD_SDIO_D3 or SD_SPI0_CS | |
| 40 | free (ADC0) | |
| 41 | free (ADC1) | |
| 42 | free (ADC2) | |
| 43 | free (ADC3) | |
| 44 | 100k/10k Vbat voltage divider | |
| 45 | Blue LED | |
| 46 | RBG LED | |
| 47 | QMI_CS1 (for optional PSRAM) |
SMD Pads
- GPIO 33 (internal SDA)
- GPIO 32 (internal SCL)
- GPIO 46 (internal RGB LED)
RP2350B Hardware
RP2350B is the 80 pin / 48 GPIO variant of the Raspberry Pi RP2350 processor.
RP2350 has dual core processors with dual single precision FPUs.
madflight uses a custom Serial library, because the default Arduino Serial transmitter blocks after sending a couple bytes. Something we don't want.
madflight uses FreeRTOS and executes the IMU loop on the second core. The first core is used for the other sensors.
madflight Limitiations
- OUT: Consecutive even/odd PWM pins (e.g. pins 2,3 or 10,11) share the same timer and have the same frequency.



