I2C Seems to need more pullup resistance than normal

Thread Starter

lastcowboy32

Joined May 13, 2016
17
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:

Thread Starter

lastcowboy32

Joined May 13, 2016
17
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
 

Thread Starter

lastcowboy32

Joined May 13, 2016
17
looks like a great design.
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.
 

Thread Starter

lastcowboy32

Joined May 13, 2016
17
Could you put a resistor in series with the power to the level translator?
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?
 

Robin Mitchell

Joined Oct 25, 2009
819
@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.
 

Thread Starter

lastcowboy32

Joined May 13, 2016
17
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.
 

Wendy

Joined Mar 24, 2008
21,930
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.
 

Thread Starter

lastcowboy32

Joined May 13, 2016
17
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".
 

Robin Mitchell

Joined Oct 25, 2009
819
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.
 

Thread Starter

lastcowboy32

Joined May 13, 2016
17
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.
 

Attachments

Thread Starter

lastcowboy32

Joined May 13, 2016
17
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.
 

Thread Starter

lastcowboy32

Joined May 13, 2016
17
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.
 

Thread Starter

lastcowboy32

Joined May 13, 2016
17
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.
 

Robin Mitchell

Joined Oct 25, 2009
819
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.
 
Top