DShot on IOMCU - it's here!

People have long wanted dshot support on IOMCU (i.e. the first 8 channels of a CubeOrange for instance) - and it’s finally here!

However, I need some help testing. If you are feeling brave and want to try it out, here is what you do. There are two versions.

  • dshot for 6 channels. This version supports dshot on channels 1-2,5-8. The reasons why are long and boring, but supporting 6 channels is relatively doable in the current IOMCU firmware. To use it load up the firmware of your choice - here are builds for CubeOrange on copter and plane: Dropbox - iomcu-dshot - Simplify your life - and then set: BRD_IO_DSHOT=1 You should then find your dshot configuration magically starts working. dshot commands - including tones and reversing - should also work. You can also use SERVO_DSHOT_ESC and SERVO_DSHOT_RATE to control these. Only dshot 150 and dshot 300 are supported. Dshot telemetry will work if you have the ESC telemetry wire connected to a UART We are now focusing on the 8-channel version

  • dshot for 8 channels. This version supports dshot on all channels 1-8. To use it load up the firmware of your choice - here are builds for CubeOrange on copter and plane: Dropbox - iomcu-dshot - Simplify your life - and then set: BRD_IO_DSHOT=1 You should then find your dshot configuration magically starts working. dshot commands - including tones and reversing - should also work. You can also use SERVO_DSHOT_ESC and SERVO_DSHOT_RATE to control these. Only dshot 150 and dshot 300 are supported. Dshot telemetry will work if you have the ESC telemetry wire connected to a UART. This involved some major re-architecture of the iomcu firmware and so comes with a health warning - only try this version if you are feeling very lucky. I have now done some testing of dshot 300 on a 5" quad using this version and it works without issue.

The main version is now getting close to release and so is suitable for more people to try - it has already been flown on a fairly expensive VTOL.

If you want a build for something else, please let me know this has only been tested so far on a CubeOrange, CubeOrangePlus, CubeBlack, Pixhawk6X and there are builds for other Cubes and some other boards

How To Test

  • Get the latest version from Dropbox - iomcu-dshot - Simplify your life - many boards are now supported
  • Load up the firmware, you should see a message about the IOMCU update being complete
  • Set BRD_IO_DSHOT = 1
  • Reboot, you should get another message about the IOMCU update being complete
  • Set MOT_PWM_TYPE to 4 or 5 for copter or Q_M_PWM_TYPE for plane

A big thanks to CubePilot who sponsored this work

Thanks in advance for your help!

UPDATE I have now done some fairly extensive testing of the 8-channel version using dshot 300 on a CubeBlack. All worked flawlessly, so I am feeling rather more confident about this now.

UPDATE2 Now working on f103 and builds for Pixhawk6X available

Andy

The PR can be found here:

12 Likes

Hi Andrew,
There has been plenty of user duscussion around iomcu chanels vs fmu chanels,
I understand the assignments etc but some of us including me arent clear on the differences and why some are normally used for motors and others used for aux servos etc, why was it that DShot was only available on the other chanels and what had to be overcome to enable Dshot on iomcu?

The IOMCU is a separate processor to the regular FMU. It is an STM32F100. The first 8 channels are connected to the IOMCU. The next six channels are connected to the FMU. The FMU (e.g. STM32H743) has loads of memory, loads of flash and is very fast. The IOMCU has 64k flash, 8k memory and runs at 24Mhz. So the challenge is doing anything at all on the IOMCU that isn’t very simple. This has largely constrained the features that can be added. Back in the day the idea was that the IOMCU could keep running if the FMU failed or rebooted, but really that’s only applicable to plane now - and then only just. A copter will not continue to fly with just the IOMCU as all the stabilization control runs on the FMU.

1 Like

How does this affect the CPU time of the iomcu? Will AFS or other high cpu-time items continue to work w/dshot?

Does this/will this include bidir dshot?

What is AFS? Everything should work with dshot, if it does not it is a bug.

No support for bidir dshot because the CubeOrange has one-way level shifters that make this impossible

AFS Advanced Failsafe Configuration — Plane documentation

I don’t really know how I would test this … maybe I’ll have to make a small quadplane

AFS runs on the FMU - the only involvement of the IOMCU is notifying of RC loss if you have it wired up that way

My bad - I thought AFS ran on IO MCU exclusively.

I have updated the 8 channel firmware with a version that is much more reliable and stable.

1 Like

Hello andyp1per,
What version of arduplane is this development on?
I’m using a Beerotor BS80 V2.0 with firmware Blheli_S with version: L_H_00 and I can’t get the motors to turn continuously when armed, they go to jumps.
The arduplane version is the stable 4.3.7(bdshot) for a TAILSITTER with Pixhawk V4.

I think I have all the parameters right:
Q_M_PWM_TYPE : 6 (Dshot600) I’ve tried 4 too.
SERVO_BLH_OTYPE: 6 (Dshot600) I’ve tried 4 too.
SERVO_BLH_MASK: 768 (Aux 9 and Aux 10)
SERVO_BLH_AUTO: 1
SERVO_DSHOT_ESC: 2 (BLHeli_S)
SERVO_DSHOT_RATE: 0 I’ve tried 1 too.
Thank you.
Raul

This is on master (4.5-dev). Did you load the firmware I posted? It will only work with the (beta) firmware.

Tested on a Holybro QAV-250 using dshot 300 and the 8-channel version

Flight tests were performed in a Raefly VT240 using dshot. ESC works fine.

1 Like

Hello @andyp1per :

Would you please help to build an image for the fmuv3? I would like to test it on my fmuv3, thank you.

I am going to test it on my quad(S500) and hexa(S550) copter.

BR cctsao

Hi, can you give a few more details about the board - in particular its important to know if the iomcu is F100 or F103

Hello @andyp1per

The coprocessor is STM32F103C8T6.

I have upgraded the fmu(stm32f4) from rev Y to rev 3, so I have a 2MB flash fmu.

BR cctsao

So is this a standard pixhawk?

Hello @andyp1per :slight_smile:

Yes, is a standard pixhawk one, and it have a 2MB flash size with the FMU(stm32f4), the target is fmuv3.

image

BR cctsao

Can you use the Pixhawk1 target? I can’t change fmuv3 as the new code will not fit in Pixhawk1-1M

I think you are going to be out of luck - the fmuv3 standard specifies F100 - so it seems you have a non-standard board