What is DShot ESC Protocol

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

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

esc-protocol-speed-comparison-hz

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?

BLHeli_S ESC

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 ESC

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.

29 thoughts on “What is DShot ESC Protocol

  1. Chris Albertson

    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?

    Thanks

    Reply
  2. Charles Linquist

    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.

    Reply
    1. Alex

      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

      Reply
      1. SCOTT MOORE

        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.

  3. gaetan sasseville

    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.

    Reply
  4. Adam

    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?

    Reply
    1. Oscar Post author

      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.

      Reply
  5. ACG

    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!

    Reply
  6. Narly Software

    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.

    Reply
    1. frik

      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.

      Reply
  7. Tom Talley

    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.

    Reply
  8. Martin Budden

    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.

    Reply
  9. TFM

    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?

    Reply
    1. Jan

      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)

      Reply
  10. Brian

    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.

    Reply
    1. Oscar Post author

      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

      Reply
      1. MiserWho

        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?

        MisterWho

      2. Linus Bui

        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.

      3. Tim Eckel

        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.

      4. Benik3

        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…

    2. Ranulf

      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.

      Reply
      1. ADI8421

        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.

      2. Oscar Post author

        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 :)

Leave a Reply

Your email address will not be published. Required fields are marked *

Are you Robot? *

I only check blog comments once or twice a week, if you want a quick reply you can post your question on this forum IntoFPV.com... You might get a faster response from me there (multirotor related only).