Periodic Messages
All messages are little endian.
0x500 Status Message
Sent every 100 ms. The CAN ID is 0x500 + (address - 4), so the master BMS (address 4) sends at 0x500.
| Byte | Type | Description |
|---|---|---|
| 0 | UINT8 | Application ID (203) |
| 1 | UINT8 | BMS state — /driver/state |
| 2 | UINT8 | BMS error — /driver/hw_error |
| 3 | UINT8 | SOC: 0–200 (represents 0–100%). 255 = invalid SOC (NaN) |
| 4-5 | UINT16 | Limiter status word |
| 6 | UINT8 | Limiter value positive. 0 = zero current, 255 = full current available |
| 7 | UINT8 | Limiter value negative. 0 = zero current, 255 = full current available |
All subsequent messages below are sent only by the master BMS (address 4).
0x504 Energy
Sent every 200 ms. Integer values multiplied by 10 (one decimal precision). Values are from the BEST module.
| Byte | Type | Description |
|---|---|---|
| 0-1 | INT16 | Cmax Maximum battery capacity [mAh x 10] |
| 2-3 | INT16 | Cact Actual battery capacity [mAh x 10] |
| 4-5 | INT16 | Emax Maximum battery energy [Wh x 10] |
| 6-7 | INT16 | Eact Actual battery energy [Wh x 10] |
0x506 Recommended Limiter Settings
Sent every 500 ms. Integer values multiplied by 10 (one decimal precision). See Controller Limits.
| Byte | Type | Description |
|---|---|---|
| 0-1 | INT16 | Recommended Ibpos value |
| 2-3 | INT16 | Recommended Ibneg value |
| 4-5 | INT16 | Recommended Ubmin value |
| 6-7 | INT16 | Recommended Ubmax value |
0x507 Current Limits
Sent every 500 ms. Integer values multiplied by 10 (one decimal precision). See Controller Limits.
| Byte | Type | Description |
|---|---|---|
| 0-1 | UINT16 | iref_limit x 10 |
| 2-3 | UINT16 | ipeak_limit x 10 |
0x508 Charger Limits
Sent every 500 ms. Integer values multiplied by 10 (one decimal precision). See Charger Communication.
| Byte | Type | Description |
|---|---|---|
| 0-1 | UINT16 | /charger/max_current x 10 |
| 2-3 | UINT16 | /charger/end_voltage x 10 |
This message sends static values. The charger must also monitor the limiter value (negative) field in the 0x500 Status Message to dynamically limit its charge current.
0x50A Atmospheric Data
Sent every 1 s. Data from the optional SHT4x environmental sensor and pressure sensor.
| Byte | Type | Description |
|---|---|---|
| 0-1 | INT16 | Reserved |
| 2 | INT8 | Temperature [C] (dedicated SHT4x sensor, not used as BMS battery temperature) |
| 3 | UINT8 | Humidity [%] |
| 4-7 | INT32 | Pressure [Pa] |
0x510 Status II
Sent every 200 ms. Integer values with scaling as indicated.
| Byte | Type | Description |
|---|---|---|
| 0-1 | INT16 | Battery voltage [V x 100] |
| 2-3 | INT16 | Battery current through DSC port [A x 50] |
| 4-5 | INT16 | Battery current through CHG port [A x 50] |
| 6-7 | INT16 | Battery temperature (maximum of all sensors) [C x 10] |
0x516–0x51B Cell Voltages
Sent every 200 ms. Each message contains 4 cell voltage values. Messages are sent sequentially up to the configured cell count.
| Byte | Type | Description |
|---|---|---|
| 0-1 | UINT16 | Cell 1 voltage and status |
| 2-3 | UINT16 | Cell 2 voltage and status |
| 4-5 | UINT16 | Cell 3 voltage and status |
| 6-7 | UINT16 | Cell 4 voltage and status |
| Message ID | Cells |
|---|---|
| 0x516 | 1–4 |
| 0x517 | 5–8 |
| 0x518 | 9–12 |
| 0x519 | 13–16 |
| 0x51A | 17–20 |
Cell Voltage Encoding
Each UINT16 cell value encodes both the voltage and status flags:
| Bits | Description |
|---|---|
| 0–12 | Voltage [mV] |
| 13 | Cell with minimum voltage |
| 14 | Cell with maximum voltage |
| 15 | Cell is being balanced |
If a cell is not present, the value 0xFFFF is sent.