SLUUC54C February   2020  – March 2024 BQ27Z558 , BQ27Z561 , BQ27Z561-R2

 

  1.   1
  2. Preface
    1. 1.1 Read this First
    2. 1.2 Notational Conventions
    3. 1.3 Trademarks
  3.   Introduction
  4. Basic Measurement System
    1. 2.1 Introduction
    2. 2.2 Current and Coulomb Counting
    3. 2.3 Voltage
    4. 2.4 Temperature
      1. 2.4.1 Internal Temperature
      2. 2.4.2 Cell Temperature
      3. 2.4.3 Temperature Configuration
  5. Power Modes
    1. 3.1 Introduction
    2. 3.2 NORMAL Mode
    3. 3.3 SLEEP Mode
      1. 3.3.1 Device Sleep
    4. 3.4 DEEP SLEEP Mode
    5. 3.5 HIBERNATE Mode
    6. 3.6 Power Modes Configuration
  6. Gauging
    1. 4.1  Impedance Track (IT) Model
    2. 4.2  Thermal Model
    3. 4.3  Gauging Capacities
    4. 4.4  Learning Cycles
    5. 4.5  Impedance Track Configuration
    6. 4.6  Gas Gauge Modes
    7. 4.7  QMax and Ra
      1. 4.7.1 QMax Initial Values
      2. 4.7.2 QMax Update Conditions
        1. 4.7.2.1 Base Required Conditions
        2. 4.7.2.2 Tracking QMax Updates
        3. 4.7.2.3 Relaxed Cell OCV
        4. 4.7.2.4 OCV Prediction
        5. 4.7.2.5 Cycle Count Based QMax Degradation
        6. 4.7.2.6 38
        7. 4.7.2.7 Fast QMax Update Conditions
        8. 4.7.2.8 QMax and Fast QMax Update Boundary Check
      3. 4.7.3 Ra Table Initial Values
        1. 4.7.3.1 R_a0 Table
        2. 4.7.3.2 R_a0x Table
      4. 4.7.4 Ra Table Update Conditions
      5. 4.7.5 Fast Resistance Scaling
        1. 4.7.5.1 Calculation of Resistance Scale
        2. 4.7.5.2 Negative Resistance Scale
        3. 4.7.5.3 Reset of Resistance Scale
        4. 4.7.5.4 Application of Resistance Scale
        5. 4.7.5.5 Fast Resistance Scaling Configuration
    8. 4.8  FullChargeCapacity (FCC), RemainingCapacity (RemCap), and RelativeStateOfCharge (RSOC)
      1. 4.8.1 Smoothing Engine
        1. 4.8.1.1 Smoothing to 0% in DISCHARGE Mode
        2. 4.8.1.2 Smoothing to 100% in CHARGE Mode
        3. 4.8.1.3 Smoothing in RELAX Mode
    9. 4.9  Impedance Track (IT) Configuration Options
    10. 4.10 State-Of-Health (SOH)
    11. 4.11 TURBO Mode 3.0
    12. 4.12 Battery Trip Point (BTP)
  7. Lifetime Data Collection
    1. 5.1 Description
    2. 5.2 Reset
  8. Host Interrupts
    1. 6.1 Description
    2. 6.2 Voltage and Temperature Interrupts
    3. 6.3 RSOC Interrupts
    4. 6.4 Host Interrupts Configuration
  9. Programmable Pulse Width
    1. 7.1 Description
    2. 7.2 Programmable Pulse Width Configuration
  10. Device Security
    1. 8.1 Description
    2. 8.2 SHA-256 Authentication
      1. 8.2.1 Secure Key
      2. 8.2.2 Authentication Flow
    3. 8.3 Security Modes
      1. 8.3.1 SEALING and UNSEALING Data Flash
      2. 8.3.2 SEALED to UNSEALED
      3. 8.3.3 UNSEALED to FULL ACCESS
  11. Advanced Charge Algorithm
    1. 9.1  Introduction
    2. 9.2  Charge Temperature Ranges
    3. 9.3  Voltage Range
      1. 9.3.1 RelativeStateofCharge() Range
    4. 9.4  Charging Current
    5. 9.5  Charging Voltage
      1. 9.5.1 Charge Voltage Compensation for System Impedance
    6. 9.6  Charging Degradation Modes
    7. 9.7  Cell Swelling Control (via Charging Voltage Degradation)
    8. 9.8  Valid Charge Termination
    9. 9.9  Charge and Discharge Alarms
    10. 9.10 Terminate Charge and Discharge Alarms
    11. 9.11 Precharge
    12. 9.12 Maintenance Charge
    13. 9.13 Charge Inhibit
  12. 10Communications
    1. 10.1 HDQ Single-Pin Serial Interface
    2. 10.2 I2C Interface
      1. 10.2.1 I2C Clock Frequency
      2. 10.2.2 I2C Time Out
      3. 10.2.3 I2C Command Waiting Time
      4. 10.2.4 I2C Clock Stretching
  13. 11Manufacture Production
    1. 11.1 Manufacture Testing
      1. 11.1.1 Manufacturing Status Configuration
    2. 11.2 I2C Configuration
    3. 11.3 Manufacturer Information Blocks
    4. 11.4 Verification of Data Flash
    5. 11.5 Calibration
  14.   Calibration
    1. 12.1 Cell (BAT) Voltage Calibration
      1. 12.1.1 Voltage Calibration Data Flash
    2. 12.2 Current Calibration
      1. 12.2.1 CC Gain/Capacity Gain Calibration
      2. 12.2.2 Deadbands
        1. 12.2.2.1 Current Deadband
        2. 12.2.2.2 Coulomb Counter Deadband
      3. 12.2.3 Current Calibration Data Flash
    3. 12.3 Temperature Calibration
      1. 12.3.1 Internal Temperature Sensor Calibration
      2. 12.3.2 TS Calibration
      3. 12.3.3 Temperature Calibration Data Flash
      4. 12.3.4 Cell Temp Model
      5. 12.3.5 Internal Temp Model
  15. 12Data Commands
    1. 12.1 Standard Data Commands
      1. 12.1.1  0x00/01 ManufacturerAccess()/ControlStatus()
      2. 12.1.2  0x02/03 AtRate()
      3. 12.1.3  0x04/05 AtRateTimeToEmpty()
      4. 12.1.4  0x06/07 Temperature()
      5. 12.1.5  0x08/09 Voltage()
      6. 12.1.6  0x0A/0B BatteryStatus()
      7. 12.1.7  0x0C/0D Current()
      8. 12.1.8  0x10/11 RemainingCapacity()
      9. 12.1.9  0x12/13 FullChargeCapacity()
      10. 12.1.10 0x14/15 AverageCurrent()
      11. 12.1.11 0x16/17 AverageTimeToEmpty()
      12. 12.1.12 0x18/19 AverageTimeToFull()
      13. 12.1.13 0x1E/1F MaxLoadCurrent()
      14. 12.1.14 0x20/21 MaxLoadTimeToEmpty()
      15. 12.1.15 0x22/23 AveragePower()
      16. 12.1.16 0x28/29 InternalTemperature()
      17. 12.1.17 0x2A/2B CycleCount()
      18. 12.1.18 0x2C/2D RelativeStateOfCharge()—RSOC
      19. 12.1.19 0x2E/2F StateOfHealth()
      20. 12.1.20 0x30/31 ChargingVoltage()
      21. 12.1.21 0x32/33 ChargingCurrent()
      22. 12.1.22 0x34/35 TerminateVoltage()
      23. 12.1.23 0x36/0x37/0x38/0x39 Timestamp()
      24. 12.1.24 QMax Cycles() 0x3A/3B
      25. 12.1.25 0x3C/3D DesignCapacity()
      26. 12.1.26 0x3E/3F AltManufacturerAccess()
      27. 12.1.27 0x40/0x5F MACData()
      28. 12.1.28 0x60 MACDataChecksum()
      29. 12.1.29 0x61 MACDataLength()
      30. 12.1.30 0x62/63 VoltHiSetThreshold
      31. 12.1.31 0x64/65 VoltHiClearThreshold
      32. 12.1.32 0x66/67 VoltLoSetThreshold
      33. 12.1.33 0x68/69 VoltLoClearThreshold
      34. 12.1.34 0x6A TempHiSetThreshold
      35. 12.1.35 0x6B TempHiClearThreshold
      36. 12.1.36 0X6C TempLoSetThreshold
      37. 12.1.37 0x6D TempLoClearThreshold
      38. 12.1.38 0x6E InterruptStatus()
      39. 12.1.39 0x6F SOCSetDeltaThreshold
    2. 12.2 0x70, 0x71 SusTurboPwr()
    3. 12.3 0x72, 0x73 MaxTurboPwr()
    4. 12.4 0x74, 0x75 SusTurboCurr()
    5. 12.5 0x76, 0x77 MaxTurboCurr()
    6. 12.6 0x78, 0x79 TurboSysR()
    7. 12.7 0x7A, 0x7B TurboEdv()
    8. 12.8 0x00, 0x01 ManufacturerAccess() and 0x3E, 0x3F AltManufacturerAccess()
      1. 12.8.1  AltManufacturerAccess() 0x0001 Device Type
      2. 12.8.2  AltManufacturerAccess() 0x0002 Firmware Version
      3. 12.8.3  AltManufacturerAccess() 0x0003 Hardware Version
      4. 12.8.4  AltManufacturerAccess() 0x0004 Instruction Flash Signature
      5. 12.8.5  AltManufacturerAccess() 0x0005 Static DF Signature
      6. 12.8.6  AltManufacturerAccess() 0x0006 Chemical ID
      7. 12.8.7  AltManufacturerAccess() 0x0007 Pre_MACWrite
      8. 12.8.8  AltManufacturerAccess() 0x0008 Static Chem DF Signature
      9. 12.8.9  AltManufacturerAccess() 0x0009 All DF Signature
      10. 12.8.10 AltManufacturerAccess() 0x0012 Device Reset
      11. 12.8.11 AltManufacturerAccess() 0x0017 QMax Day
      12. 12.8.12 AltManufacturerAccess() 0x0021 Gauging
      13. 12.8.13 AltManufacturerAccess() 0x0023 Lifetime Data Collection
      14. 12.8.14 AltManufacturerAccess() 0x0028 Lifetime Data Reset
      15. 12.8.15 AltManufacturerAccess() 0x002D CALIBRATION Mode
      16. 12.8.16 ManufacturerAccess() 0x002E Lifetime Data Flush
      17. 12.8.17 ManufacturerAccess() 0x002F Lifetime Data SPEED UP Mode
      18. 12.8.18 AltManufacturerAccess() 0x0030 Seal Device
      19. 12.8.19 AltManufacturerAccess() 0x0035 Security Keys
      20. 12.8.20 AltManufacturerAccess() 0x0037 Authentication Key
      21. 12.8.21 AltManufacturerAccess() 0x0041 Device Reset
      22. 12.8.22 AltManufacturerAccess() 0x0044 Set Deep Sleep
      23. 12.8.23 AltManufacturerAccess() 0x0045 Clear Deep Sleep
      24. 12.8.24 AltManufacturerAccess() 0x0046 Pulse GPIO
      25. 12.8.25 AltManufacturerAccess() 0x0047 Tambient Sync
      26. 12.8.26 AltManufacturerAccess() 0x0047 Clear GPIO
      27. 12.8.27 AltManufacturerAccess() 0x0047 Set GPIO
      28. 12.8.28 AltManufacturerAccess() 0x004A Device Name
      29. 12.8.29 AltManufacturerAccess() 0x004B Device Chem
      30. 12.8.30 AltManufacturerAccess() 0x004C Manufacturer Name
      31. 12.8.31 AltManufacturerAccess() 0x004D Manufacture Date
      32. 12.8.32 AltManufacturerAccess() 0x004E Serial Number
      33. 12.8.33 AltManufacturerAccess() 0x0054 OperationStatus
        1. 12.8.33.1 Operation Status A
        2. 12.8.33.2 Operation Status B
      34. 12.8.34 AltManufacturerAccess() 0x0055 ChargingStatus
        1. 12.8.34.1 Temp Range
        2. 12.8.34.2 Charging Status
      35. 12.8.35 AltManufacturerAccess() 0x0056 GaugingStatus
      36. 12.8.36 AltManufacturerAccess() 0x0057 ManufacturingStatus
      37. 12.8.37 AltManufacturerAccess() 0x0060 Lifetime Data Block 1
      38. 12.8.38 AltManufacturerAccess() 0x0062 Lifetime Data Block 3
      39. 12.8.39 ManufacturerAccess() 0x0063 Lifetime Data Block 4
      40. 12.8.40 ManufacturerAccess() 0x0065-0x006B Lifetime SOC Range Table Data Blocks
      41. 12.8.41 AltManufacturerAccess() 0x0070 ManufacturerInfo
      42. 12.8.42 AltManufacturerAccess() 0x0071 DAStatus1
      43. 12.8.43 AltManufacturerAccess() 0x0072 DAStatus2
      44. 12.8.44 AltManufacturerAccess() 0x0073 ITStatus1
      45. 12.8.45 AltManufacturerAccess() 0x0074 ITStatus2
      46. 12.8.46 AltManufacturerAccess() 0x0075 ITStatus3
      47. 12.8.47 AltManufacturerAccess() 0x0077 FCC_SOH
      48. 12.8.48 AltManufacturerAccess() 0x0078 Filtered Capacity
      49. 12.8.49 AltManufacturerAccess() 0x007A ManufacturerInfoB
      50. 12.8.50 AltManufacturerAccess() 0x007B ManufacturerInfoC
      51. 12.8.51 ManufacturerAccess() 0x00B0 ChargingVoltageOverride
      52. 12.8.52 AltManufacturerAccess() 0x0F00 ROM Mode
      53. 12.8.53 Data Flash Access() 0x4000–0x5FFF
      54. 12.8.54 AltManufacturerAccess() 0x7C40 Switch to HDQ
      55. 12.8.55 AltManufacturerAccess() 0xF080 Exit Calibration Output Mode
      56. 12.8.56 AltManufacturerAccess() 0xF081 Output CC and ADC for Calibration
  16. 13Data Flash Access and Format
    1. 13.1 Data Flash Access
      1. 13.1.1 Minimum Voltage
    2. 13.2 Data Formats
      1. 13.2.1 Unsigned Integer
      2. 13.2.2 Integer
      3. 13.2.3 Floating Point
      4. 13.2.4 Hex
      5. 13.2.5 String
  17. 14Data Flash Summary
    1. 14.1 Data Flash Table
  18. 15Revision History

Standard Data Commands

The BQ27Z561-R2 device uses a series of 2-byte standard commands to enable system reading and writing of battery information. Each standard command has an associated command code pair, as indicated in Table 12-1, Standard Commands. The LSB of the command code corresponds to the LSB register data. The LSB should be read first to keep the register data synchronized. For some host systems, the host should change the byte order so that the order corresponds to the host's native endianness. Both the I2C and HDQ protocols have methods to access the data for each command code. The gauge updates and/or reads the standard command registers once per second.

Table 12-1 Standard Commands
NameRegister Code (LSB/MSB)Description
ManufacturerAccess/ControlStatus()CNTL0x00/0x01Control Register (See Section 12.1.1.)
AtRate()AR0x02/0x03Read/write. The value is a signed integer with the negative value indicating a discharge current value. The default value is 0 and forces AtRateTimeToEmpty() to return 65,535.
AtRateTimeToEmpty()ARTTE0x04/0x05This read-only function returns an unsigned integer value to predict remaining operating time based on battery discharge at the AtRate() value in minutes with a range of 0 to 65,534. A value of 65,535 indicates AtRate() = 0. The gas gauge updates the AtRateTimeToEmpty() within 1 s after the system sets the AtRate() value. The gas gauge updates these parameters every 1 s. The commands are used in NORMAL mode.
Temperature()TEMP0x06/0x07This read-only function returns an unsigned integer value of temperature measured by the gas gauge and is used for the gauging algorithm. Values are reported in units 0.1 K. It reports either internal temperature or external thermistor temperature, depending on the setting of the [TS1] and [TSInt] bits in Temperature Enable.
Voltage()VOLT0x08/0x09This read-only function returns an unsigned integer value of the measured cell pack in mV with a range of 0 to 6000 mV.
BatteryStatus()FLAGS0x0A/0x0BThis read-only function returns various battery status information.
Current()INSTCURR0x0C/0x0DThis read-only function returns a signed integer value that is the instantaneous current flow through the sense resistor. The value is updated every 1 s. Units are mA.
RemainingCapacity()RM0x10/0x11This read-only command returns the predicted remaining capacity, based on rate (per configured Load Select), temperature, present depth-of-discharge, and stored impedance. Values are reported in mAh.
FullChargeCapacity()FCC0x12/0x13This read-only command returns the predicted capacity of the battery at full charge, based on rate (per configured Load Select), temperature, present depth-of-discharge, and stored impedance. Values are reported in mAh.
AverageCurrent()AI0x14/0x15This read-only function returns a signed integer value that is the average current flow through the sense resistor. The value is updated every 1 s. Units are mA.
AverageTimeToEmpty()TTE0x16/0x17Uses average current value with a time constant of 15 s for this method. A value of 65,535 means the battery is not being discharged.
AverageTimeToFull()TTF0x18/0x19This read-only function returns a unsigned integer value, predicting time to reach full charge for the battery in units of minutes based on AverageCurrent(). The computation accounts for the taper current time extension from a linear TTF computation based on a fixed AverageCurrent() rate of charge accumulation. A value of 65,535 indicates the battery is not being charged.
MaxLoadCurrent()MLI0x1E/0x1FThis read-only function returns a signed integer value in units of mA of the maximum load current. The MaxLoadCurrent() is an adaptive measurement which is initially reported as the maximum load current programmed in Max Load Current. If the measured current is ever greater than Max Load Current, then the MaxLoadCurrent() updates to the new current. MaxLoadCurrent() is reduced to the average of the previous value and Max Load Current whenever the battery is charged to full after a previous discharge to an RSOC of less than Max Load Rsoc. This will prevent the reported value from maintaining an unusually high value.
MaxLoadTimeToEmpty()MLTTE0x20/0x21This read-only function returns a unsigned integer value, predicting remaining battery life at the maximum discharge load current rate in units of minutes. A value of 65,535 indicates that the battery is not being discharged.
AveragePower()AP0x22/0x23This read-only function returns a signed integer value of average power during battery charging and discharging. It is negative during discharge and positive during charge. A value of 0 indicates that the battery is not being discharged. The value is reported in units of mW.
BTPDischargeSet()BTP0x24/0x25This read-/write-word command updates the BTP set threshold for DISCHARGE mode for the next BTP interrupt, deasserts the present BTP interrupt, and clears the OperationStatus()[BTP_INT] bit.
BTPChargeSet()BTP0x26/0x27The read-/write-word command updates the BTP set threshold for CHARGE mode for the next BTP interrupt, deasserts the present BTP interrupt, and clears the OperationStatus()[BTP_INT] bit.
InternalTemperature()INT_TEMP0x28/0x29This read-only function returns an unsigned integer value of the measured internal temperature of the device in 0.1 K units measured by the gas gauge.
CycleCount()CC0x2A/0x2BThis read-only function returns an unsigned integer value of the number of cycles the battery has experienced a discharge (range 0 to 65,535). One cycle occurs when accumulated discharge greater than or equal to the cycle count threshold.
RelativeStateOfCharge()RSOC0x2C/0x2DThis read-only function returns an unsigned integer value of the predicted remaining battery capacity expressed as percentage of FullChargeCapacity() with a range of 0% to 100%.
StateOfHealth()SOH0x2E/0x2FThis read-only function returns an unsigned integer value of the battery state-of-health expressed as a percentage of the ratio of predicted FCC (simulated with SOH Load Rate at 25°C) over the DesignCapacity(). The range is 0% to 100%.
ChargingVoltage()CV0x30/0x31Returns the desired charging voltage in mV to the charger
ChargingCurrent()CC0x32/0x33Returns the desired charging current in mA to the charger
TerminateVoltage()0x34/0x35Returns or updates the value of Terminate Voltage
TimeStampUpper()0x36/0x37Returns or updates the upper 16 bits of the time stamp in seconds
TimeStampLower()0x38/0x39Returns or updates the lower 16 bits of the time stamp in seconds
QmaxCycles()0x3A/0x3BReturns cycle count at the last QMax update
DesignCapacity()0x3C/0x3DIn SEALED and UNSEALED access: This command returns the value stored in Design Capacity mAh. This is intended to be a theoretical or nominal capacity of a new pack, but should have no bearing on the operation of the gas gauge functionality.
AltManufacturerAccess()0x3E/0x3FMAC data block command
MACData()0x40/0x5FMAC data block
MACDataSum()0x60MAC data block checksum
MACDataLen()0x61MAC data block length
VoltHiSetThreshold()0x62/0x63This read/write function is a signed integer in units of mV for the high voltage level threshold, which sets InterruptStatus()[VOLT_HI].
VoltHiClearThreshold()0x64/0x65This read/write function is a signed integer in units of mV for the high voltage level threshold, which clears InterruptStatus()[VOLT_HI].
VoltLoSetThreshold()0x66/0x67This read/write function is a signed integer in units of mV for the low voltage level threshold, which sets InterruptStatus()[VOLT_LO].
VoltLoClearThreshold()0x68/0x69This read/write function is a signed integer in units of mV for the low voltage level threshold, which clears InterruptStatus()[VOLT_LO].
TempHiSetThreshold()0x6AThis read/write function is a signed integer in units of °C for the high temperature level threshold, which sets InterruptStatus()[TEMP_HI].
TempHiClearThreshold()0x6BThis read/write function is a signed integer in units of °C for the high temperature level threshold, which clears InterruptStatus()[TEMP_HI].
TempLoSetThreshold()0x6CThis read/write function is a signed integer in units of °C for the low temperature level threshold, which sets InterruptStatus()[TEMP_LO].
TempLoClearThreshold()0x6DThis read/write function is a signed integer in units of °C for the low temperature level threshold, which clears InterruptStatus()[TEMP_LO].
InterruptStatus()0x6EThis read-only function returns the status of the interrupt including cause of interrupt.
SOCDeltaSetThreshold()0x6FThis read/write function is an unsigned char in units of % for the SOC delta level threshold, which clears InterruptStatus()SOC_DELTA.