SHFW is a custom firmware available for flashing via the Scooterhacking Utility app. Configuring it might be challenging for new users. This guide aims to provide a quick and easy way to apply the important basics. The understanding aspect of all this can be overwhelming, but it will come as a side effect of your own testing and thinking as we can’t do that for you.
Join the discussions on Telegram and Discord.
To install SHFW, follow these steps:
Download our official app Utility, alternatively for wide range device support, including iOS, check out Luna.
Supported Scooter Models:
Ninebot G30, G30L: You can flash this firmware if the DRV version is at 1.7.3 or below. If your DRV is 1.7.3, you need to select “Attempt Downgrade” before SHFW. For DRV versions above 1.7.3, you’ll need an ST-Link. Refer to this for more information.
Ninebot G2, F2, F2 Plus, F2 Pro: Every regional model is compatible, needs to be unlocked via ST-Link.
Ninebot ESx: Every version is supported.
Exx Series: [Not E2, E2 Plus, E2 Pro. Only the older E22, E45, etc] You can flash SHFW if the DRV version is below 2.7.0. Else you will need to use a ST-Link.
Ninebot F-Series: [Older SHFW 0.3.6] You can flash this firmware if the DRV version is below 5.7.0. Else you will need to use a ST-Link. There are online guides available for this process. The app will prompt for updates even if there’s none, be aware. Needs to flash with up to date Utility, then configured with Utility 2.5. Do not enable brake boost.
Ninebot D-Series: [Currently not working] There is an experimental support for D-Series using the F-Series firmware. It’s not known at which DRV version you will need a ST-Link. The guides should be identical to the F-Series.
Xiaomi Scooters: If the BLE version is at 1.5.5 or above, then you’ll need to ST-Link downgrade the dashboard. ST-Link Downgrade Guide. Attempt DRV downgrade via our app (ScooterHacking Utility) if flashing SHFW fails with a supported BLE version.
Reflasher, Webflasher and ScooterFlasher are programs used for ST-Linking, choose either one if it’s needed.
| Model | Compatible BLE | Compatible DRV |
|---|---|---|
| ST-Link if incompatible | ST-Link if incompatible | |
| Ninebot G30 | All | Up to 1.7.3 |
| Ninebot G2 | All | ST-Link |
| Ninebot F2, F2 Plus, F2 Pro | All | ST-Link |
| Xiaomi Essential, 1s, Pro 2, 3 | Below 1.5.5 | All |
| Ninebot EsX | All | All |
| Ex Series | All | Below 2.7.0 |
| Ninebot E2, E2D, E2 Pro | N/A | N/A |
| Ninebot F-Series | All | Below 5.7.0 |
| Ninebot D-Series | All | Experimental (F-Series firmware, unknown) |
Flash Procedure:
| Motor Serial Number (SN) | Generation | Models |
|---|---|---|
| Starts with 6 | First Generation | Most older models |
| Starts with 9 | Second Generation | G30Ps, some G30Lx models |
| Includes PCAH | Third Generation | G30P |
| Includes PAAH | Third Generation | G30E |
| Includes PADH/PADJ | Third Generation | G30D |
Please be aware that the information provided below is intended for practical use, but it should be used with caution. Field weakening will not be energy efficient.
To achieve the top speed for Ninebot G30, follow these configurations:
You can set eco and drive to lower values, e.g. 10A eco, 25A drive. Drive will use less current since we won’t enable field weakening.
Go to the field weakening tab and enable field weakening for sport mode:
Default tire size for Max models are 10”, but set 9.4” on G30 to get the dash speed to match GPS speed.
Under Motor Settings, select 20 or 24khz.
To achieve the top speed for G2 and F2, follow these configurations:
You can set eco and drive to lower values, e.g. 10A eco, 25A drive. Drive will use less current since we won’t enable field weakening.
Go to the field weakening tab and enable field weakening for sport mode:
You can set eco and drive to lower values, e.g. 10A eco, 20A drive. Drive will use less current since we won’t enable field weakening.
You can set eco and drive to lower values, e.g. 10A eco, 20A drive. Drive will use less current since we won’t enable field weakening.
For Xiaomi Essential & 1S, use these configurations:
You can set eco and drive to lower values, e.g. 10A eco, 18A drive. Drive will use less current since we won’t enable field weakening.
Go to the field weakening tab and:
Under Motor Settings, select 20.
For Ninebot EsX, Ex, use these configurations:
You can set eco and drive to lower values, e.g. 10A eco, 18A drive. Drive will use less current since we won’t enable field weakening.
You only need to touch this setting once you changed the resistors on the esc.
This project is licensed under the MIT License.
Please review the LICENSE file for detailed terms and conditions.
Note: The MIT License is applied to this project. While it allows for wide use and modification, it comes with no warranties or guarantees. The project contributors and maintainers are not responsible for any issues, damages, or liabilities that may arise from the use of this software.
This guide has been written by lekrsu, who can be reached on Discord with the tag lekrsu and on Telegram with the username lekrsu. You’re welcome to send a pull request if you feel like the information needs correction.
This guide can be viewed in a prettier form here.