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.

INA231EVM: I2C High Speed Mode

Part Number: INA231EVM
Other Parts Discussed in Thread: INA231

I have developed a board using 8 INA231 that are managed by a DSP. Everything is nominal with I2C up to a 1.1Mhz speed (even if nominal is 400kHz). For further use, I still do not use stop phase and use restart phase instead of start phase.Then I have tried to put the INA231 in high speed mode using datasheet described operations:

- At 400kHz send Start followed by a 0001xxx byte.

At this stage, it is not clear for me if we send the normal adress followed byte the register byte 0001xxx or we send directly the byte (looks like a "brodcast" byte ?). As it is said that the byte is not acknowledged, I have supposed that we use a normal adressing mode. Anyway, I have tried the 2 methods whitout success. What is surprising is that with a normal : start - adresse byte - register byte=00001xxx, the device acknowledges the byte even if this register is not nominal and the datasheet says that the byte is not acknowledged.

I never succeded in using an I2C clock > 1.1Mhz so the filters used by the INA231 are not changed.

Thanks,

  • Hello Frederic,

    Thank you for using the TI forum.  I'll go over the I2C communication steps below for setting High Speed (HS) mode and hope that that will answer your questions. Note that the HS command is not sent to an individual device that has been addressed, but is sent in place of the address to all devices on the bus.  

    1. After configuring I2C to run at either 100 kHz or 400 kHz:
      1. Send a start condition followed by the HS code 0b00001XXX (for example, you could use 0x0F as the HS code)
        1. Note, this is essentially the same as setting the target device address as the HS code (such as 0x0F) without sending any data bytes.
      2. Note that since this is sent instead of a device address, it will set HS mode for all devices on the bus.
      3. This only needs to be done one time, unless a stop condition is sent on the bus.
    2. Write to/read from a device like normal:
      1. Send a start condition followed by the target device address and a read/write bit.
        1. Note that since all addresses follow the format 0b100XXXX, it will never be confused with the HS command, which must have a 0 bit where the 1 bit is in all addresses. 
      2. Send/receive each byte of data without the stop bit so that the devices stay in HS mode.
    3. Repeat step 2 for any subsequent data transfer. 

    I hope this helps, let me know if you have any more questions.