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.

Special Commands to read information from BQ78350 Companion Chip ?

Other Parts Discussed in Thread: BQ78350, BQSTUDIO

Dear Members,

          I am trying to use the BQ7694000 and BQ78350 companion chip with dsPIC33EP512MU810. I am using dsPIC33E to talk to the companion chip over SMBus. What i am planning to do is to talk to the companion chip using dsPIC33E to poll information such as 3 Temp Sensors, Register information to read and to write and so on. What i see different to the BQStudio is that there are no sufficient commands available in the datasheet to replicate what information is polled through the BQStudio to be same done using the dsPIC33E micro controller. Is there any other list of special commands that i can you use ? Your quick reply or reply ASAP will be very much appreciated.  

Thank You Very Much 

  • Please has anyone gt any answer to my query ?
  • Vikram

    Most of the status information can be read with SMBus commands. e.g. Voltage is read with SMBus command 0x09. You can also read the Temperature using SMBus command 0x08. Reading individual temperature sensor data will be more complicated. You can read them from the DAStatus2 register using MAC command 72. Write 0072 to SMBus command 00. Then read block 44. This will return data for the DAStatus1 register. The first two bytes are header and then the rest of the bytes are data as shown in the register description on page 125 of the TRM. Temperature is returned in kelvin x 10, so you will need to convert the data to decimal, divide by 10 and then convert to celcius.

    I attached a document to help with understanding the SMBus protocol.

    Tom

    5807.SMBus made simple_v6.pdf

  • Hi Tom,
    Thank you so much for your reply. I will look into this and if i have any queries will get back to you Thanks a lot.
  • Hi Tom,

    I am using the BQ chip, and it seems there are some errors in the reference on DAStatus1 and DAStatus2.  For DAStatus2, the documentation specifies:

    Outputs 14 bytes of temperature data values on ManufacturerBlockAccess() or ManufacturerData() in the following format: aaAAbbBBccCCddDD where:

    AAaa: ExtAveCellVoltage Activate

    BBbb: VAUX Voltage

    CCcc: TS1 Temperature

    DDdd: TS2 Temperature

    EEee: TS3 Temperature

    FFff: Cell Temperature

    Only 12 bytes are listed there, am I missing two?  Also, the temp values are in Kelvin, correct?  Would be nice to have units listed here.

    Another question regarding DAStatus1, I have a system where only 14 cells are being used (cell 14 is tied off).  Cell 1 is the low side of the first cell, aka GND.  The data that I get back (and I confirm it is correct because it is the same raw data I get using the Battery Management Studio) is in the following format:

    aaAAbbBBccCCddDDeeEEffFFggGGhhHHiiIIjjJJkkKKllLLmmMMnnNNooOOppPP

    I am interpreting this data as specified in the document:

    AAaa: Cell Voltage 1

    BBbb: Cell Voltage 2

    CCcc: Cell Voltage 3

    DDdd: Cell Voltage 4

    EEee: Cell Voltage 5

    FFff: Cell Voltage 6 

    GGgg: Cell Voltage 7

    HHhh: Cell Voltage 8

    IIii: Cell Voltage 9

    JJjj: Cell Voltage 10

    KKkk: Cell Voltage 11

    LLll: Cell Voltage 12

    MMmm: Cell Voltage 13

    NNnn: Cell Voltage 14

    OOoo: Cell Voltage 15

    PPpp: Reserved

    Following this format, it appears that AAaa is a "garbage" value (something like 8441 decimal), and the last value is 0.  All values in between are reasonable cell voltages in mV.  To me it seems that the order of this data is backwards.  Since our "Cell 1" connection is to the low side of the first cell (GND), it would make sense that it was the 0 value (last word, OOoo in my data).  The reserved value would make sense that it could have the "garbage" value.  However, in order for this to be the case, the ordering would have had to have been backwards, (i.e. PPpp, OOoo, NNnn, etc instead of AAaa, BBbb, CCcc, etc.).  Again, I confirm I'm receiving and processing the data correctly, because I can see the output coming back correctly using the Battery Management GUI (Read block to command 0x71).  Can you confirm or deny whether or not I am interpreting this data correctly?  If so, are there other corrections I should be aware about in the reference? 

  • Ross,
    I bench tested the commands and found them to be correct. You have to bytes swap the data that is read back before you convert it from HEX to DECIMAL and temperature is reported in Kelvin x10. You have to divide the data by 10 and then convert it to Celcius. Can you send a screen shot of the block of data that you read back and a screenshot of the voltages and temperatures from the registers screen?

    Tom