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.

bq27741 i2c rate

Other Parts Discussed in Thread: BQ27741-G1

Greetings,

Two questions about bq27741-g1 I2C access:

1. Just noticed that the data sheet states a max I2C clock frequency of 400kHz. I checked and the EVM runs at just 100kHz.  Is 400 truly doable?

2. The users guide states:

"For read-only standard commands, there is no waiting time required, but the host must not issue all standard commands more than two times per second. Otherwise, the gauge could result in a reset issue due to the expiration of the watchdog timer."

I interpret this to say I cannot do a single register I2C read of the data registers (0x00 through 0x39) at a rate higher than 2Hz.  Is this correct?

Can I resolve the 2Hz threshold by issuing a multi-byte read?  That is, could I, for example, read the entire standard register data set by issuing a repeated read command of register 0x02 with a length of 0x35?  Will the gap at 0x30 cause a problem?

Thanks,

Steve

  • Hi Steve,

    BQ27741-G1 supports fast I2C (400KHz SCL). Let me look into your concerns and the host conditions then get back to you.

  • Hello Steve,

    I reviewed the User's Guide. It is saying for read only standard commands 0x04 to 0x39 there is no wait time required between commands using fast I2C (400kHz). The condition is that the same read only standard command should NOT be repeated more than twice in one second.

    For your use case single register fast I2C (400kHz) read only standard commands (0x04-0x2F and 0x34-0x39) without wait time is OK as long as the commands are NOT repeated more than twice in one second. 

  • Hi Damian,

    First, thanks for the research and response. I appreciate it.

    I think you are saying I cannot repeatedly issue the IDENTICAL I2C read command faster than twice per second. If I issue DIFFERENT I2C read commands, I can exceed twice per second.

    Let me rephrase, just so I'm sure I understand what you wrote.

    Reading 16 bits of Temperature(command code 0x06), would have the following I2C transaction:
    Temperature: 0xAA 0x06 0xAB data0 data1 where each dataX is 8-bits of temperature.

    Reading 16 bits of Voltage (command code 0x08), would have the following I2C transaction:
    Voltage: 0xAA 0x06 0xAB data0 data1 where each dataX is 8-bits of voltage.

    If I read only Temperature over and over again, I must not exceed twice per second.
    Temperature: 0xAA 0x06 0xAB data0 data1
    Temperature: 0xAA 0x06 0xAB data0 data1
    Temperature: 0xAA 0x06 0xAB data0 data1

    If I alternate between temperature and voltage, I can exceed twice per second.
    Temperature: 0xAA 0x06 0xAB data0 data1
    Voltage: 0xAA 0x06 0xAB data0 data1
    Temperature: 0xAA 0x06 0xAB data0 data1
    Voltage: 0xAA 0x06 0xAB data0 data1


    If I read both temperature and voltage with the same I2C transaction, it would look like the following:
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3

    If I do this over and over, I must not exceed twice per second.
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3


    But if I alternate T & V with Remaining Capacity, I can exceed twice per second.
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3
    Remaining Cap: 0xAA 0x10 0xAB data0 data1
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3
    Remaining Cap: 0xAA 0x10 0xAB data0 data1


    Sorry for the painfully excessive detail, but I just don't see what the author saw when he/she wrote that section of the users guide.

    Steve
  • Hello Steve,

    Any read-only standard command should NOT be repeated more than twice in one second even if another command is executed between the repeated commands.

    If I read only Temperature over and over again, I must not exceed twice per second. (Yes)
    Temperature: 0xAA 0x06 0xAB data0 data1
    Temperature: 0xAA 0x06 0xAB data0 data1

    1 sec must pass before executing next command 0xAA 0x06
    Temperature: 0xAA 0x06 0xAB data0 data1

    If I alternate between temperature and voltage, I can exceed twice per second. (No)
    Temperature: 0xAA 0x06 0xAB data0 data1
    Voltage: 0xAA 0x08 0xAB data0 data1
    Temperature: 0xAA 0x06 0xAB data0 data1
    Voltage: 0xAA 0x08 0xAB data0 data1
    1 sec must pass before executing next command 0xAA 0x06 or 0xAA 0x08

    If I read both temperature and voltage with the same I2C transaction, it would look like the following:
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3

    If I do this over and over, I must not exceed twice per second. (Yes)
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3

    1 sec must pass before executing next command 0xAA 0x06 
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3


    But if I alternate T & V with Remaining Capacity, I can exceed twice per second.  (No)
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3
    Remaining Cap: 0xAA 0x10 0xAB data0 data1 
    T & V: 0xAA 0x06 0xAB data0 data1 data2 data3
    Remaining Cap: 0xAA 0x10 0xAB data0 data1 

    1 sec must pass before executing next command 0xAA 0x06 or 0xAA 0x10

  • Glad I went through all that detail as I had misunderstood. Also glad you took the time to deal with it, Damian. Thank you!
  • Hi Steve,

    I'm glad I could help. Another important point to note is that these registers are only updated once per second, so there's no value in reading them more than once every second.