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

4 Likes

hello;

i have a big problem with my cube orange plus :

it will connect randomly to mission planner, and if it connects it will gives me “unable to update IO firmware”

i can upload any ardupilot or PX4 firmware no problem.
it’s working flawlessly with PX4 (if installed)
but on mission planner, it’s not stable, sometimes it connect fine, then after trying to calibrate acc/gyro it will stop, disconnects and will not connect again, (with the unable to update IO).

what do you suggest me to do ?

thanks