How Zero Logs Work
Understand the structure of MBB and BMS log files, how they're generated, and what data they contain.
TL;DR
Zero stores diagnostic data in binary .bin files: MBB logs contain riding data (motor, controller, speeds), while BMS logs track battery state (cell voltages, SOC, charging). Both include timestamped entries that this tool parses into human-readable format.
Log Format by Generation
“Gen2” and “Gen3” here mean log formats (which binary layout the file uses), not the motorcycle's product generation. The two do not line up model for model, and the generation comparison untangles the three senses of the word.
Full Support: Gen2 format
The 262,144-byte MBB\0 / BMS\0 dumps: FX (2014-2025), FXS (2016-2021), FXE (2022-2025) and the SDS-platform S, SR, DS and DSR (2014-2023), plus the FXP, XU and MX variants. Sevcon Gen4 controller, full MBB/BMS parsing. The FXE routes down the Gen3 path in our parser, yet it is still a Cypher II motorcycle. We have no log from a 2024+ S, SR, DS or DSR (those are Cypher III machines), so which format they write is unverified here.
Full Support: Gen3 format
The native 0xB2 ring buffer: SR/F and SR/S from 2020, DSR/X from 2023, with MBB & BMS fully decoded. Ride/charge sessions, cell voltages, temperatures, state machine all parsed. Note: Gen3 uses a ring buffer that a parked bike fills in about 3 days: the MBB wakes once an hour and writes ~31 entries each time. Download logs frequently to capture ride history.
Two Types of Logs
Zero Motorcycles have two independent logging systems, each tracking different aspects of the bike's operation:
MBB Logs
Main Bike Board: the central controller that manages motor operation, display, and system coordination.
- • Motor temperature & RPM
- • Controller temperature
- • Odometer
- • Battery and motor amps
- • Pack voltage, SOC and the module bitmask
- • Ambient temperature
- • System events & errors
No Gen1 or Gen2 log contains a road-speed field. Where you see km/h on those bikes, it was computed from motor RPM using a per-model constant. Throttle position is never logged either.
On the Gen3 FST bikes (SR/F, SR/S, DSR/X) the MBB logs bike state and the power limits, and its common telemetry record carries five temperatures and, only while the high-voltage bus is live, pack voltage, current and motor RPM. Road speed is written only in the rarer 0x52/0x53 records, and the odometer only there and only on newer firmware, so the BMS stays the main source for the electrical channels.
There is no digit after MBB. A bike has one main board, so the MBB file carries no index. Across a 352-file corpus these are the forms that occur, give or take a download that arrives with dashes instead of underscores or a _1 copy suffix. MbbD is the dealer-tool export of the same board; the two date-first forms are what the Gen3 FST bikes emit, where _6 is the MBB and _10 the BMS.
BMS Logs
Battery Management System: a dedicated controller for battery monitoring, protection, and charging management.
- • Cell voltages (L, l, H)
- • State of Charge (SOC)
- • Pack voltage
- • Cell balance delta
- • Pack & board temperature
- • Charging events
The digit is the battery module index, which is why there can be more than one BMS file. Details below.
Here is one second of a real shutdown, with both boards writing at once. They log the same contactor opening under two different names, and each board measures the same pack voltage with its own instrument.
From Anatomy of a Zero log, which publishes real extracts for every decode route: switching on, riding, charging, parked, a fault and switching off.
If your bike has two battery modules, it writes two BMS files, and uploading only one leaves out half your pack
Each battery module runs its own BMS and keeps its own log, so the index in the filename counts modules, not files. In our 352-file corpus the split is BMS0 ×109, BMS1 ×78 and BmsD0 ×17. One 2016 FXS with the two-module ZF6.5 pack emits BMS0 ×61 and BMS1 ×61, covering the same days in separate files. An FXE with the integrated ZF7.2 emits BMS0 only.
The MBB log agrees, which is how you can check it without counting files. On the two-module FXS the MBB logs Module 00 Registered and Module 01 Registered, and every riding entry carries a module bitmask reading mods 11. On the FXE only Module 00 ever registers and the bitmask reads mods 10, meaning one module present. That single character is the difference between a pack built from two removable bricks and one integrated pack wearing the same kWh badge.
The index is only a module count on the FX / XMX family, where modules are removable and numbering starts at zero. The Gen3 FST bikes (SR/F, SR/S, DSR/X) in this corpus emit a lone BMS1 with no BMS0: their numbering simply starts at one, and they have a single bonded pack. If you are on an FST bike, one BMS file is the whole story.
When you export logs, take every file the app or dealer tool offers you and upload them all. See the pack catalogue for which packs are modular.
Log Entry Structure
Each log entry contains a timestamp, event type, and message with structured data. Here's how they look when parsed:
level 001 AH, SOC: 97%, I: 0A, L:4089, l:4076, H:4092, B:003, PT:017C, BT:031C, PV:114540, M:Bike OnCommon Event Types
These are the exact strings the decoder emits, so they are what you can search and filter on. The counts are from 92,407 entries decoded out of fourteen real log files.
| Event type | Source | What it is |
|---|---|---|
| Riding | MBB | The once-a-minute riding snapshot: SOC, pack voltage, battery and motor current, motor RPM, all four temperatures, odometer and the module bitmask. |
| Charging | MBB | The same snapshot, recorded while the bike is charging. |
| Disarmed | MBB | Bike awake but not live: identical telemetry with the motor at rest. |
| Board Status | MBB | Periodic health report from the main board. |
| Power On / Power Off | MBB | Key transitions. Paired with Sevcon Turned On / Sevcon Turned Off, these bracket a ride on a Gen1/Gen2 bike. |
| Module 00 … / Module 01 … | MBB | Per-module battery events: Registered, CAN Link Up/Down, Closing/Opening Contractor. The index is the module number. |
| Discharge level | BMS | The core BMS telemetry row: amp-hours, SOC, current, the L / l / H cell voltages, the B balance delta, pack and board temperature. |
| SOC Data | BMS | State-of-charge bookkeeping alongside the discharge rows. |
| Charged To Full | BMS | Charge completed. There is no event called "Charged". |
| Entered Idle / Running / Standby / Charging State | BMS | BMS state-machine transitions, plus Entering Hibernate / Exiting Hibernate. |
| Discharge Cutback | BMS | The BMS is limiting discharge current (low SOC, cold pack or a weak cell). |
| Chassis Isolation Fault | BMS | Insulation between the HV pack and the chassis has dropped. Also seen as Low Chassis Isolation. |
Names that sound plausible but do not exist, so searching for them returns nothing: Charged, System, Error, Charge level, Chg complete, Balancing. Faults are not one event type: they appear under their own descriptive names, which is why the log error catalog groups them into families rather than filtering on a single keyword.
How to Extract Logs
Log files can be extracted from your Zero using the official mobile app or by connecting directly to the bike's diagnostic port. The ZeroManual Interfacing Guide provides detailed instructions.
Connect to your bike via Bluetooth, navigate to diagnostics, and export logs.
A serial cable to the bike's OBD-II port gives you the full log history as plain text, which helps when the app download fails or truncates. See our step-by-step PuTTY console guide; the resulting .txt/.log capture uploads here just like a .bin file.
Our tool parses the binary data into structured, searchable entries.
Sources:
Log format details are based on community reverse-engineering. For official documentation, contact Zero Motorcycles.