FPV ESC Protocols Explained: DShot, Multishot, Oneshot, and PWM Comparison

# FPV ESC Protocols Explained: DShot, Multishot, Oneshot, and PWM Comparison

The ESC protocol determines how your flight controller communicates throttle commands to each motor. Choosing the right protocol affects latency, precision, reliability, and feature support. With DShot now the dominant standard, many pilots run it without understanding why — and without enabling its best features. This guide compares every major ESC protocol and explains how to get the most out of DShot.

## ESC Protocol Evolution

| Protocol | Year | Signal Type | Resolution | Max Update Rate | Bidirectional? |
| — | — | — | — | — | — |
| PWM | 2014 | Analog (pulse width) | ~100 steps | 490 Hz | No |
| Oneshot125 | 2015 | Analog (pulse width) | ~125 steps | 2 kHz | No |
| Oneshot42 | 2015 | Analog (pulse width) | ~42 steps | 4 kHz | No |
| Multishot | 2016 | Analog (pulse width) | ~25 steps | 32 kHz | No |
| DShot150 | 2017 | Digital (bitstream) | 2048 steps | 18.75 kHz | Yes (Bidirectional) |
| DShot300 | 2017 | Digital (bitstream) | 2048 steps | 37.5 kHz | Yes (Bidirectional) |
| DShot600 | 2017 | Digital (bitstream) | 2048 steps | 75 kHz | Yes (Bidirectional) |
| DShot1200 | 2019 | Digital (bitstream) | 2048 steps | 150 kHz | Yes (Bidirectional) |

## Why Analog Protocols Are Dead

Oneshot and Multishot encode throttle as an analog pulse width (the length of a pulse in microseconds). This introduces:
– **Calibration drift**: ESC must be calibrated to match the FC’s pulse range.
– **Signal noise sensitivity**: Electrical noise on the signal line distorts the pulse width — the ESC sees a different throttle value than what the FC sent.
– **No error detection**: A corrupted pulse just becomes a wrong throttle value. The ESC cannot tell.

DShot solves all of this by sending a **digital frame**: a 16-bit packet containing throttle value (11 bits), telemetry request (1 bit), and CRC checksum (4 bits). If the CRC doesn’t match, the ESC ignores the frame and holds the last valid throttle.

## DShot Deep Dive

### Frame Structure

A DShot frame is 16 bits:
– **Bits 0-10**: Throttle value (0-2047, 2048 discrete steps)
– **Bit 11**: Telemetry request flag
– **Bits 12-15**: CRC-4 checksum

Special throttle values:
– **0**: Disarmed / motor stop
– **1-47**: Reserved for special commands (beep, direction change, etc.)
– **48-2047**: Normal throttle range (0% to ~100%)

### DShot Speed Selection

| Speed | Max Loop Time | Practical Limit | Best For |
| — | — | — | — |
| DShot150 | 53 μs | 8K PID loop | Budget builds, older ESCs |
| DShot300 | 27 μs | 8K PID loop | Standard 5-inch builds |
| DShot600 | 13 μs | 8K PID loop | Most setups (default) |
| DShot1200 | 7 μs | 8K PID loop | Ultra-low latency racing |

**Rule of thumb**: Always run the fastest DShot your ESC supports. If the ESC datasheet says DShot600, run DShot600. There is zero downside — the CPU cost difference is negligible on any F4 or better processor.

### Bidirectional DShot (RPM Filtering)

Bidirectional DShot is the killer feature. Enabled by setting the ESC protocol to DShot300/600 and checking the “Bidirectional DShot” box in the Motors tab, it allows the ESC to send motor RPM data back to the flight controller on every frame.

This enables:
– **RPM Filtering**: Dynamic notch filters that track motor RPM in real-time, eliminating motor noise from the gyro signal.
– **RPM-based dynamic idle**: Idle speed adjusts based on actual RPM, not just throttle percentage.

**Requirements**: BLHeli_32 or AM32 firmware on the ESC. BLHeli_S ESCs need the JESC or Bluejay firmware to support bidirectional DShot.

## DShot Special Commands

DShot can send commands using throttle values 1-47. The most useful:

| Command | Value | Action |
| — | — | — |
| BEEP | 1-5 | Motor beeps (1-5 beeps) for lost quad location |
| MOTOR_DIRECTION_NORMAL | 7 | Set motor spin to normal direction |
| MOTOR_DIRECTION_REVERSED | 8 | Set motor spin to reversed direction |
| SAVE_SETTINGS | 12 | Save current ESC settings |
| ESC_INFO_REQUEST | 0 (in telemetry frame) | Request ESC firmware info |

These are accessible via:
– **Betaflight Motors tab**: Direction wizard
– **BLHeliSuite / ESC Configurator**: Full feature access
– **Betaflight CLI**: `dshotprog` command for advanced users

## ESC Protocol Configuration Checklist

1. Remove props before any ESC configuration.
2. Flash the ESC with the latest firmware (BLHeli_32, AM32, Bluejay, or JESC for BLHeli_S).
3. In Betaflight Motors tab, select the highest DShot speed your ESC supports.
4. Enable **Bidirectional DShot** if your ESC firmware supports it.
5. Run the **Motor Direction Wizard** to set correct spin direction.
6. Verify all motors spin freely and smoothly in the Motors tab (no stuttering).
7. Test hover to confirm all motors are driving correctly under load.

## Common ESC Protocol Issues

| Symptom | Cause | Fix |
| — | — | — |
| Motor stutters on arm | DShot speed too high for ESC | Drop to DShot300 |
| Motor won’t spin | DShot command not reaching ESC | Check signal wire continuity |
| RPM filter shows 0 RPM | Bidirectional DShot not working | Flash Bluejay/JESC/AM32; enable bidirectional |
| ESC reboots mid-flight | Voltage spike / desync | Add capacitor; check DShot speed |
| Motor twitches but no spin | Bad solder joint on motor phase | Reflow all motor-to-ESC joints |

For ESCs with native BLHeli_32 or AM32 support that handle DShot600 with bidirectional telemetry out of the box, browse the ESC selection at [uavmodel.com](https://uavmodel.com). A quality ESC with proper firmware support eliminates protocol-related headaches entirely.

Leave a Comment

Scroll to Top