How Main and Aux ports are implemented on non-Pixhawk boards

I was reviewing the new boards added under 4.3.0.

Looking at the non-Pixhawk boards, I wondered how Main and Aux ports are implemented.

Looking at the Skystars RC H7 for example, it’s designed for easy connection to a 4-in-1 ESC. But does that mean these motor ports are Aux ports - which ArduPilot requires for Dshot?

If I had to guess, the motor pads on flight controllers such as these are defined in ArduPilot as Aux ports - and there aren’t any Main ports - just UARTS. But I’d like to know more before I consider implementing such a board.

Here’s a reference: Skystars RC H7 Dual Gyro 30x30 Flight Controller – defianceRC

They are directly FMU connected, yes. AUX is really a misnomer based on boards that have an IOMCU - the majority of boards do not have this and so all outputs are “main” and support dshot

Thanks @andyp1per - that’s helpful.

Is an IOMCU required for the relay function?

Also - since on the Cube you have to use Aux ports for Dshot - I’m wondering how flight controllers where all the ports are “main” manage to support Dshot.

I seem to recall that on the Cube, “main” ports operate at 400Hz, which is one reason they’re unsuitable for servos. (sketchy memories about this - I may be way off base here) And I seem to recall that the Cube’s Aux ports default to 50Hz - and on that can be configured.

I’ve learned that you don’t have to set the Cube’s main port frequency to use Dshot - perhaps because Dshot is digital instead of analog (pwm). Or maybe it’s default is OK for Dshot.

All this makes me wonder how all this is implemented on a non-pixhawk board’s motor pads.

Yes - no doubt my understanding of ports came from this document.

As I read this, the issues appears to be if an IOMCU is present. The name “main” and “aux” may not follow the convention on all boards - but the port capabilities in ArduPilot is determined by if they are IOMCU ports.

Do I have this about right?

The outputs on those boards could all be called AUX.


It’s a clumsy description and a holdover from the days when those boards were not supported.

1 Like

Thanks @dkemxr - makes perfect sense.

I’m guessing that if AUX ports can essentially do anything, the value added by the IOMCU is that it offloads processing from the MCU.

If I’m right about that, perhaps today’s fast processors (i.e. F7, H7, etc.) really don’t need the support of an IOMCU. My EDU-450 running Dshot isn’t using it at all.

From my brief work with FPV and Betaflight, I learned that motor pads could be re-defined to be UARTs. I had to do this once - but I can’t remember why now.

So I’m guessing that the ArduPilot firmware may has the capability to define how the pads on a flight controller’s board may be used - or may have that capability when or if it’s implemented.

It’s supposed to be a failover. If the FMU stops responding then the IOMCU can do passthru (RC>PWM). I don’t see the usefulness for Copter/multirotor but perhaps someone could correct me there.

1 Like