Post Go back to editing

LTC2992 stops I2C

Hi there,

I'm having a problem with my I2C bus and the LTC2992.

I've built a prototype board and found out that the reason why I could not get any ACK from it was that I had not connected SDAI to SDAO. I verified this with a USB to I2C interface, just to confirm I was getting data back. wasn't concerned as to what data, so long as it spoke to me and was not a NACK error.

The application is for a micro controller to communicate with the LTC2992 and then transmit that data to a serial terminal over UART via a USB-UART cable. However when I connect SDAI to SDAO it kills the communications to the serial terminal, but when I remove the link, the serial terminal works and data about other devices on the board is displayed, but not the LTC2992 - as you would expect.

its like the device is causing the I2C bus to be held. This was confirmed by my colleague developing the firmware for the micro, who stated the his I2C services were stopping cos if a hardware change I had made (pin 10 - 11 link) 

I've read the datasheet and made sure its not the LTC2292-1 (which it isn't) but am wondering if it could be the under voltage lockout feature. I've tried reading the datasheet on this feature but am confused as to what conditions must be applied to Vdd and INTVcc. I have set up the IC as per figure 4c in the datsheet.

My questions are:

  1. have i misunderstood the connections for SDAI and SDAO?
  2. in regards to the under-voltage lockout feature, must I
    1. power the chip on as normal and then toggle Vdd + INTVcc?
    2. toggle either Vdd or INTVcc?
  • Greetings cWoodhouse698,

    Interesting problem! 

        1. Would you be able to provide a schematic and scope shots of communication with and without SDAI tied to SDAO?  This would help answer question #1.  You should be able to connect SDAO and SDAI without issue.  

       2.  The part comes out of UVLO when VDD or INTVcc rise above ~2.5V.  During shutdown, if either supply remains above 2.1V the internal I2C logic will remain in the same state as before the shutdown. 

    a.  As long BOTH VDD and INTVcc  have both been brought down below 2.1V when powering off, powering the chip on as normal should reseet the I2C logic.

    b.  There is no need to toggle after powering up.

    Thank you and best regards,

    Brad

  • Hi Brad, thanks for your clarity on the Vdd INTVcc configuration.

    Here is a snip of the schematic I'm working with. The I2C lines are connected to pins 14 and 15 of a PIC16F1788. The current shunt inputs are connected to some buffers connected to a pot to simulate current flow.

    I should point out that the code for the micro controller has had the communications services to the LT2992 omitted as my colleague could not get it working. The address of the LT2992 is 0x67.

    Below is a screen capture of the serial terminal working as it should with a capture of the I2C bus from a logic analyser, with SDAI-SDAO open circuit:

    Now the same but with SDAI-SDAO Short Circuit:

    The Serial terminal reports the serial is disconnected. Am using Real term V3.0.1.44.

    The captures from the logic analyser are attached for the different states:

    SPI Bus - LT2992 SDAI-SDAO.zip

    I captured the data using a Saleae analyser. The zip file includes the saleae capture files and .CSV exports of the data. I am currently going through it myself to find differences:

    I hope this additional information helps,  please let me know if you require more.

    Best regards,

    Chris

  • Hi Chris,

      I do not see any pullup resistors for SDA/SCL on your schematic but assume that they are there.  Do you have pullups on both SDAI and SDAO?  Was this accounted for when you connected them together?  I do have a bit of concern about how you are tying your address pins.  I would recommend tying ADR1 directly to INTVcc (pin7) and ADR0 directly to GND. I would also recommend performing a bus probe to see if there are any unknown addresses that respond.  Hopefully this helps!

    If you are interested in some existing code for the LTC2992, we have a Linduino sketch in the LTSketchbook at LTSketchbook\Part Number\2000\2900\2992\DC2561.

    Best regards,

    Brad

  • Hi Brad, yes there are 1K pull ups on the SDA SCL lines, but they are on another part of the schematic. There is not pull up on SDAi and on SDAO, just SDAI.

    I have since corrected the pull up/down for the ADR lines and used INTVcc, still no improvements.

    I will double check the address responses and pass on the example code to my colleague.

    thanks for your help.

    Chris

  • Greetings Chris,

      There is another possibility for what is causing your issues.  The LTC2992 uses repeated start in its I2C communication, which if not accounted for by your microcontroller, could cause issues.

    The master begins a read operation with a START condition followed by the 7-bit slave address and the R/W bit set to zero. After the addressed LTC2992 acknowledges the address byte, the master then sends a command byte that indicates which internal register the master wishes to read. The LTC2992 acknowledges this and then latches the  command byte into its internal register address pointer. The master then sends a repeated START condition followed by the same 7-bit address with the R/W bit now set to 1. The LTC2992 acknowledges and sends the contents of the requested register. The transmission terminates when the master sends a STOP condition. If the master acknowledges the transmitted data byte, as in a read word command, the LTC2992 will send the contents of the next register. If the master keeps acknowledging, the LTC2992 will keep incrementing the register address pointer and sending out data bytes. The read operation terminates and the register address pointer resets to 0x00 when the master sends a STOP condition.

    Best regards,

    Brad