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.

BQ28Z610: Proper I2C Command Read back and data mapping

Part Number: BQ28Z610
Other Parts Discussed in Thread: BQSTUDIO

Dear Sir,

From below I2C read back using the BQ Studio, I would like to check with you what is the proper command and how can we read and convert the values for Manufacturer Date, Serial Number and Safety Status? I can't find any information on this from Technical Reference. Need your help.

 

Hope to hear from you soon!

  • The values are represented in the data in little endian, therefore you will  have to flip LSB and MSB to get the actual data. For eg if capacity of 1000mAh is represented in hex as 0x3e 08, in the data section returned by bqstudio it will be shown as 0x08 0x3e.

  • Hi Batt,

    We are following the Little Endian Format as stated in the Technical Reference SLUUA65C. We had in fact successfully read the Voltage() by simply issuing 0x08. However we have issues with the registers in the AltManufacturerAccess(). We would like to know what is the command sequence in attempting to read the AltManufacturerAccess(). 

    Thanks,

    Kat

  • Hi Kat,

    This is discussed in section 12.2 of the TRM. For altmfg access, you simply communicate at 0x3e and send the command in little endian.

    eg.

    Send a MAC Gauging() to enable IT via AltManufacturerAccess().
    1. With Impedance Track disabled, send Gauging() (0x0021) to AltManufacturerAccess()
    (a) I2C Write, start address = 0x3E (or 0x00). Data = 21 00 (data must be sent in Little Endian).
    2. IT is enabled, ManufacturingStatus()[GAUGEN_EN] = 1.
    Example: Read Chemical ID() (0x0006) via AltManufacturerAccess().
    1. Send Chemical ID() to AltManufacturerAccess().
    (a) I2C Write, start address = 0x3E (or 0x00). Data sent = 06 00 (data must be sent in Little Endian).
    2. Read the result from AltManufacturerAccess() and MfgMACData().
    (a) I2C Read, start address = 0x3E length = 36 bytes. First 4 bytes of the response will be 06 00 10 12.
    (b) The first two bytes "06 00" is the MAC command (for verification).
    (c) The second two bytes "10 12" are the Chem ID in Little Endian. That is, 0x1210 for ChemID 1210.
    (d) The last two bytes of the 36-byte block will be the checksum and length. The length in this case will
    be 6. The checksum is 0xFF – (sum of the first length – 2 bytes). The length and checksum are
    used to validate the block response.
    It is recommended to send “command only” operations to 0x00 and 0x01, and to set the command for a
    read back in the same way. The reason for this is that it can always reset any legacy support options that
    may be in effect; whereas, some legacy support options use 0x3E and 0x3F for other purposes. However,
    0x3E and 0x3F can always safely be used for block reads. For backward compatibility, a request of the
    device number or version will report a value for read on 0x00/0x01. The response word for both MAC
    command DEV and VERSION (0x0001 and 0x0002) should report 0xFFA5 as the legacy response. This
    is meant as a token to indicate to the host that the real response is on the extended block. “Command
    only” operations take place immediately after the word write.

  • Hi Batt,

    We were able to read the chem ID using those steps. However, we are not only reading the chem ID. We also need to read other details from the AltManufacturerAccess() such as : Manufacturer Date, Serial Number and Safety Status. For instance, we had to 0x3E followed by the data in little Endian for the Manufacturer Date (0x004D), We then read 36 bytes from 0x3E.

    The question is, how do we determine the Manufacturer Date bytes and how do we convert them. The SLUUA65C has a very vague and unclear explanation. 

  • Hi Kathleen,

    The procedure is the same. The only thing about the command is that it returns the command sent as the first 2 bytes of the data followed by the data in little endian.

  • Hi Batt,

    How do we convert the Manufacturer Date reading of 0x4E35 to MM/DD/YYYY format?

  • 0x4e35 in decimal is 20021

    1. divide by 512 to get year = 39, add to 1980 to get year, 2019

    2. divide remainder of 1 by 32 to get month 1

    3. remainder is 21 which is date

    so the date is 21/1/2019