I2C Seems to need more pullup resistance than normal

Discussion in 'Embedded Systems and Microcontrollers' started by lastcowboy32, May 13, 2016.

  1. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    We have a design where we are using the I2C embedded in the HDMI port of a motherboard to control other functions of the display.


    Edit:

    It took me a while to get back to my office for schematics, but I posted diagrams and schematics further down in my comments. Thanks.
     
    Last edited: May 16, 2016
  2. dannyf

    Well-Known Member

    Sep 13, 2015
    1,835
    367
    looks like a great design.
     
    Robin Mitchell likes this.
  3. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    We have a design where we are using the I2C embedded in the HDMI port of a motherboard to control other functions of the display.

    The first one that we prototyped and the first one that we tried after doing our display driver board design worked fine. The next couple of motherboards would not recognize some of the devices on the I2C lines. We noticed that these motherboards had a different BIOS revision. We hacked the BIOS to put it at the same revision as the board that works, and we still didn't have any luck.

    I looked at the signals, and they are nice and crisp. We're only running at 100KHz, so the edges are very sharp. What I did notice, though was that the "low" level of clock and data signals was only pulling down to about 1V. (just a little under 1V). That is fine for I2C compliant parts that have a VIL top specification of 1.5 Volts, but I wonder about the chipset back at the motherboard. The motherboard is purchased from Mitac, and I wonder if they are "bit banging" the I2C embedded in their HDMI port with some kind of GPIO pin that isn't truly I2C compliant. Maybe the voltage needs to get pulled much lower, say, to a more typical logic level, in order to get recognized.

    I would love to try making the pullup resistors larger, but e have 10K pullup resistors on the line currently. The bad thing is that we can't change this. These resistors are built into a level translator.

    I can try removing the level translator and populating some spots on our circuitboard that we provisioned for pullups (just in case) with higher values...say 50k or something like that.

    If that works, though....I'm wondering what our options are. Perhaps I try to get some resistance inline on the I2C signals between the display driver board and the motherboard? Wouldn't that make the "Low" seen at the display driver board even lower at the motherboard end?

    Something seems amiss. I've seen much worse looking I2C signals on the scope being interpreted just fine.

    We've eliminated software and other issues. It seems that it comes down to the specific motherboard, possibly its revision...even among motherboards that have the same part number from the manufacturer
     
  4. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    Great idea....looked good for our hacked up breadboard....looked good when we tested the first piece of our new display driver board design out of the box from Advanced Circuits....but...but...it seems to be marginal, as described above.
     
  5. crutschow

    Expert

    Mar 14, 2008
    13,056
    3,245
    Could you put a resistor in series with the power to the level translator?
     
    lastcowboy32 likes this.
  6. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    Sure, I could put a resistor in line with the level translator. It has two power supplies. 5V on the side that the HDMI I2C goes to and 3V on the side that connects to the touch screen controller.

    I could put a resistor in line with either or both.

    What benefit would that get me??? Is there a suggested value?
     
  7. Robin Mitchell

    Well-Known Member

    Oct 25, 2009
    734
    200
    @lastcowboy32

    Hang on, you first post shows NO diagram and you expect us to give a solution with nothing to go on (hence why danny's sarcastic post is justified and was very funny). Then you give the full description even though you still have not sent a circuit diagram because in electronics, you need a schematic!
    So then @crutschow gives a possible suggestion and then you follow that up with a rude and uncalled for post.

    Good luck fixing your problem.
     
  8. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    OK..;.now back to the situation at hand.

    Crutschow, your proposed solution has rolled around in my head over the weekend, as I've been doing other things at home.

    I actually think that it might work, because the level translators are simply open collector/drain devices on both the input and output side. Kudos for guessing that without a circuit diagram. I'm sorry that one wasn't provided.

    Anyway, if memory serves me correctly, the level translators have built in resistors between the collector/drain of each input/output channel and the power supply.

    So, adding a resistance between the power supply and the power pins (both input and output) of the level translator may indeed act like increasing the pullup resistance.

    It's Sunday, and I'm in my garage at home, but tomorrow I'm going to try what you suggested and post back.

    Thank you.
     
  9. Robin Mitchell

    Well-Known Member

    Oct 25, 2009
    734
    200
    Last edited by a moderator: May 16, 2016
  10. Wendy

    Moderator

    Mar 24, 2008
    20,766
    2,536
    Schematics are the language of electronics. Verbiage is not. You keep being told you need to post schematics, then take offense at sarcasm when you refuse to do the basics.

    One thing we do enforce (besides civility) at AAC is language. Keep it at the level you would for your bosses daughters. It is possible to make a point without questionable language.

    Robin is one of our more helpful members. We are all volunteers here. You may ignore whom you please (except staff such as moderators), but you are only hurting yourself.
     
  11. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    We have a motherboard that we buy from Mitac (upper left). We have designed a display driver board (upper right) that connects to the motherboard via HDMI and USB.

    Within the HDMI port, there is an embedded I2C port. These signals are referenced to 5V, so I call them SDA5 and SCL5, if you can see them on the diagram attached to my previous comment.

    Now, please realize that I have no schematic for this motherboard. We buy it as is. Our initial prototype worked beautifully. We then went out at bought 5 more motherboards and have found that our display driver board "works" with some but not with others. By "work" I mean the motherboard can use the HDMI's embedded I2C to write to the EEPROM initially, and then it can read that information back on subsequent bootups.

    Along with that, "works" means that it uses an I2C PWM to control the backlight (also referenced to 5V...using SDA5 and SCL5). We then use a level shifter to get the 5V referenced I2C over to a touch screen controller (which we also buy and have no schematic for) that needs 3V referenced I2C.

    The level shifter has built in 10K pullups.

    I've probed the signals SCL5 and SDA5 and found that they look as shown on my sketch attached to my comment above. The signals are clean and crisp, but they don't get down below 1V.

    This wouldn't be an issue for I2C compliant devices, as they read anything below 1.5V as "Low". However, I wonder what's going on within the motherboard. Perhaps they are "bit banging" the I2C with a GPIO port that needs something below 1V to read as "logic low".
     
  12. bertus

    Administrator

    Apr 5, 2008
    15,649
    2,348
    Hello,

    Can't you check the white balance of your picture?

    lastcowboy32_schematic.jpg

    This is much lees yellow and has more contrast.

    Bertus
     
  13. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    Thanks.
     
  14. Robin Mitchell

    Well-Known Member

    Oct 25, 2009
    734
    200
    Looking at your schematic there are two possibilities that come to mind.
    1. Non common ground (or a poor ground connection between the two devices)
    2. Level shifter - Have a look at the tech inside it, is it BJT or MOSFET? Are there any schematics of the level shifter?
    1V sounds like something is not fully conducting and thus you get the 1V drop across the conducting device.
     
  15. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    Hopefully, attached is a pdf of my schematic. Normally, I couldn't post such things, but nothing here is proprietary. We're just trying to drive a display and touchscreen...like thousands of other companies.

    Anyway, follow the 5V referenced I2C from the HDMI port (J13, sheet 1, sector D5), to the configuration PROM ( 24LC02B, U14, sheet 1, sector A5) to the I2C PWM controller (PCA9533, U4, sheet 2, sector C4), to the level shifter (TXS0102-DCT, U2, sheet 2, sector D5).

    At U2, we produce a 3.3V referenced I2C (look at signals "CAP_TOUCH_SDA" and "CAP_TOUCH_SCL") which then route to the connector for the capacitive touchscreen's flex cable (J11, sheet 2, sector D1).

    Note that, under normal conditions, R159, R160 (sheet 1, sector A5) and R161, R162 (sheet 2, sector D5) are not populated. We depend on the pullup resistors internal to U2 for pullup.


    Since my last reply, we have conducted a few tests.

    We have one motherboard which just works fine. We can use I2C to talk to the EEPROM, PWM and the touch screen (through the level shifter). We have another motherboard that can't reliably talk to any of them.

    With that second motherboard, we can get good I2C communications under the following circumstances:
    -With the level shifter removed and no pullup resistors populated at R159, R160, R161 and R162.
    -With the level shifter populated, but no USB power to the board....which is interesting...because the level shifter's "output enable" is connected to 3.3Volts, which is derived from USB power....so removing USB power essentially removes the level shifter from the circuit.

    I'm now looking at the data sheet for the TXS0102-DCT level shifter to see how its internal pullups are configured. or
    Maybe there is a version of it with higher internal pullups and the same footprint. or
    Maybe I need to consider flipping it around to put its "A" ports toward the motherboard and its "B" ports towards the touchscreen.
     
  16. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    Or....like crutschow said....I can perhaps put a high resistance in on pins 3 and/or 7 of the level shifter to create a higher apparent pullup resistance.
     
  17. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    According to page 13 of the TSX0102 data sheet, I can't consider flipping the part around. Port A must face the 3.3V side (it's compatible with 1.65 to 3.6V), while Port B must face the 5V side (it's compatible with 2.3V to 5.5V). It looks promising, though that I can put a resistor in line with pin 7, which would be called VccB in the diagram on page 13 of the TXS0102 spec sheet. That's the side facing our motherboard, and we aren't using that pin for Output Enable ("OE") or any other function.
     
  18. lastcowboy32

    Thread Starter New Member

    May 13, 2016
    17
    0
    Next iteration was cutting pin 7 of the level shifter off of the 5V supply. In this circumstance, everything works except for the motherboard can't talk to the touch screen controller.

    So....if I have 0 ohms between the 5V and pin 7 of the TSX0102, my I2C is all screwed up and can't talk reliably to anything.

    If I have infinite ohms between the 5V and pin 7 of the TSX0102, my I2C works for everything, except for what's on the 3.3V side of the TSX0102.

    Now experimenting with values in between. The TSX0102 probably needs something there for biasing purposes, but then it becomes a voltage divider when the pin is activated.....without knowing the exact internals of the TSX0102, I'm resorting to experimentation.
     
  19. Robin Mitchell

    Well-Known Member

    Oct 25, 2009
    734
    200
    Question : TX20102 has an OE pin that is connected high. Should this be the case? You are connecting a driver to a bus that requires devices to pull down when needed but this may be trying to drive the bus high.
     
  20. Robin Mitchell

    Well-Known Member

    Oct 25, 2009
    734
    200
Loading...