Jul 182012
 July 18, 2012  Posted by  Add comments

BLHeli Firmware for Multicopters

In response to the many new ESCs that contain SiLabs chips, the BLHeli ESC firmware has been rewritten by Steffen Skaug for SiLabs chips. Thanks Steffen for all your hard work! Although it’s named BLHeli, it has had has support for multirotor applications since rev5.0. This post describes the process I used to flash my SiLabs ESCs with great results. However, this firmware is new and this process should only be attempted by advanced hobbyists who realize an ESC may become unusable if it fails.

The stock firmware that is loaded on most off the self ESCs is not designed for multicopters. That firwmare typically averages speed changes that are sent to the motors. Multicopters perform better when immediate unaveraged speed changes are sent to the motors from the ESC and that is a simplified explanation of what the BLHeli firmware does.

ESCs with Atmega processors are flashable with similar firmware written by SimonK, a procedure that is outlined here. However, many ESC manufacturers use SiLabs processors and the SimonK firmware will not work on them. The BLHeli firwmare is desgigned to run on SiLabs ESCs. Interestingly, depending the version of a particular ESC, it may have either processor. For instance, older Turnigy Plush ESCs used Atmega and now use SiLabs.

Warning – It is possible to ruin an ESC when attempting this process. Also, the factory installed flash is overwritten.
Update: BLHeli rev8.0 with more features and supported ESCs! sskaug on RCG:

The changes are focused towards multirotor performance:
- Added a 2 second delay after power up, to wait for receiver initialization
- Added a programming option for disabling low voltage limit, and made it default for MULTI
- Added programable demag compensation, using the concept of SimonK
- Improved robustness against noisy input signal
- Refined direct startup
- Removed voltage compensation
- Miscellaneous other changes

And a lot of escs have been added:
- RCTimer 6A ESC / RCX 6A
- Turnigy AE45 ESC
- Turnigy Plush 40/60/80A
- Origin/Oversky/HK ESCs
- Hobbywing Skywalker 40A sbec

Continue reading to see the details of how I flashed my ESCs…

Choosing ESCs to Flash

So far the following are the only SiLabs ESCs that are BLHeli compatible. Also, see “BLHeli supported SiLabs ESCs.pdf” for more indivdual info by sskuag.

  • Turnigy Plush 6/10/12/18/25/30/40/60/80A
  • Turnigy AE 20/25/30/45A (All N-Fet design aka it runs cooler)
  • DP 3A
  • XP 3/7/7 Fast/12/18/25A
  • SuperMicro 3.5A
  • Origin 10A/Double (use XP 7 firmware)
  • Skywalker 20/40A/40A Ubec
  • HiModel Cool 22/33/41A
  • RC Timer 6A

See the video at the bottom this post demonstration. I think you will see that the results I achieved made it well worth the time. Many other ESCs have SiLabs chips, but they aren’t supported quite yet (most ESCs that are used in multirotor applications are, i think).

Programming Tools

SiLabs ESCs need a SiLabs Toolstick programmer to be flashed. For more advanced hobbyists, there is the Arduino Silabs programmer that can do the same as the Toolstick, but it requires more knowledge to setup.

Programming Pads and Pinouts

Below, is what a Plush 6A ESC looks like without the heat shrink.

(More pinouts are pictured at the bottom of this post)

As you can see in the previous picture, there are three pins to connect to: Gnd (black), C2CK (red), and C2D (white). To connect to these pads, I soldered on wires and put a male header peaking out of the heat shrink. This gave me solid connections and made it so i could easily reflash firmware, but requires a bit more soldering experience to get onto those pads. This way I simply plugged in a female header to the male header of the ESC and plugged it into the programmer.

If you have an ESC with a Silabs chip, but can’t find a picture online that shows where the pins are, you can look at the SiLabs chip on the ESC and read off the numbers (with a magnifying glass, of course!) and find the data sheet on Google. Then, you can trace the pins from the SiLabs chip to their break out pads.

Building the Flashing Rig

I used the following:

  • 25AWG etc small solid wire
  • Adjustable temp soldering iron
  • Patience!
  • Wire strippers
  • 3 pin female/male headers

Soldering Directly to the Pads

First, I took off about a 1/8″ of the wire casing on one side and 1/16″ on the other, for all three of the needed wires (Gnd, C2CK, and C2D). The longer side is for the male 3 pin header and the short side is for the ESC solder pads. I tinned the end of short side of the wires and the pads on the ESC. One at a time, I placed the short end of the wire onto the pad and add some solder to connect the two. I used an adjustable temp soldering iron. This is needed so that the pads don’t break off from too much heat. Finally, I soldered the longer ends of the wires to a male headers that will stick out of the ESC somewhere that is visible, but secured with heat shrink and not subject to too much damage.

Alternative Soldering Points

Because the soldering pads are so close together, I found it easier to use other points on the ESC to solder my wires. I used the continuity function of my Digital Multimeter to find where these connections were available. See the image below that shows a 18A Plush ESC with these alternative connections. This can be done for any ESC.

This also shows 3.3v (green), but it is not needed for programming.

The image below is my ESC before the heat shrink was redone:

* A clothespin flashing rig, similiar to the one used in the SimonK post, could also work. A disadvantage to that approach is that it requires removing the heat shrink and struggling to connect to the pads each time the ESC is reflashed. The above method easily handles new firmware releases. Connecting the headers is all that is required to connect to the ESC.

Flashing the ESCs

Remember, to flash the ESC, a Toolstick programmer(simpler, but more expensive) or an Arduino programmer(cheap for some people, but more complicated) can be used. I used the Arduino programmer because I already had all of the required components. You should remove the props for safety, and could also limit the current that goes to the ESC so that a bad flash cant ruin the ESC.

Option 1 – Flashing with the SiLabs Toolstick

Hardware needs:

  • Toolstick Adapter(here)
  • More wire
  • Soldering iron
  • Hot glue
  • Female/male header

Setting up the Toolstick

  • I bridged the two pins shown by the green circle in the image above with a blob of solder
  • Then soldered on the white(C2D) wire as shown.

  • Next, I flipped it over and looked at the back to solder on the red (C2CK) and black (Gnd) wires.
  • Then I soldered the ends of these wires onto a 3pin male or female header for whatever best suits you. For example, if i’d you used the servo connector flashing rig, i’d probably want to use a female connector as you have the male on the opposite side of the cable from the female pins mounted on the ESC like I did. That’s it for the mods! Now on to software.

Software needs:

Flashing the ESC

Click on the ESC firmware link above, click download as zip on the right side of the page, extract it, go into SiLabs\Hex Files then find your ESC hex file. You need the hex file that fits your ESC and has MULTI in the name, for ex: TURNIGY_PLUSH_18A_MULTI_REV6_0.HEX. Then install the programming utility. Now a flashed ESC is a few clicks away!

  1. Download the SiLabs Flashing utility and install it.
  2. Connect the ESC to the toolstick, then connect the toolstick to the computer, connect the battery to the ESC
  3. Finally, open the SiLabs Flashing Utility. The USB debug Adapter should automatically be selected and show your toolstick in the list below it.
  4. Click Connect.
  5. Go to the download Hex File/Go/Stop tab and browse for the hex file you got from the zip you downloaded, Check the Erase all code space box, and click Download.
  6. It may give you a warning that the device will be erased, click OK.

That’s it, now I could can do calibration through the GUI or the TX(a guide PDF is found in the zip from the ESC firmware link)!

Option 2 – Flashing with an Arduino

NOTICE: While this post does provide good information, it is outdated because of new developments in this area. OlliW is the author of the owSilProg firmware that allows Arduino boards to be used to flash SiLabs ESCs with BLHeli. Please visit his site at www.olliw.eu for the most up to date information on flashing SiLabs ESCs with BLHeli firmware.
Hardware needs:
  • Arduino (clone)
  • Computer
  • Wire
  • Possibly soldering iron
  • Male/Female 3 pin connectors
This image shows how I connected my Arduino to the ESC flashing rig:

Then, I programmed my Arduino with the silprog hex which allows the Arduino to be used by the computer as a Silabs programmer like the Toolstick. At First i used the old method which is more complex because of the command line requirement, but now i use the new method which is an easy GUI program.

New Arduino Programming Method
Software needs:
  • AVRBurnTool and the Arduino Silprog hexs are at the bottom of this page under “Current firmware and software” which is currently called owSilProg v20120715 as of this posting.
  1. Extract the owSilProg v20120715 zip to a folder called BLHeli at C:\.
  2. Open the AVRBurnTool_vxxx.exe from the C:\BLHeli folder.
  3. Under “Select  your ISP AVR Programmer”:If you have one of the following, select Arduino Bootloader @115200
    Mega 2560
    Mini w/ 328pIf you have one of the following, select Arduino Bootloader @57600
    Nano w/ 328p
    Pro Mini w/328p
    Duemilanove w/ 328p
    Pro w/ 328p
    Mega 1280
  4. Underneath ”Select  your ISP AVR Programmer”, select your Arduino COM Port (Baud is not changed if you use one of the above methods). You can find out which COM Port your Arduino uses by:-Looking in device manager
    -In the ARduino IDE
    -Click the port selector and memorize which ports are avaliable. Click out of the Port Selector, connect Your Arduino, and then click on the Port Selector again. The new Port that showed up is your Arduino.
  5.  Select your target/device. For example, if you have an Arduino with a 328p chip, select “Arduino with m328p”.
  6.  Select the bootloader/firmware hex file from C:\BLHeli. Select the file that has the name of your Arduino chip(m328p for example) and the speed (16mhz for example).
  7.  Press “Burn all”
  8. It should say “xxxxx bytes of flash verified” if successful.
  9. Now you can go onto the “Flashing the ESC” part of the tutorial below.
Old Arduino Programming Method
Software needs:
  • AvrDude and the Arduino Silprog hexs are in the zip file at the bottom of this page under “Current firmware and software” which is currently called owSilProg v20120715 as of this posting.
  1. Extract the owSilProg v20120715 zip to a folder called BLHeli at C:\. Also extract the BLHeli ESC hex files zip there too.
  2. Open command prompt by pressing Windows Key + R, and then type cmd and press enter.
  3. Type or copy cd C:\BLHeli
  4. Connect the arduino to the computer.
  5. For the following command, check which com port is yours and that the silprog_v007_promini16mhz.hex has the correct version number, Arduino speed(mhz), and Arduino type(promini). The other silprog hex files are also in the C:\BLHeli folder.
  6. Type or copy the command: avrdude -C avrdude.conf -p m328p -c arduino -P \\.\COM1 -b 115200 -D -Uflash:w:silprog_v007_promini16mhz.hex:i and press enter.
  7. The output should look like:
    avrdude: AVR device initialized and ready to accept instructions
    Reading | ################################################## | 100% 0.00s
    avrdude: Device signature = 0x1e950f
    avrdude: reading input file "C:\BLheli\silprog_v007_promini16mhz.hex"
    avrdude: writing flash (3898 bytes):
    Writing | ################################################## | 100% 0.64s
    avrdude: 3898 bytes of flash written
    avrdude: verifying flash memory against C:\BLheli\silprog_v007_promini16mhz.hex:avrdude: C:\BLheli\silprog_v007_promini16mhz.hex:avrdude: input file C:\BLheli\silprog_v007_promini16mhz.hex contains 3898 bytes
    avrdude: reading on-chip flash data:
    Reading | ################################################## | 100% 0.50s
    avrdude: verifying ...
    avrdude: 3898 bytes of flash verified
    avrdude: safemode: Fuses OK
    avrdude done.  Thank you.


Flashing the ESC
  1. Go to C:\BLHeli and open the SilProgTool_vxxx.exe.
  2. Click the … button and browse for the BLHeli ESC HEX files. These are in the C:\BLHELI\BLHeliHexFiles. You want to choose the one that is your ESC, has MULTI in the file name and is the latest REV. For ex: TURNIGY_PLUSH_18A_MULTI_REV6_1.HEX
  3. Connect the battery to the ESC and then connect the flashing rig to the Arduino and ESC.
  4. Select the com port of the arduino and click flash. Then verify when it’s done.
  5. The status window should look somewhat like this when complete:
    Flash hex file... Please wait!
    v... OlliW SilProg v0.06
    r... rok
    d... dok0A
    i... iok
    e... eok
    bw... bw:030000000212E306ok
    bw... bw:03000B0002008070ok
    bw... bw:03002B000202943Aok
    bw... bw:03005B000203AEEFok
    bw... bw:030073000203A4E1ok
    bw... bw:10008000C2AFC0D0C0E0D2D3758B00206226055E1Fok
    bw... bw:10009000E526700302028BC374059526400A955E1Fok
    .....cut out for length.....
    bw... bw:101A500023424C48454C4923463333302320202031ok
    bw... bw:101A60002020202020202020202020202020202076ok
    Flash hex file... DONE!
  6. Since this is beta software, you might get a line where it stops on the middle and doesn’t say ok at the end like:
    bw... bw:10008000C2AFC0D0C0E0D2D3758B002

    Either the connections are broken between the Arduino and ESC or the software is just buggy. Either way, check your connections and restart the SilProgTool software.

  7. Now open C:\BLHeli\BLHeliTool_vxxx.exe and click Read and Change the settings for your new BLHeli ESC!


Throttle Range Calibration

This is new as of rev 7.0!!!! It is like any throttle calibration:

  1. Turn on the TX and bring throttle up to max.
  2. Power up the ESC (make sure it is connected to the throttle channel).
  3. It will give the normal start-up beeps and then do a higher beep for 3 seconds (measuring high throttle).
  4. It will do a low to high beep sequence three times and then do quick beep beep pairs for 3 seconds while measuring minimum throttle).
  5. Finally, it will do three high to low sequences; here you can lower the throttle to prevent going into programming mode.
  6. Done!

Wrap It Up

I made sure all the solder connections for the programming header were good and then covered the connections to the pads with 5min epoxy to make sure they didn’t vibrate loose or break. I finished it up with some 1″ heat shrink around each ESC.


I used the above process to flash my Turnigy 18 Amp Plush and Turnigy 25 Amp Plush ESCs. While they don’t have specific multi rotor hex files yet, I decided to give it a try with the Plush 6 amp hex file. While I suggest others wait until hex files are released for specific ESCs, the process worked fine for me and below you will find a before and after video.

Video Demonstration


Here are more pinouts for BLHeli Flashable ESCs:

XP 3A front

Supermicro 3

XP 7A front

DP 3A front

XP 12A front


  106 Responses to “Flashing SiLabs ESCs with BLHeli Multi Firmware”

  1. Hello Jordan,

    Newbie here, I have a Hobbywing Skywalker Quattro 20Ax4 4-in-1 ESC.

    Is there a way of performing this flash without taking the unit apart? If not, are there any different steps that I would need to take, besides ensuring that I solder the jumper leads to the correct pads on the ESC pinout board?

    Also, how would I ensure that the unit doesn’t draw too much current and damage the ESC?

    I would really appreciate all the help you can give!

    Kind regards,

  2. Hello Friend … I am writing this opportunity to give photography a Original ESC DJI, 18A, belonging to Phantom of DJI … I managed Flaschear that ESC with BLHELI Utility and firmware Turnigy Plus 18A …

    I hope this information helps you on your page …

    Thank you.

    Javier Lopez

    Hola Amigos… Les escribo en esta oportunidad para enviarle la fotografia de un ESC Original DJI, de 18A, perteneciente al Phantom de DJI… He logrado Flaschear ese ESC con la Utilidad de BLHELI, y el firmware del Turnigy Plus de 18A…

    Espero le ayude esta informacion en su pagina…


    Javier Lopez

  3. [...] Flashing SiLabs ESCs with BLHeli Multi Firmware » Odd Copter [...]

  4. What hex dat need it for the Quattro 25Ax4??


  5. Hey folks… just curious if anyone is running BLHeli on anything larger than the PLUSH 80′s? I’m wanting to use a 100 – 120′ish Amp ESC for a fixed wing application, but would prefer if I can get BLHeli on it. I’m going to try the Plush 80 that I have, but am thinking that might not be enough headroom for what I’m planning. Just curious if any of you have any recommendations?


  6. Hi folks,

    I have tried to flash some 60A ESCs which are not in the compatibility list. “You can stop here!” you might say. OK, right! Anyway, for those who want to read further:

    They are labeled Dymond Master X-60. I identified the MCU as Sil C8051F310 and compared it to the photos in the simonk/BLheli spreadsheet by T0mSn0w. There are two ESCs with this chip.
    - Hobbywing Platinum Pro 60A
    - Turnigy KForce 120A HV

    I was able to flash either (latest 10.4) firmwares to my ESC using owsilprog and ATMEGA2560.
    I can communicate with the ESC through the BLHeliTool (read/write settings).

    When connected to a motor and LiPo however, the ESC remains completely silent when using the FW for the HW ESC. Same thing with the KForce FW.

    BUT: With the KForce-FW , when connected to the BLHeliTool the motor beeps 3x after read/write as it would on power-up I suppose.

    Now, from the fact that it is accessible through BLHeliTool and beeps upon change of settings, I recon the BLheli-FW should work since for the beeps the signal has to go through the whole circuit to the motor.

    However, it would’nt beep on power-up when not connected to the BLHeliTool.

    Any clues?


    Maybe someone recognizes this ESC (sorry for the bad pics!)

  7. Dear,
    I finish my flask of BLheli multicopter firmware to my hobbywing 30A opto.
    I got problem of Throttle Range Calibration.
    I would like to ask for help

    1- how can I reset setup to default?
    2 – on the Throttle Range Calibration steps,
    1.Turn on the TX and bring throttle up to max.
    2.Power up the ESC (make sure it is connected to the throttle channel).
    3.It will give the normal start-up beeps and then do a higher beep for 3 seconds (measuring high throttle).
    4.it will do a low to high beep sequence three times and then do quick beep beep pairs for 3 seconds while measuring minimum throttle).DO I NEED TO MOVE THE THROTTLE STICK TO LOW POSISION AND WHEN WAIT FOR HOW LONG AND WHAT IS NEXT MOVE OF STICK BEFORE DOING STEP 5 MOVE IT BACK TO LOW POSISION
    5.Finally, it will do three high to low sequences; here you can lower the throttle to prevent going into programming mode.

    Looking forward to get help from you all. Thanks in advance

  8. Thank you for the instruction, I have just successfully flashed my Gaui 183 ESCs! I used a cheap USB Programmer for Micro Helicopter ESCs from HobbyKing with a homemade 3-pin plug.
    Programmer: http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=25433

  9. Just an FYI for anyone (like me) who wants to avoid modifying the SiLabs Toolstick and/or minimize the amount of soldering – and has an extra bit of cash handy :) . You can buy the Toolstick Debug Adapter (Digikey.com/.ca part number = 336-1347-ND), plug it into the toolstick with NO soldering at all on the toolstick. Simply cut the included 10 wire cable that comes with it in half and wire up pins 2, 7, and 4 as (2=GND, 7=C2CK, and 4=C2D). Works great – oh and when the utility asks about updating the debug adapter, just answer yes/OK. The only soldering I had to do was to solder a plug onto my ESC.

    Oh, and THANKS sooo much for this software/firmware!!! awesome!

    Link to the toolstick debug manual: http://www.silabs.com/Support%20Documents/TechnicalDocs/ToolStick-Debug-Adapter-UG.pdf

  10. Today I firmware turnigy plush 6pc. 5 firmware is good. 1 controller firmware bug. Now the regulator is not working. is there a chance to restore control? someone has already encountered this problem?

  11. THANKS.

    Thanks for all the information and work that has gone into making this site, and all the work done to make these ESCs more friendly objects to use.

    I appreciate the effort that must go into keeping the files up to date, happy flying all.


  12. I finally managed to get a smooth response from my Turnigy Plush 18A ESCs after using the process described in the document published here on Flickr, http://www.flickr.com/photos/rkspics/9284719400/

  13. Throttle Range Calibration
    This is new as of rev 7.0!!!! It is like any throttle calibration:

    I’ve followed this but , when do I lower the throttle for it to measure low throttle, at step 4. or does it assume low will be xxxx value.

    1.Turn on the TX and bring throttle up to max.
    2.Power up the ESC (make sure it is connected to the throttle channel).
    3.It will give the normal start-up beeps and then do a higher beep for 3 seconds (measuring high throttle).
    4.it will do a low to high beep sequence three times and then do quick beep beep pairs for 3 seconds while measuring minimum throttle).
    5.Finally, it will do three high to low sequences; here you can lower the throttle to prevent going into programming mode.

  14. OK, I managed to get it connected.
    I erased the chip and downloaded the firmware and it completed as expected.

    Now I’m having problems with the calibration proses.
    The ESCs are intended for use on a quad, so should I follow the steps for the PWM – Main .
    The radio is Spektrum 8.

    Following my first few attempts at calibration ( I re flashed it a few times ) each time there appeared to be a dead spot just before the full throttle position then it jumps to full speed.

  15. When trying to flash I get “Please connect before downloading”

    What am I doing wrong ?

  16. http://www.flickr.com/photos/rkspics/9222701927/

    Hi, can you help, I’m trying to flash Turnigy 18A Plush for a multi rotor, I cant ID the pin outs.


  17. [...] Hat da schon jemand erfahrung drin gemacht? Habe mal einen Blick in die Anleitungen gemacht (http://oddcopter.com/2012/07/18/flas…heli-firmware/), sieht sehr komliziert [...]

  18. Hi, I’m trying to flash using the toolstick base adapter but the flash application keeps prompting me to update the debug adapter (which I’m not using) and refuses to connect. Has anyone else had this issue and found a way around it?

    • I didn’t use this method, so, i unfortunately i cant help you. maybe try updating like it asks?

      • Hi Jordan, I think the problem is that soldering the pins makes the toolstick base think that the debug adapter (separate device that plugs into the toolstick) is being used where it isn’t, and it assumes the adapter needs an update. Since it’s not actually being used the flash tool can’t find it and update it and after that it refuses to connect.

      • Never mind, I finally did get it to connect. Turns out the update message only happened when the pins weren’t quite contacting the esc pads. With good contact it connects fine and flashes perfectly. Thanks for the tute Jordan.

  19. Just successfully flashed my first Turnigy Plush 30 ESC. Worked perfectly. Could not have done it without information from this site and Helifreak. Thanks a bunch.

    Now I just have to cut open my other 5 and do them.


  20. I have Plush 30A ESCs and have ordered the silabs toolstick. I have been reading many posts and I am still unclear on how to apply power to the ESC. Do I just plug a LiPo into the DC connector on the ESC or do I need to power it somehow from the programmer?

  21. Hi,

    I made a new Flashing Rig for my esc turnigy Plush 18A. Esay way of working ! I made a mistake in the order of the wires. The Black one = White One

    check http://www.xtreme.be/images/stories/rig01.jpg & http://www.xtreme.be/images/stories/rig02.jpg

  22. Hi,
    I have a question about programing pin out on a turnigy plush 60A.
    Here is the picture
    I hope someone can help

  23. I have used TURNIGY_PLUSH_80A_MULTI_REV9_0.HEX in the ESC Turnigy Plush 80A and I have a problem
    With 3 or 4s of lipo works well
    With 6s it starts badly and when it starts there does not work the stick of the boradcasting station, constant revolutions

  24. Oh the irony! I was trying to use a SiLabs CP2102 USB-serial cable to flash my Hobbywing Funfly 18A (aka Turnigy Plush, uses SiLabs MCU) ESCs, but BLHeliTool could not open the port at all. Changed to a Prolific serial adapter and it worked straight away.

    The SiLabs USB-serial cable works for other things including flashing owSilProg onto an Arduino with AvrBurnTool… don’t know why it does not work with BLHeliTool…?

  25. Hi,

    I’m using BlHeli Setup BETA firmware on Turnigy Plus 25A ESCs for a quadcopter. So far it works very well. Now I want to get it the throttle properly calibrated. I just noticed the procedure posted to calibrate the firmware. My question is how would I need to use it with the HobbyKing KK 2.0 multicopter board?


  26. Once I upgrade my ESC Plush 25A and rode my quad with a parent KK2.0, this incorrect behavior, did the calibration of the ESC and properly tested individually, but when the armed kk and will accelerate an ESC triggers a time the last league only after half a stick …
    I await help.

    • more info please. what firmware? are you sure they flashed right? have you tried manual calibration (individually by TX or via blhelitool)?

      • The KK2.0 is with firware revision 1.2 of the ESC are with version 7.0 firware, going back to version 6.0 to see the difference.

  27. Dear all,

    I’m having trouble flashing to a T 18A with Silab gear on it and Ardunio Uno R3.

    Loaded the SilProgtool v.002 with TURNIGY_PLUSH_18A_MULTI_REV7_0 I get the following results:

    Flash hex file… Please wait!
    v… er
    d… Connection to target FAILED!

    Like stated in earlier posts I changed Digital port to 11 and 12 but still no luck.

    I thought.. well.. probably no connection to the Ardunio with the Silprogrammer software on it.. But I tried the BLHelitool v006 and got the following result:

    Read… Please wait!
    delay… OK
    v… er
    >OlliW SilProg v0.08 PB3PB4
    r… rok
    d… dok0A
    i… iok
    br… br021A00er Block read FAILED!

    br… br101A60er Block read FAILED!

    That proves to me that the Ardinio is programmed correctly and it communicated with the Esc.

    Other items like tried 2 computers, Windows 7 and all utils run in Admin mode.

    Anybody some suggestions?.. I’m a little stuck here.. and staring doesn’t help either.. :-)


    • if multiple computers etc dont work, maybe it is the Arduino->ESC conections?

      • Got it! :-)

        Used the BLHelitool V006.
        If you click “read” before you flash the firmware it gives you an error.
        Once you flash it first and then “read” the settings, it works.

        So successfully flashed a 18A Turnigy with TURNIGY_PLUSH_18A_MULTI_REV7_0.

        The only thing left is that the motor sounds “Raw” and gets a little hot.

        Guess that there needs some tweaking to be done to the firmware.


        • well of course it wont read it before you flash the firmware ;) its is the stock turnigy or whatever firmware and doesnt communicate via protocol and doesnt have these settings.

          try increasing the power or just tinker with the settings and see if it helps.

  28. As an alternative to modifying the MultiWii firmware, you can use a tool like BLHeliTool to program in a custom LOW – HIGH throttle. For example, I flashed my Turnigy Plush 18A’s using the latest V7 and then configured the LOW THROTTLE to be 1020. (I left the HIGH THROTTLE at the default of 1850). Now whenever I reprogram a new version of MultiWii, I don’t have to remember to change the THROTTLE settings.

  29. Jordan, I know that you are busy and have your own duties but could you please answer my questions in this comment: http://oddcopter.com/2012/07/18/flashing-silabs-escs-with-blheli-firmware/#comment-880
    Thank you…

  30. Hi!
    I am a little bit confused.
    Is this thing “The only thing that i have found “wrong” with this firmware is that it doesnt have an adjustable throttle range.” still exists in latest 6.1 firmware?
    Because I read the manual, and there is nothing about this ranges.
    But it says: “For a main motor esc, throttle is monitored during the arming sequence. The maximum value of throttle is recorded and stored.”
    Is it true for the Multi too?
    Other words: do I still need to change multiwii MIN_COMMAND, MIN_THROTTLE and MAX_THROTTLE defines? Or latest firmware have adjustable throttle range?
    Thanks (and sorry for my eng).

    • yes, you still need to change them. it should be implemented soon. it is on the to do list.

      • Ok.
        Another question: how about your progress on using BLHeli on T Plush 25A?
        I flashed one ESC for testing, and now I am thinking to flash or not to flash other ESCs.
        The reason is that I just can’t find examples of using BLHeli ESCs on multirotors… (Only on Helis.)
        Maybe I’m just bad looking?

        And another reason is the Plush power jump on 100% PWM. It is very noticable.
        And if I understand correctly: there is nothing to do with this on BSHeli because it is hardware problem. So only solution is to reduce max power?

        So maybe it is better not to flash Plush’s (sell them or something) and take some other ESCs?
        Just tell me, please, what do you think about this?

        Thank again!

        PS: for others who trying.
        1) I have this error too:
        “Flash hex file… Please wait!Opening port COM5 FAILED!”
        when using not FTDI USB-to-UART convertor!
        That was strange, because I can comunicate with “OlliW SilProg v0.08 PB3PB4″ by myself using terminal program on this convertor. So I switched to FTDI one and all works fine.
        2) And as for the pins. It is not always Digital 2 and 3! For example on ATmega 8 it was pins 11 and 12 (PB3 and PB4 respectivly as said in the end of firmware name: “owsilprog_v008_m8_8mhz_pb3pb4.hex”). I found that PB3-4 is used on all the v008 firmware. Jordan, I think you should update this info in the article?..

        • yeah blheli works great on multis. way more stable. i never really cared about the 100% because 1) i didnt notice it at first 2) i never go that fast :) if youre going 100% the you want to go fast anyway, right?

          an interesting quote on the subject by sskaug “There is a step in the throttle response near the end, and I think you will find that on many other ESCs as well. It comes when pwm goes from almost 100% to 100%. The off and on switching of the pwm takes some time due to the computing required. This is a fixed amount of time, so at low pwm frequency, the step will be smaller.”

  31. I tried flashing 2 of my Turnigy Plush 25A 3.1 ESCs. I used the Arduino method since I have an Uno. I flashed the XP_25A_MULTI_REV6_1.HEX and fried both ESCs

    The first ESC I soldered a plug to the pads on the ESC. About 5 seconds after the flashing finished, one of the FETs on the back started to fry.

    The second ESC I used the clothespin method (thinking maybe I crossed a wire soldering). This time whenever I power the ESC, the motor is silent and the chips near the center motor wire start to get super hot.

    Any ideas what I did wrong?

  32. I’m upgrading my ESC Plush 25A, however I am using the card Multiwii, passed the first stage without problems, but when I enter the BLHeliTool_v005.exe, and then set the Paramenters and click Flash see the following message:Flash hex file… Please wait!Opening port COM5 FAILED!
    I do not understand why this occurs, it usually announced in the first stage.
    I await help.

    • im guessing that com5 is the wrong port for the arduino, or you have something else open that is using the port ( the arduino ide serial monitor for ex)

  33. Hello, i want to flash my turnigy plush 25A v3.1, u bought a arduino uno R3 and installed the owsilprog_v008_m328p_16mhz_pb3pb4.hex file on it. when i now try to flash my esc with the TURNIGY_PLUSH_25A_MULTI_REV6_1.HEX file, it will shown an error that the connection is failed. i used the same pins like the picture top of the turnigy plush 18A becuase it looks like the same one.

    can someone help me?

    • can you dive me the exact the output error when you flash? ymy guess would be that the wires are mixed up, but it depends on what exactly the error is.

      • when i click on the flash button in the silprogtool comes following message:

        Flash hex file… Please wait!
        v… Connection to target FAILED!

        then i click again:

        Flash hex file… Please wait!
        v… er
        d… Connection to target FAILED!

        it looks like he cant find my esc.. is any voltage meassurable on the outbut from the arduino uno? black red and white wire?

        • actually, that means its not even connecting to the arduino. do you have the right com port and the program flashed to the arduino correctly?

          if it could connect to the arduino but not to the esc it would look like this:
          Read… Please wait!
          delay… OK
          v… OlliW SilProg v0.08 PB3PB4
          r… rok
          d… Connection to target FAILED!

          • i found the error. the new output of the arduino uno was Digital 11 and 12.
            i success flashed my turnigy plush 25a now, but when i wana start the motors, they will not start smoth, it starts like a traktor..

          • increase the startup power with blhelitool

          • Do you have the correct value for any settings?
            The second point is: why starts the motor randomly because the board is not armed? It is dangerous.. A little bit

  34. Here’s a screen shot of the cmd window after trying a Mega 2560, the Arduino Dumi, and a Pro Mini. Same error. It’s got to be something with my installation but I’m at a loss as to what. All three boards work with the IDE and will run any sketch I load correctly, FWIW. Thanks for helping!

    Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation. All rights reserved.

    C:\Users\John Ihlein>cd c:\BLHeli

    c:\BLHeli>avrdude -C avrdude.conf -p m2560 -c arduino -P \\.\COM14 -b 115200 -D
    avrdude: stk500_getsync(): not in sync: resp=0×00

    avrdude done. Thank you.

    c:\BLHeli>avrdude -C avrdude.conf -p m328p -c arduino -P \\.\COM3 -b 115200 -D -
    avrdude: stk500_getsync(): not in sync: resp=0×00

    avrdude done. Thank you.

    c:\BLHeli>avrdude -C avrdude.conf -p m328p -c arduino -P \\.\COM8 -b 115200 -D -
    avrdude: stk500_getsync(): not in sync: resp=0×00

    avrdude done. Thank you.


    • ok, go back to the IDE, make sure you can upload something using you dumi, and then go to tools- serial port and see what is selected. then confirm that the comport from the ide is the same as the one in this command:

      avrdude -C avrdude.conf -p m328p -c arduino -P \\.\COM3 -b 57600 -D -Uflash:w:silprog_v007_promini16mhz.hex:i

      then use the command i have above this line in CMD (with your new com port in there if needed).

      • Well it decided to work with 57600 as the baud rate. I tried a few different baud rates, but never that one…..

        Thanks again – on to the ESCs!

        • I don’t usually have this much trouble with these things…..

          Now I’m getting this message using the Arduino Dumi as a programmer:

          Flash hex file… Please wait!
          v… Connection to target FAILED!

          Connections look good, and speed control functions fine with current firmware. So I don’t beleive there’s a short in the wire connections.

          ESC board rev number is the same as in the photos. The Arduino Dumi has a 16 MHz crystal.

          Not sure what to try next……

          I really appreciate your time and help!

  35. can you upload the blink sketch via the IDE? and can you give me the output of CMD?

    • I can upload blink and run it just fine from the IDE. I tried it on the Arduino Dumi, and a Seeduino Mega, with the same error message I posted above. Both will run blink from the IDE. I have an Arduino Pro Mini and Mega 2560 I’ll try it on later today, ran out of time last night.

  36. You show an Adruino Uno in the picture, anything preventing use of the Arduino Duemilanove? Also, is the avrdude command line syntax correct?

    Thanks, great work!

    • nope. any arduino should work. yes it is correct, why?

      • At least with my browser, there is some unusal punctuation in the avrdude command line. I’ve got that sorted out, but trying to program my Arduino Duemilanove I’m getting the following error:

        avrdude: stk500_getsync: not in sync: resp=0×00

        I get this error with nothing hooked to the board, or with the auto reset disabled with a resistor.

        • you dont disable the auto reset with a resistor. this is just like uploading a program to the arduino but with cmd instead of the GUI arduino ide. take everything off of your arduino’s pins, plug it in, find which com port (can do this via arduino ide) and then run that command with the correct comport and sillprog firmware name.

          hope it works :)

  37. Just put everything together. Overall this all works. There are just minor concerns I have.
    First, the motors shake when arming the KK 2.0 board. They also shake when disarming.
    Second, when starting the quad the motors do not start at the same time and some of them try really hard like an old tractor engine to start to spin.
    Third, when motors are running on low rpms it happens that when turning the sticks, it slows down the motors and sometimes they completely stop spinning.

    • ” I also clicked the “Start ESC” button. What does it actually do?”
      after programming the esc has to be power cycled (unplugged and then plugged back in) for the ESC to work. that button restarts the ESC without power cycling.

      “When I connected the ESC to the controller board it I could arm the control board using regular throttle zero and right most yaw and armed the multicopter board. Adding the throttle immediately started to spin the motors. I though I would need to arm ESCs using some special sequence, don’t I?”
      doesnt arming the control board also mean enabling the ESC to start?

      “Also, can somebody explain how to “read” the diagrams from BLHeli programming by TX manual?”
      yeah its kinda weird. when i first listened to the beeps without reading the pdf i was really confused. the two parallel lines are like the lines of sheet music. the little black boxes are like the notes. so it is a row of three boxes that move a step up each time ( the first one on the pdf) its plays three tone: ones low, one med, one high. then it plays another tone when move the stick.

      entering programming mode is kind of like any other ESC. turn on tx, set throttle to high, then power up ESC, it does a constant beep beep then you put the stick down, then it does another beep beep constantly and you put the stick up. now you are in programming mode.

      then it goes to the functions (battery mode, startup power etc) for ex the first one goes beeeeep beep that means function one parameter one, and if you have the MULTI type firmware you go to that chart near the end of the pdf and it shows Function 1 is Multi gain and parameter one is .75. it will repeat the beeeeeep beep three times and any time during those you can put the throttle stick down and it will set that parameter for that function. then it will do a thing like running your fingers from left to right on a piano x3 and then the ESC will reset. if you want to go to the last parameter of a function move the throttle to half and back up and it will skip a parameter at a time (so you dont have to wait for beeeeep beep x3).

      function 1 parameter 2 would bee beeeeep beep beep.

      function 2 parameter 3 would be beeeeep beeeeep beep beep beep

      that work for explaining?

  38. Hi,

    I’ve successfully burned 6.0 firmware to my quad Turnigy Plush 25A ESCs. I used BLHeli setup to flash the firmware and preserved the default values. I also clicked the “Start ESC” button. What does it actually do?

    When I connected the ESC to the controller board it I could arm the control board using regular throttle zero and right most yaw and armed the multicopter board. Adding the throttle immediately started to spin the motors. I though I would need to arm ESCs using some special sequence, don’t I?

    Also, can somebody explain how to “read” the diagrams from BLHeli programming by TX manual?


    • “First, the motors shake when arming the KK 2.0 board. They also shake when disarming.”
      try increasing the startup power in the BLhli tool. to help with the startup issues.

      “Second, when starting the quad the motors do not start at the same time and some of them try really hard like an old tractor engine to start to spin.”
      the startup range isnt porgramable. so its 1150 (motor startup 1200) to 1850. you’ll have to adjust for this in the TX/kk2

      “Third, when motors are running on low rpms it happens that when turning the sticks, it slows down the motors and sometimes they completely stop spinning.”
      this maybe related to the throttle range. yaw slows two and speeds up two so this may cause it in addition to the other things.

  39. Anybody try flashing HW SkyWalker 20A ?

  40. Hi, Very nice job done! Just a quick question. I’ve alreadu got a USBasp AVR programmer which I used to reflash my HK boards. Can I reuse it to flash Turnigy Plush 25A board which has SiLab cpu?
    Thank you, Ruben

    • Ruben,

      I haven’t been able to talk to Jordan about this, but I haven’t seen it done with a USBasp AVR programmer yet, but it may be possible to run the SilProg on one. So far I have only seen it done with a SiLabs toolstick and an Arduino. If you can figure it out and want to post about it let us know.


      • Thanks for reply. I’ve actually got the Silabs programmer. Will use it to program my ESCs. Could you please help with choosing the right firmware and configuring the ESCs properly? I’ve got a quadcopter with Turnigy Plush 25A ESCs. which firmware should i choose?
        TURNIGY_PLUSH_25A_MAIN_REV6_0.HEX, TURNIGY_PLUSH_25A_MULTI_REV6_0.HEX or TURNIGY_PLUSH_25A_TAIL_REV6_0.HEX? Also one thing I didn’t quite understand. Why does the arming operation change with this firmware? My understanding was that this firmware is just making the ESC to response quicker and not more than that.

        • you want to use “TURNIGY_PLUSH_25A_MULTI_REV6_0.HEX” because it has MULTI in the name. TAIL ones are for ESCs that control heli tail motors, and MAIN is for ESCs that control a heli’s main blade.

          the ESCs should be ready to go after flashing now that a 25A hex has been released.

          the arming operation is different because that is the way sskaug wrote the code for it. i asked him about making the throttle range adjustable like the stock firmware, but havent heard back yet.

          yes this does MUCH improve the ESC from the stock firmware!

  41. The only Arduino I got is a Ardupilotmega 2.0 board, can I used it to flash my ESCs? thanks in advance.

    • yeah i think so. do you program the board via the arduino IDE? if so, just follow the guide for the arduino like it is, but you’ll have to find which pins are the digital 2 & 3 of the arduino.

  42. I have some “no-badge” ESCs that look similar to plush ESCs. Think they are flashable? If so, I assume 3 of 4 of those pads I will use to flash?


    • In the first pic in that link, you can see a horizontal set of four pins that are fairly close to the center. Those pins starting at the left side are gnd, vcc, C2CK, C2D. With that info you should be ok in flashing. Since they are off brand you may want to use a current lmiter on the ESC when you flash as the fet layout may be different than he plush, but if you have extra ESCs, then I guess you can do it without a current limiter.

  43. Thanks for the great write-up. May I make a couple of suggestions to help those of us who have never used this tool before?

    - You mention that you don’t need the 3.3 V pads for programming, but don’t tell us what the RED wire voltage is. Is it 5 V?
    - When I received my toolstick, it looked like the black connector on the end could just slip off the PCB pads. I did that and ended up tearing the pads off the PCB, because it is actually soldered to the PCB. I regrouped, and took a stab at hooking up the 5V (a guess) and ground from the USB connector. Didn’t work. So I realize that I hosed myself, but a) if it had been mentioned to not fall for this noob move (looks like you can remove it but don’t), and b) for reference, what is the voltage value of the red wire, I might have not blown $30 for toolstick.

    Just putting this out there in case it helps somebody else, or maybe you could add it to your writeup.

    Thanks again for this excellent solution, and I’ve already ordered a new toolstick and won’t do that dumb stuff again. :)

    • the red wire is not the voltage supply for the ESC, it is the C2CK programming pin. yes, it is strange, but for the silabs ESCs, green is power (3.3v), red and white are C2CK and C2D, and black is GND. you connect black, red, and white from the toolstick to the ESC. the the ESC MCU runs at 3.3v, but the pins(programming(C2D/C2CK) and IO pins) are 5v tolerant so you can use a 5v arduino to program it like in the guide, but you CANT power it from 5v(green) or else you will probably ruin the MCU.

      on your second “-” i dont really understand what you’re saying. when you say PCB i guessing you mean the ESC PCB? what “is actually soldered to the PCB”? and are you saying you connected the wires from inside the USB cable to the ESC? why’d you do that?

      i think i answered everything. let me know.

      • Thanks for the clarification. That helped me understand much better!

        I was referring to the Toolstick PCB. If you ONLY need the toolstick to program the ESC, you don’t need the black plastic end piece that apparently is used to connect easily to other stuff. When I looked at how the the red, black, and white wires were to be soldered onto the toolstick, I thought it was funny to leave that black connector part on when it looked like I could solder directly to the pads on the PCB. The black end piece looks like its wires are just held against the toolstick as opposed to being soldered to them. But now I know!

  44. Jordan this is super helpful – big thank you!

    Two questions:
    - You state that “The Turnigy 18A Plush and 25A Plush work with the 6A hex file with a higher startup power.”… what does that mean? “Higher startup power” do I need to tweak anything on my *.hex or hardware setup, or is it just that I need to give more throttle in order to turn them up?

    - In the toolstick (which I have) description you say that you need to connect the battery, which isn’t advised by many saying that you should limit the current for safety. In the Arduino instructions you don’t mention a battery at all. So what’s your take on it? Is the ESC current-limited powered by the Arduino or what else should I take into account when going the toolstick way.

    I’m aware that I could burn an ESC, but I want to go for it ;) BTW: Are the motors still connected at all times to get audible feedback?

    • first question: Higher startup power is a option in the BLHeliTool. the BLHeliTool is like programming ESCs with a programming card or TX. i had to give it a little throttle and then give the props a flick with my hand to get them going. it kinda dangerous but i make sure the throttle is very low. i also found that if i move the throttle stick up and down in a quick motion a few times, it will start the motors without touching them. this will all work out when we get the 25A hex.

      second: yes you probably should limit the current, but i didnt. it’s mainly meant so that if the wrong firmware is flashed, it wont burn out the FETs on the ESC. i forgot to put that part in the Arduino option. will fix it.

      yes i left the motors with props (bad idea too) connected at all times. no props would be good.

  45. Thank you so much for this post. I had been following the BLHeli firmware progress ever since I realized that my Plush’s weren’t Atmega chips. Having all this information in a single post is super helpful!

 Leave a Reply



You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>