How to use SMBus (I2C peripheral)
This page describes how to use the SMBus interface.
To enable the update, be sure to set smbus-enable to 1 with “bms set smbus-enable 1”. If this is enabled, one can use the BMS as an I2C peripheral device to get the information. Use the J18 connector (I2C/SMBUS) on the BMS, hook up your I2C initiator device with pull-ups to this connector. The SMBus information is based on the SBS1.1 specification. These are the supported messages:
Table 1. SMBus variable list
Parameter | Unit | Datatype | Description | I2C Address |
temperature | K | uint16_t | The temperature of the external battery temperature sensor, 0 otherwise. | 0x08 |
voltage | mV | uint16_t | The voltage of the battery. | 0x09 |
current | mA | uint16_t | The last recorded current of the battery. | 0x0A |
average_current | mA | uint16_t | The average current since the last measurement (period t-meas (default 1s)). | 0x0B |
max_error | % | uint16_t | Just set to 5%. Not tracked. | 0x0C |
relative_state_of_charge | % | uint16_t | Set to the state of charge value. | 0x0D |
absolute_state_of_charge | % | uint16_t | Set to the state of charge value. | 0x0E |
remaining_capacity | mAh | uint16_t | The remaining capacity of the battery. | 0x0F |
full_charge_capacity | mAh | uint16_t | The full charge capacity of the battery. | 0x10 |
run_time_to_empty | min | uint16_t | Calculated time to empty based on current and remaining_capacity. | 0x11 |
average_time_to_empty | min | uint16_t | Calculated the time to empty based on average_current and remaining_capacity. | 0x12 |
cycle_count | cycle | uint16_t | Set to the n-charges value. | 0x17 |
design_capacity | mAh | uint16_t | Set to the factory capacity. | 0x18 |
design_voltage | mV | uint16_t | Set to the cell overvoltage value. | 0x19 |
manufacture_date | - | uint16_t | Set to the defines in the code. Not actual manufacturer dates. (year-1980)*512 + month*32 + day | 0x1B |
serial_number | - | uint16_t | Set to the battery id (batt-id). | 0x1C |
manufacturer_name | - | char * | Set to “NXP”. | 0x20 |
device_name | - | char * | Set to "RDDRONE-BMS772" | 0x21 |
device_chemistry | - | char * | This is a 3 letter battery device chemistry "LiP", "LFP" or "LFY" (LiPo, LiFePo4, LiFeYPo4). | 0x22 |
manufacturer_data | - | uint8_t * | Set to 0x0. (length 1). | 0x23 |
cell1_voltage | mV | uint16_t | Cell voltage of cell1. | 0x3A |
cell2_voltage | mV | uint16_t | Cell voltage of cell2. | 0x3B |
cell3_voltage | mV | uint16_t | Cell voltage of cell3. | 0x3C |
cell4_voltage | mV | uint16_t | Cell voltage of cell4. | 0x3D |
cell5_voltage | mV | uint16_t | Cell voltage of cell5. | 0x3E |
cell6_voltage | mV | uint16_t | Cell voltage of cell6. | 0x3F |
Last updated