• Hello ES! We could use some help to get us past the finish line on building the new knowledgebase for the forum.
    Can you donate? Please see our fundraising page. Thank you!

"FAKE TAXI Project" - the modified original firmware for Bafang M820 motor

Hi all,

FAKE TAXI 2022.05.22

Link: Proton Drive
File: FT_2026_05_22_public.zip
SHA256: 9e1977fa385cff3a6e500b52f16b241c9f97d54a249d5bf32128534f9fa2f046

This is the result of the entire team's work. Many thanks to maglo18, mdi and Radolf.

The archive contains a PDF with all the details. I'll add some comments later.

rekrezeb
 
Hi all,

FAKE TAXI 2022.05.22

Link: Proton Drive
File: FT_2026_05_22_public.zip
SHA256: 9e1977fa385cff3a6e500b52f16b241c9f97d54a249d5bf32128534f9fa2f046

This is the result of the entire team's work. Many thanks to maglo18, mdi and Radolf.

The archive contains a PDF with all the details. I'll add some comments later.

rekrezeb
any plan to do with M510 or M560?
 
FAKE TAXI 2022.05.22
I have a 48V battery but I flashed "FT_2026_05_22_i1" and the result is AWESOME...
650W delivered with very little effort.
Thank you @rekrezeb and also to @maglo18, @mdi and @Radolf. You created something that changed completely the behaviour of my weak 820. ;)
I uploaded the FW using Canable, a Windmeile cable and I raised the Amps to 14.
The only thing I would like to change is the overrun, I'd prefer it to be shorter, can someone point me to the right parameter in Canable?
Thank you again for all the hard work you did.

P.S. - compared with my friend's Specialized... no difference in power but the 820 is better, more... aggressive.
 
I'd prefer it to be shorter, can someone point me to the right parameter in Canable?
for the first two/three times I waited for very long, listening at every sound and movement of the motor... nothing happened.

Have you ever tried the M820 EBiCS firmware with the latest bin file?!

When I stop pedaling, the motor power is cut off instantly. A slight overrun would feel much more natural and pleasant.
 
Last edited:
Hello m820 drivers, any comment on my issue ? Anyone else experience this ? Is this sound normal ?

I gonna get a replacement motor from Bafang but just be curious..

 
A few comments regarding release 2026.05.22, since I promised some additional explanations.

Version naming clarification

Version naming remains unchanged. That means new version i/j (13S battery 13A) still has a 'higher' designation than g/h (14S battery). Renaming everything at this stage would create unnecessary confusion. The same applies to the historical v/w naming for 11S configurations. To simplify things:

Stock Bafang setups (for users running original batteries or wanting factory power levels):
  • a/b: 10S, 36V, 15A
  • c/d: 12S, 43V, 13A
  • e/f: 13S, 48V, 12A

'Overclocker' setups for users who previously ran stock firmware but wanted more power from an additional cell:
  • v/w: 11S on 36V/15A firmware
  • i/j: 13S on 43V/13A firmware
  • g/h: 14S on 48V/12A firmware

Torque Assist feature

In this release, the former Speed Limit parameter has been completely repurposed. It no longer controls speed limits for individual assist levels. Global speed limiting still works as before, but the per-level parameter now acts as a Torque Assist multiplier, adjustable from 0% to 200%, with 100% as the default. For compatibility reasons, CANable, BESST and BafangGo still expose values from 0 to 100. Internally, each step now equals 2%.

Examples:
20 = 40%
50 = 100%
80 = 160%

After flashing, the default value is 50 (100%), so any slider-based configuration software will show the slider positioned in the middle of its range by default. Moving the slider left/down reduces assistance, while moving it right/up increases assistance.

Power Limit changes

Previously, the Power Limit parameter behaved more like a power factor applied after all calculations were completed. As a result, values below 100% didn't actually limit power. Instead, they scaled the entire power curve downward. Now, Power Limit is a true power cap. It doesn't affect how quickly power ramps up; it only defines the maximum power level. Default values remain unchanged. If you look at the graph in the README, you'll notice that power ramp-up is now identical across all assist levels. One important note: this assumes Torque Assist remains at its default 100% value. If Torque Assist is reduced below 100% and matched to the Power Limit value, motor behavior becomes very similar to previous releases. After discussing this internally, we decided to keep Torque Assist at 100% by default so that Power Limit only affects the maximum power output and not the power ramp-up behavior. Users can still tune it however they prefer. With default settings, lower assist levels will feel noticeably more responsive than before. Power ramps up similarly to the old Boost mode, but still respects the same maximum power limits:
  • ECO: 25%
  • TOUR: 35%
  • SPORT: 50%
  • SPORT+: 70%
  • BOOST: 100%

In summary:
  • Torque Assist controls power ramp-up behavior.
  • Power Limit controls maximum power.

For example, a high Torque Assist value combined with a low Power Limit allows the motor to reach the target power level quickly while still respecting a lower maximum output. Previously, achieving a similar feel required reaching near-full power conditions before the scaling factor produced the desired result.

Torque compensation improvements

In the original Bafang firmware, cadence-based torque compensation only operated between 26 and 66 RPM, with a maximum compensation factor of 300%. The new implementation extends compensation all the way to 116 RPM, with a maximum factor of 450%. This value comes from theoretical calculations of how much measured torque decreases at 116 RPM compared to the same rider power output at 26 RPM. This should significantly improve the experience for riders who prefer high cadence and reduce the feeling that the motor is 'running out of steam' at higher RPMs.

Battery discharge maps and Speed Tables

The new battery discharge maps were developed by our testers to make better use of available battery capacity. Likewise, the latest Speed Table adjustments are also based on extensive tester feedback.

v2.5 changes

The final change worth mentioning is the removal of the additional power factor that was applied after torque-sensor power calculations in v2.5-based firmware. That extra factor effectively limited rider input force, which made those versions feel smoother and less aggressive. With that mechanism removed, v2.5-based releases are now much closer in behavior to the v3.3 branch. It's possible that future releases will eventually drop the separate v3.3 versions entirely. At this point, firmware versions b/d/f/h/j/w can be configured independently for each assist level to behave either like the legacy v2.5 releases or very similarly to the a/c/e/g/i/v (v3.3-based) versions. By default, the updated v2.5 releases will feel more similar to v3.3. However, lowering Torque Assist values (default is 100%) on each assist level will restore the softer behavior many users are familiar with. This also makes it possible to combine the strengths of both firmware branches. For example, you can configure certain assist levels with a more aggressive power delivery for steep climbs, while keeping others smoother and more predictable for everyday riding. Instead of choosing between two different firmware behaviors, you can now tailor each assist level independently to suit different riding conditions. The long-term goal is to make the v2.5-based firmware the main branch, since it is more feature-rich and already includes improvements such as smooth Walk Assist startup. There is only one remaining feature from the v3.3 branch that still needs to be ported before v2.5 can be configured to behave identically. Since that hasn't been implemented yet, both firmware variants are still being released for every battery configuration in this version.

Regarding other motors (reply to @sponsje, @DaStivi and @temon10)

The project was originally designed only for the M820, but:
  • M420 - I came across a bike with this motor that I liked, so if I end up buying it, who knows. I've got a 20+ year old trekking 'analog' bike that I still enjoy riding, so in theory I don't really need an e-bike at all. Most of my rides are long-distance routes over fairly flat terrain, but I've been thinking an e-bike could help me either extend my range or improve my average speed. Right now, my practical limit is around 100+ km at 22–23 km/h average. If I were to go electric, I'd most likely go for a trekking-style e-bike as well, where Bafang-based setups may be more likely to use motors like the M420 rather than the M820. As far as I know, the M420 uses a different MCU, but that's not a huge problem by itself. What I don't know is whether the motor can be flashed via CANable and whether there are any public firmware dumps that could be used as a starting point. So far I've only found two firmware files, both marked as 'TEST'. Are Speed Table changes on the M420 possible at the moment?
  • New M820 revision - after analyzing the firmware, I can say with 100% certainty that the current Fake Taxi release cannot be ported directly. First, the firmware uses a different start address. Adjusting patched binaries for that isn't nearly as straightforward as recompiling source code. Second, according to information from Chili, the motor uses a different PCB revision. Even flashing the entire firmware image, including the old bootloader, with an ST-Link most likely wouldn't help, since I assume there are significant hardware differences involved. The structure of the new firmware is very similar to what we see on the M510, so everything would need to be analyzed from scratch. I'm not saying it's impossible, but this takes time, so at this point Fake Taxi simply won't work on the new M820 hardware revision.
  • M510/M560 - if the new M820 firmware eventually gets analyzed, then due to the similarities mentioned above, a version for these motors could theoretically be developed as well. Originally, I assumed there was no point because EBiCS was already being developed. But thinking about it now, both projects can coexist. Fake Taxi focuses on tuning and extending stable factory firmware, while EBiCS is still actively evolving and remains a development project. Until EBiCS reaches a mature production-ready stage, flashing Fake Taxi can be compared to ECU tuning on a car: improving performance and modifying certain factory behaviors while keeping the original platform intact.
 
Until EBiCS reaches a mature production-ready stage
Sorry, EBiCS for Bafang is in a mature stage already, there are very positive feedbacks meanwhile. I don't know, what should be improved at the moment. We just started to add the EBiCS specific descriptions to the Canable tool, to make the usage more user friendly. Adding a third line per field for the Fake Taxi Project meaning of the fields would be possible also, of course.
The EBiCS firmware let you set everything yourself, with additional features like a hidden code to switch between road mode and offroad mode, torque override, extended boost and many more features, that the original firmware doesn't provide. For details see the Wiki!
Even the Tongsheng OSF has copied the extended boost function in the latest update ;)
Bafang M560
I have tested your Ebics v.0.0079, and the overall feel, smoothness, and assistance are now indeed as good as in systems from Bosch, Yamaha, etc.
 
Last edited:
Have you ever tried the M820 EBiCS firmware with the latest bin file?!
Yes, I already did this before trying the latest FT update, but with unsatisfactory results.
The calibration went on for a long time and the chainring was rotating very fast.
(I had to try few times to get the calibration starting)
After the calibration you suggested "Start a new Canable session first and read in the default values of EBiCS!"
I think I did that because I had to input the value of battery voltage, amps, wheel etc.
In the end the motor was very weak and behaved strangely, even making noise.

It could be my fault. I don't know what setting I need to set in Canable to get EBiCS run smootly.
I'll try again next WE, this time I was in a hurry.
 
Sorry, EBiCS for Bafang is in a mature stage already, there are very positive feedbacks meanwhile. I don't know, what should be improved at the moment. We just started to add the EBiCS specific descriptions to the Canable tool, to make the usage more user friendly. Adding a third line per field for the Fake Taxi Project meaning of the fields would be possible also, of course.
The EBiCS firmware let you set everything yourself, with additional features like a hidden code to switch between road mode and offroad mode, torque override, extended boost and many more features, that the original firmware doesn't provide. For details see the Wiki!
Even the Tongsheng OSF has copied the extended boost function in the latest update ;)
Yes, I already did this before trying the latest FT update, but with unsatisfactory results.
The calibration went on for a long time and the chainring was rotating very fast.
(I had to try few times to get the calibration starting)
After the calibration you suggested "Start a new Canable session first and read in the default values of EBiCS!"
I think I did that because I had to input the value of battery voltage, amps, wheel etc.
In the end the motor was very weak and behaved strangely, even making noise.

It could be my fault. I don't know what setting I need to set in Canable to get EBiCS run smootly.
I'll try again next WE, this time I was in a hurry.
Can you write in the thread regarding the correct firmware please.
 
`FT Bafang APP M820` is an Android app for BLE communication with a Bafang M820 motor running the custom `Fake Taxi` firmware. It allows the user to connect to the bike, read system information and configure basic assist parameters. The available functions are mapped and organized to make motor setup and tuning easier. The app works locally and does not require an internet connection.
Main features:
- Bluetooth LE scanning and connection,
- authentication compatible with the Fake Taxi protocol,
- reading controller, display, battery and sensor information,
- assist configuration: speed and current/power limits,
- charts showing assist levels,
- acceleration and start angle adjustment,
- presets with the option to save and load custom user settings,
- Polish and English language support.
The app is intended for `Bafang M820` with `Fake Taxi 2026.05.22` firmware. It has been tested only with the `DPC245 v3` display. Use at your own risk.

Inspiration comes from user bart594
 

Attachments

  • FTapp4.jpeg
    FTapp4.jpeg
    98.6 KB · Views: 28
  • FTapp3.jpeg
    FTapp3.jpeg
    85.4 KB · Views: 24
  • FTapp2.jpeg
    FTapp2.jpeg
    89.2 KB · Views: 24
  • FTapp1.jpeg
    FTapp1.jpeg
    102.4 KB · Views: 28
  • Bafang FT M820 v0.034.zip
    1.6 MB · Views: 22
Algunos comentarios sobre la versión 2026.05.22, ya que prometí algunas explicaciones adicionales.

Aclaración sobre la nomenclatura de las versiones.

La nomenclatura de las versiones permanece sin cambios. Esto significa que la nueva versión i/j (batería 13S 13A) sigue teniendo una designación "superior" a la g/h (batería 14S). Cambiar el nombre de todo en esta etapa crearía confusión innecesaria. Lo mismo se aplica a la nomenclatura histórica v/w para las configuraciones 11S. Para simplificar las cosas:

Configuraciones estándar de Bafang (para usuarios que utilizan baterías originales o que desean niveles de potencia de fábrica):
  • a/b: 10S, 36V, 15A
  • c/d: 12S, 43V, 13A
  • e/f: 13S, 48V, 12A

Configuraciones 'Overclocker' para usuarios que anteriormente usaban el firmware de fábrica pero querían más potencia de una celda adicional:
  • v/w: 11S y firmware de 36V/15A
  • i/j: 13S y firmware de 43V/13A
  • g/h: 14S con firmware de 48V/12A

Función de asistencia de par

En esta versión, el parámetro anterior de límite de velocidad se ha rediseñado por completo. Ya no controla los límites de velocidad para cada nivel de asistencia. La limitación de velocidad global sigue funcionando como antes, pero el parámetro por nivel ahora actúa como un multiplicador de asistencia de par, ajustable del 0 % al 200 %, con el 100 % como valor predeterminado. Por motivos de compatibilidad, CANable, BESTST y BafangGo siguen mostrando valores del 0 al 100 %. Internamente, cada paso equivale ahora al 2 %.

Ejemplos:
20 = 40%
50 = 100%
80 = 160%

Tras la actualización, el valor predeterminado es 50 (100%), por lo que cualquier software de configuración con control deslizante mostrará este en la posición central de su rango por defecto. Mover el control deslizante hacia la izquierda/abajo reduce la asistencia, mientras que muevelo hacia la derecha/arriba la aumenta.

Cambios en el límite de potencia

Anteriormente, el parámetro Límite de potencia se comportaba más como un factor de potencia aplicado después de completar todos los cálculos. Como resultado, los valores inferiores al 100 % no limitaban la potencia. En cambio, reducían toda la curva de potencia. Ahora, el Límite de potencia es un verdadero tope de potencia. No afecta la rapidez con la que aumenta la potencia; solo define el nivel máximo de potencia. Los valores predeterminados permanecen sin cambios. Si observa el gráfico en el archivo README, notará que el aumento de potencia ahora es idéntico en todos los niveles de asistencia. Una nota importante: esto supone que la Asistencia de par se mantiene en su valor predeterminado del 100 %. Si la Asistencia de par se reduce por debajo del 100 % y se ajusta al valor del Límite de potencia, el comportamiento del motor se vuelve muy similar al de versiones anteriores. Después de discutir esto internamente, decidimos mantener la Asistencia de par en el 100 % por defecto para que el Límite de potencia solo afecte la potencia máxima de salida y no el comportamiento de aumento de potencia. Los usuarios aún pueden ajustarlo como prefieran. Con la configuración predeterminada, los niveles de asistencia más bajos se sentirán notablemente más sensibles que antes. La potencia aumenta de forma similar al antiguo modo Boost, pero sigue respetando los mismos límites máximos de potencia:
  • ECO: 25%
  • TOUR: 35%
  • DEPORTE: 50%
  • DEPORTE+: 70%
  • BOOST: 100%

En resumen:
  • El sistema Torque Assist controla el comportamiento de aceleración de la potencia.
  • El límite de potencia controla la potencia máxima.

Por ejemplo, un valor alto de asistencia de par combinado con un límite de potencia bajo permite que el motor alcance rápidamente el nivel de potencia deseado, respetando al mismo tiempo una potencia máxima inferior. Anteriormente, para lograr una sensación similar, era necesario alcanzar condiciones de potencia casi máximas antes de que el factor de escala produjera el resultado deseado.

Mejoras en la compensación de par

En el firmware original de Bafang, la compensación de par basada en la cadencia solo funcionaba entre 26 y 66 RPM, con un factor de compensación máximo del 300 %. La nueva implementación extiende la compensación hasta las 116 RPM, con un factor máximo del 450 %. Este valor proviene de cálculos teóricos sobre la disminución del par medido a 116 RPM en comparación con la misma potencia generada por el ciclista a 26 RPM. Esto debería mejorar significativamente la experiencia de los ciclistas que prefieren una cadencia alta y reducir la sensación de que el motor pierde potencia a altas revoluciones.

Mapas de descarga de la batería y tablas de velocidad.

Los nuevos mapas de descarga de la batería fueron desarrollados por nuestros evaluadores para aprovechar mejor la capacidad disponible. Asimismo, los últimos ajustes de la tabla de velocidad también se basan en los comentarios de nuestros evaluadores.

Cambios de la versión 2.5

El último cambio que cabe mencionar es la eliminación del factor de potencia adicional que se aplicaba tras los cálculos de potencia del sensor de par en el firmware basado en la versión 2.5. Este factor adicional limitaba la fuerza de entrada del ciclista, lo que hacía que esas versiones se sintieran más suaves y menos agresivas. Al eliminarse este mecanismo, las versiones basadas en la versión 2.5 se comportan ahora mucho más como la rama 3.3. Es posible que en futuras versiones se eliminen por completo las versiones 3.3 independientes. En este momento, las versiones de firmware b/d/f/h/j/w se pueden configurar de forma independiente para cada nivel de asistencia, de modo que se comportan como las versiones 2.5 anteriores o de forma muy similar a las versiones a/c/e/g/i/v (basadas en la versión 3.3). Por defecto, las versiones 2.5 actualizadas se sentirán más similares a la versión 3.3. Sin embargo, al reducir los valores de asistencia de par (el valor predeterminado es 100%) en cada nivel de asistencia, se recuperará el comportamiento más suave al que muchos usuarios están acostumbrados. Esto también permite combinar las ventajas de ambas ramas de firmware. Por ejemplo, puedes configurar ciertos niveles de asistencia con una entrega de potencia más agresiva para subidas pronunciadas, mientras que otros se mantienen más suaves y predecibles para el uso diario. En lugar de elegir entre dos comportamientos de firmware diferentes, ahora puedes personalizar cada nivel de asistencia de forma independiente para adaptarlo a diferentes condiciones de conducción. El objetivo a largo plazo es convertir el firmware basado en la versión 2.5 en la rama principal, ya que es más completo y ya incluye mejoras como el inicio suave de la función de asistencia al caminar. Solo queda una función de la rama 3.3 que aún necesita ser adaptada antes de que la versión 2.5 pueda configurarse para comportarse de forma idéntica. Como aún no se ha implementado, ambas variantes de firmware se siguen publicando para cada configuración de batería en esta versión.

Respecto a otros motores (responder a @sponsje, @DaStivi y @temon10)

El proyecto fue diseñado originalmente solo para el M820, pero:
  • M420 - Encontré una bicicleta con este motor que me gustó, así que si termino comprándola, quién sabe. Tengo una bicicleta de trekking "analógica" de más de 20 años que todavía disfruto, así que en teoría no necesito una bicicleta eléctrica. La mayoría de mis recorridos son rutas de larga distancia por terreno bastante plano, pero he estado pensando que una bicicleta eléctrica podría ayudarme a aumentar mi autonomía o mejorar mi velocidad media. Ahora mismo, mi límite práctico es de unos 100+ km a una media de 22-23 km/h. Si me pasara a la electricidad, probablemente también optaría por una bicicleta eléctrica de trekking, donde las configuraciones basadas en Bafang pueden tener más probabilidades de usar motores como el M420 en lugar del M820. Hasta donde sé, el M420 usa un MCU diferente, pero eso no es un gran problema en sí mismo. Lo que desconozco es si el motor se puede reprogramar mediante CANable y si existen volcados de firmware públicos que puedan servir como punto de partida. Hasta ahora solo encontró dos archivos de firmware, ambos marcados como «TEST». ¿Es posible modificar la tabla de velocidad de la M420 actualmente?
  • Nueva revisión del M820: tras analizar el firmware, puedo afirmar con total seguridad que la versión actual de Fake Taxi no se puede portar directamente. En primer lugar, el firmware utiliza una dirección de inicio diferente. Adaptar los binarios parcheados a esto no es tan sencillo como recompilar el código fuente. En segundo lugar, según información de Chili, el motor utiliza una revisión de PCB diferente. Incluso flashear la imagen completa del firmware, incluyendo el antiguo gestor de arranque, con un ST-Link probablemente no ayudaría, ya que supongo que existen diferencias de hardware significativas. La estructura del nuevo firmware es muy similar a la del M510, por lo que habría que analizarlo todo desde cero. No digo que sea imposible, pero esto lleva tiempo, así que, por ahora, Fake Taxi simplemente no funcionará con la nueva revisión de hardware del M820.
  • M510/M560: si finalmente se analiza el nuevo firmware M820, entonces, debido a las similitudes mencionadas anteriormente, teóricamente también se podría desarrollar una versión para estos motores. Originalmente, supusimos que no tenía sentido porque EBiCS ya estaba en desarrollo. Pero pensándolo bien, ambos proyectos pueden coexistir. Fake Taxi se centra en la optimización y extensión del firmware de fábrica estable, mientras que EBiCS aún está en desarrollo y sigue siendo un proyecto en desarrollo. Hasta que EBiCS alcance una etapa madura y lista para la producción, flashear Fake Taxi se puede comparar con la optimización de la ECU en un automóvil: mejorar el rendimiento y modificar ciertos comportamientos de fábrica manteniendo intacta la plataforma original.

A few comments regarding release 2026.05.22, since I promised some additional explanations.

Version naming clarification

Version naming remains unchanged. That means new version i/j (13S battery 13A) still has a 'higher' designation than g/h (14S battery). Renaming everything at this stage would create unnecessary confusion. The same applies to the historical v/w naming for 11S configurations. To simplify things:

Stock Bafang setups (for users running original batteries or wanting factory power levels):
  • a/b: 10S, 36V, 15A
  • c/d: 12S, 43V, 13A
  • e/f: 13S, 48V, 12A

'Overclocker' setups for users who previously ran stock firmware but wanted more power from an additional cell:
  • v/w: 11S on 36V/15A firmware
  • i/j: 13S on 43V/13A firmware
  • g/h: 14S on 48V/12A firmware

Torque Assist feature

In this release, the former Speed Limit parameter has been completely repurposed. It no longer controls speed limits for individual assist levels. Global speed limiting still works as before, but the per-level parameter now acts as a Torque Assist multiplier, adjustable from 0% to 200%, with 100% as the default. For compatibility reasons, CANable, BESST and BafangGo still expose values from 0 to 100. Internally, each step now equals 2%.

Examples:
20 = 40%
50 = 100%
80 = 160%

After flashing, the default value is 50 (100%), so any slider-based configuration software will show the slider positioned in the middle of its range by default. Moving the slider left/down reduces assistance, while moving it right/up increases assistance.

Power Limit changes

Previously, the Power Limit parameter behaved more like a power factor applied after all calculations were completed. As a result, values below 100% didn't actually limit power. Instead, they scaled the entire power curve downward. Now, Power Limit is a true power cap. It doesn't affect how quickly power ramps up; it only defines the maximum power level. Default values remain unchanged. If you look at the graph in the README, you'll notice that power ramp-up is now identical across all assist levels. One important note: this assumes Torque Assist remains at its default 100% value. If Torque Assist is reduced below 100% and matched to the Power Limit value, motor behavior becomes very similar to previous releases. After discussing this internally, we decided to keep Torque Assist at 100% by default so that Power Limit only affects the maximum power output and not the power ramp-up behavior. Users can still tune it however they prefer. With default settings, lower assist levels will feel noticeably more responsive than before. Power ramps up similarly to the old Boost mode, but still respects the same maximum power limits:
  • ECO: 25%
  • TOUR: 35%
  • SPORT: 50%
  • SPORT+: 70%
  • BOOST: 100%

In summary:
  • Torque Assist controls power ramp-up behavior.
  • Power Limit controls maximum power.

For example, a high Torque Assist value combined with a low Power Limit allows the motor to reach the target power level quickly while still respecting a lower maximum output. Previously, achieving a similar feel required reaching near-full power conditions before the scaling factor produced the desired result.

Torque compensation improvements

In the original Bafang firmware, cadence-based torque compensation only operated between 26 and 66 RPM, with a maximum compensation factor of 300%. The new implementation extends compensation all the way to 116 RPM, with a maximum factor of 450%. This value comes from theoretical calculations of how much measured torque decreases at 116 RPM compared to the same rider power output at 26 RPM. This should significantly improve the experience for riders who prefer high cadence and reduce the feeling that the motor is 'running out of steam' at higher RPMs.

Battery discharge maps and Speed Tables

The new battery discharge maps were developed by our testers to make better use of available battery capacity. Likewise, the latest Speed Table adjustments are also based on extensive tester feedback.

v2.5 changes

The final change worth mentioning is the removal of the additional power factor that was applied after torque-sensor power calculations in v2.5-based firmware. That extra factor effectively limited rider input force, which made those versions feel smoother and less aggressive. With that mechanism removed, v2.5-based releases are now much closer in behavior to the v3.3 branch. It's possible that future releases will eventually drop the separate v3.3 versions entirely. At this point, firmware versions b/d/f/h/j/w can be configured independently for each assist level to behave either like the legacy v2.5 releases or very similarly to the a/c/e/g/i/v (v3.3-based) versions. By default, the updated v2.5 releases will feel more similar to v3.3. However, lowering Torque Assist values (default is 100%) on each assist level will restore the softer behavior many users are familiar with. This also makes it possible to combine the strengths of both firmware branches. For example, you can configure certain assist levels with a more aggressive power delivery for steep climbs, while keeping others smoother and more predictable for everyday riding. Instead of choosing between two different firmware behaviors, you can now tailor each assist level independently to suit different riding conditions. The long-term goal is to make the v2.5-based firmware the main branch, since it is more feature-rich and already includes improvements such as smooth Walk Assist startup. There is only one remaining feature from the v3.3 branch that still needs to be ported before v2.5 can be configured to behave identically. Since that hasn't been implemented yet, both firmware variants are still being released for every battery configuration in this version.

Respecto a otros motores (responder a @sponsje, @DaStivi y @temon10)

El proyecto fue diseñado originalmente solo para el M820, pero:
  • M420 - Encontré una bicicleta con este motor que me gustó, así que si termino comprándola, quién sabe. Tengo una bicicleta de trekking "analógica" de más de 20 años que todavía disfruto, así que en teoría no necesito una bicicleta eléctrica. La mayoría de mis recorridos son rutas de larga distancia por terreno bastante plano, pero he estado pensando que una bicicleta eléctrica podría ayudarme a aumentar mi autonomía o mejorar mi velocidad media. Ahora mismo, mi límite práctico es de unos 100+ km a una media de 22-23 km/h. Si me pasara a la electricidad, probablemente también optaría por una bicicleta eléctrica de trekking, donde las configuraciones basadas en Bafang pueden tener más probabilidades de usar motores como el M420 en lugar del M820. Hasta donde sé, el M420 usa un MCU diferente, pero eso no es un gran problema en sí mismo. Lo que desconozco es si el motor se puede reprogramar mediante CANable y si existen volcados de firmware públicos que puedan servir como punto de partida. Hasta ahora solo he encontrado dos archivos de firmware, ambos marcados como «TEST». ¿Es posible modificar la tabla de velocidad del M420 actualmente?
  • Nueva revisión del M820: tras analizar el firmware, puedo afirmar con total seguridad que la versión actual de Fake Taxi no se puede portar directamente. En primer lugar, el firmware utiliza una dirección de inicio diferente. Adaptar los binarios parcheados a esto no es tan sencillo como recompilar el código fuente. En segundo lugar, según información de Chili, el motor utiliza una revisión de PCB diferente. Incluso flashear la imagen completa del firmware, incluyendo el antiguo gestor de arranque, con un ST-Link probablemente no ayudaría, ya que supongo que existen diferencias de hardware significativas. La estructura del nuevo firmware es muy similar a la del M510, por lo que habría que analizarlo todo desde cero. No digo que sea imposible, pero esto lleva tiempo, así que, por ahora, Fake Taxi simplemente no funcionará con la nueva revisión de hardware del M820.
  • M510/M560: si finalmente se analiza el nuevo firmware M820, entonces, debido a las similitudes mencionadas anteriormente, teóricamente también se podría desarrollar una versión para estos motores. Originalmente, supuse que no tenía sentido porque EBiCS ya estaba en desarrollo. Pero pensándolo bien, ambos proyectos pueden coexistir. Fake Taxi se centra en la optimización y extensión del firmware de fábrica estable, mientras que EBiCS aún está en desarrollo y sigue siendo un proyecto en desarrollo. Hasta que EBiCS alcance una etapa madura y lista para la producción, flashear Fake Taxi se puede comparar con la optimización de la ECU en un automóvil: mejorar el rendimiento y modificar ciertos comportamientos de fábrica manteniendo intacta la plataforma original.
Hola, quienes usábamos la versión (a/b: 10S, 36V, 15A) ahora podemos usar la versión Overclocker (v/w: firmware de 11S y 36V/15A) si queremos más potencia. ¿Cuáles son las diferencias? ¿Es posible usar ambos firmwares? Gracias.
 
  • M510/M560 - if the new M820 firmware eventually gets analyzed, then due to the similarities mentioned above, a version for these motors could theoretically be developed as well. Originally, I assumed there was no point because EBiCS was already being developed. But thinking about it now, both projects can coexist. Fake Taxi focuses on tuning and extending stable factory firmware, while EBiCS is still actively evolving and remains a development project. Until EBiCS reaches a mature production-ready stage, flashing Fake Taxi can be compared to ECU tuning on a car: improving performance and modifying certain factory behaviors while keeping the original platform intact.

As a previous owner of M820 with FT , a and new owner of M560 RS, please please try to implement your software for M510/M560 series too.
 
Last edited:
I have a 48V battery but I flashed "FT_2026_05_22_i1" and the result is AWESOME...
650W delivered with very little effort.
Thank you @rekrezeb and also to @maglo18, @mdi and @Radolf. You created something that changed completely the behaviour of my weak 820. ;)
I uploaded the FW using Canable, a Windmeile cable and I raised the Amps to 14.
The only thing I would like to change is the overrun, I'd prefer it to be shorter, can someone point me to the right parameter in Canable?
Thank you again for all the hard work you did.

P.S. - compared with my friend's Specialized... no difference in power but the 820 is better, more... aggressive.
I've also just loaded the "FT_2026_05_22_i1" and agree its awesome. I used Besst Pro to install and now need to look into the parameter adjustments to see how I can get more aggressive power input, the M820 already feels stronger than my old Rise EP8 but I'd like to get it the same or more aggressive feeling than the EP801, will play round over the next few days and see.

Overall a big thanks to Rekrezeb, Maglo18 and whoever else got us here, the M820 is now the awesome motor I was originally looking for!
 
Back
Top