User Tools

Site Tools

Translations of this page:

howto:fc_patcher_tool

This is an old revision of the document!


FC Patcher TOol Overview

doc version .01, starting a framework. Intent is a easy guide for Windows, simplifying from github orig content here: https://github.com/o-gs/DJI_FC_Patcher credit to the og's and all

This guide explains how to use the FC patcher tool for Windows. The tool / process allows you to modify flight controller parameters on the the LATEST DJI firmware for the DJI Mavic Pro and Platinum, Phantom 4/Pro/Adv, Inspire 2 and Spark.

NOTE: THIS IS FOR PRO USERS, YOU HAVE TO KNOW WHAT YOU ARE DOING!

Toolset

Make sure to review this GitHub with more info: https://github.com/o-gs/dji-firmware-tools

  1. Download image.py
  2. Download Python 2
  3. Download Python 3
  4. Download an app to allow running .SH files on Windows; i used github as my app
  5. - Download and install a file extraction app like winrar or winzip
  6. Download pcrypto by running this from a command line python -m pip install pycryptodome

Put the files and the firmware bin file in same folder, such as C:\fcpatcher. Unzip the zipped files and put their respective folder under C:\fcpatcher

Install Python 2 and 3, reboot if required. Make sure to SET PATH for Python. If you don't know what this means, google it.

Detailed Steps

1. Install that toolset

Get the tool set noted above all setup, downloaded and installed. Without, this doc is worthless.

2. Extract the firmware file

  1. Open Winrar/Winzip
  2. Open the firmware file you downloaded, such as V01.04.0300_Mavic_dji_system.bin
  3. Extract the .CFG.SIG, the 305 and 306 files to the c:\fcpatcher folder

3. Extract / unsig the .cfg file

  • Open a command prompt and type
  cd\fcpatcher <Enter>
  image.py wm220.cfg.sig
  move wm220.cfg_0000.bin wm220.cfg.ori
  • The file is now extracted.

4. Unsig the 0306 file

Now we will unsig the 306 file, which contains the flight controller parameters. You will need to power on your aircraft and connect to PC via USB. Once you have ..

  • Open a command prompt start→run→cmd
  • Type the following commands
  adb shell
  mount -o remount,rw /vendor
  mkdir /vendor/bin
  exit
  • Now, lets copy the flight controller module to the aircraft.
  • Open a command prompt start→run→cmd . Then, type the following commands:
 adb push wm220_0306_v03.02.44.07_20171116.pro.fw.sig /vendor/bin/ (replace the filename if different ac)

* Now lets go back to a shell, type

 
 
 adb shell
 cd /vendor/bin/
 /sbin/dji_verify -n 0306 -o 0306.unsig wm220_0306_v03.02.44.07_20171116.pro.fw.sig (replace the filename if different ac)
 exit
 
  • Now lets get the updated module. Type
 adb pull /vendor/bin/0306.unsig
  • Now, some housecleaning

adb shell

 cd /vendor/bin/
 rm 0306.unsig
 rm *.fw.sig
 cd /
 sync
 mount -o remount,ro /vendor
 exit

So now we have the unsig file we wanted, thats awesome.

5. decrypt the FC

  • Goto a command prompt and type
 dji_mvfc_fwpak.py dec -i 0306.unsig
 move 0306.decrypted.bin wm220_0306_v03.02.44.07_20171116.pro.fw_0306.decrypted.bin
 ^^ (replace the filename if different ac)

6. Extract flight controller parameters

  • Goto a command prompt and type
 dji_flyc_param_ed.py -vv -x -b 0x420000 -m wm220_0306_v03.02.44.07_20171116.pro.fw_0306.decrypted.bin 
 ^ (replace the filename if different ac)

This will generate a flyc_param_infos file with all the flight parameters that you are able to modify.

7. Modify flight controller parameters

first draft of parameter list

Parameter Name Value
g_config.airport_limit_cfg.cfg_disable_airport_fly_limit1
g_config.airport_limit_cfg.cfg_limit_data20250910
g_config.flying_limit.driver_license_limit_enable 0
g_config.flying_limit.viechle_license_limit_enable0
g_config.flying_limit.height_limit_enabled2
g_config.airport_limit_cfg.cfg_search_radius1
g_config.airport_limit_cfg.cfg_enable[FLY_LIMIT_TYPE_AIRPORT]0
g_config.airport_limit_cfg.cfg_enable[FLY_LIMIT_TYPE_SPECIAL]0
g_config.flying_limit.limit_height_rel10000
g_config.flying_limit.limit_height_abs10000
g_config.flying_limit.limit_height_abs_without_gps10000
g_config.mode_normal_cfg.tilt_atti_range33
g_config.mode_normal_cfg.vert_vel_up7
g_config.mode_normal_cfg.vert_vel_down-6
g_config.mode_normal_cfg.vert_acc_up7
g_config.mode_normal_cfg.vert_acc_down-6
g_config.mode_sport_cfg.tilt_atti_range50
g_config.mode_sport_cfg.vert_vel_up8
g_config.mode_sport_cfg.vert_vel_down-8
g_config.mode_sport_cfg.vert_acc_up8
g_config.mode_sport_cfg.vert_acc_down-8
g_config.fw_cfg.max_speed20
g_config.avoid_cfg.avoid_atti_range23
g_config.control.avoid_atti_range50
bat_level_2_action0
bat_cap_v2_prot_type0
g_config.bat_config.level2_smart_battert_land0

8. Set path

  • Goto a command prompt and type
 set PATH_TO_TOOLS=C:\fcpatcher

9. Run the SH script

  • Goto a command prompt and type
 sh FC_patch_sequence_for_dummy_verify.sh Mavic 03.02.44.08

Note: This step requires some tool to enable running sh scripts on windows. I installed Github with bash and it had the SH included to allow running the script.

The aa.bb.cc.dd string after Spark or Mavic arg is the version of the FC module you are building. It should be different from the one that is currently installed on the bird, so basically increase the number each time you build a new version…

This should produce a few (uncleaned) tmp files, and a .bin file which is the one you will be able to flash the aircraft using dumldore

9. Install the dummy_verify.sh script on your bird

  • Goto a command prompt and type
 adb shell
 mount -o remount,rw /vendor
 exit
 adb push dummy_verify.sh /vendor/bin/
 adb shell
 cd /vendor/bin/
 chown root:root dummy_verify.sh
 chmod 755 dummy_verify.sh
 cp /system/bin/dji_verify /vendor/bin/original_dji_verify_copy
 sync
 cd /
 mount -o remount,ro /vendor

10. Flash the .bin file you made earlier

  • Open a command prompt and type
 adb shell
 mount -o bind /vendor/bin/dummy_verify.sh /system/bin/dji_verify

Open dumldore v3, load firmware and flash

The displayed percentage are fucked and it will go over 100% at some point, this is not an issue. You can monitor it from adb at the same time with : busybox tail -f /data/dji/log/upgrade00.log After a few seconds (10 ? 20 ?) you should hear the ESC beeping while the FC is being flashed (on Spark only) Then the bird will reboot (disconnecting you from adb if you were monitoring) 30-60 s after reboot you are good to turn the bird off, even if DUMLDore does not acknowledge a finished flash sequence (especially on Spark) The whole sequence is pretty short (less than 5 minutes)

Thats it your done.

For steps to get Galileo working see github

howto/fc_patcher_tool.1553819840.txt.gz · Last modified: 2019/03/29 00:37 by digdat0