Bafang Ultra M620 Programming aka Taming the Beast

There’s a lot of diversity in the world of ebike power systems. Some manufacturers like Bosch, Brose, and Yamaha focus on making them as light as possible with just enough power and smooth delivery of that power, where others, like Bafang, are often criticized for not being as smooth and responsive with all that

Which one is better for your needs depends largely on your personal preferences and riding styles, but ideally, I’d like to have both! Ample power with smooth delivery can make climbing hills as much fun as descending. I also prefer powertrains that have throttles (is it really a “throttle” on an electric bike?) and are user-programmable which lets us go beyond the typical street limits of 250-750 Watts of power.

The Bafang Ultra M620 is as close as it gets to my ideal powertrain since it has a throttle and can output 1500 Watts with simple software tweaks!

When I started riding a Bafang Ultra M620-powered, full-suspension, Luna Z1 mountain bike, even at the lowest power level, the power delivery was, at best, startling, and, at worst, dangerous. That’s not a knock on Luna, necessarily, it just seems to be the preference with all of the bikes I’ve tried with this powertrain. However, when you’re dealing with so much power off road, in my opinion, it must be smooth and predictable so it doesn’t send you into a boulder or off the trail at the worst possible moment.

Thankfully, there’s a remedy though. Like its cousins the BBS02 and BBSHD, the M620 drive is programmable using an Eggrider controller and a smartphone or a programming cable and a Windows laptop with Bafang Config Tool. I have both options and they’re each great, but I prefer to use a laptop for the larger screen. If you prefer to use an Eggrider, connecting and programming will look much different than what I show below, the settings I’m using can be used with the Eggrider just the same.

So, how do we tame this beast?


Before we go any further, a word of caution here. Some of these settings can do bad things to your bike and/or your body. What is presented below works for me and my bike and I share it freely with no guarantee that it will work for you and your bike.

I relied heavily on help from the internet (thanks Karl!) in understanding these settings for myself. What I’m using is modified significantly from what my bike shipped with from the factory and from what I’ve seen others use. I made changes thoughtfully and tested them cautiously and I strongly recommend you do the same.

If you proceed, you are solely responsible for the consequences.

Step 1. Controller Assist Levels

It’s not required, but with this much power available, it’s best if we can access all 9 of the available power levels on the M620 drive, not just the 3 or 5 levels that are the default for many controllers.

My Luna Z1 came with a Bafang 860C controller that was set to 5 levels and is configurable to 3, 5, or 9, but that will vary by bike. In any case, consult with your controller’s manual to access the advanced settings to change the number of assist levels. If your controller is hard limited to 3 or 5 power levels, I’d highly recommend the Eggrider controller as an upgrade.

Following the 860C manual, I had to double press the “M” button, navigate to “Advance setting”, input passcode “1199” (not “1919”), and change assist levels from 5 to 9. There’s plenty more you can do in here, but that’s all we need right now.

Step 2. Connect to the Drive

  1. Disconnect the controller from the bike
  2. Connect the programming cable to the bike (not the controller)
  3. Power on the bike’s battery
  4. Connect the programming cable to a USB port on the computer

Step 3. Find Your COM Port

Open Windows Device Manager and look for “Ports (COM & LPT)” to find which port (COM5 shown here) the computer assigned to the cable.

Step 4. Open Bafang Config Tool

  1. Open Bafang Config Tool.
  2. Enter the COM port that was assigned by Windows.
  3. Click Connect. If you see information populate below, you know you’re connected. You should also get a message.
  4. Click on Read Flash to pull in the current programming.
  5. Click on File, Save to save a backup of the factory configuration.

Step 5. Basic Settings

Here’s where those 9 assist levels on the controller come into play. If you have fewer than 9, it uses Assist0, Assist1, and Assist 9, but has to skip some in between so the jumps are much larger.

Here are my settings. I’ll point out some particular ones I recommend and why below.

Limit Current(%) is the percentage of maximum current the drive can apply in each assist level. I like to vary the current with an exponential curve since that’s how power naturally works. If we use a linear curve like 10%, 20%, 30%, etc, when you go from Assist1 to Assist2, you’ve doubled your power, but from Assist2 to Assist3, you’ve only increased by 50%. This exponential curve starts at a very low 8% in Assist1 and increases by 37% each step for a smooth, intuitive ramp in power levels up to Assist9.

Limit Spd(%) is the percentage of maximum speed it will reach before stopping in each power level. I like to set my speeds to 100% from Assist1-Assist9 and to 1% on Assist0 to effectively disable it.

Make sure you click on Write to send the settings to the controller before moving on.

Step 6. Pedal Assist Settings

Pedal Assist (or PAS) pushes at a constant power anytime the pedals are turning regardless of how hard you are pedalling. Since the Bafang Ultra M620 has torque sensing pedals, I want to minimize the PAS output and maximize the torque sensing output.

Here are my settings. I’ll point out some particular ones I recommend and why below.

Start Current(%) very low keeps it from being jumpy.

Slow-Start Mode(1-8) in the middle gives it a smooth ramp on in power.

Keep Current(%) varies based on the assist level, so I set it very low to minimize the feeling of PAS.

Current Decay(1-8) in the middle gives it a smooth ramp off in power.

Stop Decay(x10ms) very low makes power drop off quickly when you stop peddaling.

Make sure you click on Write to send the settings to the controller before moving on.

Step 7. Throttle Settings

One of the key features of the M620 drive is having that throttle to help get through technical terrain without pedal strikes or just scoot across an intersection.

Here are my settings. I’ll point out some particular ones I recommend and why below.

Mode set to Current rather than Speed is more intuitive feeling and gives much better control at slow speeds.

Designated Assist on 9 corresponds to Assist9 for full power all the time, even when the controller is set to Assist0!

Start Current(%) very low gives you a smoother initial turn on.

Make sure you click on Write to send the settings to the controller before moving on.

Step 8. Torque Settings

Here’s the big one, the main event. This one has a lot going on.

Here are my settings. I’ll point out some particular ones I recommend and why below.

Delta Voltage is how much force you’re applying to the pedals. A lower mV number makes the drive apply more power for the same input force. I like for it to be less sensitive at low pedal forces to keep from being jumpy and make a linear ramp up in sensitivity. Starting the curve at 400mV works well for me at 165 lbs, but you may want to use 375mV, 370mV, 365mV and so on, if you weigh less and can’t physically put as much torque on the pedals.

Spd0 – Spd100 are motor speed ranges (not bike speed ranges) that apply to the next settings.

Start(Kg) is how much force we apply to the pedals before it starts pushing.

Full(Kg) is how much pedal force it takes to let it apply full power at that speed.

MinCur(%) is how much it starts applying at each speed.

MaxCur(%) is the maximum it will apply at each speed. Note the lower values at Spd0 and Spd20 since we don’t want to dump too much power into the motor until it’s spinning sufficiently fast. This protects the drivetrain if you’re trying to ride in too high of a gear with a low pedal cadence.

Make sure you click on Write to send the settings to the controller before moving on.

Step 9. Disconnect

  1. Click on “Close” to disconnect the computer from the drive
  2. Disconnect the programming cable from the bike
  3. Reconnect the controller to the drive
  4. Power up the controller and give it a test ride!


With these settings, I’m well impressed and pleased with how the bike performs both on and off road. Even on Assist9, the power delivery is smooth and predictable where it ramps up quickly if I start pedalling hard and it stops quickly when I stop. There’s barely any delay and it feels just as responsive as the drives from the big boys.

If you find any ways to make it even better, let me know!

10 thoughts on “Bafang Ultra M620 Programming aka Taming the Beast”

  1. You know nothing
    BBSHD and BBS02 use UART protocol
    Bafang Ultra M620 uses CANBUS protocol which has not yet been hacled.

    • Such confidence you have! You’re thinking of the M600 though, which is also confusingly called the Bafang Ultra. M620 is very much programmable.

    • Not currently. The program from Bafang is Windows only and I haven’t seen any versions for MacOS. If you don’t have access to a Windows laptop, I’d recommend programming using your phone and an Eggrider V2. You can always disconnect the Eggrider and reconnect the stock display and it keeps the settings.

    • Maybe. Based on their page, they say 750W continuous, 1152W peak, 25A controller. From that, I would guess they have “Limit Current” on the Basic settings page set to 24A (1152W/48V=24A).

      Use can usually increase that to 30A on the stock Bafang controller, but you do have to be mindful of the battery’s maximum output capability. With a 21AH battery, I would think 30A is reasonable, but I have no way to confirm that.

      Also, of course, if you increase the maximum output beyond what they’ve set and you have issues, I would not expect for them to honor their warranty.

  2. I have a Bafang Ultra M620, it’s the newer version with CANBUS. Display cable is triangular instead of the old round cable. How do you plug the display into the PC with the newer CANBUS ?
    I do not understand how you can program the M620 if you cannot connect the programming cable into the display and into the PC.

    • This programming method only works with the round connector UART drives. I’ve heard the CANBUS drives can be programmed, but you currently need their software and an account, but that’s hard to come by.


Leave a Comment