JBD BMS Arduino library

In this project, I collect any information about BMS that is compatible with the JBDTool program.

Public Chat
Similar projects worth following

I worked with such a BMS in my project and realized that there is little information about it on the net.

This is where I collect my work experience.
If you have researched the issue, write to me and we will publish it in the community.

LH_SP10S006 20180612-1.hex

Basic firmware for BMS (you need bootloader firmware to flash the cleaned chip). How to change the main firmware see

hex - 62.11 kB - 06/04/2019 at 08:23


Windows driver for working with serial port.

x-zip-compressed - 2.17 MB - 12/14/2018 at 10:16


Adobe Portable Document Format - 635.63 kB - 12/14/2018 at 09:43



Stable program for Windows

x-zip-compressed - 325.18 kB - 12/14/2018 at 09:43



Manufacturer Documentation (incomplete)

sheet - 33.76 kB - 12/14/2018 at 09:42


  • Bluetooth and BMS

    Alexander08/13/2021 at 12:54 0 comments

    I myself have not used this bms with bluetooth. But people write interesting notes about using this tool.

    I decided to post these observations here.


    Nigel found the default password for working with BMS via bluetooth: 000000.

  • Investigation of the communication protocol of the BMS and the computer with the JBDTool program

    Alexander08/13/2021 at 12:33 0 comments

    Standard requests to BMS in the form of a request for basic data, secondary voltage and names in the ASCII line are parsed in the file (from the manufacturer). I will not analyze them. Further, the deals with undocumented features in the form of reading / writing EEPROM.

    Process of reading configs (EEPROM)

    1. To switch to the EEPROM mode, you need to send the first packet to write to the zero register of the value: 0x56 0x78.

    In response, zeros arrive (see figure below).

    2. Then read (0xA5) registers from 0x10 to 0xA2 and 0xAA.

    In figure below shown meaning registers (but I'm not sure about the accuracy of everything).

    3. After reading, the write command to the register 0x01.

    Without the start packet and the final, an error (0x80) is returned when the configuration registers are requested or changed.

    Error counter

    1 BMS stores in memory the fact of errors that can be configured in JBD Tools. It is useful to read them every time you start a device with BMS to analyze past events. After reading them, you need to pack them up so that next time you can only read actual events.

    Reading is possible only in EEPROM reading mode (see step 1).

    2 The command to read the register 0xDD 0xA5 0xAA 0x00 0xFF 0x56 0x77. Register that stores error counters 0xAA. The table below shows the meaning of each byte in sending a reply from BMS to the request 0xAA. High byte in front.

    Byte in the packageMeaning
    4-5SC count
    6-7CHGOC (Charge Over Current)
    8-9DSGOC (Discharge Over Current)
    10-11COVP (Cell Over Voltage Protection)
    12-13CUVP (Cell Under Voltage Protection)
    14-15CHGOT (Charge Over Temperature)
    16-17CHGUT (Charge Under Temperature)
    18-19DSGOT (Discharge Over Temperature)
    20-21DSGUT (Discharge Under Temperature)
    22-23POVP (Pack Over Voltage Protection)
    24-25PUVP (Pack Under Voltage Protection)

    3 Reset errors Error reset occurs by writing to configuration register 0x01. The package: 0xDD 0x5A, 0x01, 0x02, 0x28, 0x28, 0xFF, 0xAD, 0x77.

  • Overcurrent protection

    Alexander10/07/2019 at 11:01 0 comments

    BMS have very interested overcurrent protection.

    BMS have three levels overcurrent protection:

    - slow protection;

    - fast protection;

    - short-circuit protection.

    For using this protections checkbox "Doubled Overcurrent and short-circuit value" mast be reset (see below).

    So how do you set up all three levels?

    1. Set correct "Current Res" value.

    At BMS installed shunts (see below).

    The program window JbdTools necessary to set the resistance of the current-measuring stage. But if you just calculate this resistance formula conductivities addition, it does not mean that you set the correct value of the shunt. In my BMS sets 1 mOhm, but only 0.5 mOhm current calculation is correct.

    So you need to:

    - set the calculated resistance;

    - load the battery for a specific load;

    - to adjust the value of the shunt in the program so that the current was determined correctly.

    2. Set DSGOC

    This value must correspond to the maximum current that flows for a long time (> 1 sec). In my case it is 30 A, 3 seconds.

    3. Set DSGOC2

    Current value  set in the field voltage.

    If I want a quick disconnect from the current of 50 A at 8 ms, then I install DSGOC2 I*R = 50 A * 0.0005 Ohm = 25 mV.

    4. Set SC Value

    It is short-circuit value (see paragraph 3).

    Set the time of the reset of this error (see below).

  • Wrote a library for Arduino

    Alexander09/05/2019 at 14:04 0 comments
  • BMS current consumption

    Alexander06/11/2019 at 11:52 0 comments

    I measured the currents of the consumption of the BMS itself.

    The results are below.

    ModeCurrent consumption
    The load is not connected, the LED on the board is not on.70 uA, and every five seconds 150..200 uA
    The load is not connected, the LED on the board is not on, BMS connected to PC through UART100 uA, and every five seconds 200 uA
    LED on the board is on18 mA

  • Change of firmware

    Alexander06/04/2019 at 08:25 0 comments

    The manufacturer shared the firmware for BMS from 12.06.2018. We really liked this firmware, as it works adequately with the button. The images below show how the firmware changes. Firmware In here.

View all 6 project logs

Enjoy this project?



RIEZCOMP wrote 12/26/2023 at 11:19 point

Hello, what if you want to connect via RS485 using the TTL to RS485 module? 

Please modify the library for RS485 connection

  Are you sure? yes | no

BRUER96 wrote 07/17/2022 at 20:47 point

hello everyone who has firmware from this bms JBD-SP30S005 V1.5 

  Are you sure? yes | no

noumeer.piracha wrote 03/19/2022 at 12:03 point

I have issue with my BMS which is 10s SN18210736, when I connect the UART module with my computer and set the com setting and click on start or read EEPROM it does not display anything and just displays 'Reading data . . . .'  but a week before it is displaying data and I tried to connect it with esp32 through UART protocol and now it does not display anything. I don't know what's the issue now. Can anybody help me in it?

  Are you sure? yes | no

zeus2006i wrote 04/28/2021 at 02:21 point

If the battery is charged properly, after how long does the charging process resume?

  Are you sure? yes | no

Alexander wrote 08/13/2021 at 12:14 point

Didn't research this issue. If you check, let me know.

  Are you sure? yes | no

kamioy wrote 02/18/2021 at 15:47 point


I purchased an BMS controller (JBD-SP30S005 V1.3). Recently, I incorrectly connected the charger (without grounding) when the BMS was connected to the computer's USB. As a result, the computer does not see the USB (the safety resistor on the board is blown out). Can I replace the microcontroller AtMega328p and download the firmware?

  Are you sure? yes | no

Alexander wrote 08/13/2021 at 12:19 point

Not sure if this is a good idea.

If we have the main firmware, then I don't have the bootloader firmware.
I tried to read the firmware through the dots on the board (MISO, MOSI, SCK), but the firmware is encrypted. So I bricked up one BMS  😞.

  Are you sure? yes | no

Antonio wrote 10/13/2020 at 19:04 point

Hi! I have the same problem! I tried to update the BMS firmware with your file and it didn't went through, and now the BMS is not working! The BMS is JBD SP155008C, 14S 100 Amps. Can you help me?

  Are you sure? yes | no

Alexander wrote 08/13/2021 at 12:20 point

Not sure if this is a good idea.

If we have the main firmware, then I don't have the bootloader firmware.I tried to read the firmware through the dots on the board (MISO, MOSI, SCK), but the firmware is encrypted. So I bricked up one BMS  😞.

  Are you sure? yes | no

Passerby77 wrote 11/02/2019 at 18:34 point

Hello Friend, pease i need help, i  need flash BMS JBD_SP15S020.hex my bms don't work, because I do update to my bms, But I made a flash of another bms LH_SP10S006 20180612-1.hex i find it here in this page in file

Naw my bms stop working, cannot read the cell voltages, i need flash This BMS, ( JBD-SP15S020 : 30A 48V ), Please Help.

  Are you sure? yes | no

Alexander wrote 12/08/2019 at 21:04 point

You must contact the seller. My firmware was provided by my seller.

  Are you sure? yes | no

Dennis wrote 07/18/2019 at 00:07 point

Hello there. This page has been very helpful, thank you! But I have one problem. I updated my bms firmware and now it cannot read the cell voltages. Any idea whats wrong?

  Are you sure? yes | no

Alexander wrote 08/07/2019 at 06:34 point

Hello, my friend.
Hmm. What is your BMS. What firmware file?

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates