JFBMS Master User Manual
JFBMS Master User Manual
This guide explains how to connect, configure, test, and update the JFBMS Master. It is written for users who are new to VESC Tool and battery-management systems.
Which guide do I need? Use this guide if your pack has a JFBMS Master. If your Slaves connect directly to a controller running JF Link, use the JF Link User Manual instead.
Important Safety Information
WARNING: JFBMS Master is intended for high-voltage lithium battery systems. Incorrect wiring or settings can cause electric shock, fire, battery damage, or serious injury.
- Only work on the battery if you understand high-voltage battery safety.
- Use suitable fuses, insulation, wiring, connectors, and protective equipment.
- Never guess the order of the cell-balance wires.
- Do not charge the battery until all cell voltages and temperatures are correct.
The firmware is still under active development. During initial use, closely monitor the battery system and report software bugs or unexpected behaviour to JetFleet.
1. What the JFBMS Master Does
The JFBMS Master is the main controller of the battery-management system. It receives cell-voltage and temperature data from the slave boards and uses this information to control charging, balancing, battery percentage, and communication with VESC motor controllers.
- Monitors individual cell voltages and temperatures
- Controls battery charging
- Balances cells
- Measures charging current
- Calculates battery percentage, Ah, and Wh
- Communicates with VESC controllers over the main CAN bus
- Supports Bluetooth and WiFi
- Automatically enters sleep and shutdown modes
The Master must be used with at least one JFBMS Slave board. The slaves measure the cells; the Master makes the decisions.
2. What You Need
- JFBMS Master
- One or more JFBMS Slave boards
- Correct cell-balance wiring
- Temperature sensors
- USB-C data cable
- Computer with VESC Tool installed
- Battery information: cell count, capacity in Ah, chemistry, and charging limits
Download VESC Tool from the official VESC Project website. Use a USB data cable, not a charge-only cable.
3. How the System Is Connected
- The battery cells are connected to the Slave boards.
- The Slave boards are connected to the Master's SLAVE CAN BUS port.
- The Master's ESC CAN BUS port is connected to the VESC controllers (optional).

JFBMS Master connectors
| Connector | Connect to |
|---|---|
| CHG + / GND (XT30) | Charger output |
| BAT + / GND (XT30) | Battery pack + and pack negative |
| ESC CAN BUS (5V, CAN H, CAN L, GND) | VESC controller CAN port. Optional: needed only if the controller should see the cell data and BMS limits. |
| SLAVE CAN BUS (5V, CAN H, CAN L, GND) | First Slave. The Slaves are daisy-chained from here. |
| USB-C | Computer, for setup and firmware updates |
Never swap the two CAN ports. The Slaves must be on SLAVE CAN BUS and the controller on ESC CAN BUS. Check the polarity of CHG and BAT before plugging in.
The BMS does not replace correct battery construction. The battery still requires appropriate fuses, insulation, wiring, connectors, and other safety components.
JFBMS is a charge-only BMS: discharge current does not pass through it, so the discharge path must have its own correctly rated fuse.
Balance Wire Connection (each Slave)
- Each Slave has two monitoring chips. IC1 (lower stack) takes 3 to 16 cells, IC2 (upper stack) 0 or 3 to 16 cells, so one Slave covers up to 32 cells.
- Up to 16 cells: wire everything to IC1 and set Cells IC2 to 0. Above 16 cells: split the cells evenly between IC1 and IC2 (for example 10 + 10 for 20S).
- If an IC has unused inputs, connect them to the last used cell of that IC, as shown in the wiring diagrams of the Slave manual.
- With several Slaves, Slave 1 covers the bottom of the pack (starting at pack negative), Slave 2 the next block, and so on. Do not overlap or skip cells.
- Cells must be connected in the correct order. A wrong order forces a large current through the monitoring chip and destroys it immediately. Check every balance wire with a multimeter before plugging it in.
In the diagrams the black wire is the lowest cell negative, the red wire the highest cell positive of each IC, and the red bundle shows unused inputs tied to that top cell. TS1 and TS2 are the optional thermistor connectors.

Up to 16S: use only the right half (IC1). The board can be cut in half along the dashed line to save space.

17S to 32S: use both ICs and split the cells evenly (here 20S = 10 + 10). Set Cells IC1 = 10 and Cells IC2 = 10.

32S: 16 cells on each IC.
Only cut the board in half if you use 16 cells or fewer. After cutting, IC2 no longer exists, so Cells IC2 must be 0.
Connecting Several Slaves (CAN)
- Each Slave has two identical 4-pin CAN connectors (5V, CAN_H, CAN_L, GND). Use one as input and the other to continue to the next Slave.
- Daisy-chain the boards: Master SLAVE CAN BUS port → Slave 1 → Slave 2 → ... Connect pin to pin: 5V to 5V, CAN_H to CAN_H, CAN_L to CAN_L, GND to GND.
- Give every Slave its own ID (1, 2, 3...) matching its position in the pack, starting at pack negative. See section 4.
- Each Slave monitors its own block of cells. The battery blocks themselves can be connected in series or in parallel.
- With a Master, the Slaves are never connected to the controller directly. Only in a JF Link system without a Master are the Slaves plugged into the controller's CAN bus, to report cell voltages.

Two Slaves daisy-chained, each monitoring 32 cells. The top connector goes to the Master SLAVE CAN BUS port (or to the controller in a JF Link system without a Master).
Connection Order
- Connect the balance connector starting with the lowest wire (pack negative), then the remaining wires from the lowest to the highest cell.
- Connect thermistors and the Slave CAN cable (no particular order).
- Connect the Slave chain to the Master SLAVE CAN BUS port, then BAT + / GND to the battery, and optionally the ESC CAN BUS port to the controller (5V to 5V, CAN H to CAN H, CAN L to CAN L, GND to GND).
To disconnect, reverse the order: unplug the balance wires from the highest to the lowest cell.
4. Configure the Slave Boards First
Configure every Slave board before configuring the Master. Connect and configure one Slave at a time through USB.
Slave IDs
Slave IDs must start at 1 and continue without gaps.
| Slave | Cells monitored | Slave ID |
|---|---|---|
| Slave 1 | Cells 1–32 | 1 |
| Slave 2 | Cells 33–64 | 2 |
For a 64S battery, Slave 1 monitors cells 1–32 and Slave 2 monitors cells 33–64. Never use duplicate IDs or leave gaps.
Connect a Slave to VESC Tool
- Connect one Slave directly to the computer using USB-C.
- Open VESC Tool.
- Select the correct USB port.
- Click Connect.
- The device should appear as JFBMS_SLAVE.

Connect to the Slave: Connection, select its COM port, click Connect
Slave Settings
| Setting | What it means | What to set |
|---|---|---|
| Slave ID | Address of the Slave board | 1, 2, 3, etc. |
| CAN Baud Rate | Speed of the private Slave bus | 500K |
| Cells IC1 | Cells connected to monitoring chip 1 | Actual number, 3–16 |
| Cells IC2 | Cells connected to monitoring chip 2 | Actual number, or 0 if unused |
| BQ1 External Temperature Sensor | Sensor connected to IC1 | Enable only if fitted |
| BQ2 External Temperature Sensor | Sensor connected to IC2 | Enable only if fitted |
| NTC Resistance | Thermistor resistance | Usually 10 kΩ |
| NTC Beta | Thermistor B-value | Usually 3435 |
The settings are under JFBMS Slave in the left menu, split over three tabs:

Slave CAN tab: Slave ID and CAN Baud Rate

Cell Configuration tab: cells wired to IC1 and IC2 (here 6 + 6 = 12S)

Temperature Sensors tab: enable only the NTCs that are fitted
The cell count must exactly match the cells connected to that Slave. After changing the settings, click Write, restart the Slave (Terminal > Reboot in the VESC Tool menu, then reconnect), and repeat the process for the next board.
Only enable temperature inputs that have a sensor physically connected. An enabled but disconnected sensor can block charging.
To check one Slave on its own, open BMS Data while connected to it and enable BMS polling in the right-side menu. You should see only the cells wired to that Slave.

Slave BMS Data: cell voltages of this Slave only
5. Connect the Master
- Connect the battery and all configured Slave boards correctly.
- Connect the Master to the computer using USB-C.
- If the Master is asleep or shut down, connect USB or the charger to wake it.
- Open VESC Tool.
- Select the correct USB port and click Connect.
The device should appear as JFBMS_MASTER. The default Bluetooth name is VESC BMS. Use USB for the first setup.

Connect to the Master: Connection, select its COM port, click Connect
6. Master Settings
Open JFBMS Master in the left menu. The settings are split over tabs (CAN, WiFi, Bluetooth, JFBMS Slaves, Pack, Charging, Balancing, Sleep and Shutdown). For a basic setup change the following values:
| Setting | What it means | Recommended setting |
|---|---|---|
| CAN ID | Master address on the main CAN bus | Default 3, unless already used |
| CAN Baud Rate | Speed of the main CAN bus to the ESCs | Must match the ESCs, normally 500K |
| Number of Slaves | Number of Slave boards in the system | Actual number of Slaves |
| Battery Capacity | Battery capacity used for battery percentage | Actual battery capacity |
| Cell Voltage Empty | Voltage considered empty | Usually 3.10 V for standard Li-ion |
| Cell Voltage Full | Voltage considered full | Usually 4.20 V for standard Li-ion |
Example for a 20 Ah, 64S Li-ion battery with two Slaves:
- CAN ID: 3
- CAN Baud Rate: 500K
- Number of Slaves: 2
- Battery Capacity: 20 Ah
- Cell Voltage Empty: 3.10 V
- Cell Voltage Full: 4.20 V

Master CAN tab: CAN ID and baud rate of the main (VESC) CAN bus

JFBMS Slaves tab: number of Slave boards

Pack tab: capacity and state-of-charge settings (screenshot from a 12S LiFePO₄ test pack, your values will differ)
Other Pack tab settings:
| Setting | What it means | Default |
|---|---|---|
| Voltage SOC Smoothing | How slowly the voltage-based battery percentage follows changes | 10 |
| Use Coulomb Counting for SOC | Count charge in and out (Ah) instead of estimating from voltage | False |
| Minimum Counter Current | Currents below this are ignored by the Ah/Wh counters | 0.3 A |
After changing the settings, click Write and restart the Master (Terminal > Reboot in the VESC Tool menu, then reconnect).
The CAN Baud Rate setting applies to the main CAN bus connected to the VESC controllers. The private Slave bus is fixed at 500K.
7. Battery Chemistry and Charging
The default voltage settings are intended for standard Li-ion or Li-polymer cells. Do not use Li-ion settings for LiFePO₄ cells.
For LiFePO₄ or another chemistry, use the voltage and temperature limits specified by the cell manufacturer.
In the Charging section, check the maximum charge current, charge voltage, and temperature limits. The charge current must not exceed the limit of the BMS, charger, battery cells, wiring, connectors, or cooling system.
The default maximum charge current is approximately 12 A. Do not increase it unless the complete system is designed and cooled for the higher current.
Charging Settings
| Setting | What it means | Default (Li-ion) |
|---|---|---|
| Charge Start Voltage | Charging may start only if the highest cell is below this | 4.15 V |
| Charge End Voltage | Charging stops when the highest cell reaches this | 4.20 V |
| Charge Minimum Voltage | Charging is blocked if any cell is at or below this (damaged or deeply discharged cell) | 3.00 V |
| Minimum / Maximum Cell Temperature for Charging | Charging allowed only between these cell temperatures (needs NTCs) | 0 / 45 °C |
| Maximum PCB Temperature for Charging | Master board temperature limit | 85 °C |
| Min Charge Current | Below this the charge session ends (charger finished or unplugged) | 0.5 A |
| Max Charge Current | Charging is cut and a fault latched above this | 12 A |
| Fast Charge Overcurrent Protection | Enables the fast hardware overcurrent trip | True |
| Fast Charge Overcurrent | Fast hardware trip level. Keep it above Max Charge Current | 15 A |

Charging tab (screenshot from a 12S LiFePO₄ test pack, your values will differ)
Balancing Settings
| Setting | What it means | Default |
|---|---|---|
| Balance Start Difference | A cell this much above the lowest cell starts balancing | 15 mV |
| Balance Stop Difference | Balancing of a cell stops when it is within this of the lowest cell | 8 mV |
| Balance Minimum Voltage | No balancing while any cell is below this | 3.50 V |
| Balance Maximum Current | Balancing pauses while the pack current is above this | 1 A |
| Max Balance Channels | Cells balanced at the same time per IC. 0 disables balancing | 5 |
| Maximum Cell Temperature for Balancing | Balancing pauses above this cell temperature | 45 °C |
| Maximum BQ Temperature for Balancing | Balancing pauses above this monitor IC temperature | 85 °C |

Balancing tab (screenshot from a 12S LiFePO₄ test pack, your values will differ)
Charging
- Plug in the charger. The Master detects it above 5 V.
- Charging starts only when the charger voltage is at least 0.7 V above the pack voltage, all Slaves report valid data, and all cells and temperatures are inside the charging limits.
- A rising three-tone beep means charging has started.
- Charging stops when the highest cell reaches Charge End Voltage. Three short beeps mean charging is complete. Balancing may continue after charging.
- A falling three-tone beep means charging is blocked. The Slaves then beep the reason (see Audible Warnings).
A new charge only starts when the highest cell is below Charge Start Voltage (default 4.15 V). Plugging a full pack back in will not restart charging.
Important: JFBMS is a charge-only BMS. Discharge current does not pass through it. Low-voltage and over-temperature protection while riding comes from your VESC controller reading the BMS data over the main CAN bus. In VESC Tool, connect to the controller, open Motor Settings > BMS, select VESC BMS and click Write.
8. Sleep and Shutdown
| Setting | What it means | Default |
|---|---|---|
| Sleep Current Threshold | The Master may sleep only while the pack current is below this | 0.3 A |
| Periodic Wake Interval | The Master wakes this often to check the pack | 12 hours |
| Block Sleep Mode | Keeps the Master awake (setup mode, see below) | True |
| Timed Shutdown After Sleep | Full shutdown after this long asleep. 0 disables it | 15 days |

Sleep and Shutdown tab: set Block Sleep Mode to False after setup
Block Sleep Mode
Leave Block Sleep Mode enabled during initial setup. This keeps the Master awake while you configure and test the system.
Block Sleep Mode switches off automatically after the Master has been running for one hour, all Slaves report valid data and all cells are within 50 mV of each other. The Master confirms this with 4 short high beeps. If it stays enabled, check for missing Slaves, incorrect cell counts, unbalanced cells, temperature faults or CAN communication problems. You can also set it to False manually and click Write.
Shutdown Time
The default shutdown time is approximately 15 days. After this period without use, the Master enters an extremely low-power shutdown mode.
The timer is reset by an enable signal, connecting to the system, or connecting the charger. To wake the Master from full shutdown, connect the charger.
9. First Test
After writing the settings and restarting the Master, open BMS Data in VESC Tool and enable BMS from the right-side menu, then check:

Master BMS Data: every cell of the whole pack
- All expected Slave boards are visible
- Every cell has a realistic voltage
- No cell shows 0 V
- Cell voltages are in the correct order
- Temperatures are realistic (check the Temperatures tab: every fitted sensor shows a plausible value)
- Total pack voltage is correct
- No communication or sensor faults are shown
Do not ride or charge the battery if a cell shows 0 V, a Slave is missing, the cell order is incorrect, or a temperature fault is present.
Verify by Charging
Do not plug in the charger if you suspect anything is configured wrong. Be ready to unplug it immediately if the values look wrong, or if you notice smell, noise or heat.
- Keep BMS Data open with BMS polling enabled.
- Switch on the charger and check its output polarity matches the BMS charge input.
- Plug in the charger. Listen for the rising three-tone beep (charging started).
- Check that the current shows charging and stays below Max Charge Current, and that the highest cell voltage rises slowly.
- If you hear the falling three-tone beep instead, charging is blocked: listen to the Slave beeps and see Audible Warnings.
10. Updating the Firmware (Master and Slave)
Configuration changes are made with Write. Programming replaces the software on a board. Only program when JetFleet supplies new files. The Master and the Slave use different chips and different files. Never flash JFBMS32 files on a Master or Slave.
| Board | Chip | How to program |
|---|---|---|
| Slave | ESP32-C3 | VESC Tool, ESP Programmer |
| Master | ESP32-C6 | ESP web flasher in Chrome or Edge (VESC Tool cannot program the ESP32-C6 yet) |
Both boards use the same three files and flash addresses:
| Flash address | File |
|---|---|
| 0x0 | jfbms_<board>_2026-10-10_bootloader.bin |
| 0x8000 | jfbms_<board>_2026-10-10_partition-table.bin |
| 0x20000 | jfbms_<board>_2026-10-10_app.bin |
Download the Firmware (version 2026-10-10)
Download all three files for the board you are programming. The same files are also linked on the JFBMS Master and JFBMS Slave product pages.
| Board | Flash address | File |
|---|---|---|
| Slave | 0x0 | jfbms_slave_2026-10-10_bootloader.bin |
| Slave | 0x8000 | jfbms_slave_2026-10-10_partition-table.bin |
| Slave | 0x20000 | jfbms_slave_2026-10-10_app.bin |
| Master | 0x0 | jfbms_master_2026-10-10_bootloader.bin |
| Master | 0x8000 | jfbms_master_2026-10-10_partition-table.bin |
| Master | 0x20000 | jfbms_master_2026-10-10_r2_app.bin |
Programming keeps your settings. Do not use Erase Flash unless JetFleet support asks you to: it resets every setting to default.
Connect only the board you are programming to USB, or check the COM port carefully. The Master and Slave both appear as USB JTAG/serial debug unit.
Program a Slave (VESC Tool)
- Connect the Slave with USB-C. If VESC Tool is connected to it, disconnect first.
- Open ESP Programmer (bottom of the left menu).
- Select the Slave's COM port and click the Connect icon. The bar must show Connected to ESP32C3.
- Open the Custom tab and select the three Slave files: Bootloader, Partition Table and Application.
- Click Flash using USB and wait until the bar shows Flash verified (about one minute).
- Unplug and reconnect USB, connect normally and check that the settings and cell voltages are correct.
- Repeat for every Slave.

VESC Tool ESP Programmer with the Slave files selected

Slave programmed: Flash verified
Program the Master (ESP web flasher)
VESC Tool shows Connected to Unknown for the Master and cannot program it, so use the web flasher. It needs Google Chrome or Microsoft Edge on a computer.
- Close VESC Tool (or disconnect it), so it does not hold the USB port.
- Open espressif.github.io/esptool-js and leave the baud rate at 921600.
- Click Connect, select the Master's USB JTAG/serial debug unit port and click Connect in the pop-up.
- Check that the page shows Connected to device: ESP32-C6. If it shows ESP32-C3, you selected a Slave.
- Click Add File twice so there are three rows. Enter the addresses 0x0, 0x8000 and 0x20000 and choose the matching Master file in each row.
- Leave Flash Mode, Flash Frequency and Flash Size at keep and click Program.
- Wait for Hash of data verified and Leaving... in the console. Click Disconnect.
- Unplug and reconnect the USB cable so the Master restarts, then connect with VESC Tool and check the settings and BMS data.

Web flasher: select the Master port

Web flasher: ESP32-C6 detected, Master files at 0x0, 0x8000 and 0x20000

Master programmed: Hash of data verified
Lisp Software
You do not need to upload the Lisp software by hand. It is built into the firmware (.bin) and installs itself automatically when the board starts with an empty Lisp area: on a new board, after Erase Flash, or after erasing the Lisp code.
A board that already has Lisp code keeps it when you program new firmware without Erase Flash. To make it use the Lisp included in the new firmware:
- Connect with VESC Tool and open LispBM Scripting.
- Click Erase and wait until it finishes.
- Select Terminal > Reboot from the menu. The board installs the built-in Lisp while starting.
- Reconnect and check the BMS data. Clicking Read in LispBM Scripting shows the installed code.
For reference the Lisp source is also available: jfbms_master_2026-10-10.lisp and jfbms_slave_2026-10-10.lisp. Only upload a .lisp file manually (Open, then Upload) if JetFleet support asks you to.
11. Troubleshooting
No cell voltages
Check the Number of Slaves, Slave IDs, cell counts, Slave CAN wiring, and balance-wire connections.
A Slave is missing
Check that the IDs are unique and continuous, the Slave CAN baud rate is 500K, the Master Number of Slaves setting is correct, and the Slave has power.
A cell shows 0 V
Check the balance-wire order, missing wires, cell-count settings, and the Slave assigned to that cell group. Do not charge until corrected.
Temperature fault
Check that the thermistor is connected, the correct input is enabled, and the resistance and beta values match the sensor.
The battery discharges during storage
Check that Block Sleep Mode is disabled and that no communication or sensor fault is preventing sleep.
The Master will not wake up
Connect the USB cable or charger and wait several seconds. Then refresh the USB port list in VESC Tool.
Bluetooth cannot find the Master
The default Bluetooth name is VESC BMS. Use USB if Bluetooth is disabled or the name has been changed.
12. Audible Warnings
High tones mean OK or information, low tones mean attention is needed. Each event beeps once; patterns do not repeat.
Master
| Beep pattern | Meaning |
|---|---|
| Two short high beeps | Started up, settings applied, or current zero captured |
| Rising three tones | Charging started |
| Three short high beeps | Charging complete |
| Falling three tones | Charging blocked (Slaves beep the reason) |
| Four short high beeps | Block Sleep Mode switched off automatically |
| Two long low beeps | Charge over-current fault. Unplug the charger to clear it. |
| One long low beep | Current sensor zero calibration failed |
| One long + N short beeps (loud) | Slave number N stopped responding |
| Three long beeps (loud) | Could not enter sleep |
| 15 short beeps (loud) | Shutting down |
Slave
| Beep pattern | Meaning |
|---|---|
| Two short beeps | Connected to the Master |
| Three short beeps | Charging complete |
| Four fast beeps | Shutting down, or this Slave was lost by the Master |
| One beep | Charging blocked: over-temperature |
| Two beeps | Charging blocked: cell voltage too high |
| Three beeps | Charging blocked: cell voltage too low |
| Four beeps | Charging blocked: over-current |
| Five beeps | Monitoring chip (BQ) not responding. Check the balance wiring. |
13. Contacting Support
When contacting JetFleet, include the battery configuration, battery chemistry, capacity, number of Slaves, Slave IDs, screenshots of the BMS live data and settings, displayed error messages, and photos of the wiring if relevant.