Your seeing This message because you have been logged out from previous session or have not yet registered or your account has expired or trying to access Gold Member content.

ScooterHacking Utility Guide

ScooterHacking known as one of the most popular generator for Xiaomi / Ninebot scooters. Now it’s available from Google Playstore. The app allows you to create firmware, flash and many more within the app. Other commands such as change region by serial number, cruise control, lock, activation and many more. It’s very comprehensive and easy to use. Big WELL DONE to the team for making a such wonderful app.


We are going to take a look on this app and walk through the settings with you.



Download ScooterHacking Utility app from Google Playstore ( Android device only ) here or on our download page.

Launch the app and turn on your scooter. On screen you will see your scooter listed in device.

Click on your scooter name and you will be asked to press power button on your scooter to confirm the connection. If you have used button swapped firmware ( 1 click to change mode, double click turn on/off lights ) then you need to double press on power button.

When it’s connected you will see the main screen. We will break down each section to explain.

First let’s take a look at all the buttons shown above.

FLASH: Flash the firmware you uploaded ( open zip ) or made with in-app generator.

CHANGE REGION: Allow you to change custom serial number in order to de-restrict speed limit.

OPEN ZIP: Open folder and allow you to select pre-made firmware.

SHOW PARAMS: Display firmware parameters of the firmware you made with in-app generator.

LOAD ORIGINAL: You will find official ( Stock ) DRV / BLE / BMS that matched with your scooter model.

LOAD CUSTOM DRV: It brings you to custom firmware generator section. You can make CFW or load preset.

DPC ( reg ): Direct Power Control on / off by region.

LOCK: Lock your scooter.

UNLOCK: Unlock your scooter.

REBOOT: Reboot your scooter.

MORE COMMANDS: Cruise control on / off. Shutdown scooter. KERS: Weak, Medium, Strong. Custom command.

Change Region
Load Original
Load Custom DRV

When press ” load custom DRV ” it will bring you to custom firmware manager.

Click on ” MAKE FIRMWARE “. At this point we will make a firmware with in-app generator with some recommended values.

Click on BASIC. First I will tick ” Remove Charging Mode “. This option will allow you to use external battery ( same voltage ) without putting your scooter into charging mode ( shutdown ). Second I will untick version spoof ( it’s up to you if you like to use it or not ). If tick this option the firmware will create a high version number to spoof Mi home app that your firmware is up to date so it will not ask you to update.

Power & Speed

For M365 Classic and 1S we suggest keep under 900w. For speed we will need to set max speed 1-2kmh higher. For example if you want to have speed at 25kmh set max speed to 26kmh.

Estimated draw

Current in the following rows should be thought as torque. More amperage means more torque, but also more stress on the components and motor, usually less range on single charge. It is suggested to start from factory values and proceed up only if necessary. 25A on Sport mode is already high enough that the motor cannot exert this level of torque for long without overheating. Bear in mind that the motor case temperature are only a fraction of the heat generated by coils, which are usually 50-60C hotter than the case.

Estimated draw is the ‘older’ setting for current. In practical sense, this would be the target current you’ll reach during operation, with small fluctuations based on the current elevation or speed. The ampere regulator “Maximum power” below, set the maximum phase current from the controller to the motor.

Always stay below 55A in the “Maximum Performance” segment, as anything above 55A in this segment significantly shortens the service life of the battery and motor.

For sport mode, the ampere value must be high enough that the motor or battery can carry your weight. With the 1S it should also be noted that the BMS “closes” much earlier. An increase to over 30A without an additional battery has no effect. The ampere value should not be set too high, as the battery loses voltage more quickly due to the higher current consumption, which results in shorter maximum speed routes.

Current limit was previously known as phase current limit . This is the peak envelope power on the ABC phases, measured by the ESC itself. __Treat this as hard limit, and the estimated draw as soft limit.u When unsure, you can set this to 2-3 times of the estimated draw.

DPC settings

Always off, speed based: On this mode you will have Speed based throttle algorithm instead DPC so you will able to set certain speed according to your like on each mode.

Switchable, register: has been added on 5th March 2021. This mode will activating DPC using ScooterHacking Utilty app. In this option it allows you to enable DPC in the app by activating DPC switch. It can also be automated through the Automation menu.

Switchable, brake: This option will give you the ability for 2 sets of speed, triggered by holding the brake lever when swtich on ( Police mode ). Set speed at legal limit for example set max speed at 20kmh when swtich on scooter normally you will have max speed at 20kmh. When swtich on scooter holding brake lever you will have DPC on all 3 modes to give max speed.

Always on: All 3 modes will use DPC. Speed settings will be avoid.


Changes the way the throttle reacts:
  • In speed mode, throttle position always corresponds to fractional value of the set max speed. This speed, especially with cruise control enabled, will be kept regardless of terrain or air resistance, also considering maximum current for set mode (eco/drive/sport)
  • In direct power mode, throttle position corresponds to fractional value of the max current/power set for said mode. In contrast, here the power remains constant, but the speed changes with the torque the motor needs to apply to keep you moving. This results in speeding up with low payload, low air drag or downhill, and slowing down with high payload, high air drag or uphill.
    • Direct power mode ignores any speed limits you might have set, including the global set limit.
    • Acceleration tends to be smoother, as the throttle reacts in a similar way to gas/accellerator pedal in combustion vehicles
    • In direct power mode, your scooter will try to reach the maximum speed possible, until set current limits are reached.
    • DPC mode can be disabled entirely, enabled through boot sequence with brake lever pressed (press the brake lever while turning on the scooter, and keep it pressed for 2 seconds until it’s fully on), or always enabled.
Current raising coefficient

This setting controls how is the full current applied, relative to your active current. The idea here is not to stress the motor at low rotations per minute, where its efficiency is the lowest. 16000 is the allowable maximum.

If you limit the current limit to conservative values, you can max this out, to get current-accurate DPC. This value determines how quickly your scooter gets to your provided amperes in mA “steps”.

Here we take the amperage value 25A as an example, which is in mA 25000 and possibly a calculator.

If we divide the 25000 by the 300, this results in 83 “steps”. These would be the steps that the Pro 2 has at the factory.

However, if we take the coefficient 3000 as a value and divide it by 25000 this would result in only 8 “steps”.

Fewer steps mean more acceleration, more steps, less acceleration.

The fewer steps are required to get to the 25A, the more agile the acceleration, but the efficiency also suffers

Motor start speed

Motor will not exert any torque unless this speed is reached. Please note that even when this is set to 0, the scooter won’t accelerate from dead stop. Minimum speed here is >0.01kmh represented by the value “0” on the slider.

Throttle Type

Flat: – linear throttle curve. Pulled the trigger 10% – get 10% of maximum power. Press 90% – 90% of the power.

Quadratic: – parabolic curve. Press the throttle 10% – get 10 * 10 / (100 * 100) = 1% of maximum power. Press 50% – get 50 * 50 / (100 * 100) = 25% power. Press 70% – get 70 * 70 / (100 * 100) = 50% power. 90% – 81% power, 99% – 98% power. At the start position of the throttle the power grows very slowly, while towards to the end of the throttle position, it grows with fast speed.


Current raising coefficient: How fast current will be applied ( Acceleration ). For stock battery 36v we recommended value between 1200-1500 for fast acceleration. If you are using higher voltage battery 48v you can try 2500-3000 for even more aggressive acceleration.

Motor start speed: How fast you want your motor to start. Default at 5kmh ( walking speed ) you must reach this speed to start motor. Set to 3kmh for short motor start speed. We do not recommend to set this value too low as the throttle is very sensitive, a small movement can trigger your scooter flying out of your hands.

Brake & Energy Recovery

The brake lever has a range in which braking is triggered and the brake light starts to flash (in the photo it is marked in blue), this range starts from about 15% until the brake lever is fully depressed. This range is pro-grammatically 1-130: start is 1, end is 130 (fully pressed lever). The Minimum phase current and Maximum phase current set the minimum and maximum regeneration currents, in fact it is the braking force. When the brake lever is in program position 1, regeneration is activated with the minimum current set by the Minimum phase current . When the lever is smoothly pressed, the braking force increases and the generated current increases. The growth of the current and the braking force continues until the lever is in the position specified in the Lever virtual limit parameter , in this position the regeneration current will be the maximum specified in Maximum phase current . Pressing the lever further (up to program value 130) will not change the current.

At the bottom of the photo, two examples are given:
First , we set the following parameters in the generator:
Lever virtual limit – 60
Minimum phase current – 8000 mA
Maximum phase current – 30000 mA
We get that when the brake lever is pressed by about half, the maximum level of braking will already applied. Pressing the lever further the braking force will remain maximum.

Second , the parameters are as follows:
Lever virtual limit – 115
Minimum phase current – 10000 mA
Maximum phase current – 40000 mA
In this case, the brake lever will work as in the drain, only at the beginning of pressing (when electronic braking is triggered, about 15% of pressing), the current and braking force will be 25% higher than the drain (8000 * 1.25 = 10000), and almost completely pressed state, the braking force will be 33.3% higher than the drain (30,000 * 1.333 = ~ 40,000).

Here’s my settings which I find it’s most comfortable. Current raising coefficient can set to 800 also very nice, although I leave it at default 500. KERS deactivated for free rolling. No flashing brake light. when released throttle system will still think motor brake is activated therefore brake light will start to flashing.

Cruise Control

How many seconds when you hold throttle in one position until the cruise control kick in.


In this section you will find some additional settings. Tire size and external battery voltage etc. I set to 9.5 because I’m using 10″ tires, default is 8.5 for standard tire size.

Error raising level

Check this guide for what errors will be raised with the applied settings:

Stock, unmodded scooter should have this set to level 0.
If you have higher voltage battery with no “smart” bms, set this to level 2 to prevent ESC from triggering error 21
Level 3, known as stealth level bypasses all errors. Not recommended for general usage

Stay on when scooter is locked

With this enabled, the scooter will be always on in lock mode, with blocked motor to prevent theft.

Change ESC-BMS baud rate to 76800

Enable this only if you used open source BMS, as detailed on BoToX github.

Wheel size diameter

Keep as is, if you use stock 8.5” tires. This directly affects speed limits set earlier, and should be set only in case 10” tires were put on.

Set to:
9.47 for XuanCheng tires
9.0 for Wanda P1237 tires
9.0 for Deli SA-206 tires


Battery voltage limit

Change this only if you increased battery voltage. The threshold should be maximum 4.3V per cell.

So 51.6V for 12s, 55.61 for 13s, 60.2V for 14s and 64.5 for 15s.

Finished! Time to flash

Once you have all parameters entered click on ” Finished! Time to flash “. It will bring you 2 options. 

Save Preset: Save the current firmware / settings, can be viewed or flash later.

Flash Now: You will start to flash the firmware you just made.

On web generator to finishing your CFW: Choose the right application to flash your CFW: Pretty self-explanatory. Depending on which app you use for flashing, you choose the appropriate format here. What is Current ( nominal power ): It is recommended to apply a maximum of 35A current , since the motor can withstand this without any problems in the long term based on the tip. Anything above is not recommended and is done at your own risk. You have the choice between 25A-35A, adjust it to how you like the acceleration. Don’t forget: higher amperage values draw more power from the battery, which means, among other things, less range

Once you have saved preset it will display all settings on screen. If you have saved multiple files you can easily choose between them. All files can be renamed or delete. When you load selected preset it bring you back to main screen and you can views settings via ” SHOW PARAMS ” then ” FLASH “.


When using other firmware besides ScooterHacking generator, a warning message will popup. Make sure you double check your scooter model and use correct file. If everything is correct ignore the message and proceed flashing.

Enjoy and Ride Safe

We will update all available downloads in our “Guide and Installation” page.