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.

BQ40Z50-R2: 0x44 ManufacturerBlockAccess() - Unable to do basic reads.

Part Number: BQ40Z50-R2

Hi,

Having some problems with a basic read of the device ID.

I issue a SMBus write to 0x44 with the data 0x01,0x00 (Register 0x0001) (and optionally a zero PEC byte) per the diagram below.

I wait 22ms and then issue another write to 0x44, followed by a repeated start.  I do not get any meaningful data back, instead I almost always get 0x16 as the first byte back after the repeated start, per the diagram below. The data is always meaningless in that it has a 0x16, and always zero afterwards.

Can anyone see what I'm doing wrong?.  Please note I have tried not sending a 0x00 PEC byte, with the same results.

Does the BQ40Z50-R2 ALWASY need a valid PEC?

Thanks

Stomp!

  • Hi, thanks for the question. It seems you are doing the first part right, where you write to 0x44 with the register you will read (01 00) in this case since it is little endian. However, in the second part, you need to read 0x44 (you state you write it again in your message). When you read 0x44, you should get the data you are looking for.
  • Hi Steve,

    Thanks for your time.

    I discovered at about 1:30am this morning that for the Block Read to work correctly, you need a block length.  This seems to be an undocumented feature of the BQ40Z50-R2, and verified that the PEC byte can be ignored.

    Once I put in the block data length, and on the receive side handled the block data length that the BQ40Z50-R2 returns, I have full comms to the device, and my battery module is now up and operating.

    I've noticed that there are some register settings undocumented too, for example 0x0022 (FET Control). It would be good to know which bits in that register control which FETS. Also would be really great to get a SMBus Timing Diagram showing the various different types of read and writes.

    For anyone else having issues, here are the captures.

    Write to slave 0x16, manufacturer access command 0x44, to address 0x48E5:

    And read back from 0x44 at slave address 0x16 returns the length, register address and the data.

    Cheers

    Stomp!