This technical reference manual (TRM) discusses the modules and peripherals of the BQ76942 device, and how each is used to build a complete battery pack monitor and protection solution. For details on the hardware device features and electrical specifications, see the BQ76942 3-Series to 10-Series High Accuracy Battery Monitor and Protector for Li-Ion, Li-Polymer, and LiFePO4 Battery Packs.
TI is transitioning to use more inclusive terminology. Some language may be different than what you would expect to see for certain technology areas.
The following notation is used if commands, subcommands, and data memory values are mentioned within a text block:
All trademarks are the property of their respective owners.
The Texas Instruments BQ76942 device is a highly integrated, high accuracy battery monitor and protector for 3-series to 10-series Li-ion, Li-polymer, and LiFePO4 battery packs. The device includes a high accuracy monitoring system, a highly configurable protection subsystem, and support for autonomous or host controlled cell balancing. Integration includes high-side charge-pump NFET drivers, dual programmable LDOs for external system use, and a host communication peripheral supporting 400-kHz I2C, SPI, and HDQ one-wire standards. The following are the device features:
The BQ76942 device is a highly integrated, accurate battery monitor and protector for 3-series to 10-series Li-ion, Li-polymer, and LiFePO4 battery packs. High accuracy voltage, current, and temperature measurements provide data for host-based algorithms and control. A feature-rich and highly configurable protection subsystem provides a wide set of protections, which can be triggered and recovered completely autonomously by the device or under full control of a host processor. The integrated charge pump with high-side protection NFET drivers enables host communication with the device even when FETs are off by preserving the ground connection to the pack. Dual programmable LDOs are included for external system use, with each independently programmable to voltages of 1.8 V, 2.5 V, 3.0 V, 3.3 V, and 5.0 V, capable of providing up to 45 mA each.
The BQ76942 device includes one-time-programmable (OTP) memory for customers to setup device operation on their own production line. Multiple communications interfaces are supported, including 400-kHz I2C, SPI, and HDQ one-wire standards. Multiple digital control and status data are available through several multifunction pins on the device, including an interrupt to the host processor, and independent controls for host override of each high-side protection NFET. Three dedicated pins are provided for temperature measurement using external thermistors, and multifunction pins can be programmed to use for additional thermistors, supporting a total of up to nine thermistors, in addition to an internal die temperature measurement. Figure 2-1 shows the BQ76942 block diagram.
The BQ76942 device includes support for direct commands and subcommands.
Some subcommands are only used to initiate an action and do not involve sending or receiving data. In these cases, the host can simply write the subcommand into 0x3E and 0x3F, it is not necessary to write the length and checksum or any further data.
The commands supported in the device are described in Commands and Subcommands. Single-byte commands are direct commands, while two-byte commands are subcommands. Data formats are described in Data Formats.
The most efficient approach to read the data from a subcommand (to minimize bus traffic) is shown below:
An easier approach that is less efficient on bus traffic is:
The checksum is calculated over 0x3E, 0x3F, and the buffer data. It does not include the checksum or length in 0x60 and 0x61.
If the checksum and length are read together, this can trigger an auto-increment in some cases. In which case, the buffer is populated with another block's data. Generally, the checksum and length should not be read together unless the buffer has already been read or if auto-incrementing is intended.
Command or subcommand bits that are denoted RSVD_0 should only be written as a "0", while bits denoted RSVD_1 should only be written as a "1".
The BQ76942 device includes registers, which are stored in the RAM, and are integrated in one-time programmable (OTP) memory. At initial power-up, the device loads OTP settings into registers, which are used by the device firmware during operation. The device can also perform a reset on demand if the 0x0012 RESET() subcommand is sent. The recommended procedure is for the customer to write settings into OTP on the manufacturing line, in which case the device will use these settings whenever it is powered up. Alternatively, the host processor can initialize registers after power-up, without using the OTP memory, but the registers will need to be re-initialized after each power cycle of the device. Register values are preserved while the device is in NORMAL, SLEEP, or DEEPSLEEP modes. If the device enters SHUTDOWN mode, all register memory is cleared, and the device will return to the default parameters when powered again.
The OTP memory in the BQ76942 device is initially all-zeros, each bit can be left as a "0" or written to a "1," but it cannot be written from a "1" back to a "0." The OTP memory includes two full images of the Data Memory configuration settings. At power-up, the device will XOR each setting in the first OTP image with the corresponding setting in the second OTP image and with the default value for the corresponding setting, with the resulting value stored into the RAM register for use during operation. This allows any setting to be changed from the default value using the first image, then changed back to the default once using the second image. The OTP memory also includes a 16-bit signature, which is calculated over most of the settings and stored in OTP. When the device is powered up, it will read the OTP settings and check that the signature matches that stored, to provide robustness against bit errors in reading or corruption of the memory. If a signature error is detected, the device will boot into the default configuration (as if the OTP is cleared).
The device supports up to eight different signature values, so up to eight partial changes in OTP can be made, with the signature updated accordingly. The OTP signature does not include the Manufacturing Data (available using the 0x0070 MANU_DATA() subcommand) nor any PF status data which was written to OTP (which is read using the 0x0053 SAVED_PF_STATUS() subcommand).
The OTP memory settings are typically written after the device is assembled onto the PCB, but before cells are attached to the board. Programming the OTP memory settings requires the voltage applied on the BAT pin and the temperature to be within allowed limits, per specifications. All configuration settings are first loaded into registers using the serial communication interface (see Serial Communications Overview). The 0x00A0 OTP_WR_CHECK() subcommand can be sent to initiate a self-check whether OTP writing can be accomplished. The device must be in FULLACCESS and CONFIG_UPDATE mode when this subcommand is sent. Table 3-1 shows the information the device returns from 0x00A0 OTP_WR_CHECK().
Byte 0 | ||
---|---|---|
Bit | Name | Description |
7 | ProgrammingOK | If this bit is set, conditions are met for programming, and none of the remaining bits in this byte will be set. |
6 | Reserved | |
5 | Locked | The device is not in FULLACCESS and CONFIG_UPDATE mode, or the OTP Lock bit has been set to prevent further modification. |
4 | No_SIG | Signature cannot be written (indicating the signature has already been written too many times). |
3 | No_DATA | Could not program data (indicating data has been programmed too many times; no XOR bits left). |
2 | HighTemp | The measured internal temperature is above the allowed OTP programming temperature range. |
1 | LowVoltage | The measured stack voltage is below the allowed OTP programming voltage. |
0 | HighVoltage | The measured stack voltage is above the allowed OTP programming voltage. |
Bytes-1,2 | ||
If byte 0, bit 3 is set, then byte-1 and byte-2 will contain the LSB and MSB of the address of the first data value which could not be programmed. |
If the self-check is successful, then the actual OTP write can be initiated by sending the 0x00A1 OTP_WRITE() subcommand. This subcommand provides the same feedback as the 0x00A0 OTP_WR_CHECK() subcommand above, with byte 0, bit 7 being set if programming completed successfully. The time for OTP programming depends on the number of bytes that must be programmed, with the device taking approximately 200 μs per byte programmed.
Special exceptions are provided that allow programming the Manufacturing Data and PF status data to OTP during normal operation if Settings:Manufacturing:Mfg Status Init[OTPW_EN] is set.
TI preprograms the BQ76942 device family versions with different default values that control the serial communications protocol and the REG1 LDO voltage, as shown in the Device Comparison Table in the (BQ76942 3-Series to 10-Series High Accuracy Battery Monitor and Protector for Li-Ion, Li-Polymer, and LiFePO4 Battery Packs). The setting for serial communications mode (I2C versus SPI, CRC enabled versus not enabled) is set using a proprietary TI factory setting, which is not user-accessible. This effectively changes the definition of Settings:Configuration:Comm Type = 0x00 (which is the default setting for each version). For example, in the BQ76942, the value of 0x00 for this parameter is defined such that the device uses I2C mode without CRC. But in BQ7694201, the value of 0x00 for this parameter causes the device to use SPI mode with CRC. The user can modify the communications mode to a different setting, if desired, by changing the value of Settings:Configuration:Comm Type from 0x00 to another value.
For those versions that have the REG1 LDO enabled by default, TI programmed the OTP to modify particular data memory configuration parameters. In these cases, one of the eight possible OTP signature settings is used for this modification, leaving seven for further customer use. In these device versions, when the device is initially powered and the data memory read, the default values for those particular data memory parameters differ from the default values listed in Chapter 13. Table 3-2 shows the details of what is modified in OTP in each device version.
Part Number | Communications Interface | CRC Enabled | OTP Modification |
---|---|---|---|
BQ76942 | I2C | N | No modifications |
BQ7694201 | SPI | Y | No modifications |
BQ7694202 | I2C | Y |
Settings:Configuration:REG12 Config = 0x0D Settings:Configuration:REG0 Config = 0x01 |
BQ7694203 | SPI | Y |
Settings:Configuration:REG12 Config = 0x0F Settings:Configuration:REG0 Config = 0x01 Settings:Configuration:SPI Configuration = 0x60 |
BQ7694204 | SPI | Y |
Settings:Configuration:REG12 Config = 0x0D Settings:Configuration:REG0 Config = 0x01 Settings:Configuration:SPI Configuration = 0x60 |
Unsigned integers are stored without changes as 1-byte, 2-byte, or 4-byte values in little endian byte order.
0 |
U1 MSB |
0 | 1 |
U2 LSB | U2 MSB |
0 | 1 | 2 | 3 |
U4 L LSB | U4 L MSB | U4 H LSB | U4 H MSB |
Integer values are stored in 2's-complement format in 1-byte, 2-byte, or 4-byte values in little endian byte order.
0 |
I1 MSB |
0 | 1 |
I2 LSB | I2 MSB |
0 | 1 | 2 | 3 |
I4 L LSB | I4 L MSB | I4 H LSB | I4 H MSB |
Floating point values are stored using the IEEE754 Single Precision 4-byte format in little endian byte order.
0 | 1 | 2 | 3 |
Fract [0–7] | Fract [8–15] | Exp[0] + Fract[16–22] | Sign + Exp[1–7] |
Where:
Exp: 8-bit exponent stored with an offset bias of 127. The values 00 and FF have unique meanings.
Fract: 23-bit fraction. If the exponent is > 0, then the mantissa is 1.fract. If the exponent is zero, then the mantissa is 0.fract.
The floating point value depends on the unique cases of the exponent: