DShot ESC Setup
DShot is a digital ESC protocol. It replaces PWM pulse-width throttle with digital frames: frames carry a checksum, are immune to clock drift between controller and ESC, and need no throttle range calibration.

▲ Two telemetry wiring options
WARNING
Enable DShot only on ESCs that explicitly support it. Setting DShot on a plain PWM ESC causes unpredictable rotation. Power up without propellers before testing.
Prerequisites
- The ESC firmware is digital firmware that supports DShot.
- Bidirectional DShot needs recent ESC firmware (RPM reported back over the signal wire). Older firmware can only use single-wire telemetry.
- Bidirectional DShot requires an exclusive DMA channel, and not every controller output supports it.
Supported rates and channels by controller
M is a MAIN output and A is an AUX output; M1-M4 means MAIN 1~4, M1-A6 means MAIN1 through AUX6. The tables below are measured results on APM firmware.
Bidirectional DShot (BDShot)
| Controller | Rate | Available channels |
|---|---|---|
| V5+ | 150 / 300 / 600 / 1200 | A1-A6 |
| V5 nano | 150 / 300 / 600 / 1200 | M1-M4 |
| X7+ | 150 / 300 / 600 / 1200 | M1-M4 |
| Nora+ | 150 / 300 / 600 / 1200 | M1-M8 |
| X7+ Pro | 150 / 300 / 600 / 1200 | M1-M4 |
| V6X | 150 / 300 / 600 | M1-M4, A1-A4 |
| V6X | 1200 | A1-A4 |
| V6X v2 | 150 / 300 / 600 | M1-M4, A1-A6 |
| V6X v2 | 1200 | A1-A4 |
| 7-Nano V1 | Not supported | — |
| 7-Nano V2 | 150 / 300 / 600 / 1200 | M1-M4 |
| X25 EVO | 150 / 300 / 600 / 1200 | M1-M8 |
| X25 SUPER | 150 / 300 / 600 / 1200 | M1-M8 |
| X25 MEGA | 150 / 300 / 600 / 1200 | M1-M8 |
One-way DShot
| Controller | Rate | Available channels |
|---|---|---|
| V5+ | 150 / 300 | M1-A6 |
| V5+ | 600 / 1200 | A1-A6 |
| V5 nano | 150 / 300 / 600 / 1200 | M1-M6 |
| X7+ | 150 / 300 / 600 / 1200 | M1-M12 |
| Nora+ | 150 / 300 / 600 / 1200 | M1-M12 |
| X7+ Pro | 150 / 300 / 600 / 1200 | M1-M12 |
| V6X | 150 / 300 / 600 | M1-A6 |
| V6X | 1200 | A1-A6 |
| V6X v2 | 150 / 300 / 600 | M1-A6 |
| V6X v2 | 1200 | A1-A6 |
| 7-Nano V1 | 150 / 300 / 600 / 1200 | M1-M12 |
| 7-Nano V2 | 150 / 300 / 600 / 1200 | M1-M12 |
| X25 EVO | 150 / 300 / 600 / 1200 | M1-M14 |
| X25 SUPER | 150 / 300 / 600 / 1200 | M1-M14 |
| X25 MEGA | 150 / 300 / 600 / 1200 | M1-M14 |
TIP
Bidirectional DShot is more sensitive to wire length. On large airframes or long signal runs, drop to DShot150/300 rather than chasing a higher rate.
Configuration steps
1. Set the parameters in the full parameter list
Open Mission Planner and go to Config / Tuning → Full Parameter List. Fill in the table below, then click Write Params.
| Parameter | Target value | Notes |
|---|---|---|
FRAME_CLASS | Set per airframe | Frame type; once set, the system assigns output channels automatically, or change SERVOx_FUNCTION manually |
BRD_SAFETY_DEFLT | 1 (set 0 to disable the safety switch) | Safety switch enable |
BRD_IO_DSHOT | 0 (boards with IO can set 1) | Enables DShot on the IO chip |
MOT_PWM_TYPE | Set to the required DShot rate | DShot protocol for the selected channels |
SERVO_BLH_BDMASK | Tick the outputs to use; 15 for a quad | Channels that carry DShot |
SERVO_DSHOT_ESC | 1 | DShot ESC type; required for telemetry, normally 1 |
SERVO_DSHOT_RATE | 0 (set as needed) | DShot pulse rate; 0 fixes 1 kHz from the loop rate, 1 follows the loop rate (a 400 Hz loop gives 400 Hz), 3 is 1.2 kHz. Do not go below 1 kHz |
Note
All mask-based settings change only at the PWM group level. Which outputs share a group follows the controller grouping; mixing protocols inside a group means the change does not take effect.
Important
Once an output is configured for DShot, its SERVOx_MIN / SERVOx_MAX / SERVOx_TRIM values stop applying, because DShot does not use them. A reversible output uses 1500 as neutral and a normal output 1000; the range is always 1000–2000. No ESC calibration is needed.
Tip
Output is only present after the safety switch is pressed and the vehicle is armed.
2. Check that the output channels took effect
After rebooting, connect the ground station and read the RCOut: line in the boot banner of the Messages panel. It lists the protocol each channel is currently using:

▲ The RCOut: line shows each channel's protocol; DShot channels list their rate (e.g. DShot600)
DShot150/300/600/1200means the channel has switched to digital output.PWMmeans the channel did not switch, usually because it is on a MAIN output, or a timer group mixes protocols.
DShot commands
Some ESCs accept commands sent over DShot, used to control ESC LEDs, sound the motors as a buzzer, and set motor direction.
Currently supported commands:
- DShot LED on/off
- DShot buzzer on/off
- Reverse motor direction (see
SERVO_BLH_RVMASK) - Reversible DShot (also called 3D mode)
Set the parameters below first:
| Parameter | Target value | Notes |
|---|---|---|
SERVO_DSHOT_ESC | 1 (pick per ESC model) | The DShot ESC type in use; required for bidirectional DShot or extended telemetry |
NTF_LED_TYPES | Tick DShot | Allows DShot commands to drive ESC LEDs |
NTF_BUZZ_TYPES | Tick DShot | Allows using the motors as a buzzer |
Warning
ArduPilot currently supports only the common command set (SERVO_DSHOT_ESC = 1). Other command sets may be incompatible and behave unpredictably. Remove the propellers before confirming the ESC is type 1.
Verification
- In the ground station's Flight Data → Status page, search for
esc1_rpm. RPM tracking the throttle means telemetry works (the telemetry link needs MAVLink2). - In the onboard log, check the
ESCnmessages: RPM, voltage, current, temperature, total current. - Use motor test to confirm the direction of each motor.
FAQ
- Motor does not spin?
- Wired to a MAIN output (not supported on boards with an IO co-processor), or a timer group mixes PWM and DShot
- No RPM data?
- The ESC firmware does not support bidirectional telemetry,
SERVO_BLH_BDMASKis not set, orSERVO_DSHOT_ESCis still 0
- RPM reads too high or too low?
SERVO_BLH_POLESdoes not match the actual pole count of the motor
- Motor misbehaves after switching protocol?
- Throttle was calibrated under PWM; recalibrate before returning to analog output
WARNING
After switching an output from DShot back to analog PWM, redo the throttle range calibration. Otherwise the motor may spin at high speed as soon as you arm.
IOMCU DShot limits
With a DShot-capable IOMCU firmware loaded, there are two restrictions:
- The RCin pin can no longer detect a PPM signal.
- MAIN outputs support PWM and normal DShot, and outputs in the same protocol group must use the same protocol:
| Output | Protocol group |
|---|---|
| MAIN 1, 2 | Group 1 |
| MAIN 3, 4 | Group 2 |
| MAIN 5–8 | Group 3 |
The normal setup steps for DShot outputs still apply.

