What is DShot ESC Protocol

by Oscar

DShot is a new communication protocol between flight controller (FC) and ESC, substitute to Oneshot and Multishot. DShot stands for Digital Shot.

Some of the links on this page are affiliate links. I receive a commission (at no extra cost to you) if you make a purchase after clicking on one of these affiliate links. This helps support the free content for the community on this website. Please read our Affiliate Link Policy for more information.

The project is developed by Flyduino in collaboration with Betaflight. Many would be surprised by how fast things are moving forward: Multishot has only just been implemented and adopted by the mini quad FPV community, and now there is already a newer, better technology a few months later.

Learn about other existing ESC Protocols.

I compiled the specification of all ESC’s for mini quad in this spreadsheet so you can compare them more closely.

Advantage of DShot

Compared to Oneshot and Multishot, we are informed that DShot is better because:

  • No More ESC Calibration Required (no oscillator drift)
  • More Accurate ESC Signal, and more robust against electrical noise
  • Higher Resolution of 2048 Steps, compared to others of 1000 steps
  • Faster Than Oneshot
  • Safer, every signal – ESC can detect and reject corrupted data

So What is DShot, Really?

DShot is a digital protocol!

Standard PWM, Oneshot125, Oneshot42, and Multishot these are all analogue signals. They all rely on the length of the electrical pulse to determine the value being sent. Analog signals have potential issues with value accuracy because:

  1. Due to the possibly different speed of the oscillators (or clock) in ESC’s and FC, the length of the pulse might not be measured accurately, escpially when we are talking about it’s down to the level of micro seconds. This is the reason why ESC calibration is required to sync the oscillators
  2. Electrical noise (voltage spikes) can corrupt analog data – that’s why we sometimes see people suggest running higher motor update rate than PID loops helps flight performance. Because when you repeatedly sending the same value to the motor, it averages out the error and thus increasing precision

With digital protocol, there won’t be any of these problems. It’s exciting to know that ESC calibration will no longer be necessary. Because of the nature of digital signal, which is one’s and zero’s, it will also be much more resistant to electrical noise.

How Fast is DShot?

Options: DShot600, DShot300, DShot150

There are 3 speed options with DShot, the numbers are indication how much data is sent per second.

  • DShot600 – 600,000 bits/Sec
  • DShot300 – 300,000 bits/Sec
  • DShot150 – 150,000 bits/Sec

Calculate Latency

Firstly we need to know how many bits are in a data packet, then divide the speed of the protocol. A DShot data packet consists of a total of 16 bits: 11 bits for throttle value (211 = 2048 steps), 1 bit for telemetry request and 4 bit for CRC checksum (cyclic redundancy check).

For example DShot600 would have a frequency of 600,000/16 = 37500Hz = 37.5KHz, which means it will take about 26.7uS to send a single throttle value from FC to ESC.

Speed Comparison

I have done all the maths for you :) In comparison to the speed of Oneshot125, Oneshot42 and Multishot, we have the following table (assuming signal is at 100% throttle)

  • Oneshot125 – 250 uS
  • DShot150 – 106.7 uS
  • Oneshot42 – 84 uS
  • DShot300 – 53.3 uS
  • DShot600 – 26.7 uS
  • Multishot – 25 uS


The fast transmission speed of DShot will theoretically allow up to 33KHz FC Looptime. (Not as high as 37.5KHz because there needs to be some space between values). Although DShot600 is not quite as fast as Multishot, as long as it’s faster than FC looptime then it’s plenty enough :) With all other advantages we’ve discovered so far, it still out-weights that small speed difference.

What hardware Supports DShot?


Nov 2016 – Currently certain ESC’s that run BLHeli_S firmware will support DShot. Such as Cicada, Racerstar V2, Aikon SEFM, TBS 25A, Lumenier 30A, DYS XS30A, etc. However these ESC’s have speed restriction and only support up to DShot300, some can only run DShot150. According to Steffen Skaug (BLHeli Developer), future ESC’s that use EFM8BB21x chipset will be able to run DShot600.

DShot for BLHeli_S is being developed by BLHeli and Betaflight team, if you would like to know more such as known issues, full list of supported hardware etc, please check here.

Update Feb 2017 – Most ESC’s that just came out of the market would support DShot out of the box, but some older ones might require you to remove a capacitor in order to run D-shot. This capacitor is designed to filter out noise at the input, but because DShot is so high frequency it will get filtered too.


KISS 24A ESC supports DShot with all 3 speed levels, available to choose from in their Chrome GUI configurator (even the highest speed – DShot600).

KISS 24A ESC’s use STM32 processors, our mini quad FC’s also use STM32 MCU‘s. Between these STM32 chips they have something called DMA controller (Direct Memory Access) that communicate directly between them. This allows faster DShot signal as it doesn’t use much additional processing resource that might cause delay.

Requirement For Flight Controller

Looks like only F3, F4 flight controllers can run DShot at the moment. But not every board supports it, check the Betaflight Wiki and find out.

Here is a step by step tutorial setting up DShot on Betaflight.

What else do I need to know?

  • In BLHeliSuite, there is no specific ESC config need to be changed other than flashing firmware
  • PPM_Min and PPM_Max are now disabled for DShot, as the end-points are fixed, and ESC calibration isn’t needed anymore
  • In Betaflight, min_command and max_throttle are ignored with D-Shot
  • digital_idle_percent replaces min_throttle
  • unsynced_motor_output is removed for DShot as it’s no longer needed
  • Between DShot600 and Multishot, I would go for DShot600. However if you can’t run DShot600, but slower protocols such as DShot300 or DShot150, I would personally rather run Multishot. I find the shorter signal pulse width has more noticeable improvement on flight performance

Edits and Updates

  • Update May 2017 – DShot1200, a faster DShot protocol will be available.

Leave a Comment

By using this form, you agree with the storage and handling of your data by this website. Note that all comments are held for moderation before appearing.


Eric Earley 30th August 2023 - 4:48 am

Mr. Albertson, did you ever get an answer about dshot specs. I have the same question, for use in a non aircraft application. I want to know what protocol to use to communicate with the ESC.

ZA 14th April 2022 - 7:09 pm

Hi Guys,
Could anybody help with “600,000/16 = 37500Hz = 37.5KHz. What does it mean ?
Does it mean 37.5kHz is required to transfer 16 bits, a packet ? However 1/37.5kHz=26.6us whichis 1 clockcycle. Doesnt it mean that it sends 1 bit in 26.6us and not a packet of 16bits.
Can it be the baudrate and not bitrate but everybody talks about bitrate and also in that case ( if we talk about DShot600) then a single symbol’s transfer rate cant be 1.66us.
i know i am mixing things up but cant figure whats that.

Jim Kearns 6th January 2022 - 7:13 pm

You forgot about the start and stop bits overhead required to send those 16bits of data.

You Wrote:
“600,000/16 = 37500Hz = 37.5KHz, which means it will take about 26.7uS to send a single throttle value”

Paul Blase 15th June 2021 - 12:30 am

Is there an actual document that describes this protocol somewhere?

Robert Vandiver 12th May 2021 - 2:56 pm

I have been worki g on a heavy camera drone with 380kv motors 40 amp esc would a modern f7 flight controller with all in one esc module work with that big of a motor i just am frustrated with aurd pilot cant get it to work right..

Sam D 29th September 2019 - 6:33 am

Hi guys, am hoping for some help. I want to sue a single current sensing BLheli32 esc and 270kv 5045 motor in a low rpm Electric vehicle. But I need to manually drive it and I realise a servo tester (probably?) can’t do it.
Any hints or ideas for something similar to a servo tester or a nano?

John A Justice 30th April 2019 - 5:06 pm

I have been working on dshot from Arduino to an ESC and can drive it, however, is there no dshot reverse codes?

I.e. i can only rotate the motor one direction. Anyone have a esc firmware with dshot reverse option or know how to get a reverse / forward fast switching esc? my project needs to be able to have (no calibiration) forward and reverse control just like a regular brushed motor would do.

Capt.Chris Harris 7th April 2019 - 5:30 pm

Thank you all for this enlightening conversation.!!!!!

Ondrej Pokorny 19th October 2018 - 1:20 am

How well does the higher resolution translate into the driving voltage for the motors? Don’t the ESCs have an 8bit DAC or something similar, thus not being able to provide the 2048 (or 1000 for that matter) speed steps? (not talking about the frequency resolution of the 3-phase bridges)

Chris Albertson 27th July 2018 - 7:26 pm

Does anyone have a link to the actual specification for DSHOT? I have an idea for using these DSHOT ESCs in a non-aircraft application. I want to try connecting my generic STM32 development board to an ESC to test out some ideas.

I have long experience with real time embedded development but new to RC hobby. The DSHOT idea has wider application to robotics, I think.

I can almost guess at the spec best on the description in the article (11-bits, 1-bit, 4-bit arc) but specs are better

What about the telemetry request bit? What is sent back and how?


Charles Linquist 28th March 2018 - 5:58 pm

I have a bunch of questions.
People talk about analog and digital, but I’m a EE and I still am confused. Do ordinary (1-2mSec) ESCs simply filter the PWM signal with an R/C network and use the resultant analog value, or do they actually measure the pulse width against their internal clock?
I have some DSHOT ESCs, and when I connect them to a servo tester (1-2mSec pulsewidth) output with 20 mSec period, the motor spins but accelerates very slowly and never gets above about 25% of max speed even with 2mSec pulse width.
I thought that the newer ESCs were all backwards-compatible and would work with the “old
scheme. Am I incorrect?
And if all my DSHOT ESCs cannot be used with my flight controller (PixHawk), then would it be possible to flash different firmware into the ESC in order to make it compatible with my Flight Controller? The ESCs use a STF051K6 uC.

Alex 9th April 2018 - 12:21 pm

I have no idea why the author says that PWM is “analogue”. An analog control would be for example a voltage level (0-5V for example) that controls the motor speed.
PWM is a digital protocol as the pulses are either 0 or 1. The only problem with PWM is that that control pulses are repeated at maximum rate of 490Hz

SCOTT MOORE 31st May 2018 - 12:56 pm

A 1.5ms PWM control signal sends the data by how long the pulse is active. A 0% signal is 1ms and a 100% signal is 2ms. Although that is technically a digital signal (high/low), it is considered analogue since it is time based and not numerically driven. The source 1.5ms (50%) might be read as a 1.45ms (45%) if there is noise on the control signal wire or the timing is off on the TX or RX unit.

DSHOT is a true digital data stream not dependent on the pulse width, and it can digitally correct (or ignore) corrupt data with the CRC error correction.

Jim Kearns 25th December 2021 - 7:10 am

Nice explanation ! To offer some further info, the PWM saga started in the old days with a control potentiometer (Throttle stick) with a DC voltage across it. The pot’s wiper was fed into one input of a comparator. The other comparator input was fed with a sawtooth wave. The resultant output was a PWM signal. Pretty simple stuff. So our PWM signal’s pulse width is narrowed or widened, determined by the voltage level on the pot wiper. I think some RC dude with not quite enough knowledge once started calling it an analogue signal and it just stuck.

Michael Lee 31st May 2022 - 3:45 am

Most PWM is generated from digital counters these days – so PWM is most likely numerically generated – gone are the days of monostables based around 555 timers. To be honest – there’s no real advantage to digital control that I can see – after all, is the stick input not analogue? Humans only perceive the world at around 50 Hz – so talk of micro second latency is pure specmanship – you cannot possibly notice it.

gaetan sasseville 11th August 2017 - 4:28 pm

I’m using DYS XSD30A Blheli_S V2 esc’s to Kiss FC and I just need some clarification on DSHOT 600 Ready vs Support protocol. What exactly does it mean do I nead to flash them in order to activate the protocol hardware or not? And if so do I have to flash esc’s individualy with usb linker since Flydriuno does not support FC passthrough.

Adam 2nd August 2017 - 8:12 am

I currently run an F4 board at 8khz (125 µs). If my ESC is capable of DSHOT600, are there benefits to setting the speed to DSHOT600 in Betaflight versus DSHOT150? DSHOT600 (26.7 µs) or DSHOT150 (106.7 µs) are both faster than my board running at 125 µs. Although DSHOT600 will run faster than my FC. Will the ESC just work as fast as the FC allows within the protocols limitations?

Oscar 3rd August 2017 - 3:27 pm

If I couldn’t run DShot 600, I would personally rather run Multishot than DShot150 or DShot300.
I find the shorter signal pulse width has more noticeable benefit to flight performance.

ACG 17th June 2017 - 5:58 am

The one think I dislike about the Hobby industry are the coining of new terms which actually have long since been around. BEC? is just a voltage regulator. OneShot? is like going from 14.4k to 56k baud. List goes on forever.

Still, a nice website!

Narly Software 5th May 2017 - 6:58 pm

OK guys, I’ve been working with real motor speed controllers up to thousands of Horse Power since 1981.. PWM Pulse width modulation is a method of transmitting an analog value across digital medium. PWM relies on only 1s and 0s, True and False, On and Off values. These values are then held within the time domain for interpretation. Example On 1/2 the time Off 1/2 the time translates to 50% of interpreted value.

The issue I’ve read with these circuits is the filter capacitors which are specified to filter out frequencies above the system’s working frequencies. Moving to DShot means the working frequencies will be higher. Therefore the existing capacitors would filter the actual signal. The microprocessors on these ESCs simply need different programming to interpret the new protocol.

This is like a mechanical engineer calling a DC armature a rotor and and a electrical engineer calling it an armature.. At some level the debate will depend on the background of who you are communicating with.

frik 7th June 2017 - 11:56 am

I have noticed many people in RC comunity are using wrong terms, speaking about Analog vs. Digital.

It’s simple: If value is subject to Quantization process so it’s digital value. And pulse width of PWM generated by MCU Timer is quantized value according to PLL freq used for the timer peripheral.

Mixa 18th April 2017 - 9:25 pm

So, there is no active braking in Dshot, right?

Oscar 26th April 2017 - 8:57 pm

No, DShot doesn’t affect Active Braking.
Active Braking is on by default in BLHeli_S, and you cannot turn it off.

Tom Talley 15th March 2017 - 1:16 pm

PWM sends a pulse of some duration which the receiver has to attempt to measure…It is one pulse…To detect the duration of that pulse is a challenge. DShot numbers come in a string of pulses of known widths at a known time…Detecting the value being sent by DShot is just detecting the number the pulse string represents. A much easier task. While PWM is a digital signal, the duration of the pulse is an analog measurement. You are both right.

Ken Craft 24th February 2017 - 5:57 am

Dear Sir,
Does Dshot600 work in Spektrum DSMX?

Oscar 28th February 2017 - 1:48 pm

DShot is an ESC protocol has nothing to do with radio..

Martin Budden 13th November 2016 - 6:45 pm

Mr Who asks: “But I still don’t understand why they have to reinvent the wheel. There are many possibilities to speak to electronic sensors/actors like SPI, I2C, UART, CAN…. So why DShot? Perhaps its easier to implement DShot in standard ESCs?”

One of the criteria was that it would work with existing ESCs. So that rules out SPI and I2C, since the connections aren’t easily available on standard ESCs. They also require more wires – who wants to connect up a bunch of wires to their ESCs? CAN is also not really suitable, since it would require require additional tranceivers on the ESCs (there are other reasons as well). All these ideas were discussed. See here for Felix’s comment on CAN bus https://github.com/betaflight/betaflight/pull/1282#issuecomment-252484173 and see other parts of that thread for discussion about other possible implementations.

DSHOT works with many existing ESCs, so many people can try it without buying new ESCs. And if they don’t like it they can go back to whatever they were using before.

Note also that DSHOT is currently alpha pre-release software, with all the risks that entails.

TFM 9th November 2016 - 2:46 pm

This is an excellent article, thank you for the information.
Question: You mention a resolution of 2048 steps. Will this be used in reality? Doesn’t the FC still communicate 1000 steps, or does this rather mean that the PID loop can come up with throttle values that have a much higher resolution than 1000 steps, making the protocol the limiting factor?

Oscar 15th November 2016 - 5:56 pm

yes, RX talk to FC in 1000 steps, but FC can talk to ESC in higher resolution.

Jan 23rd November 2016 - 4:44 am

I think what he meant by 2048 steps is that the throttle value or resolution will have a possible value of 0-2047.

00000000000 = 0 Minimum or no throttle
11111111110= 1023 Mid throttle
11111111111=2047 Maximum throttle

Throttle here also means the amount of throttle that will fed to each motor (don’t get confused with the throttle applied to the quad together with the pitch, yaw, and roll)

edison 30th November 2016 - 3:24 am

Last 4bit how is calculated?

Michael Lee 31st May 2022 - 3:52 am

I don’t think this is correct –

11111111110= 1023 Mid throttle
11111111111=2047 Maximum throttle

A single bit error in the LSB would create an instantaneous jump of half the throttle range – that would be a very poorly designed protocol – I would think that using a gray code would be more suitable.

Michael Lee 31st May 2022 - 3:48 am

Most PWM is generated from digital counters these days – so PWM is most likely numerically generated – gone are the days of monostables based around 555 timers. To be honest – there’s no real advantage to digital control that I can see – after all, is the stick input not analogue? Humans only perceive the world at around 50 Hz – so talk of micro second latency is pure specmanship – you cannot possibly notice it.

Brian 9th November 2016 - 10:10 am

Just a question, you said that PWM (FC to ESC), Oneshot125, and OneShot42 are Analogue signals. How did you came up with this conclusion when in fact they are all digital signals. The fact that the signalling is based from logic 1 and logic 0 makes them digital even if the timing is based on the length (or time domain) of electrical pulses or other sources. Also, pulses being fed to ESCs come from the flight controller so there is absolutely no way it is in analog (unless an DAC is explicitly used). I may be wrong but this is simply different from what i know of DSP.

Again, I maybe wrong or the term “analog” was used in a different context so please enlighten me.

Oscar 9th November 2016 - 10:47 am

Apple flavoured water is still water, doesn’t make it apple juice :) PWM is a analogue signal that is encoded in digital form but has a varying pulse width, so indeed it does possess some properties of digital signal, but in our context (compared to DShot) it is an analog signal.
And try to call Oneshot “DShot” LOL

MiserWho 9th November 2016 - 9:32 pm

I have to agree with Brian. PWM is digital. It only consist of 1 and 0. An analog signal has something in between. When I got your article right the new thing about DShot is that you use some kind of protocol where you actually transfer data and don’t have to measure the time between the 1s and 0s. I like the idea to use a protocol to speak to the ESCs.

But I still don’t understand why they have to reinvent the wheel. There are many possibilities to speak to electronic sensors/actors like SPI, I2C, UART, CAN…. So why DShot? Perhaps its easier to implement DShot in standard ESCs?


Linus Bui 18th November 2016 - 1:10 am

Wrong. PWM signals are analog. Analog or digital is not about the waveform, it is about what aspect is used to encode the data. PWM signal uses the ‘width’ of the waveform to represent values, longer the width, higher the value. true digital signal uses just binary system to represent values, no other physical characteristic of the signal matters except for on/off status. Saying PWM signal is digital is like saying Morse code is digital. They are all analog as a physical characteristic of the waveform is used to determine the value.

Michael Lee 31st May 2022 - 3:57 am

PWM signals are discrete – the width of the pulse caries the information. A pulse can be generated by analogue (a 555 timer for example) or numerical (digital logic) methods. Can we stop arguing now? ;-)

Tim Eckel 22nd November 2016 - 10:22 pm

Sorry, PWM is digital. An analog signal would be like some RX with RSSI that supply a 0 to 3.3v output. An ADC will read the analog value and turn that into a number. While PWM is the length of being on or off, it’s strictly digital. It’s 100% wrong to say that PWM is analog, it’s 100% digital.

The reason DShot works better is because of the checksum, not because it’s more digital than PWM or Oneshot. If DShot was just sending a digital signal without the checksum, it would have errors just like PWM or an analog signal from interference. And, it would have a higher chance of errors as those on and offs are happening quicker. This is why Oneshot42 has more problems than Oneshot125.

Benik3 26th February 2017 - 10:51 am

As Oscar said, OneShot is analogue, because it measure the length of signal, it doesn’t interprets the low and high voltage level as digital bits!
On the other hands, dshot doesn’t care about how the signal looks (how long it take…) but it looks only if it’s high or low and then translate it to bit’s and put together to message…

Ranulf 10th November 2016 - 7:13 pm

Interesting to read about this… I was just thinking the other day about modifying BLHeli to receive data over a soft UART which would achieve much the same result.

Regarding Brian’s question about analogue, the ESC protocol very much is analogue.

The signal might be communicated as a a pair of transitions between 0 and 1 as far as both CPUs are concerned, but it’s not the value that matters, it’s the time period between them and that is analogue. It is very unlikely that the ESC will receive the same value that the FC sent. Sure, you can approximately repeat the same time duration on the FC by sending the same value, but actually that duration might well not be the same due as the clock frequency of the crystal could be slightly different depending on slight changes to temperature, parasitic capacitance or even vibrations. Even the length and type of the signal wire to the ESC can affect the rise and fall rate of the ANALOGUE voltage and so change the apparent duration of the signal.

What is almost certain, however, is that the clock speed of the receiving ESC will be slightly different to the FC, and this will lead the same period of time being interpreted differently to what the FC sent. The main challenge of any communication system is making sure that there is some way of synchronising the receiver to the sender. For instance, with RS232 communication, you sychnronise by watching out for the start bit, wait half the duration you expect a bit to last, and then sample the bits you want at the sample rate, so that you’re reading the signal at approximately the middle of the bit each time.

This is why you will typically have a PWM value below which you consider it at minimum value and another above which you consider it maximum. If you have a transmitter that can display the values it’s sending, e.g. a Taranis, you can see the PWM values it thinks it’s sending and then look at the values CF has received (look in the recceiver tab) and they’ll be different.

This is the problem DShot aims to solve. With digital, it’s simple: 0 is off, 2047 is maximum. There’s absolutely no ambiguity.

ADI8421 23rd April 2018 - 12:34 am

This is my first time here. I’ve been involved in electronics hardware and in later years, firmware, for over 50 years now. I started writing brushless ESC code in assembly language from the ground up about 10 years ago and interfacing to ESC using a pseudo 16bit SPI interface (2 x 8bit) with 1Khz update rate.
I do have to question the use of the term analogue when describing PWM though.
I’ve noticed over the years that even this term itself has been misused and used in place of the correct term PPM (pulse position modulation) when referring to servo or ESC input interfacing.
I prefer the original terms PPM for the input control to a servo or ESC and PWM for the ESC’s internal mosfet switching speed control. This leaves no doubt as to what you’re talking about. Using the one term PWM only, to describe both, creates confusion. It reminds me of the misuse of the term ‘analogue’ when describing the old rotary
dial phones. The misuse here is the fact that these old phones were actually digital dialing systems and the push button phones of today are in fact the analogue tone dialing sytems. Not the other way around. The reason for the wrong use of technical terms is because non engineering people get hold of these terms and change them to suit their ignorance.
A really good example of this is the use of the term ‘hard drive’ which no longer refers to an actual 1TB Samsung hard drive but a whole damn desktop computer. WTF is that about ? Well some admin lady somewhere thought it would be a good idea to change the meaning.
Don’t start me on the new terminolgy for a quadcopter ie. ‘DRONE’ WTF again ?
Back to PWM or PPM: The information which you wish to convey using this signaling system is simply determined by the width of the pulse. How you determine what this pulse width means to you, is in fact up to you.
1ms to 2ms pulse might be translated into an analogue voltage of 0 to 5 volts or whatever you like. It could be interpreted as a 0 to 255 8bit digital value or even a 0 to 65535 16bit value. 16bit resolution of course would be very poor due to jitter problems. My point is, it can be what ever you want it to be.
So the author here has chosen to use the term analogue. This is what it means to him and I’ll give him the of benefit the doubt though, as he makes up for it in his wealth of knowledge in ESC technology. By calling PWM analogue, I do think he is trying to differentiate between a purely N-bits serial digital signal and an historic pulse width analogue of the information to be conveyed type signal.

Oscar 23rd April 2018 - 4:53 pm

I appreciate your comment. And indeed I am trying to draw a line between traditional ESC protocol, e.g. PWM and Oneshot and the latest DShot protocol. And you are right, this same topics has been discussed a million times outside of the quadcopter hobby I am sure, it all depends on what angle you look at it :)

Jim 3rd January 2023 - 7:22 pm

I’m a little late to this party, but I do have a Dshot question.
Is there any reason to ever choose a lower Dshot protocol other than hardware limitations?

Oscar 4th January 2023 - 6:54 am

Just follow Betaflight Dev’s recommendations: 2K looptime => DShot150. 4K => Dshot300. 8K =>DShot600.