This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

BQ20Z95: Extended SBS Commands

Part Number: BQ20Z95

Hi Community Members,

We use bq20z95 in our project. SBS commands return us correct values. However, extended sbs commands do not return correct values.

We tried to check which mode the bq20z95 is in with "OperationStatus (0x54)". However, this extended sbs command does not return a correct value either. In addition, we have tested 4 different batteries. The extended sbs commands for these batteries do not return correct values either.

Our questions are:

1) Could the reason why the extended sbs commands do not return correct values may be because the bq20z95 is not in the correct mode (Full Access, Unsealed, Sealed)? 

2) If so, how can we check which mode the bq20z95 is in and how can we change the mode?

Thank you very much.

Best Regards.

  • Hello Tufan,

    The extended commands work in unsealed mode. Are you able to read/see the value of OperationStatus() through bqEVSW SBS window?

  • Hi Shirish,

    We cannot see the value of OperationStatus using SMBus and MCU. 

    Is there a different method than bqEVSW SBS window, which uses SMBus and MCU? We need to buy the EV2300 EVM interface board to use it.

    Thank you very much.

  • Hello Tufan,

    Operation Status is also available in sealed mode. The MCU is probably sending the wrong command sequence or the timing is not within spec. By reading with bqEVSW we can tell if the bq20z95 is operating as expected. If bqEVSW is able to read it, then the MCU code will need to be reviewed. If bqEVSW cannot read it, then the bq20z95 may be damaged.

  • Hi Shirish,

    We will buy EV2300 EVM interface board and try what you said. We will repost the result here.

    However, if the bq20z95 was damaged, the following sbs commands would not return correct values:

    Temperature (0x08), Voltage (0x09), Current (0x0A), RelativeStateOfCharge (0x0D), AbsoluteStateOfCahrge (0x0E) etc...

    Thank you very much for your help.

  • Hello Tufan,

    I can review the sequence of SMBus commands that the MCU sends for reading OperationStatus if you post it here

  • Hello Shirish,

    * We use the following function in order to get the returned values:

    #define BQ20XXX_ADDRESS 0x0B                    // Battery Device Address
    #define BQ20XXX_OPERATION_STATUS 0x54 // Operation Status

    uint16_t OperationStatus(void)
    {
         uint16_t TemporaryRead;
         SMBusMasterByteWordRead(&g_sMaster, BQ20XXX_ADDRESS, BQ20XXX_OPERATION_STATUS, pui8Data, 2);
         while(SMBusStatusGet(&g_sMaster) == SMBUS_TRANSFER_IN_PROGRESS)
         {
         }
         while(SMBusStatusGet(&g_sMaster) != SMBUS_TRANSFER_COMPLETE)
         {

         }

         TemporaryRead = (uint8_t)pui8Data[0];
         TemporaryRead |= (uint8_t)pui8Data[1]<<8;

         return TemporaryRead;
    }

    * The function mentioned above successfully returns the values for the following sbs commands:
    - Voltage (0x09): 7.51 V
    - Current (0x0A): 218 mA
    - Temperature (0x08): 27,25 Celcius
    - Remaining capacity (0x0F): 2270 mAh
    - Full charge capacity (0x10): 3918 mAh

    * The function mentioned above returns 0 for the all extended sbs commands in datasheet:
    OperationStaus (0x54), ChargingStatus (0x55), StateOfHealth (0x4F), PackVoltage (0x5A), AverageVoltage (0x5D) etc...

    * The technical reference of bq20z95 says the following:
    A.1.3 Extended SBS Commands
    Also available via ManufacturerAccess in sealed mode are some of the extended SBS commands. The commands available are listed below.
    The result of these commands need to be read from ManufacturerAccess after a write to ManufacturerAccess.

    * Our questions are:
    1) What do we need to write to ManufacturerAccess in order to get the returned value by the extended sbs command of OperationStatus (0x54)?
    2) Is it possible to get the returned value of OperationStatus (0x54) by using the function mentioned above?

    Thank you...

  • Hello Tufan,

    The function shown above seems to read a word from 0x54. This will work in unsealed mode only.

    For sealed mode(works in unsealed mode too), the procedure is

    1. Write Word 0x0054 to ManufacturerAccess()

    2. Read Word from ManufacturerAccess()

  • Hello Shirish,

    This has solved the problem.
    1) We write 0x0054 to ManufacturerAccess() for the extended sbs command of OperationStatus (0x54).
    2) We read from ManufacturerAccess(). The returned value is 0xE403, which shows that bq20z95 is in sealed mode.
    We can also read other extended sbs commands such as AverageVoltage, ChargingStatus etc...

    * Is it a preferred method that we write to and read from ManufacturerAccess() in order to use extended commands?
    * Is it possible to change the mode from sealed to unsealed/full access while in sealed mode? Technical reference of bq20z95 says the following:
    'Once in sealed mode, the part can never permanently return to Unsealed or Full Access modes'

    Thank you.

  • Hello Tufan,

    Use the write/read method since it is available in all modes

    You can unseal by sending keys but it will only remain in unsealed mode until there is reset or change in mode like calibration mode etc.

  • Hi Shirish,

    I got it.

    The information you provided was very helpful.

    Thank you very much. 

    Best Regards.