Bafang M820 Firmware thread

Do you know if the speed limits will change?

Update: I installed version "FAKE TAXI 20260210e1" on my wife's bike, and she complains that the motor is too smooth. Tomorrow we'll take it for a ride on the asphalt for a controlled test, and I'll share her impressions afterward.
Initial firmware "FAKE TAXI 20260210e1" review:
My wife liked the immediate power delivery of this version, which will help her on climbs with low cadence. Our ride was short due to the rain.
In my opinion, I think I'll prefer the other version "FAKE TAXI 20260210f1" with its smoother and more progressive power delivery.
 
⚡ EMTB Pro Go Pro — exclusive discounts & ad-free Peaty's 25% off & more · Ad-free browsing · Pro badge See the deals →
Initial firmware "FAKE TAXI 20260210e1" review:
My wife liked the immediate power delivery of this version, which will help her on climbs with low cadence. Our ride was short due to the rain.
In my opinion, I think I'll prefer the other version "FAKE TAXI 20260210f1" with its smoother and more progressive power delivery.

Guys,

I just finished a 40km ride with my wife, including 400m of elevation gain, and she loved it. Here are the bike specs:

My bike is a CEF50 with firmware CRX30PC4812E102006.1, 48v 720WH battery and cyclist's weight 73kg.
Wife's bike is a CEF55 with firmware FT_2026_02_10_e1, 48v 720WH battery and cyclist's weigh 84kg.

Normally, our rides have a significant speed difference, but this time I didn't need to ease off, and the battery consumption stayed at 78% and 68%.

We're super happy with the firmware's evolution.

Next week we'll be testing off-road.
 
Today I did my first proper MTB ride with the firmware "FAKE TAXI 20260210e1", 32 km and 950 mt elevation gain with average speed 18kmh using a mix of power levels but probably on average S. Ended with 63% battery, though given how the % wasn't developing as expected I'm not yet sure it can be fully trusted
 
Today I did my first proper MTB ride with the firmware "FAKE TAXI 20260210e1", 32 km and 950 mt elevation gain with average speed 18kmh using a mix of power levels but probably on average S. Ended with 63% battery, though given how the % wasn't developing as expected I'm not yet sure it can be fully trusted
I'll check the battery percentage in the fake taxi after riding without recharging the battery, then switch back to the Bafang 48V version to see if the percentage values change.
 
A 13A firmware (like the standard 43V bafang firmware) is close to 700W using the 48V battery.
We need to differentiate electrical input power and mechanical output power of motor. All other manufacturer are specifying it as mechanical output power on a chainring. On Bafang display is showing input electrical power (simple multiplication of current voltage and input current)

If you have 48V battery and 13A max. You have electrical input peak cca 650W , and it means cca 520w on the wheel.

To compensate wrong battery reading is great K1 BBR device. ;)
 
I asked Jean about new firmware (change from 75nm to 80nm), and this is the reply:

the Bafang technicians told me that the parameters they previously announced were conservative data, and the ones announced now are the actual ones. So, in reality, the old and new versions are the same, and there is no updated firmware.
 
Numbers like power or torque are not meant just to made them up "in a conservative way" . ;) If you wont raise phase current, you cant have more torque.
 
Initial firmware "FAKE TAXI 20260210e1" review:
My wife liked the immediate power delivery of this version, which will help her on climbs with low cadence. Our ride was short due to the rain.
In my opinion, I think I'll prefer the other version "FAKE TAXI 20260210f1" with its smoother and more progressive power delivery.

I didn't try e1, but I tried "FAKE TAXI 20260210f1" and it is a great improvement over stock - agree it is smooth and I noticed that in stock there was power drop after around 60 rpm cadence. And above that is was very harsh jump in power.

For fake taxi - it looks like no such power drop on low cadence
 
I didn't try e1, but I tried "FAKE TAXI 20260210f1" and it is a great improvement over stock - agree it is smooth and I noticed that in stock there was power drop after around 60 rpm cadence. And above that is was very harsh jump in power.

For fake taxi - it looks like no such power drop on low cadence
How did your battery % track? I've noticed that with FakeTaxi 20260210e1 it sits on 100% for a very long time (eg 25 km) before starting to drop, so it seems unfortunately the firmware has a bug with the battery %. Other than that yes have to agree the power is way stronger and smoother than stock. I have a Rise EP8 (2022 year) which is set to 85nm (500w max) and the M820 with FakeTaxi is clearly stronger, i need to do some comparison rides and see just how much. Technically the M820 with max 620w at the battery (approx 500w at the cranks) should have the same power as the EP8 but it feels stronger on the same sections.
 
How did your battery % track? I've noticed that with FakeTaxi 20260210e1 it sits on 100% for a very long time (eg 25 km) before starting to drop, so it seems unfortunately the firmware has a bug with the battery %. Other than that yes have to agree the power is way stronger and smoother than stock. I have a Rise EP8 (2022 year) which is set to 85nm (500w max) and the M820 with FakeTaxi is clearly stronger, i need to do some comparison rides and see just how much. Technically the M820 with max 620w at the battery (approx 500w at the cranks) should have the same power as the EP8 but it feels stronger on the same sections.
Observing what was discussed in the Fake Taxi group.

ORG 13S
100%: 53,29 V
90%: 52,58 V
80%: 50,99 V
70%: 49,39 V
60%: 48,79 V
50%: 48,00 V
40%: 47,49 V
30%: 46,80 V
20%: 46,19 V
10%: 44,78V
5%: 42,30V
0%: 41,99V

MOD 13S
100%: 52,91 V
90%: 50,89 V
80%: 50,27 V
70%: 49,21 V
60%: 48,05 V
50%: 46,99 V
40%: 45,77 V
30%: 44,34 V
20%: 42,64 V
10 %: 40,43 V
5 %: 39,39 V
0 %: 37,30 V

It makes me believe that the "MOD" will start to slow down from 90% of the original performance, and yes, they drain the battery a bit more than the original, which I think is fair considering the power delivery.
 
How did your battery % track?
Normal. It was depleting without any issues (stuck at 100%, etc). Overal - it was a 32.82 km ride with 1,103 m elevation (around 2 hours) - tarmac only and battery dropped from 100% to 59%
 
Reverse-engineering the M820 torque table – rider torque thresholds instead of motor limits

Hello,

while working with OpenBafangTool on the Bafang M820, I started looking more closely at how the torque table actually affects the behaviour of the motor.
After testing multiple configurations, I am fairly convinced that many conclusions about the motor performance are based on comparing firmware presets, not on understanding how the assist curve is really calculated.

Different default profiles are often compared, and the resulting ride feel is then interpreted as a limitation of the motor itself.
From my testing this does not seem correct.

The biggest influence comes from the torque table, not from the hardware limits.
The parameters Start torque, Max torque and Return torque behave like rider torque thresholds used by the internal assist algorithm, not like motor torque limits.

Start torque
→ rider torque where assist begins

Max torque
→ rider torque where full assist is reached

Return torque
→ rider torque where assist starts to decrease again when input drops

This can be verified easily by lowering Max torque.
The motor feels stronger and reaches full assist earlier, even though current limits and max power stay unchanged.
That would not be possible if the value defined motor output.

To get a realistic reference, I converted the torque values to actual pedal force.

With 165 mm crank length:
1 Nm at the torque sensor ≈ 0.62 kg pedal force (horizontal crank position)

This gives reasonable real-world numbers:

Max torque 20 → ~12 kg pedal force
Max torque 15 → ~9–10 kg
Max torque 12 → ~7–8 kg

These values correspond quite well to typical rider force at moderate cadence.
From this perspective many default tables seem to assume higher rider torque than what is actually applied in normal riding, especially at medium and high cadence.

As a result the motor feels less responsive, even though the hardware would allow more assist.
My riding style is mostly constant cadence around 50–80 rpm, because I shift gears and try to stay in an efficient range.

At lower cadence more force per stroke is possible, at higher cadence less force but higher speed.
So I tuned the torque thresholds depending on cadence range instead of using one fixed behaviour.

Example setup:

Level 2 (40–60 rpm)
Start torque 2
Max torque 15
Return torque 1

Level 3 (60–80 rpm)
Start torque 2
Max torque 12
Return torque 1

Level 4 (80–100 rpm)
Start torque 2
Max torque 9
Return torque 1

With this configuration full assist is reached at roughly 7–10 kg pedal force, which feels much closer to natural riding than the default settings.

Fade time also has a large influence on the perceived behaviour, so I use higher fade at low cadence for smoothness and lower fade at higher cadence for more direct response.

Start pulse = 1
Stop delay ≈ 10 ms

I also lowered the torque thresholds slightly because I am currently not at peak fitness after winter.

Increasing the values later is an easy way to increase rider effort without changing assist level.

From my point of view the M820 has significantly more usable range than what most default setups show, and tuning the torque table based on real rider torque makes a bigger difference than switching between different firmware presets.

Would be interesting to hear if others have tried to map the torque table to real pedal force instead of just copying firmware settings.

openbafang table.webp
 
Reverse-engineering the M820 torque table – rider torque thresholds instead of motor limits

Hello,

while working with OpenBafangTool on the Bafang M820, I started looking more closely at how the torque table actually affects the behaviour of the motor.
After testing multiple configurations, I am fairly convinced that many conclusions about the motor performance are based on comparing firmware presets, not on understanding how the assist curve is really calculated.

Different default profiles are often compared, and the resulting ride feel is then interpreted as a limitation of the motor itself.
From my testing this does not seem correct.

The biggest influence comes from the torque table, not from the hardware limits.
The parameters Start torque, Max torque and Return torque behave like rider torque thresholds used by the internal assist algorithm, not like motor torque limits.

Start torque
→ rider torque where assist begins

Max torque
→ rider torque where full assist is reached

Return torque
→ rider torque where assist starts to decrease again when input drops

This can be verified easily by lowering Max torque.
The motor feels stronger and reaches full assist earlier, even though current limits and max power stay unchanged.
That would not be possible if the value defined motor output.

To get a realistic reference, I converted the torque values to actual pedal force.

With 165 mm crank length:
1 Nm at the torque sensor ≈ 0.62 kg pedal force (horizontal crank position)

This gives reasonable real-world numbers:

Max torque 20 → ~12 kg pedal force
Max torque 15 → ~9–10 kg
Max torque 12 → ~7–8 kg

These values correspond quite well to typical rider force at moderate cadence.
From this perspective many default tables seem to assume higher rider torque than what is actually applied in normal riding, especially at medium and high cadence.

As a result the motor feels less responsive, even though the hardware would allow more assist.
My riding style is mostly constant cadence around 50–80 rpm, because I shift gears and try to stay in an efficient range.

At lower cadence more force per stroke is possible, at higher cadence less force but higher speed.
So I tuned the torque thresholds depending on cadence range instead of using one fixed behaviour.

Example setup:

Level 2 (40–60 rpm)
Start torque 2
Max torque 15
Return torque 1

Level 3 (60–80 rpm)
Start torque 2
Max torque 12
Return torque 1

Level 4 (80–100 rpm)
Start torque 2
Max torque 9
Return torque 1

With this configuration full assist is reached at roughly 7–10 kg pedal force, which feels much closer to natural riding than the default settings.

Fade time also has a large influence on the perceived behaviour, so I use higher fade at low cadence for smoothness and lower fade at higher cadence for more direct response.

Start pulse = 1
Stop delay ≈ 10 ms

I also lowered the torque thresholds slightly because I am currently not at peak fitness after winter.

Increasing the values later is an easy way to increase rider effort without changing assist level.

From my point of view the M820 has significantly more usable range than what most default setups show, and tuning the torque table based on real rider torque makes a bigger difference than switching between different firmware presets.

Would be interesting to hear if others have tried to map the torque table to real pedal force instead of just copying firmware settings.

View attachment 180004
I looked at this but got shouted down a bit as the consensus was nothing could be changed via BafangTool and winter had arrived where the greater power of the M510 was needed in our muddy Brit conditions.

Have a look at Bafang M820 thread
 
I looked at this but got shouted down a bit as the consensus was nothing could be changed via BafangTool and winter had arrived where the greater power of the M510 was needed in our muddy Brit conditions.

Have a look at Bafang M820 thread
Yes, that matches what I see as well.

While testing different torque table settings I also monitored the power values on the Bafang display to make sure that the motor limits were not changing.

With my current setup, using the assist levels from the display, I get about 530 W on the second highest level (set to 90%), which is exactly in line with the manufacturer specification.

On the highest level (100%) the motor reaches around 580 W, which also fits with the expected limit for a 48 V / 12 A configuration.
I rarely use that level because I do not want to stress the motor permanently.

This behaviour seems independent from the firmware file itself.
What really matters is the battery voltage setting and the current limit.

With my 48 V battery (840 Wh) the controller does not allow more than 12 A to be written with OpenBafangTool.
That results in about 48 V × 12 A ≈ 576 W, which is exactly what I see on the display.

There were some firmware files circulating that claimed higher current (for example 13 A at 48 V), but when people compared them, they turned out to be identical to the 48 V / 12 A versions, and my measurements also never showed more than 12 A.

Because of that I am quite sure that the motor power limit is not what changes the riding feel in most cases.

What makes a big difference for me is the torque table, especially the Max torque thresholds, because they change how much rider force is needed to reach full assist, even when the maximum power stays the same.
 
I would agree but with some additional caveats. I have been running mine on 14S batteries ( 52v ) without a problem and can see just under 650W’s at the battery ( max value logged ). Both the 13A and 12A firmware versions seem to have the max limit set at 12A.

The main caveat for me was that speed has an influence on the torque settings for some reason as per the documented M620 engine. I have one of the K1 devices connected and can change the speed settings easily. Change the speed max and you get a whole new feel to the engine.. it was this point I stopped using the bike as winter had hit and with the Brit mud and slop, the M820 is just not able to keep up with my riding partners on FF bikes.

My M510 has just died so the M820 is now back in the being used zone. I’ll try your settings.
 
Last edited:
Fake taxi f1 firmware is fantastic - today we had a short season opening gravel/mtb race with e-mtb category (without prizes) - I finished first, here is strava: Log In | Strava

New FW is super smooth, I was pedaling all the time - I really like it. Was all time in boost mode, ended up with 32% battery.
 
Fake taxi f1 firmware is fantastic - today we had a short season opening gravel/mtb race with e-mtb category (without prizes) - I finished first, here is strava: Log In | Strava

New FW is super smooth, I was pedaling all the time - I really like it. Was all time in boost mode, ended up with 32% battery.
Any chance you can download your settings on the BESST and BafangTool software so that we can compare the numbers. Also what max speed is you bike set to.

Thanks.
 
Any chance you can download your settings on the BESST and BafangTool software so that we can compare the numbers. Also what max speed is you bike set to.

What settings You mean? I have Faxe taxi f1 firmware (48V battery) and I have 60 kph limit via bafang display secret menu
 
What settings You mean? I have Faxe taxi f1 firmware (48V battery) and I have 60 kph limit via bafang display secret menu
In the BafangTool software and BESST you can see the settings of the parameters. Its no problem if you don't have the BESST tool as I can download the file here later and have a look and perhaps try this firmware.

Bafang secret menu, which display are you using ?

Thanks.
 
I would agree but with some additional caveats. I have been running mine on 14S batteries ( 52v ) without a problem and can see just under 650W’s at the battery ( max value logged ). Both the 13A and 12A firmware versions seem to have the max limit set at 12A.

The main caveat for me was that speed has an influence on the torque settings for some reason as per the documented M620 engine. I have one of the K1 devices connected and can change the speed settings easily. Change the speed max and you get a whole new feel to the engine.. it was this point I stopped using the bike as winter had hit and with the Brit mud and slop, the M820 is just not able to keep up with my riding partners on FF bikes.

My M510 has just died so the M820 is now back in the being used zone. I’ll try your settings.
Yes, I appreciate the feedback, it helps a lot when trying to understand how the controller really behaves.

From what I can see in OpenBafangTool, the cadence ranges are defined by the levels 0–5, which seem to represent steps of about 20 rpm up to 120 rpm. These values appear to be fixed.

Since Bafang specifies support up to around 120 rpm, it makes sense that the assist is calculated based on both rider torque and cadence.

Because of that I started looking at the torque table as a rider input threshold, not as motor output.

By measuring pedal force directly (for example with a hanging scale at the pedal) it becomes easier to estimate which torque values correspond to realistic rider effort, and then adjust the Max torque values depending on when full assist should be reached.

Start torque defines when assist begins,
Max torque defines when full assist is reached,
and with the fade / pulse / delay parameters it is possible to control how strong and how smooth the assist comes in.

This makes it possible to tune the motor either for a more natural feeling or for stronger and earlier support.

Since I live in Switzerland and ride a lot of steep climbs, I currently use a setup with earlier and more continuous assist, so the motor reaches full support at moderate pedal force instead of only at very high input.
 
Any chance you can download your settings on the BESST and BafangTool software so that we can compare the numbers. Also what max speed is you bike set to.

Thanks.
Hi,
I don't know what settings you are interested in, but everything is in the pdf with the Fake Taxi firmware.

PT Fake Taxi.webp
 
Yes, I appreciate the feedback, it helps a lot when trying to understand how the controller really behaves.

From what I can see in OpenBafangTool, the cadence ranges are defined by the levels 0–5, which seem to represent steps of about 20 rpm up to 120 rpm. These values appear to be fixed.

Since Bafang specifies support up to around 120 rpm, it makes sense that the assist is calculated based on both rider torque and cadence.

Because of that I started looking at the torque table as a rider input threshold, not as motor output.

By measuring pedal force directly (for example with a hanging scale at the pedal) it becomes easier to estimate which torque values correspond to realistic rider effort, and then adjust the Max torque values depending on when full assist should be reached.

Start torque defines when assist begins,
Max torque defines when full assist is reached,
and with the fade / pulse / delay parameters it is possible to control how strong and how smooth the assist comes in.

This makes it possible to tune the motor either for a more natural feeling or for stronger and earlier support.

Since I live in Switzerland and ride a lot of steep climbs, I currently use a setup with earlier and more continuous assist, so the motor reaches full support at moderate pedal force instead of only at very high input.
The speed table is speed-dependent, not cadence-dependent. Even if you modify the speed table, it has no effect on engine behavior, that's why the FT project was created.. Developer info
 
The speed table is speed-dependent, not cadence-dependent. Even if you modify the speed table, it has no effect on engine behavior, that's why the FT project was created.. Developer info
Interesting to see how far you have moved the numbers from the manufacturers. Looking foward to the 52V 14A version to try 😀
 
Keep reading
    Browse all

    Similar Threads

    Community Stats

    Since 2018
    668K
    Messages
    40,722
    Members
    Join 30,000+ Riders, it's free!
    Back
    Top