IOMCU source code, how to flash code in it, change to diff. IOMCU

Hi Dev team,
@tridge

I have 4 questions regarding the IOMCU used in boards like cube orange.

  1. 2 MCUs used in boards like cube orange, so what was the main reason for splitting in to 2 MCU?

  2. How is the code flashed in the IOMCU as I see it’s just connected via Uart to main MCU(H7) Or I should look into the boot loader code and I might find the flashing to iomcu via Uart?

  3. Where to find specific source code relevant to IOMCU?

  4. How we can use different MCU than used in cubeorange for IOMCU and generate its code? I see very good videos available for integrating new MCU with Ardupilot, but how it is to be done with 2 MCU onboard, one acting like IOMCU as in cube orange?

1 Like

The original motivation for the IOMCU predates the Cube, it was in the early pixhawk designs. The original reason was to allow for takeover by a manual pilot in fixed wing aircraft if there was a software failure on the main MCU.
Some vendors use the IOMCU to allow them to use a smaller pincount FMU (main MCU) as they get 8 PWM outputs with only 2 pins (the TX/RX pins of the UART to the FMU). The smaller pincount MCUs are cheaper and smaller.
The bootloader for the IOMCU needs to be flashed with a debugger (eg. stlink). Once the bootloader is flash the main firmware for IOMCU is loaded over the UART from the FMU. The IOMCU firmware is held in ROMFS on the FMU.
Source code for IOMCU main firmware is here:

Source code for IOMCU bootloader is here:

although the IOMCU bootloader is rarely built these days, instead vendors load the binary from here:
https://firmware.ardupilot.org/Tools/Bootloaders/iomcu_bl.bin

that depends on what MCU you want to use for IOMCU. Please share your proposed design

3 Likes