Overview of ESC Firmware and Protocols: How Flight Controllers and ESCs Communicate

by Oscar

There are several Electronic Speed Controller (ESC) firmware and protocols that can be confusing for those new to the FPV drone hobby. This guide aims to provide a brief history, break down technical nuances, and clear the common confusion often faced by beginners.

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.

For a comprehensive guide on selecting the right ESC for your FPV drone, check out https://oscarliang.com/esc/.

ESC Firmware

Firmware is the backbone of any ESC; it’s the software that breathes life into these components, determining the range of settings you can tweak, the protocols it can communicate with, and the interface you’ll use to configure it. Each ESC firmware is only compatible to certain hardware.

Here is a list of the ESC firmware available for FPV drones and their release years:

In the early days of FPV drones, SimonK and BLHeli were the go-to open-source firmware for ESCs. By 2015, BLHeli had become the gold standard, largely due to its expansive hardware compatibility, feature richness, user-friendly interface, and continuous updates. Game-changing features such as Active Braking was pivotal, enhancing the responsiveness of the drones significantly.

2016 saw the introduction of BLHeli_S, which was an upgrade to the original BLHeli firmware to support the newer BusyBee processors (BB1 & BB2 chips). This upgrade introduced new technologies such as the DShot protocol, which revolutionized ESC performance.

In 2017, the 3rd generation of BLHeli – BLHeli_32 was created to take full advantage of the powerful 32-bit processors in ESCs, unlocking possibilities that 8-bit predecessors couldn’t handle. It brought to the table features like ESC Telemetry, customizable startup tones, and support for higher PWM frequencies.

Typically, an ESC will arrive with firmware pre-installed, and this detail should be clearly stated in the product’s description. Usually, it’s either BLHeli_S or BLHeli_32, depending on the ESC’s hardware.

For those with BLHeli_S ESCs, consider switching to Bluejay firmware. It unlocks features traditionally exclusive to BLHeli_32, like bi-directional DShot and custom startup tones, elevating performance to rival its more advanced counterparts. While alternatives like JESC and BLHeli_M (JazzMaverick) existed, their development seems to have stopped and become obsolete.

In 2020, AM32 was released. It’s a open source firmware that could be the BLHeli_32 alternative. We’re seeing some of the latest ESCs shipped with AM32 out of the box. Learn more about AM32 here: https://oscarliang.com/am32-esc-firmware-an-open-source-alternative-to-blheli32/

ESC Protocols

Think of ESC protocols as the languages through which the flight controller communicates with the ESC, dictating the speed at which the motors should spin.

Here are the ESC protocols available for FPV drones, especially when running Betaflight firmware, and break down their signal timings which is basically the time it takes to send one data packet:

ESC Protocol Speed

ESC Protocol Speed

Below is a more detailed look at the signal widths and update rates:

ESC Protocol Signal Width Lowest Update Rate
PWM 1000-2000us 0.5KHz
OneShot125 125-250us 4KHz
OneShot42 42-84us 11.9KHz
MultiShot 5-25us 40KHz
DShot150 106.7us 9.4KHz
DShot300 53.3us 18.8KHz
DShot600 26.7us 37.5KHz
DShot1200 13.3us 75.2KHz
DShot2400 6.7us 149.3KHz

Back in 2014, standard PWM was the only available ESC protocol, but as ESC hardware evolved, faster options like Oneshot and Multishot were introduced. These protocols are similar to PWM, but with much shorter signal width, they have much lower latency. Also they were designed to sync with the flight controller’s PID loop, enhancing performance by reducing jitter and delay in response to control inputs.

DShot is the latest ESC protocol and is distinct as a digital signal, contrasting with the analog nature of all other ESC protocols. It’s a step forward for ESC communication, offering improved reliability and performance. With DShot, you can transmit not just motor speeds, but specific commands to the ESCs. Bi-directional DShot even allows for two-way communication between ESC and flight controller, enabling advanced features like RPM Filtering and Dynamic Idle by transmitting motor RPM data back to the FC.

There are several DShot speeds you can pick, from DShot150 to DShot2400. Larger numbers mean higher speeds, which offer reduced latency, yet they’re not inherently superior due to an increased risk of data corruption and higher CPU load. Betaflight recommends choosing a DShot speed appropriate to your PID loop frequency; going overboard won’t necessarily enhance your flying experience.

  • 2K PID Loop Frequency, DShot150.
  • 4K PID Loop Frequency, DShot300.
  • 8K PID Loop Frequency, DShot600.
  • DShot1200 and DShot2400 are currently not used in Betaflight.

Realistically, the latency differences between different DShot speeds are in microseconds, so the impact on performance is probably minimal. The potential for packet corruption at higher speeds might pose a more significant issue.

I hope this overview of the ESC firmware and protocols is helpful. If you have questions or need clarification, feel free to drop a comment.

Edit History

  • July 2017 – Article created
  • Oct 2022 – Added Bluejay/AM32, updated DShot recommendation
  • Nov 2023 – Updated article

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.


Speedymee 17th March 2024 - 4:05 pm

Is there a reason AM32 when starting tones moters but when I try to use it as a beeper on my quad. It will not beep or tone?

Abi64 29th July 2023 - 4:11 am

I’m coming from robotics background, honestly to me these protocols doesn’t make any sense! when there are already I2C, I3C, Can bus and … with lots of HW and products supporting them why should we create a new protocol? Hobby community has inherited lots of protocols and electronics which belong to a time where there was no microcontroller or low cost computer!

Arthur 10th January 2023 - 8:08 am

Hi Oscar,
My nazgul5 v2 runs at 3,2k, but by default the motor protocol is dshot600.

Looking at you table above, i should run dshot300. Is there something i overlook?

Kind regards,


Oscar 10th January 2023 - 11:16 am

Yea you should be running DShot300.

Kristian 28th November 2022 - 9:18 pm

Hello … quick question.

It seams that i have a ESC that failed manufacturer activation , is it fixable ?

Thank you :D

Oscar 29th November 2022 - 12:07 am

what ESC? which software you using for activation?

Darryl White 28th October 2022 - 6:54 pm

Hi Oscar, I’m not an expert on esc”s but I am having a problem. Before I assemble the several builds I’ve made I do a “dry run ” with the stack,receiver, and the motors I plan to use all hooked up to betaflight Before I put them into the frame to work out a “bugs ” before “surgery “. I recently purchased 2 spare skystars 4 in 1 esc’s that were listed as identical to the stacks I ‘ve always bought together. I used the NEW esc with a year old skystars FC F722HD,connected to betaflight, erased and re-flashed and re-programmed every parameter and got all the proper “musical tones “, HOWEVER, when I disconnect and power up I get 2 immediate “all ok musical tones ” in succession. I’m afraid to continue the build for fear it might take off and fly to the moon ! DO you think this double ” OK TONE ” indicates that I used a BLHELI S esc instead of a BLHELI_32 or just some other error ? Skystars did not indicate if this spare esc was BLHELI S or BLHELI_32 so I tried to use your tutorial on “FC pass thru esc flashing ” to try and determine this but got a error that the com port won’t open. When I power the set-up WHILE CONNECTED to betaflight I get the proper 1″ all ok musical tone” but when I disconnect and power-up I get the DOUBLE ” all ok musical tone “. DO you have any suggestions ? Thanks, Darryl

Speedymee 17th March 2024 - 4:08 pm

My am32 does that and it came with a skystars stack.

timucin demiralp 10th October 2022 - 8:50 am

I am always using Multishot with my 7 inch with INAV 5.1. It is very smooth and works great for me. I have 3questions.
1-What is the PID loop frequency for Multishot?
2-Is there any benefit having H7 or F7 over F4 if you are using only with Multishot?
3-Am I missing any critical feature with Multishot?

Brahadeeswar Radhakrishna 23rd September 2021 - 2:53 pm

Flashed my esc with wrong firmware..how to revert it back as iam not aware of orginal firmware.motor not spining but there is beep sound..pls do help

RONALD KENNEDY 16th July 2021 - 4:21 pm

This is My First build using HobbyWing 60amp 4 in 1 esc that supposed to support all these protocols My build is strickly a iNav system to fly around and stop circle and take video’s etc i’m asking your opinion cause i can’t find it anywhere that suggests what D-Shot i should use to have for this 10in build using 880kv motors, I have only Flew arducopter stuff this is all new to me I’m Lost. Thankyou. R.K

mertz ( mertz ) Nicolas 8th July 2021 - 1:39 pm

bonjour , je suis occupé a me monter un quad avec une T-MOTOR F722 mais je ne sais pas quel protocole je dois sélectionné sur betaflight
d’avance merci pour votre aide

Sean Andreas 12th July 2020 - 7:10 pm

Hey there, maybe you can help me. I have a Diatone mamba f411nano stack. The esc firmware says bl_heli suite. My question is can I use bl_heli configurator to flash my ESCs. Or do I need bl heli suite? I’ve been trying with the appropriate dshot protocols in beta flight I’ve also tested a few other protocols and bl heli version updates. I’ve tested the ESCs with a multimeter to make sure they’re not bad. But only motor 1 starts up spinning when armed. The other three motors just twitch and then the drone beeps and the motors stop. Same thing in beta flight motors tab. Could this be because I’m not using bl_heli Suite? Any help would appreciated.

Oscar 12th July 2020 - 11:29 pm

Yes, BLHeli Configurator still works on BLHeli_S ESC.
Have you tried other protocols? Like Oneshot? You can try flashing an older firmware version see if that fixes it.
Note that BLHeli_S only supports DShot600, if you use Bidirectional DShot, use DShot300.

Jesse 2nd September 2022 - 5:44 am

Awesome info. I have the Aio F4 1S spi rx 5 amp brushless FC and broke two motors in10 batteries one the same ESC… Anything obvious would cause that? Thanks in advance

Mike Miller 30th June 2020 - 6:30 pm

Hello, I have an esc that is set to Oneshot125, but is Dshot capable. How do you actually change the input protocol of the esc?


Oscar 4th July 2020 - 3:39 pm

You can do that in Betaflight Configuration tab, you can select ESC protocol you want to use. Your ESC will detect it automatically so no change is required on the ESC side.

Edu 20th January 2020 - 2:28 pm

Hello. You could tell me if I can use together 4 esc dji 420S 20A and 2 simonk 30A with my Naza V2? Thanks a lot. You have a very interesting website.

Saijin_Naib 17th January 2020 - 9:05 pm


Do you think/know of any concrete improvements in ESC performance from roughly 2011-era SimonK to latest BLHeli 14.9 (2016)?

I’m trying to collect information about possibly cross-flashing/updating a legacy ESC that is still deployed fairly wide.

Thanks for all your incredible information!

BRIGZY FPV 11th January 2020 - 9:50 pm

Thanks for your info, very helpful, always!

I just wanted to flash and set my motor direction on my GT R349 HD quads, I just put a brand new ESC in my older one, stupidly I went out and tested it LOS and it went bezerk. I didn’t stop to think the ESC needed setting up but obviously it did. All my motors were turning clockwise, I have flashed all ESC’s & changed motors 2 and 3 to reversed and flew it LOS and all good. My question is, why would I use “BLHELI Suite” rather than just the “BLHELI 1.2” program I just installed? It appears to be a very basic version but does everything I need. Should I be using the “Suite Version”? Sorry, a bit confused.

Thx Brigzy FPV.

Oscar 13th January 2020 - 4:42 pm

BLHeli is the name of the firwmare, and BLHeliSuite is the name of the configurator…
1.2 is a very old version indeed, but if that works for you then there is no need to update, let alone the old hardware might not support the new firmware anyway.

curt bixel 25th November 2019 - 12:18 am


Thanks for your responses above.

As far as the “Tank Drive” question, tank drive just means that the combat robot has two wheels, and to pivot left, you put the left wheel in reverse and the right wheel in forward. To go forward, you just run both wheels forward.

I am curious why one side always seems more powerful than the other.

On another note, we are finding that with our weapon, which is 5 pounds of steel spinning at 4000 rpm, the braking or the
“damped mode” is causing a regenerated current that is damaging our speed controllers. The wires come unsoldered and components have melted free from the board. As long as we are careful to allow the weapon to spin down by itself, the ESC handles things quite well. But, making sure students reduce throttle from 100% to a much lower percentage, without ever hitting zero, or going to negative throttle, risks our ESC’s.

Do you have a suggestion for a workaround using the Flycolor X-cross 50 amp? I have tried to put it in “normal” mode as far as motor direction, but for some reason, the system will not work in this configuration. The motor just beeps, even though it is not yet attached to the weapon.

Finally, is there another speed controller you might suggest that is small, can handle 50 amps, and can be set so as to not try to slow the weapon down with braking or with damping?

curt bixel 10th November 2019 - 4:52 pm


We are using the Flycolor X-cross 50 amp ESC’s for combat robotics. They are small, very reliable, and seem to be able to handle well in excess of 50 amps. We are using BLHeliSuite32 and configure our ESC’s using the interface available for the Macintosh computer. I have a few questions I have not really been able to answer after a few hours of researching on the internet. Would you be able to answer any of these?

One – How do I know if I am using MultiShot, DShot, or something else? I can’t really see any way to tell by looking through the menu’s on BLHeliSuite.

Two – Is there any way to do current limiting with the FlyColor ESC and BLHeli?

Three – We usually use “Tank Drive” and almost without fail, one side is more powerful than the other. Is there any way to adjust the power by working with the settings on the ESC? I can see “ramp up power” and “maximum” acceleration, but neither of these seem to be designed to do what I am trying to do.

Four – We have “braking” turned off, but the motor is still clearly doing some braking. Any suggestions there?

We are using an Arduino Nano and a USB cable as an interface with the Arduino 4-way interface.

Oscar 18th November 2019 - 6:25 pm

1. it’s a BLHeli_32 ESC right? if so it should support DShot and Multishot
2. If it has a current sensor then yes, if not then you can’t; setting in BLHeliSuite_32
3. not sure what you mean by tank drive
4. you can’t turn off “active braking” on BLHeli32 ESC

Brian Evans 4th July 2019 - 11:50 am

Hi Oscar
How to flash updated firmware onto an ESC?
I just used the default one which was 40-H and now my motors are acting strangely (spinning very fast at zero throttle).
My ESC is Mamba 4-in1 F40 40A ESC.
Any advice is greatly appreciated!

Oscar 15th July 2019 - 4:40 pm Reply
Frantisek Dvorak 19th June 2019 - 10:59 pm

Luis Inciarte

I was trying to make Naze32 passthrough work for 2 days – and I made it to work.

Way how I did it:
– FC downgraded to BF 3.1.7
– enabled softserial passthrough in BF configurator, enabled the softserial in ports tab
– newest BLheli – silabs blheli bootloader (cleanflight)
– done

It is possible that with enabled softserial passthrough it will work even in newer BF

John Gatza 1st April 2019 - 12:17 am

Hello Oscar – excellent writeup on escs and control protocol. Thank you.

I’m building a quadcopter with Pixhawk 4 and I used airbot wraith 32 v2 escs since they seem to have the latest feature capability.

Thinking Pixhawk 4 was also latest technology I figured this would work but I’m having trouble.

I can program the eSC non pass through but cannot get the motors to move….using qgroundcontrol and mission planner. All else works and I’m disarmed. Any thoughts?

Are these ESCs compatible with my Pixhawk 4? Thanks again.

Luis Inciarte 21st May 2018 - 4:08 am

Helllo sir,

I would like to have your suggestion about an issue that I am having to connect my ESCs using BLHeliSuite/BLHeliSuite32. The program is not reading my ESCs. Here is the info:

ESC = Thriverline Acrotor BLHeli-32 ESC 30A 32Bit Brushless ESC Support 2-4S Dshot1200 (30A)
FC = Readytosky Naze32 Rev6 Full Version loaded with Firmware CL V2.3.2
Motors = EMAX RS2205S 2600KV Brushless Motor

I just want to reverse 2 of the motors from CW to CCW.

Thanks in advance

Oscar 22nd May 2018 - 3:23 pm

I don’t think F1 flight cotnrollers (Naze32) supports ESC passthrough connection.
You will need at least an F3 FC, and flash it with the latest Betaflight firmware.
To reverse motors roation, just swap two of the wires.

Marcos Santana 1st November 2018 - 3:50 am

Hello Oscar

Can I operate a ESC with BLHeli with Oneshot125 protocol with a simple PWM? I want the options that BLHeli suit have but I will use a controller that doesn´t have Oneshot125 protocol. (Is not a racing drone)

Oscar 6th November 2018 - 12:58 pm

Yes of course.

Peter 14th May 2018 - 11:44 pm

Hi Oscar. If I am trying to get a quadcopter-like design to work along with 4 servos, should I then use PWM so that there are no timer conflicts on my F3 flight controller?

Sergio 13th April 2018 - 11:37 pm

Hello Oscar,
I’m curious if you may know what the control interface used in Hobbyking YEP 120A-HV ESC? I’ve purchased this controller from Hobbyking and it came without any documentation. The type of interface is also not mentioned in the description available for this controller. It is only noted that it has an optocoupler on its input. I woud greatly appreciate if you can share any information available on this unit.

Thanks and Regards,

Tyler 6th December 2017 - 6:32 am

How do I identify what protocol my esc are using? I’ve upgraded my FC to a Kiss. But I don’t know what protocol to use for the ESC mode.

Oscar 12th December 2017 - 1:49 pm

You can set the protocol in your FC software, so you should be able to tell from there.
As to what protocol your ESC can support, you have to look it up from the product specification.

Sange 13th August 2017 - 4:21 pm

I have a question that
I just updated my Kingkong 12Amp BlHeli ESCs to the latest 14.9 firmware.
Now will I be able to use the dshot or multishot or even oneshot42? Because I am using oneshot125 right now (I think, because I didn’t see much difference between oneshot enabled and disabled).

Stefan Wilkens 23rd July 2017 - 9:59 am

A new addition is showing up here, ProShot which sends hex data over three pulses with an added crc. The total package is shorter than dshot, longer pulses allow for caps to reduce noise.


Support is being built in to beta flight

Oscar 24th July 2017 - 9:38 pm

Thanks, yea we’ve just covered that in our latest blog post :)

Simon Kirby 12th July 2017 - 2:38 am

You can run SimonK at 64kHz if you’d like. Just change RCP_ALIAS_SHIFT such that it fits whatever timing you want. I tested it up to 256kHz PWM, and it worked.

Saijin_Naib 8th September 2017 - 5:50 pm

The SimonK? Nice to meet you, and thanks for your years of hard work!

If I may bother you, I’m wondering if there is any value in updating the firmware/bootloader on the 3DR Solo ESCs to your latest SimonK firmware build and enabling OneShot125 on them, possibly with active braking (unless that will cause more of an electrical issue on the Solo!) I don’t think it will fix the ground lift/bounce problem the ESCs have, but I’m just curious what your take is on it (if you have one). 3DR forked your firmware back in 2015 or so, so I know you’d made fixes/advances/changes since then, and from what I’m reading, the 3DR FC firmware has a slew rate limiter in place to prevent the ground bounce to some level. I’m not sure if faster/more accurate/synced signaling would prevent the signal from getting interrupted. (I’m also not knowledgeable enough in this material to fully understand, just pulling info together).

I’m planning on doing the flash as soon as I can figure out a harness to connect to the 3DR ESCs, but any advice/thoughts are always more than welcome!