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.

BQ76PL455A-Q1: Device stops responding right after writing to TSTCONFIG register

Part Number: BQ76PL455A-Q1

Hi all,

I'm trying to read VM (negative supply charge pump) *and* VMODULE (sum of cells) voltages for diagnostic purposes.

To accomplish that, I'm writing 0x0005 to TSTCONFIG register, by sending the following frame (device address is 0x01):

0x92 0x01 0x1E 0x00 0x05 0x18 0x24

The next step is a "single device write with response", writing to CMD and CHANNELS registers, to get back both voltages - here is the frame:

0x85 0x01 0x02 0x00 0x00 0x00 0x00 0x03 0x99 0x7C

However, I never get the expected response, and from that moment on, the device won't respond anymore.

What am I doing wrong? Any hints?

Best regards, 

Joao

  • Hi Joao,

    Can you explain your intention with the 0x85 command? I believe this is invalid, if you are trying to perform a simple read, please refer to the software design reference guide: www.ti.com/.../slva617a.pdf to understand the correct command frame syntax. 0x81 is the read command followed by device address, reg addr, expected return bytes, and CRC.

    Best Regards,

    Taylor
  • Hi, Taylor,

    Thank you for your time.

    The second frame is not a register read operation. It is a CMD register *write* operation - hence, a command for the device to send sampled data.

    Exactly which data are to be sent by the device must specified via CHANNELS register - a 4-byte register at address 0x03~0x06 - that's why a 5-byte write, starting at CMD register (address 0x02) is performed.

    In this particular case, I'm interested in VM and VMODULE. To be able to get those, according to the datasheet (page 73), I need to set proper bits (BIT0 and BIT2) in TSTCONFIG - that's why the first frame is needed. However, as soon as I send this firts frame, the device stops responding.

    I'm puzzled...

    João

  • Hi João,

    Command is not correct. That's why device is not respondsing.

    Goto bottom of page 15

    there is an example of sending commands and reading the voltage.

    Roger

    t

  • According to my latest tests, the command is ok.

    I was trying to read both VMODULE and VM *and* VMODULE and VM Ground references, as follows:

    (a) Write 1 to bits (0) and (2) of TSTCONFIG register;

    (b) Writing 1 to bits (0) and (1) of CHANNELS register;

    (c) Writing 0x85 to CMD register;

    (d) Waiting for response containing VMODULE and VM data;;

    (e) Write back 0 to bits (0) and (2) of TSTCONFIG register;

    (f) Writing 1 to bits (0) and (1) of CHANNELS register;

    (g) Writing 0x85 to CMD register;

    (h) Waiting for response containing VMODULE and VM GND references data.

    Obs1: Operations (b) and (c) are performed in a single "single device write with response";

    Obs2: Operations (f) and (g) are performed in a single "single device write with response";

    Obs3: Single operation mentioned in Obs.1 is initiated with a write operation to register addres0x02 (CMD), with a payload of 5 bytes, one byte for (CMD) register itself and four bytes for the (CHANNELS) register (addresses 0x03~0x06).

    Obs4: Single operation mentioned in Obs.2 is initiated with a write operation to register addres0x02 (CMD), with a payload of 5 bytes, one byte for (CMD) register itself and four bytes for the (CHANNELS) register (addresses 0x03~0x06).

    All those operations were being performed in rapid sucession. The response waiting timeout was set to 30ms, a delay that proved enough for getting 14 VSENSE readings in a single operation.

    **However**...

    That was not working, I was not getting any response to anything after writing to TSTCONFIG. So I changed the code to perform separate transactions - one  for VMODULE and VM voltages reading operation and another, for VMODULE and VM GND references reading operation.

    **Well, that is working**, wit no changes to any of the frames send - I only changed their timing..

    Now I'm being able to get the info I need, but I could not understand what I was doing wrong.

    Any ideas?

    Thank you very much,

    Joao

  • Hi Joao,

    Thank you for your detailed explanation! I am very glad that your code is working now. 

    I reviewed our documentation as well as your comments, and the command frames you sent are correct (with the note that I checked everything but the CRC, I assumed your CRC is correct). 

    Can you please explain in more detail what you mean by "I only changed their timing"? What timing are you talking about and what did you do to change that timing (e.g. did you write to a register? did you just increased the wait time for a response?

    I think the issue you observed could be related to the settings on register 0x07 (Command Oversampling register). See description and recommendations for setting this register on section 7.6.3.4  "Command Oversampling" of the device datasheet (http://www.ti.com/lit/ds/symlink/bq76pl455a-q1.pdf).

    Best regards, 

    Leslie