Skip to content

CAN ID Allocations

By default, the BMS BMU ships with a CAN base ID set to 0x600. This can be adjusted by the end user. Assuming this base ID, the following CAN IDs are used on the vehicle bus by the BMS BMU:

CAN ID (hex) Description
0x600 BMU heartbeat & serial number
0x601 - 0x6EF CMU Status, temperature, and voltage telemetry, if set to relay to vehicle
0x6F0 Reserved for factory configuration & calibration commands
0x6F1 - 0x6F3 Reserved for future configuration system update
0x6F4 Pack SoC
0x6F5 Balance SoC
0x6F6 Charger Control information
0x6F7 Pre-charge status, 12V status
0x6F8 Minimum / Maximum cell voltage
0x6F9 Minimum / Maximum cell temperature
0x6FA Battery pack voltage & current
0x6FB Battery pack status
0x6FC Fan & 12V supply status
0x6FD Extended battery pack status
0x6FE - 0x6FF Reserved, currently unused
0x7F0 - 0x7F4 Reserved for bootloader triggering and data transfer (these IDs do not move with a change in BMU CAN Base ID)

Data Format

The 8-byte data on the CAN bus is formatted using a 'union' overlay structure in the BMS CMU microcontroller firmware.

Note: this depends on the byte ordering and word size of the CPU and is not portable across architectures – however the byte order is correct for both the MSP430 microcontroller in the CMUs and BMU and the x86 CPU in a PC.

The structure is defined on the (16-bit) MSP430 as follows:

typedef union _group_64 {
    float data_fp[2];
    unsigned char data_u8[8];
    char data_8[8];
    unsigned int data_u16[4];
    int data_16[4];
    unsigned long data_u32[2];
    long data_32[2];
} group_64;

Data values data_u8[0] through to data_u8[7] are the bytes transmitted on the CAN bus.